PKA>|""EGG-INFO/dependency_links.txthttp://files.turbogears.org/eggs/ PKA>pX^EGG-INFO/entry_points.txt [console_scripts] tg-admin = turbogears.command:main [distutils.commands] docs = turbogears.docgen:GenSite [paste.paster_create_template] tgbase = turbogears.command.quickstart:BaseTemplate turbogears = turbogears.command.quickstart:TurbogearsTemplate tgbig = turbogears.command.quickstart:TGBig tgwidget = turbogears.command.quickstart:TGWidgetTemplate [turbogears.command] quickstart = turbogears.command.quickstart:quickstart sql = turbogears.command.base:SQL shell = turbogears.command.base:Shell toolbox = turbogears.command.base:ToolboxCommand update = turbogears.command.quickstart:update i18n = turbogears.command.i18n:InternationalizationTool info = turbogears.command.info:InfoCommand [turbogears.identity.provider] sqlobject = turbogears.identity.soprovider:SqlObjectIdentityProvider sqlalchemy= turbogears.identity.saprovider:SqlAlchemyIdentityProvider [turbogears.extensions] identity = turbogears.identity.visitor visit = turbogears.visit [turbogears.visit.manager] sqlobject = turbogears.visit.sovisit:SqlObjectVisitManager sqlalchemy = turbogears.visit.savisit:SqlAlchemyVisitManager [turbogears.toolboxcommand] widgets = turbogears.toolbox.base:WidgetBrowser shell = turbogears.toolbox.shell:WebConsole admi18n = turbogears.toolbox.admi18n:Internationalization designer = turbogears.toolbox.designer:Designer info = turbogears.toolbox.base:Info catwalk = turbogears.toolbox.catwalk:CatWalk PKL92EGG-INFO/not-zip-safe PKA>9ֆEGG-INFO/PKG-INFOMetadata-Version: 1.0 Name: TurboGears Version: 1.0.8 Summary: front-to-back rapid web development Home-page: http://www.turbogears.org Author: Kevin Dangoor Author-email: dangoor+turbogears@gmail.com License: MIT Download-URL: http://www.turbogears.org/download/filelist.html Description: Front-to-back rapid web development =================================== TurboGears brings together four major pieces to create an easy to install, easy to use web megaframework. It covers everything from front end (MochiKit JavaScript for the browser, Kid/Genshi/Mako/Cheetah for templates in Python) to the controllers (CherryPy) to the back end (SQLAlchemy or SQLObject). The TurboGears project is focused on providing documentation and integration with these tools without losing touch with the communities that already exist around those tools. TurboGears is easy to use for a wide range of web applications. The latest development version is available in the `TurboGears subversion repository`_. Our `mailing list`_ is lively and helpful, don't hesitate to send your questions there, we will try to help you find out a solution to your problem. .. _mailing list: http://groups.google.com/group/turbogears .. _TurboGears subversion repository: http://svn.turbogears.org/trunk#egg=turbogears-dev Platform: UNKNOWN Classifier: Development Status :: 5 - Production/Stable Classifier: Environment :: Console Classifier: Intended Audience :: Developers Classifier: License :: OSI Approved :: MIT License Classifier: Operating System :: OS Independent Classifier: Programming Language :: Python Classifier: Topic :: Software Development :: Libraries :: Python Modules PKA>Rl[@@EGG-INFO/requires.txtCherryPy >= 2.3.0, < 3.0.0alpha ConfigObj >= 4.3.2 DecoratorTools >= 1.4 FormEncode >= 0.7.1 PasteScript >= 1.6.2 RuleDispatch >= 0.5a0.dev-r2303 setuptools >= 0.6c2 simplejson >= 1.3 TurboCheetah >= 1.0 TurboJson >= 1.1.4, < 1.2 TurboKid >= 1.0.4 [sqlobject] SQLObject >= 0.10.1 [sqlalchemy] SQLAlchemy >= 0.3.10, < 0.5.0alpha [testtools] nose >= 0.9.3 pysqlite [future] Elixir >= 0.4.0 Genshi >= 0.4.4 [exp] TGFastData [develop] CherryPy >= 2.3.0, < 3.0.0alpha ConfigObj >= 4.3.2 DecoratorTools >= 1.4 FormEncode >= 0.7.1 PasteScript >= 1.6.2 RuleDispatch >= 0.5a0.dev-r2303 setuptools >= 0.6c2 simplejson >= 1.3 TurboCheetah >= 1.0 TurboJson >= 1.1.4, < 1.2 TurboKid >= 1.0.4 Elixir >= 0.4.0 Genshi >= 0.4.4 nose >= 0.9.3 pysqlite SQLAlchemy >= 0.3.10, < 0.5.0alpha SQLObject >= 0.10.1 [tgtesttools] nose >= 0.9.3 pysqlitePKA>@^^EGG-INFO/SOURCES.txtCHANGELOG.txt CONTRIBUTORS.txt LICENSE.txt README.txt ez_setup.py setup.cfg setup.py TurboGears.egg-info/PKG-INFO TurboGears.egg-info/SOURCES.txt TurboGears.egg-info/dependency_links.txt TurboGears.egg-info/entry_points.txt TurboGears.egg-info/not-zip-safe TurboGears.egg-info/requires.txt TurboGears.egg-info/top_level.txt doc/README.txt doc/build_api_docs.sh doc/doc.ini thirdparty/externals.py tools/codename.py tools/tgsetup.py tools/toolbox-start.py turbogears/__init__.py turbogears/config.py turbogears/controllers.py turbogears/database.py turbogears/decorator.py turbogears/docgen.py turbogears/errorhandling.py turbogears/finddata.py turbogears/genericfunctions.py turbogears/paginate.py turbogears/release.py turbogears/scheduler.py turbogears/startup.py turbogears/testutil.py turbogears/util.py turbogears/validators.py turbogears/command/__init__.py turbogears/command/base.py turbogears/command/i18n.py turbogears/command/info.py turbogears/command/quickstart.py turbogears/command/sacommand.py turbogears/feed/__init__.py turbogears/feed/atom0_3.kid turbogears/feed/atom1_0.kid turbogears/feed/feed.py turbogears/feed/rss2_0.kid turbogears/i18n/__init__.py turbogears/i18n/format.py turbogears/i18n/kidutils.py turbogears/i18n/tg_gettext.py turbogears/i18n/utils.py turbogears/i18n/data/TurboGears.pot turbogears/i18n/data/__init__.py turbogears/i18n/data/af.py turbogears/i18n/data/af_ZA.py turbogears/i18n/data/am.py turbogears/i18n/data/am_ET.py turbogears/i18n/data/ar.py turbogears/i18n/data/ar_AE.py turbogears/i18n/data/ar_BH.py turbogears/i18n/data/ar_DZ.py turbogears/i18n/data/ar_EG.py turbogears/i18n/data/ar_IN.py turbogears/i18n/data/ar_IQ.py turbogears/i18n/data/ar_JO.py turbogears/i18n/data/ar_KW.py turbogears/i18n/data/ar_LB.py turbogears/i18n/data/ar_LY.py turbogears/i18n/data/ar_MA.py turbogears/i18n/data/ar_OM.py turbogears/i18n/data/ar_QA.py turbogears/i18n/data/ar_SA.py turbogears/i18n/data/ar_SD.py turbogears/i18n/data/ar_SY.py turbogears/i18n/data/ar_TN.py turbogears/i18n/data/ar_YE.py turbogears/i18n/data/be.py turbogears/i18n/data/be_BY.py turbogears/i18n/data/bg.py turbogears/i18n/data/bg_BG.py turbogears/i18n/data/bn.py turbogears/i18n/data/bn_IN.py turbogears/i18n/data/ca.py turbogears/i18n/data/ca_ES.py turbogears/i18n/data/cs.py turbogears/i18n/data/cs_CZ.py turbogears/i18n/data/da.py turbogears/i18n/data/da_DK.py turbogears/i18n/data/de.py turbogears/i18n/data/de_AT.py turbogears/i18n/data/de_BE.py turbogears/i18n/data/de_CH.py turbogears/i18n/data/de_DE.py turbogears/i18n/data/de_LU.py turbogears/i18n/data/el.py turbogears/i18n/data/el_GR.py turbogears/i18n/data/en.py turbogears/i18n/data/en_AU.py turbogears/i18n/data/en_BE.py turbogears/i18n/data/en_BW.py turbogears/i18n/data/en_CA.py turbogears/i18n/data/en_GB.py turbogears/i18n/data/en_HK.py turbogears/i18n/data/en_IE.py turbogears/i18n/data/en_IN.py turbogears/i18n/data/en_MT.py turbogears/i18n/data/en_NZ.py turbogears/i18n/data/en_PH.py turbogears/i18n/data/en_SG.py turbogears/i18n/data/en_US.py turbogears/i18n/data/en_US_POSIX.py turbogears/i18n/data/en_VI.py turbogears/i18n/data/en_ZA.py turbogears/i18n/data/en_ZW.py turbogears/i18n/data/eo.py turbogears/i18n/data/es.py turbogears/i18n/data/es_AR.py turbogears/i18n/data/es_BO.py turbogears/i18n/data/es_CL.py turbogears/i18n/data/es_CO.py turbogears/i18n/data/es_CR.py turbogears/i18n/data/es_DO.py turbogears/i18n/data/es_EC.py turbogears/i18n/data/es_ES.py turbogears/i18n/data/es_GT.py turbogears/i18n/data/es_HN.py turbogears/i18n/data/es_MX.py turbogears/i18n/data/es_NI.py turbogears/i18n/data/es_PA.py turbogears/i18n/data/es_PE.py turbogears/i18n/data/es_PR.py turbogears/i18n/data/es_PY.py turbogears/i18n/data/es_SV.py turbogears/i18n/data/es_US.py turbogears/i18n/data/es_UY.py turbogears/i18n/data/es_VE.py turbogears/i18n/data/et.py turbogears/i18n/data/et_EE.py turbogears/i18n/data/eu.py turbogears/i18n/data/eu_ES.py turbogears/i18n/data/fa.py turbogears/i18n/data/fa_AF.py turbogears/i18n/data/fa_IR.py turbogears/i18n/data/fi.py turbogears/i18n/data/fi_FI.py turbogears/i18n/data/fo.py turbogears/i18n/data/fo_FO.py turbogears/i18n/data/fr.py turbogears/i18n/data/fr_BE.py turbogears/i18n/data/fr_CA.py turbogears/i18n/data/fr_CH.py turbogears/i18n/data/fr_FR.py turbogears/i18n/data/fr_LU.py turbogears/i18n/data/ga.py turbogears/i18n/data/ga_IE.py turbogears/i18n/data/gl.py turbogears/i18n/data/gl_ES.py turbogears/i18n/data/gu.py turbogears/i18n/data/gu_IN.py turbogears/i18n/data/gv.py turbogears/i18n/data/gv_GB.py turbogears/i18n/data/he.py turbogears/i18n/data/he_IL.py turbogears/i18n/data/hi.py turbogears/i18n/data/hi_IN.py turbogears/i18n/data/hr.py turbogears/i18n/data/hr_HR.py turbogears/i18n/data/hu.py turbogears/i18n/data/hu_HU.py turbogears/i18n/data/hy.py turbogears/i18n/data/hy_AM.py turbogears/i18n/data/hy_AM_REVISED.py turbogears/i18n/data/id.py turbogears/i18n/data/id_ID.py turbogears/i18n/data/is.py turbogears/i18n/data/is_IS.py turbogears/i18n/data/it.py turbogears/i18n/data/it_CH.py turbogears/i18n/data/it_IT.py turbogears/i18n/data/ja.py turbogears/i18n/data/ja_JP.py turbogears/i18n/data/kk.py turbogears/i18n/data/kk_KZ.py turbogears/i18n/data/kl.py turbogears/i18n/data/kl_GL.py turbogears/i18n/data/kn.py turbogears/i18n/data/kn_IN.py turbogears/i18n/data/ko.py turbogears/i18n/data/ko_KR.py turbogears/i18n/data/kok.py turbogears/i18n/data/kok_IN.py turbogears/i18n/data/kw.py turbogears/i18n/data/kw_GB.py turbogears/i18n/data/lt.py turbogears/i18n/data/lt_LT.py turbogears/i18n/data/lv.py turbogears/i18n/data/lv_LV.py turbogears/i18n/data/mk.py turbogears/i18n/data/mk_MK.py turbogears/i18n/data/mr.py turbogears/i18n/data/mr_IN.py turbogears/i18n/data/ms.py turbogears/i18n/data/ms_BN.py turbogears/i18n/data/ms_MY.py turbogears/i18n/data/mt.py turbogears/i18n/data/mt_MT.py turbogears/i18n/data/nb.py turbogears/i18n/data/nb_NO.py turbogears/i18n/data/nl.py turbogears/i18n/data/nl_BE.py turbogears/i18n/data/nl_NL.py turbogears/i18n/data/nn.py turbogears/i18n/data/nn_NO.py turbogears/i18n/data/no.py turbogears/i18n/data/no_NO.py turbogears/i18n/data/om.py turbogears/i18n/data/om_ET.py turbogears/i18n/data/om_KE.py turbogears/i18n/data/pa.py turbogears/i18n/data/pa_IN.py turbogears/i18n/data/pl.py turbogears/i18n/data/pl_PL.py turbogears/i18n/data/ps.py turbogears/i18n/data/ps_AF.py turbogears/i18n/data/pt.py turbogears/i18n/data/pt_BR.py turbogears/i18n/data/pt_PT.py turbogears/i18n/data/ro.py turbogears/i18n/data/ro_RO.py turbogears/i18n/data/ru.py turbogears/i18n/data/ru_RU.py turbogears/i18n/data/ru_UA.py turbogears/i18n/data/sh.py turbogears/i18n/data/sh_YU.py turbogears/i18n/data/sk.py turbogears/i18n/data/sk_SK.py turbogears/i18n/data/sl.py turbogears/i18n/data/sl_SI.py turbogears/i18n/data/so.py turbogears/i18n/data/so_DJ.py turbogears/i18n/data/so_ET.py turbogears/i18n/data/so_KE.py turbogears/i18n/data/so_SO.py turbogears/i18n/data/sq.py turbogears/i18n/data/sq_AL.py turbogears/i18n/data/sr.py turbogears/i18n/data/sr_YU.py turbogears/i18n/data/sv.py turbogears/i18n/data/sv_FI.py turbogears/i18n/data/sv_SE.py turbogears/i18n/data/sw.py turbogears/i18n/data/sw_KE.py turbogears/i18n/data/sw_TZ.py turbogears/i18n/data/ta.py turbogears/i18n/data/ta_IN.py turbogears/i18n/data/te.py turbogears/i18n/data/te_IN.py turbogears/i18n/data/th.py turbogears/i18n/data/th_TH.py turbogears/i18n/data/ti.py turbogears/i18n/data/ti_ER.py turbogears/i18n/data/ti_ET.py turbogears/i18n/data/tr.py turbogears/i18n/data/tr_TR.py turbogears/i18n/data/uk.py turbogears/i18n/data/uk_UA.py turbogears/i18n/data/vi.py turbogears/i18n/data/vi_VN.py turbogears/i18n/data/zh.py turbogears/i18n/data/zh_CN.py turbogears/i18n/data/zh_HK.py turbogears/i18n/data/zh_MO.py turbogears/i18n/data/zh_SG.py turbogears/i18n/data/zh_TW.py turbogears/i18n/data/de/LC_MESSAGES/TurboGears.mo turbogears/i18n/data/de/LC_MESSAGES/TurboGears.po turbogears/i18n/data/sl/LC_MESSAGES/TurboGears.mo turbogears/i18n/data/sl/LC_MESSAGES/TurboGears.po turbogears/i18n/sogettext/__init__.py turbogears/i18n/sogettext/model.py turbogears/i18n/tests/__init__.py turbogears/i18n/tests/test_format.py turbogears/i18n/tests/test_kidutils.py turbogears/i18n/tests/test_so_gettext.py turbogears/i18n/tests/test_tg_gettext.py turbogears/i18n/tests/test_toolboxadmi18n.py turbogears/i18n/tests/test_utils.py turbogears/identity/__init__.py turbogears/identity/conditions.py turbogears/identity/exceptions.py turbogears/identity/saprovider.py turbogears/identity/soprovider.py turbogears/identity/visitor.py turbogears/identity/tests/__init__.py turbogears/identity/tests/test_identity.py turbogears/identity/tests/test_visit.py turbogears/qstemplates/__init__.py turbogears/qstemplates/qsbase/+einame+.egg-info/PKG-INFO turbogears/qstemplates/qsbase/+einame+.egg-info/paster_plugins.txt turbogears/qstemplates/qsbase/+einame+.egg-info/sqlobject.txt_tmpl turbogears/qstemplates/qsbase/+package+/__init__.py turbogears/qstemplates/qsbase/+package+/release.py_tmpl turbogears/qstemplates/qsbase/+package+/static/css/empty_tmpl turbogears/qstemplates/qsbase/+package+/static/images/favicon.ico turbogears/qstemplates/qsbase/+package+/static/images/tg_under_the_hood.png turbogears/qstemplates/qsbase/+package+/static/images/under_the_hood_blue.png turbogears/qstemplates/qsbase/+package+/static/javascript/empty_tmpl turbogears/qstemplates/qsbase/+package+/templates/__init__.py turbogears/qstemplates/quickstart/README.txt_tmpl turbogears/qstemplates/quickstart/dev.cfg_tmpl turbogears/qstemplates/quickstart/sample-prod.cfg_tmpl turbogears/qstemplates/quickstart/setup.py_tmpl turbogears/qstemplates/quickstart/start-+package+.py_tmpl turbogears/qstemplates/quickstart/test.cfg_tmpl turbogears/qstemplates/quickstart/+package+/commands.py_tmpl turbogears/qstemplates/quickstart/+package+/controllers.py_tmpl turbogears/qstemplates/quickstart/+package+/json.py_tmpl turbogears/qstemplates/quickstart/+package+/model.py_tmpl turbogears/qstemplates/quickstart/+package+/config/__init__.py turbogears/qstemplates/quickstart/+package+/config/app.cfg_tmpl turbogears/qstemplates/quickstart/+package+/config/log.cfg_tmpl turbogears/qstemplates/quickstart/+package+/static/css/style.css turbogears/qstemplates/quickstart/+package+/static/images/header_inner.png turbogears/qstemplates/quickstart/+package+/static/images/info.png turbogears/qstemplates/quickstart/+package+/static/images/ok.png turbogears/qstemplates/quickstart/+package+/templates/login.kid turbogears/qstemplates/quickstart/+package+/templates/master.kid turbogears/qstemplates/quickstart/+package+/templates/welcome.kid turbogears/qstemplates/quickstart/+package+/tests/__init__.py turbogears/qstemplates/quickstart/+package+/tests/test_controllers.py_tmpl turbogears/qstemplates/quickstart/+package+/tests/test_model.py_tmpl turbogears/qstemplates/quickstartbig/+package+/controllers/__init__.py_tmpl turbogears/qstemplates/quickstartbig/+package+/controllers/root.py_tmpl turbogears/qstemplates/widget/README.txt_tmpl turbogears/qstemplates/widget/setup.py_tmpl turbogears/qstemplates/widget/+package+/widgets.py_tmpl turbogears/static/__init__.py turbogears/static/css/__init__.py turbogears/static/css/interpreter.css turbogears/static/css/toolbox.css turbogears/static/css/widget.css turbogears/static/images/__init__.py turbogears/static/images/add.png turbogears/static/images/admi18n.png turbogears/static/images/arrow_down.png turbogears/static/images/arrow_down_small.png turbogears/static/images/arrow_left.png turbogears/static/images/arrow_right.png turbogears/static/images/arrow_up.png turbogears/static/images/arrow_up_small.png turbogears/static/images/catwalk.png turbogears/static/images/catwalk_logo.png turbogears/static/images/catwalk_logo_bg.png turbogears/static/images/column_chooser.png turbogears/static/images/designer.png turbogears/static/images/discard.png turbogears/static/images/edit.png turbogears/static/images/file.png turbogears/static/images/folder.png turbogears/static/images/identity.png turbogears/static/images/info.png turbogears/static/images/play.png turbogears/static/images/remove.png turbogears/static/images/save.png turbogears/static/images/shell.png turbogears/static/images/small_gear.png turbogears/static/images/stop.png turbogears/static/images/table.gif turbogears/static/images/tg_power.png turbogears/static/images/tg_under_the_hood.png turbogears/static/images/tg_under_the_hood_sans_gear.png turbogears/static/images/toolbox_logo.png turbogears/static/images/toolbox_top_baggrund.png turbogears/static/images/toolbox_top_vertical_line.png turbogears/static/images/top.png turbogears/static/images/top_bg.png turbogears/static/images/transp.png turbogears/static/images/trash.png turbogears/static/images/widgets.png turbogears/static/js/MochiKit_1_3.js turbogears/static/js/MochiKit_1_4.js turbogears/static/js/__init__.py turbogears/static/js/i18n_base.js turbogears/static/js/interpreter.js turbogears/static/js/widget.js turbogears/static/js/tool-man/cookies.js turbogears/static/js/tool-man/coordinates.js turbogears/static/js/tool-man/core.js turbogears/static/js/tool-man/css.js turbogears/static/js/tool-man/drag.js turbogears/static/js/tool-man/dragsort.js turbogears/static/js/tool-man/events.js turbogears/tests/__init__.py turbogears/tests/config.cfg turbogears/tests/configfile.cfg turbogears/tests/form.kid turbogears/tests/othertemplate.kid turbogears/tests/paginate.kid turbogears/tests/simple.kid turbogears/tests/simplecheetah.tmpl turbogears/tests/test_catwalk.py turbogears/tests/test_command_i18n.py turbogears/tests/test_config.py turbogears/tests/test_controllers.py turbogears/tests/test_decorator.py turbogears/tests/test_errorhandling.py turbogears/tests/test_expose.py turbogears/tests/test_form_controllers.py turbogears/tests/test_genericfunctions.py turbogears/tests/test_paginate.py turbogears/tests/test_sqlalchemy.py turbogears/tests/test_sqlobject.py turbogears/tests/test_testutil.py turbogears/tests/test_util.py turbogears/tests/test_validators.py turbogears/tests/test_view.py turbogears/tests/textfmt.tmpl turbogears/tests/util.py turbogears/tests/catwalk_models/__init__.py turbogears/tests/catwalk_models/browse.py turbogears/tests/catwalk_models/model_list.py turbogears/tests/catwalk_models/model_structure.py turbogears/tests/catwalk_models/single_join.py turbogears/tests/catwalk_models/catwalk-session/session.pkl turbogears/tests/locale/en/LC_MESSAGES/messages.mo turbogears/tests/locale/en/LC_MESSAGES/messages.po turbogears/tests/locale/fi/LC_MESSAGES/messages.mo turbogears/tests/locale/fi/LC_MESSAGES/messages.po turbogears/toolbox/__init__.py turbogears/toolbox/base.py turbogears/toolbox/console.kid turbogears/toolbox/info.kid turbogears/toolbox/main.kid turbogears/toolbox/master.kid turbogears/toolbox/shell.py turbogears/toolbox/widgets.kid turbogears/toolbox/admi18n/__init__.py turbogears/toolbox/admi18n/catalog.py turbogears/toolbox/admi18n/inter.kid turbogears/toolbox/admi18n/internationalization.kid turbogears/toolbox/admi18n/language.kid turbogears/toolbox/admi18n/languageManagement.kid turbogears/toolbox/admi18n/msgfmt.py turbogears/toolbox/admi18n/po_view.kid turbogears/toolbox/admi18n/pygettext.py turbogears/toolbox/admi18n/stringCollection.kid turbogears/toolbox/catwalk/__init__.py turbogears/toolbox/catwalk/browse.py turbogears/toolbox/catwalk/browse_grid.kid turbogears/toolbox/catwalk/catwalk.kid turbogears/toolbox/catwalk/columns.kid turbogears/toolbox/catwalk/static/css/catwalk.css turbogears/toolbox/catwalk/static/javascript/browse.js turbogears/toolbox/catwalk/static/javascript/catwalk.js turbogears/toolbox/catwalk/static/javascript/greybox/AmiJS.js turbogears/toolbox/catwalk/static/javascript/greybox/blank.gif turbogears/toolbox/catwalk/static/javascript/greybox/close.gif turbogears/toolbox/catwalk/static/javascript/greybox/greybox.css turbogears/toolbox/catwalk/static/javascript/greybox/greybox.js turbogears/toolbox/catwalk/static/javascript/greybox/greybox__.js turbogears/toolbox/catwalk/static/javascript/greybox/greybox_inline.js turbogears/toolbox/catwalk/static/javascript/greybox/logo.png turbogears/toolbox/catwalk/static/javascript/greybox/overlay.png turbogears/toolbox/designer/__init__.py turbogears/toolbox/designer/modelDesigner.kid turbogears/toolbox/designer/static/css/style.css turbogears/toolbox/designer/static/diagram/index.html turbogears/toolbox/designer/static/diagram/images/back.gif turbogears/toolbox/designer/static/diagram/images/shadow.png turbogears/toolbox/designer/static/diagram/images/shadow_bottom.png turbogears/toolbox/designer/static/diagram/images/shadow_corner.png turbogears/toolbox/designer/static/diagram/images/shadow_right.png turbogears/toolbox/designer/static/diagram/js/ajax.js turbogears/toolbox/designer/static/diagram/js/animator.js turbogears/toolbox/designer/static/diagram/js/generic.js turbogears/toolbox/designer/static/diagram/js/io.js turbogears/toolbox/designer/static/diagram/js/main.js turbogears/toolbox/designer/static/diagram/js/objects.js turbogears/toolbox/designer/static/diagram/js/settings.js turbogears/toolbox/designer/static/diagram/js/sql_types.js turbogears/toolbox/designer/static/diagram/styles/bar.css turbogears/toolbox/designer/static/diagram/styles/foo turbogears/toolbox/designer/static/diagram/styles/style.css turbogears/toolbox/designer/static/diagram/styles/style.js turbogears/toolbox/designer/static/images/info.png turbogears/toolbox/designer/static/javascript/modelDesigner.js turbogears/toolbox/designer/static/sessions/Survey.js turbogears/toolbox/designer/static/sessions/TurboTunes.js turbogears/toolbox/designer/static/sessions/WebShop.js turbogears/view/__init__.py turbogears/view/base.py turbogears/view/templates/__init__.py turbogears/view/templates/sitetemplate.kid turbogears/visit/__init__.py turbogears/visit/api.py turbogears/visit/savisit.py turbogears/visit/sovisit.py turbogears/widgets/__init__.py turbogears/widgets/base.py turbogears/widgets/big_widgets.py turbogears/widgets/datagrid.py turbogears/widgets/forms.py turbogears/widgets/i18n.py turbogears/widgets/links.py turbogears/widgets/meta.py turbogears/widgets/rpc.py turbogears/widgets/static/ajax.js turbogears/widgets/static/ajaxgrid.js turbogears/widgets/static/autocompletefield.css turbogears/widgets/static/autocompletefield.js turbogears/widgets/static/grid.css turbogears/widgets/static/img.gif turbogears/widgets/static/spinner.gif turbogears/widgets/static/spinnerstopped.png turbogears/widgets/static/calendar/calendar-blue.css turbogears/widgets/static/calendar/calendar-blue2.css turbogears/widgets/static/calendar/calendar-brown.css turbogears/widgets/static/calendar/calendar-green.css turbogears/widgets/static/calendar/calendar-setup.js turbogears/widgets/static/calendar/calendar-system.css turbogears/widgets/static/calendar/calendar-tas.css turbogears/widgets/static/calendar/calendar-win2k-1.css turbogears/widgets/static/calendar/calendar-win2k-2.css turbogears/widgets/static/calendar/calendar-win2k-cold-1.css turbogears/widgets/static/calendar/calendar-win2k-cold-2.css turbogears/widgets/static/calendar/calendar.js turbogears/widgets/static/calendar/menuarrow.gif turbogears/widgets/static/calendar/menuarrow2.gif turbogears/widgets/static/calendar/lang/calendar-af.js turbogears/widgets/static/calendar/lang/calendar-bg-cp1251.js turbogears/widgets/static/calendar/lang/calendar-bg.js turbogears/widgets/static/calendar/lang/calendar-ca.js turbogears/widgets/static/calendar/lang/calendar-cs-cp1250.js turbogears/widgets/static/calendar/lang/calendar-cs.js turbogears/widgets/static/calendar/lang/calendar-da.js turbogears/widgets/static/calendar/lang/calendar-de.js turbogears/widgets/static/calendar/lang/calendar-de_at.js turbogears/widgets/static/calendar/lang/calendar-de_de.js turbogears/widgets/static/calendar/lang/calendar-el.js turbogears/widgets/static/calendar/lang/calendar-en.js turbogears/widgets/static/calendar/lang/calendar-es.js turbogears/widgets/static/calendar/lang/calendar-fi.js turbogears/widgets/static/calendar/lang/calendar-fr.js turbogears/widgets/static/calendar/lang/calendar-he.js turbogears/widgets/static/calendar/lang/calendar-hr.js turbogears/widgets/static/calendar/lang/calendar-hu-cp1252.js turbogears/widgets/static/calendar/lang/calendar-hu.js turbogears/widgets/static/calendar/lang/calendar-it.js turbogears/widgets/static/calendar/lang/calendar-ja.js turbogears/widgets/static/calendar/lang/calendar-ko-euc_kr.js turbogears/widgets/static/calendar/lang/calendar-ko.js turbogears/widgets/static/calendar/lang/calendar-lt.js turbogears/widgets/static/calendar/lang/calendar-lv-cp1252.js turbogears/widgets/static/calendar/lang/calendar-lv.js turbogears/widgets/static/calendar/lang/calendar-nl.js turbogears/widgets/static/calendar/lang/calendar-no.js turbogears/widgets/static/calendar/lang/calendar-pl.js turbogears/widgets/static/calendar/lang/calendar-pt_br.js turbogears/widgets/static/calendar/lang/calendar-ro-cp1250.js turbogears/widgets/static/calendar/lang/calendar-ro.js turbogears/widgets/static/calendar/lang/calendar-ru-cp1251.js turbogears/widgets/static/calendar/lang/calendar-ru-koi8_r.js turbogears/widgets/static/calendar/lang/calendar-ru.js turbogears/widgets/static/calendar/lang/calendar-sk.js turbogears/widgets/static/calendar/lang/calendar-sl.js turbogears/widgets/static/calendar/lang/calendar-sq.js turbogears/widgets/static/calendar/lang/calendar-sv.js turbogears/widgets/static/calendar/lang/calendar-tr-cp1254.js turbogears/widgets/static/calendar/lang/calendar-tr.js turbogears/widgets/static/calendar/lang/calendar-uk-cp1251.js turbogears/widgets/static/calendar/lang/calendar-uk-koi8_u.js turbogears/widgets/static/calendar/lang/calendar-uk.js turbogears/widgets/static/calendar/lang/calendar-zh.js turbogears/widgets/static/calendar/lang/calendar-zh_cn-gbk.js turbogears/widgets/static/calendar/lang/calendar-zh_cn.js turbogears/widgets/static/calendar/lang/calendar-zh_tw-big5.js turbogears/widgets/static/calendar/lang/calendar-zh_tw.js turbogears/widgets/static/calendar/skins/aqua/active-bg.gif turbogears/widgets/static/calendar/skins/aqua/dark-bg.gif turbogears/widgets/static/calendar/skins/aqua/hover-bg.gif turbogears/widgets/static/calendar/skins/aqua/menuarrow.gif turbogears/widgets/static/calendar/skins/aqua/normal-bg.gif turbogears/widgets/static/calendar/skins/aqua/rowhover-bg.gif turbogears/widgets/static/calendar/skins/aqua/status-bg.gif turbogears/widgets/static/calendar/skins/aqua/theme.css turbogears/widgets/static/calendar/skins/aqua/title-bg.gif turbogears/widgets/static/calendar/skins/aqua/today-bg.gif turbogears/widgets/static/sh/SyntaxHighlighter.css turbogears/widgets/static/sh/shBrushCSharp.js turbogears/widgets/static/sh/shBrushCss.js turbogears/widgets/static/sh/shBrushDelphi.js turbogears/widgets/static/sh/shBrushJScript.js turbogears/widgets/static/sh/shBrushJava.js turbogears/widgets/static/sh/shBrushPhp.js turbogears/widgets/static/sh/shBrushPython.js turbogears/widgets/static/sh/shBrushRuby.js turbogears/widgets/static/sh/shBrushSql.js turbogears/widgets/static/sh/shBrushVb.js turbogears/widgets/static/sh/shBrushXml.js turbogears/widgets/static/sh/shCore.js turbogears/widgets/static/tabber/tabber-minimized.js turbogears/widgets/static/tabber/tabber.css turbogears/widgets/static/tabber/tabber.js turbogears/widgets/static/tabber/tabber_cookie.js turbogears/widgets/templates/__init__.py turbogears/widgets/templates/datagrid.kid turbogears/widgets/templates/paginate_datagrid.kid turbogears/widgets/tests/__init__.py turbogears/widgets/tests/form.kid turbogears/widgets/tests/test_datagrid.py turbogears/widgets/tests/test_forms.py turbogears/widgets/tests/test_link_inclusion.py turbogears/widgets/tests/test_nested_form_controllers.py turbogears/widgets/tests/test_nested_widgets.py turbogears/widgets/tests/test_new_validation.py turbogears/widgets/tests/test_request_related_features.py turbogears/widgets/tests/test_widgets.py turbogears/widgets/tests/two_forms.kid turbogears/widgets/tests/widget.kidPKA>trp EGG-INFO/top_level.txtturbogears PKK9turbogears/config.pyimport os, glob, re from cherrypy import config from configobj import ConfigObj import pkg_resources import logging import logging.handlers __all__ = ["update_config", "get", "update"] try: set except NameError: # Python 2.3 from sets import Set as set class ConfigError(Exception): pass def _get_formatters(formatters): for key, formatter in formatters.items(): kw = {} fmt = formatter.get("format", None) if fmt: fmt = fmt.replace("*(", "%(") kw["fmt"] = fmt datefmt = formatter.get("datefmt", None) if datefmt: kw["datefmt"] = datefmt formatter = logging.Formatter(**kw) formatters[key] = formatter def _get_handlers(handlers, formatters): for key, handler in handlers.items(): kw = {} try: cls = handler.get("class") args = handler.get("args", tuple()) level = handler.get("level", None) try: cls = eval(cls, logging.__dict__) except NameError: try: cls = eval(cls, logging.handlers.__dict__) except NameError, err: raise ConfigError("Specified class in handler " "%s is not a recognizable logger name" % key) try: handler_obj = cls(*eval(args, logging.__dict__)) except IOError,err: raise ConfigError("Missing or wrong argument to " "%s in handler %s -> %s " % (cls.__name__,key,err)) except TypeError,err: raise ConfigError("Wrong format for arguments " "to %s in handler %s -> %s" % (cls.__name__,key,err)) if level: level = eval(level, logging.__dict__) handler_obj.setLevel(level) except KeyError: raise ConfigError("No class specified for logging " "handler %s" % key) formatter = handler.get("formatter", None) if formatter: try: formatter = formatters[formatter] except KeyError: raise ConfigError("Handler %s references unknown " "formatter %s" % (key, formatter)) handler_obj.setFormatter(formatter) handlers[key] = handler_obj def _get_loggers(loggers, handlers): for key, logger in loggers.items(): qualname = logger.get("qualname", None) if qualname: log = logging.getLogger(qualname) else: log = logging.getLogger() level = logger.get("level", None) if level: level = eval(level, logging.__dict__) else: level = logging.NOTSET log.setLevel(level) propagate = logger.get("propagate", None) if propagate is not None: log.propagate = propagate cfghandlers = logger.get("handlers", None) if cfghandlers: if isinstance(cfghandlers, basestring): cfghandlers = [cfghandlers] for handler in cfghandlers: try: handler = handlers[handler] except KeyError: raise ConfigError("Logger %s references unknown " "handler %s" % (key, handler)) log.addHandler(handler) def configure_loggers(config): """Configures the Python logging module, using options that are very similar to the ones listed in the Python documentation. This also removes the logging configuration from the configuration dictionary because CherryPy doesn't like it there. Here are some of the Python examples converted to the format used here: [logging] [[loggers]] [[[parser]]] [logger_parser] level="DEBUG" handlers="hand01" propagate=1 qualname="compiler.parser" [[handlers]] [[[hand01]]] class="StreamHandler" level="NOTSET" formatter="form01" args="(sys.stdout,)" [[formatters]] [[[form01]]] format="F1 *(asctime)s *(levelname)s *(message)s" datefmt= One notable format difference is that *() is used in the formatter instead of %() because %() is already used for config file interpolation. """ if not config.has_key("logging"): config["global"]["tg.new_style_logging"] = False return logcfg = config["logging"] formatters = logcfg.get("formatters", {}) _get_formatters(formatters) handlers = logcfg.get("handlers", {}) _get_handlers(handlers, formatters) loggers = logcfg.get("loggers", {}) _get_loggers(loggers, handlers) del config["logging"] config["global"]["tg.new_style_logging"] = True def config_defaults(): current_dir_uri = os.path.abspath(os.getcwd()) if not current_dir_uri.startswith('/'): current_dir_uri = '/' + current_dir_uri defaults = {'current_dir_uri' : current_dir_uri} return defaults def config_obj(configfile = None, modulename = None): defaults = config_defaults() if modulename: lastdot = modulename.rfind('.') firstdot = modulename.find('.') packagename = modulename[:lastdot] top_level_package = modulename[:firstdot] modname = modulename[lastdot+1:] modfile = pkg_resources.resource_filename(packagename, modname + '.cfg') if not os.path.exists(modfile): modfile = pkg_resources.resource_filename(packagename, modname) if os.path.isdir(modfile): configfiles = glob.glob(os.path.join(modfile, '*.cfg')) else: configfiles = [modfile] configdata = ConfigObj(unrepr=True) top_level_dir = os.path.normpath(pkg_resources.resource_filename( top_level_package, '')) package_dir = os.path.normpath(pkg_resources.resource_filename( packagename, '')) defaults.update(dict(top_level_dir=top_level_dir, package_dir=package_dir)) configdata.merge(dict(DEFAULT=defaults)) for file in configfiles: configdata2 = ConfigObj(file, unrepr=True) configdata2.merge(dict(DEFAULT=defaults)) configdata.merge(configdata2) if configfile: if modulename: configdata2 = ConfigObj(configfile, unrepr=True) configdata2.merge(dict(DEFAULT=defaults)) configdata.merge(configdata2) else: configdata = ConfigObj(configfile, unrepr=True) return configdata def update_config(configfile=None, modulename=None): """Updates the system configuration either from a ConfigObj (INI-style) config file, a module name specified in dotted notation or both (the module name is assumed to have a ".cfg" extension). If both are specified, the module is called first, followed by the config file. This means that the config file's options override the options in the module file.""" configdict = config_obj(configfile, modulename).dict() configure_loggers(configdict) config.update(configdict) def get(key, default_value=None, return_section=False, path=None): """Retrieves a config value""" value = config.get(key, default_value, return_section, path) if value and key == 'sqlobject.dburi' and os.name == 'nt': value = re.sub('///(\w):', '///\\1|', value) return value def update(configvalues): """Updates the configuration with the values from the dictionary.""" return config.update(configvalues) PKA>OERk#k#turbogears/config.pyc; HIc@s dkZdkZdkZdklZdklZdkZdkZdk ZdddgZ ye Wn e j odk lZ nXdefdYZd Zd Zd Zd Zd ZeedZeedZeeedZdZdS(N(sconfig(s ConfigObjs update_configsgetsupdate(sSets ConfigErrorcBstZRS(N(s__name__s __module__(((s*build\bdist.win32\egg\turbogears\config.pys ConfigErrorscCsx|iD]\}}h}|idt}|o |idd}||d %s s4Wrong format for arguments to %s in handler %s -> %ss)No class specified for logging handler %ss formatters*Handler %s references unknown formatter %s(shandlerssitemsskeyshandlerskwsgetsclsstuplesargssNoneslevelsevalsloggings__dict__s NameErrorserrs ConfigErrors handler_objsIOErrors__name__s TypeErrorssetLevelsKeyErrors formatters formatterss setFormatter( shandlerss formattersserrsargss handler_objshandlerskws formatterskeyslevelscls((s*build\bdist.win32\egg\turbogears\config.pys _get_handlers sB  !c Cs\xU|iD]G\}}|idt} | oti| }n ti}|idt}|ot |ti }n ti }|i||idt}|tj o ||_n|idt}|oyt|to |g}nxY|D]M}y||}Wn)tj otd||fnX|i|qWq q WdS(Nsqualnameslevels propagateshandlerss'Logger %s references unknown handler %s(sloggerssitemsskeysloggersgetsNonesqualnamesloggings getLoggerslogslevelsevals__dict__sNOTSETssetLevels propagates cfghandlerss isinstances basestringshandlershandlerssKeyErrors ConfigErrors addHandler( sloggersshandlerss cfghandlersslogslevelshandlers propagateskeysloggersqualname((s*build\bdist.win32\egg\turbogears\config.pys _get_loggersGs2       cCs|id ot|ddUpdates the configuration with the values from the dictionary.N(sconfigsupdates configvalues(s configvalues((s*build\bdist.win32\egg\turbogears\config.pysupdates(sossglobsrescherrypysconfigs configobjs ConfigObjs pkg_resourcessloggingslogging.handlerss__all__ssets NameErrorssetssSets Exceptions ConfigErrors_get_formatterss _get_handlerss _get_loggerssconfigure_loggerssconfig_defaultssNones config_objs update_configsFalsesgetsupdate(ssets config_objs__all__sres _get_loggerss update_configsconfigs_get_formatterss ConfigObjsgetsglobsupdates ConfigErrors _get_handlerssloggingsconfigure_loggerss pkg_resourcessconfig_defaultssos((s*build\bdist.win32\egg\turbogears\config.pys?s(      '  1 * PKK9^ z^^turbogears/controllers.py"""Classes and methods for TurboGears controllers.""" import logging import re import urllib import urlparse import types from itertools import izip from dispatch import generic, strategy, functions from inspect import isclass import cherrypy from cherrypy import request, response import turbogears.util as tg_util from turbogears import view, database, errorhandling, config from turbogears.decorator import weak_signature_decorator from turbogears.validators import Invalid from turbogears.errorhandling import error_handler, exception_handler log = logging.getLogger("turbogears.controllers") if config.get("session_filter.on", None): if config.get("session_filter.storage_type", None) == "PostgreSQL": import psycopg2 config.update( {'session_filter.get_db': psycopg2.connect( psycopg2.get('sessions.postgres.dsn')) }) # support for mysql/sqlite/etc here def _process_output(output, template, format, content_type, mapping, fragment=False): """Produce final output form from data returned from a controller method. See the expose() arguments for more info since they are the same. """ if isinstance(output, dict): from turbogears.widgets import js_location css = tg_util.setlike() js = dict(izip(js_location, iter(tg_util.setlike, None))) include_widgets = {} include_widgets_lst = config.get("tg.include_widgets", []) if config.get("tg.mochikit_all", False): include_widgets_lst.insert(0, 'turbogears.mochikit') for i in include_widgets_lst: widget = tg_util.load_class(i) if isclass(widget): widget = widget() include_widgets["tg_%s" % i.split(".")[-1]] = widget for script in widget.retrieve_javascript(): if hasattr(script, "location"): js[script.location].add(script) else: js[js_location.head].add(script) css.add_all(widget.retrieve_css()) for value in output.itervalues(): if hasattr(value, "retrieve_css"): retrieve = getattr(value, "retrieve_css") if callable(retrieve): css.add_all(value.retrieve_css()) if hasattr(value, "retrieve_javascript"): retrieve = getattr(value, "retrieve_javascript") if callable(retrieve): for script in value.retrieve_javascript(): if hasattr(script, "location"): js[script.location].add(script) else: js[js_location.head].add(script) output.update(include_widgets) output["tg_css"] = css for location in iter(js_location): output["tg_js_%s" % str(location)] = js[location] tg_flash = _get_flash() if tg_flash: output["tg_flash"] = tg_flash headers = {'Content-Type': content_type} output = view.render(output, template=template, format=format, mapping=mapping, headers=headers, fragment=fragment) content_type = headers['Content-Type'] if content_type: response.headers["Content-Type"] = content_type else: content_type = response.headers.get("Content-Type", 'text/plain') if content_type.startswith("text/"): if isinstance(output, unicode): output = output.encode(tg_util.get_template_encoding_default()) return output class BadFormatError(Exception): """Output-format exception.""" def validate(form=None, validators=None, failsafe_schema=errorhandling.FailsafeSchema.none, failsafe_values=None, state_factory=None): """Validate input. @param form: a form instance that must be passed throught the validation process... you must give a the same form instance as the one that will be used to post data on the controller you are putting the validate decorator on. @type form: a form instance @param validators: individual validators to use for parameters. If you use a schema for validation then the schema instance must be the sole argument. If you use simple validators, then you must pass a dictionary with each value name to validate as a key of the dictionary and the validator instance (eg: tg.validators.Int() for integer) as the value. @type validators: dictionary or schema instance @param failsafe_schema: a schema for handling failsafe values. The default is 'none', but you can also use 'values', 'map_errors', or 'defaults' to map erroneous inputs to values, corresponding exceptions or method defaults. @type failsafe_schema: errorhandling.FailsafeSchema @param failsafe_values: replacements for erroneous inputs. You can either define replacements for every parameter, or a single replacement value for all parameters. This is only used when failsafe_schema is 'values'. @type failsafe_values: a dictionary or a single value @param state_factory: If this is None, the initial state for validation is set to None, otherwise this must be a callable that returns the initial state to be used for validation. @type state_factory: callable or None """ def entangle(func): if callable(form) and not hasattr(form, "validate"): init_form = lambda self: form(self) else: init_form = lambda self: form def validate(func, *args, **kw): # do not validate a second time if already validated if hasattr(request, 'validation_state'): return func(*args, **kw) form = init_form(args and args[0] or kw["self"]) args, kw = tg_util.to_kw(func, args, kw) errors = {} if state_factory is not None: state = state_factory() else: state = None if form: value = kw.copy() try: kw.update(form.validate(value, state)) except Invalid, e: errors = e.unpack_errors() request.validation_exception = e request.validated_form = form if validators: if isinstance(validators, dict): for field, validator in validators.iteritems(): try: kw[field] = validator.to_python( kw.get(field, None), state) except Invalid, error: errors[field] = error else: try: value = kw.copy() kw.update(validators.to_python(value, state)) except Invalid, e: errors = e.unpack_errors() request.validation_exception = e request.validation_errors = errors request.input_values = kw.copy() request.validation_state = state if errors: kw = errorhandling.dispatch_failsafe(failsafe_schema, failsafe_values, errors, func, kw) args, kw = tg_util.from_kw(func, args, kw) return errorhandling.run_with_errors(errors, func, *args, **kw) return validate return weak_signature_decorator(entangle) class CustomDispatch(functions.GenericFunction): def combine(self, cases): strict = [strategy.ordered_signatures, strategy.safe_methods] cases = strategy.separate_qualifiers( cases, primary = strict, ) primary = strategy.method_chain(cases.get('primary', [])) if type(primary) != types.FunctionType: for i in primary: for y in i: return y[1] return primary def _add_rule(_expose, found_default, as_format, accept_format, template, rulefunc): if as_format == "default": if found_default: colon = template.find(":") if colon == -1: as_format = template else: as_format = template[:colon] else: found_default = True ruleparts = ['kw.get("tg_format", "default") == "%s"' % as_format] if accept_format: ruleparts.append('(accept == "%s" and kw.get("tg_format"' ', "default") == "default")' % accept_format) rule = " or ".join(ruleparts) log.debug("Generated rule %s", rule) _expose.when(rule)(rulefunc) return found_default def _build_rules(func): [generic(CustomDispatch)] def _expose(func, accept, allow_json, *args, **kw): pass if func._allow_json: log.debug("Adding allow_json rule: " 'allow_json and (kw.get("tg_format", None) == "json"' ' or accept in ("application/json", "text/javascript"))') _expose.when('allow_json and (kw.get("tg_format", None) == "json"' ' or accept in ("application/json", "text/javascript"))')( lambda _func, accept, allow_json, *args, **kw: _execute_func(_func, "json", "json", "application/json", None, False, args, kw)) found_default = False for ruleinfo in func._ruleinfo: found_default = _add_rule(_expose, found_default, **ruleinfo) func._expose = _expose def expose(template=None, validators=None, allow_json=None, html=None, format=None, content_type=None, inputform=None, fragment=False, as_format="default", mapping=None, accept_format=None): """Exposes a method to the web. By putting the expose decorator on a method, you tell TurboGears that the method should be accessible via URL traversal. Additionally, expose handles the output processing (turning a dictionary into finished output) and is also responsible for ensuring that the request is wrapped in a database transaction. You can apply multiple expose decorators to a method, if you'd like to support multiple output formats. The decorator that's listed first in your code without as_format or accept_format is the default that is chosen when no format is specifically asked for. Any other expose calls that are missing as_format and accept_format will have as_format implicitly set to the whatever comes before the ":" in the template name (or the whole template name if there is no ":". For example, expose("json"), if it's not the default expose, will have as_format set to "json". When as_format is set, passing the same value in the tg_format parameter in a request will choose the options for that expose decorator. Similarly, accept_format will watch for matching Accept headers. You can also use both. expose("json", as_format="json", accept_format="application/json") will choose JSON output for either case: tg_format=json as a parameter or Accept: application/json as a request header. Passing allow_json=True to an expose decorator is equivalent to adding the decorator just mentioned. Each expose decorator has its own set of options, and each one can choose a different template or even template engine (you can use Kid for HTML output and Cheetah for plain text, for example). See the other expose parameters below to learn about the options you can pass to the template engine. Take a look at the test_expose.py suite for more examples. @param template "templateengine:dotted.reference" reference along the Python path for the template and the template engine. For example, "kid:foo.bar" will have Kid render the bar template in the foo package. @keyparam format format for the template engine to output (if the template engine can render different formats. Kid, for example, can render "html", "xml" or "xhtml") @keyparam content_type sets the content-type http header @keyparam allow_json allow the function to be exposed as json @keyparam fragment for template engines (like Kid) that generate DOCTYPE declarations and the like, this is a signal to just generate the immediate template fragment. Use this if you're building up a page from multiple templates or going to put something onto a page with .innerHTML. @keyparam mapping mapping with options that are sent to the template engine @keyparam as_format designates which value of tg_format will choose this expose. @keyparam accept_format which value of an Accept: header will choose this expose. @keyparam html deprecated in favor of template @keyparam validators deprecated. Maps argument names to validator applied to that arg @keyparam inputform deprecated. A form object that generates the input to this method """ if html: template = html if not template: template = format if format == "json" or (format is None and template is None): template = "json" allow_json = True if content_type is None: content_type = config.get("tg.content_type", None) if config.get("tg.session.automatic_lock", None): cherrypy.session.acquire_lock() def entangle(func): log.debug("Exposing %s", func) log.debug("template: %s, format: %s, allow_json: %s, " "content-type: %s", template, format, allow_json, content_type) if not getattr(func, "exposed", False): def expose(func, *args, **kw): accept = request.headers.get('Accept', "").lower() accept = tg_util.simplify_http_accept_header(accept) if not hasattr(func, "_expose"): _build_rules(func) if hasattr(request, "in_transaction"): output = func._expose(func, accept, func._allow_json, *args, **kw) else: request.in_transaction = True output = database.run_with_transaction( func._expose, func, accept, func._allow_json, *args, **kw) return output func.exposed = True func._ruleinfo = [] allow_json_from_config = config.get("tg.allow_json", False) func._allow_json = allow_json_from_config or template == 'json' else: expose = lambda func, *args, **kw: func(*args, **kw) func._ruleinfo.insert(0, dict(as_format=as_format, accept_format=accept_format, template=template, rulefunc = lambda _func, accept, allow_json, *args, **kw: _execute_func(_func, template, format, content_type, mapping, fragment, args, kw))) if allow_json: func._allow_json = True if inputform or validators: import warnings warnings.warn( "Use a separate decorator validate() rather than passing " "arguments validators and/or inputform to decorator " "expose().", DeprecationWarning, 2) func = validate(form=inputform, validators=validators)(func) return expose return weak_signature_decorator(entangle) def _execute_func(func, template, format, content_type, mapping, fragment, args, kw): """Call controller method and process it's output.""" if config.get("tg.strict_parameters", False): tg_util.remove_keys(kw, ["tg_random", "tg_format"] + config.get("tg.ignore_parameters", [])) else: # get special parameters used by upstream decorators like paginate try: tg_kw = dict([(k, v) for k, v in kw.items() if k in func._tg_args]) except AttributeError: tg_kw = {} # remove excessive parameters args, kw = tg_util.adapt_call(func, args, kw) # add special parameters again kw.update(tg_kw) if config.get('server.environment', 'development') == 'development': # Only output this in development mode: If it's a field storage object, # this means big memory usage, and we don't want that in production log.debug("Calling %s with *(%s), **(%s)", func, args, kw) output = errorhandling.try_call(func, *args, **kw) if isinstance(output, list): return output assert isinstance(output, basestring) or isinstance(output, dict) \ or isinstance(output, types.GeneratorType), \ "Method %s.%s() returned unexpected output. Output should " \ "be of type basestring, dict or generator." % ( args[0].__class__.__name__, func.__name__) if isinstance(output, dict): template = output.pop("tg_template", template) format = output.pop("tg_format", format) if template and template.startswith("."): template = func.__module__[:func.__module__.rfind('.')]+template return _process_output(output, template, format, content_type, mapping, fragment) def flash(message): """Set a message to be displayed in the browser on next page display.""" message = tg_util.quote_cookie(tg_util.to_utf8(message)) response.simple_cookie['tg_flash'] = message response.simple_cookie['tg_flash']['path'] = '/' def _get_flash(): """Retrieve the flash message (if one is set), clearing the message.""" request_cookie = request.simple_cookie response_cookie = response.simple_cookie def clearcookie(): response_cookie["tg_flash"] = "" response_cookie["tg_flash"]['expires'] = 0 response_cookie['tg_flash']['path'] = '/' if response_cookie.has_key("tg_flash"): message = response_cookie["tg_flash"].value response_cookie.pop("tg_flash") if request_cookie.has_key("tg_flash"): # New flash overrided old one sitting in cookie. Clear that old cookie. clearcookie() elif request_cookie.has_key("tg_flash"): message = request_cookie["tg_flash"].value if not response_cookie.has_key("tg_flash"): clearcookie() else: message = None if message: message = unicode(tg_util.unquote_cookie(message), 'utf-8') return message class Controller(object): """Base class for a web application's controller. Currently, this provides positional parameters functionality via a standard default method. """ class RootController(Controller): """Base class for the root of a web application. Your web application should have one of these. The root of your application is used to compute URLs used by your app. """ is_app_root = True msglog = logging.getLogger('cherrypy.msg') msglogfunc = {0: msglog.info, 1: msglog.warning, 2: msglog.error} def _cp_log_message(self, msg, context = 'nocontext', severity = 0): log = self.msglogfunc[severity] text = ''.join((context, ': ', msg)) log(text) accesslog = logging.getLogger("turbogears.access") def _cp_log_access(self): tmpl = '%(h)s %(l)s %(u)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s"' try: username = request.user_name if not username: username = "-" except AttributeError: username = "-" s = tmpl % {'h': request.remote_host, 'l': '-', 'u': username, 'r': request.requestLine, 's': response.status.split(" ", 1)[0], 'b': response.headers.get('Content-Length', '') or "-", 'f': request.headers.get('referer', ''), 'a': request.headers.get('user-agent', ''), } self.accesslog.info(s) Root = RootController def url(tgpath, tgparams=None, **kw): """Computes URLs. tgpath can be a list or a string. If the path is absolute (starts with a "/"), the server.webpath, SCRIPT_NAME and the approot of the application are prepended to the path. In order for the approot to be detected properly, the root object should extend controllers.RootController. Query parameters for the URL can be passed in as a dictionary in the second argument *or* as keyword parameters. Values which are a list or a tuple are used to create multiple key-value pairs. """ if not isinstance(tgpath, basestring): tgpath = '/'.join(list(tgpath)) if tgpath.startswith('/'): webpath = (config.get('server.webpath') or '').rstrip('/') if tg_util.request_available(): check_app_root() tgpath = request.app_root + tgpath try: webpath += request.wsgi_environ['SCRIPT_NAME'].rstrip('/') except (AttributeError, KeyError): pass tgpath = webpath + tgpath if tgparams is None: tgparams = kw else: try: tgparams = tgparams.copy() tgparams.update(kw) except AttributeError: raise TypeError('url() expects a dictionary for query parameters') args = [] for key, value in tgparams.iteritems(): if value is None: continue if isinstance(value, (list, tuple)): pairs = [(key, v) for v in value] else: pairs = [(key, value)] for k, v in pairs: if v is None: continue if isinstance(v, unicode): v = v.encode('utf8') args.append((k, str(v))) if args: query_string = urllib.urlencode(args, True) if '?' in tgpath: tgpath += '&' + query_string else: tgpath += '?' + query_string return tgpath def check_app_root(): """Sets request.app_root if needed.""" if hasattr(request, 'app_root'): return found_root = False trail = request.object_trail top = len(trail) - 1 # compute the app_root by stepping back through the object # trail and collecting up the path elements after the first # root we find # we can eliminate this if we find a way to use # CherryPy's mounting mechanism whenever a new root # is hit. rootlist = [] for i in xrange(len(trail) - 1, -1, -1): path, obj = trail[i] if not found_root and isinstance(obj, RootController): if i == top: break found_root = True if found_root and i > 0: rootlist.insert(0, path) app_root = '/'.join(rootlist) if not app_root.startswith('/'): app_root = '/' + app_root if app_root.endswith('/'): app_root = app_root[:-1] request.app_root = app_root def redirect(redirect_path, redirect_params=None, **kw): """Redirect (via cherrypy.HTTPRedirect). Raises the exception instead of returning it, this to allow users to both call it as a function or to raise it as an exception. """ if not isinstance(redirect_path, basestring): redirect_path = '/'.join(list(redirect_path)) if not redirect_path.startswith('/'): path = request.path_info check_app_root() if path.startswith(request.app_root): path = path[len(request.app_root):] redirect_path = urlparse.urljoin(path, redirect_path) raise cherrypy.HTTPRedirect(url(tgpath=redirect_path, tgparams=redirect_params, **kw)) __all__ = [ "Controller", "error_handler", "exception_handler", "expose", "flash", "redirect", "Root", "RootController", "url", "validate", ] PKA>mLUoUoturbogears/controllers.pyc; HIc @sydZdkZdkZdkZdkZdkZdklZdkl Z l Z l Z dk l Z dkZdklZlZdkiZdklZlZlZlZdklZdklZd klZlZei d Z!ei"d e#oRei"d e#d jo5dk$Z$ei%hde$i&e$i"d<qNne'dZ(de)fdYZ*e#e#ei+i,e#e#dZ-de i.fdYZ/dZ0dZ1e#e#e#e#e#e#e#e'de#e#d Z2dZ3dZ4dZ5de6fdYZ7de7fd YZ8e8Z9e#d!Z:d"Z;e#d#Z<dd$d%d&d'd(d)dd*d+g Z=dS(,s/Classes and methods for TurboGears controllers.N(sizip(sgenericsstrategys functions(sisclass(srequestsresponse(sviewsdatabases errorhandlingsconfig(sweak_signature_decorator(sInvalid(s error_handlersexception_handlersturbogears.controllersssession_filter.onssession_filter.storage_types PostgreSQLssession_filter.get_dbssessions.postgres.dsnc CsIt|todkl} ti}tt| t tit }h} t idg} t idto| iddnx| D]}ti|}t|o |}n|| d|iddscsS(N(sform(sself(sform(s/build\bdist.win32\egg\turbogears\controllers.pyssc sDttdo|||Sn|o|dp|d}ti|||\}}h}t j o }nt }|oc|i }y|i|i||Wn*tj o}|i}|t_nX|t_nottoixiD]T\}} y&| i|i|t |||s( sgenericsCustomDispatchs_exposesfuncs _allow_jsonslogsdebugswhensFalses found_defaults _ruleinfosruleinfos _add_rule(sfuncs found_defaultsruleinfos_expose((s/build\bdist.win32\egg\turbogears\controllers.pys _build_ruless     sdefaultc s|o |n o ndjptjo tjodtntjotidtntidtot i i n d} t | SdS(sR Exposes a method to the web. By putting the expose decorator on a method, you tell TurboGears that the method should be accessible via URL traversal. Additionally, expose handles the output processing (turning a dictionary into finished output) and is also responsible for ensuring that the request is wrapped in a database transaction. You can apply multiple expose decorators to a method, if you'd like to support multiple output formats. The decorator that's listed first in your code without as_format or accept_format is the default that is chosen when no format is specifically asked for. Any other expose calls that are missing as_format and accept_format will have as_format implicitly set to the whatever comes before the ":" in the template name (or the whole template name if there is no ":". For example, expose("json"), if it's not the default expose, will have as_format set to "json". When as_format is set, passing the same value in the tg_format parameter in a request will choose the options for that expose decorator. Similarly, accept_format will watch for matching Accept headers. You can also use both. expose("json", as_format="json", accept_format="application/json") will choose JSON output for either case: tg_format=json as a parameter or Accept: application/json as a request header. Passing allow_json=True to an expose decorator is equivalent to adding the decorator just mentioned. Each expose decorator has its own set of options, and each one can choose a different template or even template engine (you can use Kid for HTML output and Cheetah for plain text, for example). See the other expose parameters below to learn about the options you can pass to the template engine. Take a look at the test_expose.py suite for more examples. @param template "templateengine:dotted.reference" reference along the Python path for the template and the template engine. For example, "kid:foo.bar" will have Kid render the bar template in the foo package. @keyparam format format for the template engine to output (if the template engine can render different formats. Kid, for example, can render "html", "xml" or "xhtml") @keyparam content_type sets the content-type http header @keyparam allow_json allow the function to be exposed as json @keyparam fragment for template engines (like Kid) that generate DOCTYPE declarations and the like, this is a signal to just generate the immediate template fragment. Use this if you're building up a page from multiple templates or going to put something onto a page with .innerHTML. @keyparam mapping mapping with options that are sent to the template engine @keyparam as_format designates which value of tg_format will choose this expose. @keyparam accept_format which value of an Accept: header will choose this expose. @keyparam html deprecated in favor of template @keyparam validators deprecated. Maps argument names to validator applied to that arg @keyparam inputform deprecated. A form object that generates the input to this method sjsonstg.content_typestg.session.automatic_lockcs2tid|tid t|dt oGd}t |_ g|_ t idt}|p dj|_n d}|i idtd d d d d  o t |_npo;dk}|idtdtdd|}n|SdS(Ns Exposing %ss:template: %s, format: %s, allow_json: %s, content-type: %ssexposedcOstiiddi}ti|}t|d ot |nttdo"|i |||i ||}n.tt_ti|i |||i ||}|SdS(NsAcceptss_exposesin_transaction(srequestsheaderssgetslowersacceptstg_utilssimplify_http_accept_headershasattrsfuncs _build_ruless_exposes _allow_jsonsargsskwsoutputsTruesin_transactionsdatabasesrun_with_transaction(sfuncsargsskwsacceptsoutput((s/build\bdist.win32\egg\turbogears\controllers.pysexpose\s" $s tg.allow_jsonsjsoncOs |||S(N(sfuncsargsskw(sfuncsargsskw((s/build\bdist.win32\egg\turbogears\controllers.pysosis as_formats accept_formatstemplatesrulefuncc st|||S(N( s _execute_funcs_funcstemplatesformats content_typesmappingsfragmentsargsskw(s_funcsaccepts allow_jsonsargsskw(s content_typesformatsmappingsfragmentstemplate(s/build\bdist.win32\egg\turbogears\controllers.pysssstUse a separate decorator validate() rather than passing arguments validators and/or inputform to decorator expose().isforms validators(slogsdebugsfuncstemplatesformats allow_jsons content_typesgetattrsFalsesexposesTruesexposeds _ruleinfosconfigsgetsallow_json_from_configs _allow_jsonsinsertsdicts as_formats accept_formats inputforms validatorsswarningsswarnsDeprecationWarningsvalidate(sfuncswarningssexposesallow_json_from_config( s content_types validatorsstemplates as_formatsformatsfragmentsmappings inputforms accept_formats allow_json(s/build\bdist.win32\egg\turbogears\controllers.pysentangleWs*          N(shtmlstemplatesformatsNonesTrues allow_jsons content_typesconfigsgetscherrypyssessions acquire_locksentanglesweak_signature_decorator( stemplates validatorss allow_jsonshtmlsformats content_types inputformsfragments as_formatsmappings accept_formatsentangle(( stemplates validatorss allow_jsonsformats content_types inputformsfragments as_formatsmappings accept_formats/build\bdist.win32\egg\turbogears\controllers.pysexposesD  '  '-c Cstidto*ti|ddgtidgnyWtgi} |i D]0\} } | |i jo| | | fqWqW~ }Wntj o h}nXti|||\}}|i|tidddjotid|||nti|||} t| to| Snt| tp t| tpt| tip!td|d ii|ift| to(| i d |}| i d|}n|o |i#d o!|i$|i$i%d  |}nt&| |||||Sd S( s/Call controller method and process it's output.stg.strict_parameterss tg_randoms tg_formatstg.ignore_parameterssserver.environments developmentsCalling %s with *(%s), **(%s)sbMethod %s.%s() returned unexpected output. Output should be of type basestring, dict or generator.is tg_templates.N(*sconfigsgetsFalsestg_utils remove_keysskwsdictsappends_[1]sitemssksvsfuncs_tg_argsstg_kwsAttributeErrors adapt_callsargssupdateslogsdebugs errorhandlingstry_callsoutputs isinstanceslists basestringstypess GeneratorTypesAssertionErrors __class__s__name__spopstemplatesformats startswiths __module__srfinds_process_outputs content_typesmappingsfragment( sfuncstemplatesformats content_typesmappingsfragmentsargsskwstg_kwsks_[1]svsoutput((s/build\bdist.win32\egg\turbogears\controllers.pys _execute_funcs**W  T!cCs:titi|}|tids__doc__sloggingsresurllibsurlparsestypess itertoolssizipsdispatchsgenericsstrategys functionssinspectsisclassscherrypysrequestsresponsesturbogears.utilsutilstg_utils turbogearssviewsdatabases errorhandlingsconfigsturbogears.decoratorsweak_signature_decoratorsturbogears.validatorssInvalidsturbogears.errorhandlings error_handlersexception_handlers getLoggerslogsgetsNonespsycopg2supdatesconnectsFalses_process_outputs ExceptionsBadFormatErrorsFailsafeSchemasnonesvalidatesGenericFunctionsCustomDispatchs _add_rules _build_rulessexposes _execute_funcsflashs _get_flashsobjects ControllersRootControllersRootsurlscheck_app_rootsredirects__all__()s _get_flashscherrypysexception_handlersizipsInvalidsBadFormatErrors error_handlers _build_rulessredirects functionsslogs__all__sgenericspsycopg2sflashs _add_rulesurllibsstrategysres Controllersconfigstg_utils errorhandlingsisclasssexposesRootControllerscheck_app_rootsvalidatesRootsresponsestypessweak_signature_decoratorsloggingsCustomDispatchsdatabasesurlsrequestsurlparses_process_outputs _execute_funcsview((s/build\bdist.win32\egg\turbogears\controllers.pys?sJ            0 F^  * #   % ;  PKK9gIIturbogears/database.py"""Convenient access to an SQLObject or SQLAlchemy managed database.""" import sys import time import logging import cherrypy from cherrypy import request from cherrypy.filters.basefilter import BaseFilter try: import sqlalchemy from sqlalchemy.orm import create_session as orm_create_session except ImportError: sqlalchemy = None try: import sqlobject from sqlobject.dbconnection import ConnectionHub, Transaction, TheURIOpener from sqlobject.util.threadinglocal import local as threading_local except ImportError: sqlobject = None import dispatch from turbogears import config from turbogears.util import remove_keys from turbogears.genericfunctions import MultiorderGenericFunction log = logging.getLogger("turbogears.database") _engine = None # Provide support for SQLAlchemy if sqlalchemy: def get_engine(): """Retrieve the engine based on the current configuration.""" global _engine if not _engine: alch_args = dict() for k, v in config.config.configMap["global"].items(): if "sqlalchemy" in k: alch_args[k.split(".")[-1]] = v dburi = alch_args.pop('dburi') if not dburi: raise KeyError("No sqlalchemy database config found!") _engine = sqlalchemy.create_engine(dburi, **alch_args) if not metadata.is_bound(): metadata.bind = _engine return _engine def create_session(): """Create a session that uses the engine from thread-local metadata.""" if not metadata.is_bound(): get_engine() return orm_create_session() metadata = sqlalchemy.MetaData() try: from sqlalchemy.orm import scoped_session # Create session with autoflush=False # and autocommit=True (transactional=False) session = scoped_session(create_session) mapper = session.mapper # use session-aware mapper except ImportError: # SQLAlchemy < 0.4 from sqlalchemy.ext.sessioncontext import SessionContext class Objectstore(object): def __init__(self): self.context = SessionContext(create_session) def __getattr__(self, name): return getattr(self.context.registry(), name) session = property(lambda s: s.context.registry()) session = Objectstore() context = session.context Query = sqlalchemy.Query from sqlalchemy.orm import mapper as orm_mapper def mapper(cls, *args, **kwargs): validate = kwargs.pop('validate', False) if not hasattr(getattr(cls, '__init__'), 'im_func'): def __init__(self, **kwargs): for key, value in kwargs.items(): if validate and key not in self.mapper.props: raise KeyError( "Property does not exist: '%s'" % key) setattr(self, key, value) cls.__init__ = __init__ m = orm_mapper(cls, extension=context.mapper_extension, *args, **kwargs) class query_property(object): def __get__(self, instance, cls): return Query(cls, session=context.current) cls.query = query_property() return m try: from sqlalchemy.ext import activemapper activemapper.metadata, activemapper.objectstore = metadata, session except ImportError: pass try: import elixir elixir.metadata, elixir.session = metadata, session except ImportError: pass else: def get_engine(): pass def create_session(): pass metadata = session = mapper = None bind_meta_data = bind_metadata = get_engine # alias names try: set except NameError: # Python 2.3 from sets import Set as set hub_registry = set() _hubs = dict() # stores the AutoConnectHubs used for each connection URI # Provide support for SQLObject if sqlobject: def _mysql_timestamp_converter(raw): """Convert a MySQL TIMESTAMP to a floating point number representing the seconds since the Un*x Epoch. It uses custom code the input seems to be the new (MySQL 4.1+) timestamp format, otherwise code from the MySQLdb module is used.""" if raw[4] == '-': return time.mktime(time.strptime(raw, '%Y-%m-%d %H:%M:%S')) else: import MySQLdb.converters return MySQLdb.converters.mysql_timestamp_converter(raw) class AutoConnectHub(ConnectionHub): """Connects to the database once per thread. The AutoConnectHub also provides convenient methods for managing transactions.""" uri = None params = {} def __init__(self, uri=None, supports_transactions=True): if not uri: uri = config.get("sqlobject.dburi") self.uri = uri self.supports_transactions = supports_transactions hub_registry.add(self) ConnectionHub.__init__(self) def _is_interesting_version(self): """Return True only if version of MySQLdb <= 1.0.""" import MySQLdb module_version = MySQLdb.version_info[0:2] major = module_version[0] minor = module_version[1] # we can't use Decimal here because it is only available for Python 2.4 return (major < 1 or (major == 1 and minor < 2)) def _enable_timestamp_workaround(self, connection): """Enable a workaround for an incompatible timestamp format change in MySQL 4.1 when using an old version of MySQLdb. See trac ticket #1235 - http://trac.turbogears.org/ticket/1235 for details.""" # precondition: connection is a MySQLConnection import MySQLdb import MySQLdb.converters if self._is_interesting_version(): conversions = MySQLdb.converters.conversions.copy() conversions[MySQLdb.constants.FIELD_TYPE.TIMESTAMP] = \ _mysql_timestamp_converter # There is no method to use custom keywords when using # "connectionForURI" in sqlobject so we have to insert the # conversions afterwards. connection.kw["conv"] = conversions def getConnection(self): try: conn = self.threadingLocal.connection return self.begin(conn) except AttributeError: if self.uri: conn = sqlobject.connectionForURI(self.uri) # the following line effectively turns off the DBAPI connection # cache. We're already holding on to a connection per thread, # and the cache causes problems with sqlite. if self.uri.startswith("sqlite"): TheURIOpener.cachedURIs = {} elif self.uri.startswith("mysql") and \ config.get("turbogears.enable_mysql41_timestamp_workaround", False): self._enable_timestamp_workaround(conn) self.threadingLocal.connection = conn return self.begin(conn) raise AttributeError( "No connection has been defined for this thread " "or process") def reset(self): """Used for testing purposes. This drops all of the connections that are being held.""" self.threadingLocal = threading_local() def begin(self, conn=None): """Start a transaction.""" if not self.supports_transactions: return conn if not conn: conn = self.getConnection() if isinstance(conn, Transaction): if conn._obsolete: conn.begin() return conn self.threadingLocal.old_conn = conn trans = conn.transaction() self.threadingLocal.connection = trans return trans def commit(self): """Commit the current transaction.""" if not self.supports_transactions: return try: conn = self.threadingLocal.connection except AttributeError: return if isinstance(conn, Transaction): self.threadingLocal.connection.commit() def rollback(self): """Rollback the current transaction.""" if not self.supports_transactions: return try: conn = self.threadingLocal.connection except AttributeError: return if isinstance(conn, Transaction) and not conn._obsolete: self.threadingLocal.connection.rollback() def end(self): """End the transaction, returning to a standard connection.""" if not self.supports_transactions: return try: conn = self.threadingLocal.connection except AttributeError: return if not isinstance(conn, Transaction): return if not conn._obsolete: conn.rollback() self.threadingLocal.connection = self.threadingLocal.old_conn del self.threadingLocal.old_conn self.threadingLocal.connection.cache.clear() class PackageHub(object): """Transparently proxies to an AutoConnectHub for the URI that is appropriate for this package. A package URI is configured via "packagename.dburi" in the global CherryPy settings. If there is no package DB URI configured, the default (provided by "sqlobject.dburi") is used. The hub is not instantiated until an attempt is made to use the database. """ def __init__(self, packagename): self.packagename = packagename self.hub = None def __get__(self, obj, type): if not self.hub: self.set_hub() return self.hub.__get__(obj, type) def __set__(self, obj, type): if not self.hub: self.set_hub() return self.hub.__set__(obj, type) def __getattr__(self, name): if not self.hub: self.set_hub() return getattr(self.hub, name) def set_hub(self): dburi = config.get("%s.dburi" % self.packagename, None) if not dburi: dburi = config.get("sqlobject.dburi", None) if not dburi: raise KeyError, "No database configuration found!" if dburi.startswith("notrans_"): dburi = dburi[8:] trans = False else: trans = True hub = _hubs.get(dburi, None) if not hub: hub = AutoConnectHub(dburi, supports_transactions=trans) _hubs[dburi] = hub self.hub = hub else: class AutoConnectHub(object): pass class PackageHub(object): pass def set_db_uri(dburi, package=None): """Sets the database URI to use either globally or for a specific package. Note that once the database is accessed, calling setDBUri will have no effect. @param dburi: database URI to use @param package: package name this applies to, or None to set the default. """ if package: config.update({'global': {"%s.dburi" % package : dburi} }) else: config.update({'global': {"sqlobject.dburi" : dburi} }) def commit_all(): """Commits the transactions in all registered hubs (for this thread).""" for hub in hub_registry: hub.commit() def rollback_all(): """Rollback the transactions in all registered hubs (for this thread).""" for hub in hub_registry: hub.rollback() def end_all(): """End the transactions in all registered hubs (for this thread).""" for hub in hub_registry: hub.end() [dispatch.generic(MultiorderGenericFunction)] def run_with_transaction(func, *args, **kw): pass [dispatch.generic(MultiorderGenericFunction)] def restart_transaction(args): pass def _use_sa(args=None): # check to see if sqlalchemy has been imported and configured return _engine is not None # include "args" to avoid call being pre-cached [run_with_transaction.when("not _use_sa(args)")] def so_rwt(func, *args, **kw): log.debug("Starting SQLObject transaction") try: try: retval = func(*args, **kw) commit_all() return retval except cherrypy.HTTPRedirect: commit_all() raise except cherrypy.InternalRedirect: commit_all() raise except: # No need to "rollback" the sqlalchemy unit of work, # because nothing has hit the db yet. rollback_all() raise finally: end_all() # include "args" to avoid call being pre-cached [restart_transaction.when("not _use_sa(args)")] def so_restart_transaction(args): #log.debug("ReStarting SQLObject transaction") # Disable for now for compatibility pass def dispatch_exception(exception, args, kw): # errorhandling import here to avoid circular imports from turbogears.errorhandling import dispatch_error # Keep in mind func is not the real func but _expose real_func, accept, allow_json, controller = args[:4] args = args[4:] exc_type, exc_value, exc_trace = sys.exc_info() remove_keys(kw, ("tg_source", "tg_errors", "tg_exceptions")) try: output = dispatch_error( controller, real_func, None, exception, *args, **kw) except dispatch.NoApplicableMethods: raise exc_type, exc_value, exc_trace else: del exc_trace return output # include "args" to avoid call being pre-cached [run_with_transaction.when("_use_sa(args)")] def sa_rwt(func, *args, **kw): log.debug("Starting SA transaction") request.sa_transaction = make_sa_transaction(session) try: try: retval = func(*args, **kw) except (cherrypy.HTTPRedirect, cherrypy.InternalRedirect): # If a redirect happens, commit and proceed with redirect if sa_transaction_active(): log.debug('Redirect in active transaction - will commit now') if hasattr(session, 'commit'): session.commit() else: # SA < 0.4 request.sa_transaction.commit() else: log.debug('Redirect in inactive transaction') raise except: # If any other exception happens, rollback and re-raise error if sa_transaction_active(): log.debug('Error in active transaction - will rollback now') if hasattr(session, 'rollback'): session.rollback() else: # SA < 0.4 request.sa_transaction.rollback() else: log.debug('Error in inactive transaction') raise # If the call was successful, commit and proceed if sa_transaction_active(): log.debug('Transaction is still active - will commit now') try: session.commit() except AttributeError: # SA < 0.4 request.sa_transaction.commit() else: log.debug('Transaction is already inactive') finally: log.debug('Ending SA transaction') session.close() return retval # include "args" to avoid call being pre-cached [restart_transaction.when("_use_sa(args)")] def sa_restart_transaction(args): log.debug("Restarting SA transaction") if sa_transaction_active(): log.debug('Transaction is still active - will rollback now') try: session.rollback() except AttributeError: # SA < 0.4 request.sa_transaction.rollback() else: log.debug('Transaction is already inactive') session.close() request.sa_transaction = make_sa_transaction(session) def make_sa_transaction(session): """Create a new transaction in an SA session.""" try: return session.begin() except AttributeError: # SA < 0.4 return session.create_transaction() def sa_transaction_active(): """Check whether SA transaction is still active.""" try: return session().is_active except (TypeError, AttributeError): # SA < 0.4.7 try: transaction = request.sa_transaction except AttributeError: return False try: return transaction and transaction.is_active except AttributeError: # SA < 0.4.3 return transaction.session.transaction def so_to_dict(sqlobj): """Convert SQLObject to a dictionary based on columns.""" d = {} if sqlobj is None: return d # stops recursion for name in sqlobj.sqlmeta.columns.keys(): d[name] = getattr(sqlobj, name) d['id'] = sqlobj.id # id must be added explicitly if sqlobj._inheritable: d.update(so_to_dict(sqlobj._parent)) d.pop('childName') return d def so_columns(sqlclass, columns=None): """Return a dict with all columns from a SQLObject. This includes the columns from InheritableSO's bases. """ if columns is None: columns = {} columns.update(filter(lambda i: i[0] != 'childName', sqlclass.sqlmeta.columns.items())) if sqlclass._inheritable: so_columns(sqlclass.__base__, columns) return columns def so_joins(sqlclass, joins=None): """Return a list with all joins from a SQLObject. The list includes the columns from InheritableSO's bases. """ if joins is None: joins = [] joins.extend(sqlclass.sqlmeta.joins) if sqlclass._inheritable: so_joins(sqlclass.__base__, joins) return joins class EndTransactionsFilter(BaseFilter): def on_end_resource(self): if _use_sa(): session.clear() end_all() __all__ = ["get_engine", "metadata", "session", "mapper", "PackageHub", "AutoConnectHub", "set_db_uri", "commit_all", "rollback_all", "end_all", "so_to_dict", "so_columns", "so_joins", "EndTransactionsFilter"] PKA>S__turbogears/database.pyc; HIc@scdZdkZdkZdkZdkZdklZdklZydkZdk l Z Wne j o e ZnXy3dkZdklZlZlZdklZWne j o e ZnXdkZdklZdklZd klZeid Ze aeo,d Z d Z ei!Z"y&d k l#Z#e#e Z$e$i%Z%Wnge j o[dk&l'Z'de(fdYZ)e)Z$e$i*Z*ei+Z+dk l%Z,dZ%nXy)dk-l.Z.e"e$f\e._"e._/Wne j onXy%dk0Z0e"e$f\e0_"e0_$Wqae j oqaXn!dZ dZ e Z"Z$Z%e Z1Z2ye3Wn e4j odk5l6Z3nXe3Z7e8Z9eo9dZ:defdYZ;de(fdYZ<n-de(fdYZ;de(fdYZ<e dZ=dZ>d Z?d!Z@eiAegd"ZBeiAegd#ZCe d$ZDeBiEd%gd&ZFeCiEd%gd'ZGd(ZHeBiEd)gd*ZIeCiEd)gd+ZJd,ZKd-ZLd.ZMe d/ZNe d0ZOd1efd2YZPd3d4d5d6ddd7d8d9d:d;d<d=d1gZQdS(>sAConvenient access to an SQLObject or SQLAlchemy managed database.N(srequest(s BaseFilter(screate_session(s ConnectionHubs Transactions TheURIOpener(slocal(sconfig(s remove_keys(sMultiorderGenericFunctionsturbogears.databasecCst ot}xLtiidiD]4\}}d|jo|||iddGs(s__name__s __module__s__init__s __getattr__spropertyssession(((s,build\bdist.win32\egg\turbogears\database.pys ObjectstoreBs  (smappercs|idttt|dd od}||_nt|dt i ||}dt fdY}||_|SdS(Nsvalidates__init__sim_funcc s_xX|iD]J\}}o||iijotd|nt |||q WdS(NsProperty does not exist: '%s'( skwargssitemsskeysvaluesvalidatesselfsmapperspropssKeyErrorssetattr(sselfskwargssvalueskey(svalidate(s,build\bdist.win32\egg\turbogears\database.pys__init__Os  s extensionsquery_propertycBstZdZRS(NcCst|dtiSdS(Nssession(sQuerysclsscontextscurrent(sselfsinstancescls((s,build\bdist.win32\egg\turbogears\database.pys__get__Ys(s__name__s __module__s__get__(((s,build\bdist.win32\egg\turbogears\database.pysquery_propertyXs(skwargsspopsFalsesvalidateshasattrsgetattrsclss__init__s orm_mapperscontextsmapper_extensionsargssmsobjectsquery_propertysquery(sclssargsskwargssquery_propertysms__init__svalidate((svalidates,build\bdist.win32\egg\turbogears\database.pysmapperLs   (s activemappercCsdS(N((((s,build\bdist.win32\egg\turbogears\database.pys get_enginejscCsdS(N((((s,build\bdist.win32\egg\turbogears\database.pyscreate_sessionms(sSetcCsK|ddjotiti|dSndk}|ii|SdS(sConvert a MySQL TIMESTAMP to a floating point number representing the seconds since the Un*x Epoch. It uses custom code the input seems to be the new (MySQL 4.1+) timestamp format, otherwise code from the MySQLdb module is used.is-s%Y-%m-%d %H:%M:%SN(srawstimesmktimesstrptimesMySQLdb.converterssMySQLdbs converterssmysql_timestamp_converter(srawsMySQLdb((s,build\bdist.win32\egg\turbogears\database.pys_mysql_timestamp_converters  sAutoConnectHubcBsttZdZeZhZeedZdZdZ dZ dZ edZ dZ dZd ZRS( sConnects to the database once per thread. The AutoConnectHub also provides convenient methods for managing transactions.cCsK| otid}n||_||_ti|ti|dS(Nssqlobject.dburi( surisconfigsgetsselfssupports_transactionss hub_registrysadds ConnectionHubs__init__(sselfsurissupports_transactions((s,build\bdist.win32\egg\turbogears\database.pys__init__s    cCsUdk}|idd!}|d}|d}|djp|djo |djSdS(s.Return True only if version of MySQLdb <= 1.0.Niii(sMySQLdbs version_infosmodule_versionsmajorsminor(sselfsmodule_versionsMySQLdbsmajorsminor((s,build\bdist.win32\egg\turbogears\database.pys_is_interesting_versions    cCsYdk}dk}|io6|iii}t||ii i <||i dEnd the transactions in all registered hubs (for this thread).N(s hub_registryshubsend(shub((s,build\bdist.win32\egg\turbogears\database.pysend_allPscOsdS(N((sfuncsargsskw((s,build\bdist.win32\egg\turbogears\database.pysrun_with_transactionVscCsdS(N((sargs((s,build\bdist.win32\egg\turbogears\database.pysrestart_transactionZscCsttj SdS(N(s_enginesNone(sargs((s,build\bdist.win32\egg\turbogears\database.pys_use_sa]ssnot _use_sa(args)cOstidzty|||}t|SWnOtij otn1ti j otnt nXWdt XdS(NsStarting SQLObject transaction( slogsdebugsfuncsargsskwsretvals commit_allscherrypys HTTPRedirectsInternalRedirects rollback_allsend_all(sfuncsargsskwsretval((s,build\bdist.win32\egg\turbogears\database.pysso_rwtcs"  cCsdS(N((sargs((s,build\bdist.win32\egg\turbogears\database.pysso_restart_transactionzsc Csdkl}|d \}}} }|d}ti\} }}t |dddfy|||t|||} Wn"tij o| ||n X~| SdS(N(sdispatch_erroris tg_sources tg_errorss tg_exceptions(sturbogears.errorhandlingsdispatch_errorsargss real_funcsaccepts allow_jsons controllerssyssexc_infosexc_types exc_values exc_traces remove_keysskwsNones exceptionsoutputsdispatchsNoApplicableMethods( s exceptionsargsskws exc_traces real_funcsaccepts exc_values controllersdispatch_errorsoutputsexc_types allow_json((s,build\bdist.win32\egg\turbogears\database.pysdispatch_exceptions  s _use_sa(args)cOstidttt_zDy|||}Wnt i t i fj o]t o<tidttdotiqtiintidn^t o<tidttdotiqtiintidnXt oBtidytiWq_tj otiiq_Xntid Wdtid tiX|SdS( NsStarting SA transactions0Redirect in active transaction - will commit nowscommits Redirect in inactive transactions/Error in active transaction - will rollback nowsrollbacksError in inactive transactions-Transaction is still active - will commit nowsTransaction is already inactivesEnding SA transaction(slogsdebugsmake_sa_transactionssessionsrequestssa_transactionsfuncsargsskwsretvalscherrypys HTTPRedirectsInternalRedirectssa_transaction_activeshasattrscommitsrollbacksAttributeErrorsclose(sfuncsargsskwsretval((s,build\bdist.win32\egg\turbogears\database.pyssa_rwts@           cCstidtoBtidytiWqftj otiiqfXntidtit tt_dS(NsRestarting SA transactions/Transaction is still active - will rollback nowsTransaction is already inactive( slogsdebugssa_transaction_activessessionsrollbacksAttributeErrorsrequestssa_transactionsclosesmake_sa_transaction(sargs((s,build\bdist.win32\egg\turbogears\database.pyssa_restart_transactions     cCs2y|iSWntj o|iSnXdS(s*Create a new transaction in an SA session.N(ssessionsbeginsAttributeErrorscreate_transaction(ssession((s,build\bdist.win32\egg\turbogears\database.pysmake_sa_transactions cCsytiSWnrttfj o`y ti}Wntj o tSnXy|o|iSWqtj o|iiSqXnXdS(s-Check whether SA transaction is still active.N(ssessions is_actives TypeErrorsAttributeErrorsrequestssa_transactions transactionsFalse(s transaction((s,build\bdist.win32\egg\turbogears\database.pyssa_transaction_actives  cCsh}|tjo|Snx-|iiiD]}t||||sN( scolumnssNonesupdatesfilterssqlclassssqlmetasitemss _inheritables so_columnss__base__(ssqlclassscolumns((s,build\bdist.win32\egg\turbogears\database.pys so_columnss   cCsP|tjo g}n|i|ii|iot|i|n|SdS(ssReturn a list with all joins from a SQLObject. The list includes the columns from InheritableSO's bases. N(sjoinssNonesextendssqlclassssqlmetas _inheritablesso_joinss__base__(ssqlclasssjoins((s,build\bdist.win32\egg\turbogears\database.pysso_joinss   sEndTransactionsFiltercBstZdZRS(NcCs#totintdS(N(s_use_sassessionsclearsend_all(sself((s,build\bdist.win32\egg\turbogears\database.pyson_end_resource s (s__name__s __module__son_end_resource(((s,build\bdist.win32\egg\turbogears\database.pysEndTransactionsFilterss get_enginesmetadatassessionsmappers set_db_uris commit_alls rollback_allsend_alls so_to_dicts so_columnssso_joins(Rs__doc__ssysstimesloggingscherrypysrequestscherrypy.filters.basefilters BaseFilters sqlalchemyssqlalchemy.ormscreate_sessionsorm_create_sessions ImportErrorsNones sqlobjectssqlobject.dbconnections ConnectionHubs Transactions TheURIOpenerssqlobject.util.threadinglocalslocalsthreading_localsdispatchs turbogearssconfigsturbogears.utils remove_keyssturbogears.genericfunctionssMultiorderGenericFunctions getLoggerslogs_engines get_enginesMetaDatasmetadatasscoped_sessionssessionsmapperssqlalchemy.ext.sessioncontextsSessionContextsobjects ObjectstorescontextsQuerys orm_mapperssqlalchemy.exts activemappers objectstoreselixirsbind_meta_datas bind_metadatassets NameErrorssetssSets hub_registrysdicts_hubss_mysql_timestamp_convertersAutoConnectHubs PackageHubs set_db_uris commit_alls rollback_allsend_allsgenericsrun_with_transactionsrestart_transactions_use_saswhensso_rwtsso_restart_transactionsdispatch_exceptionssa_rwtssa_restart_transactionsmake_sa_transactionssa_transaction_actives so_to_dicts so_columnssso_joinssEndTransactionsFilters__all__(:ssetscherrypys_mysql_timestamp_converters Objectstoresbind_meta_datasdispatchsrestart_transactionsso_restart_transactions Transactionsorm_create_sessions so_columnss TheURIOpeners_hubsssa_restart_transactionssa_rwtslogs__all__s BaseFiltersAutoConnectHubs ConnectionHubs so_to_dictsend_alls rollback_allsconfigsmetadatasmake_sa_transactions hub_registrys sqlalchemyselixirs activemappers get_enginestimes commit_allsrun_with_transactionssyss_use_sas bind_metadatasQuerysso_rwtsscoped_sessionscreate_sessions sqlobjectsmappers orm_mappersloggingssa_transaction_activesso_joinssrequests PackageHubs set_db_urisdispatch_exceptionssessions remove_keysscontextsthreading_localsMultiorderGenericFunctionsEndTransactionsFiltersSessionContext((s,build\bdist.win32\egg\turbogears\database.pys?s                                  v.           +    PKK9@4 ``turbogears/decorator.pyimport itertools from copy import copy from inspect import getargspec, formatargspec from peak.util.decorators import decorate_assignment # Inspired by Michele Simionato's decorator library # http://www.phyast.pitt.edu/~micheles/python/documentation.html def decorate(func, caller, signature=None): """Decorate func with caller.""" if signature is not None: argnames, varargs, kwargs, defaults = signature else: argnames, varargs, kwargs, defaults = getargspec(func) if defaults is None: defaults = () parameters = formatargspec(argnames, varargs, kwargs, defaults)[1:-1] defval = itertools.count(len(argnames)-len(defaults)) args = formatargspec(argnames, varargs, kwargs, defaults, formatvalue=lambda value:"=%s" % ( argnames[defval.next()]))[1:-1] func_str = """ def %s(%s): return caller(func, %s) """ % (func.__name__, parameters, args) exec_dict = dict(func=func, caller=caller) exec func_str in exec_dict newfunc = exec_dict[func.__name__] newfunc.__doc__ = func.__doc__ newfunc.__dict__ = func.__dict__.copy() newfunc.__module__ = func.__module__ if hasattr(func, "__composition__"): newfunc.__composition__ = copy(func.__composition__) else: newfunc.__composition__ = [func] newfunc.__composition__.append(newfunc) return newfunc def decorator(entangler, signature=None): """Decorate function with entangler. Use signature as signature or preserve original signature if signature is None. Enables alternative decorator syntax for Python 2.3 as seen in PEAK: [my_decorator(foo)] def baz(): pass Mind, the decorator needs to be a closure for this syntax to work. """ def callback(frame, k, v, old_locals): return decorate(v, entangler(v), signature) return decorate_assignment(callback, 3) def weak_signature_decorator(entangler): """Decorate function with entangler and change signature to accept arbitrary additional arguments. Enables alternative decorator syntax for Python 2.3 as seen in PEAK: [my_decorator(foo)] def baz(): pass Mind, the decorator needs to be a closure for this syntax to work. """ def callback(frame, k, v, old_locals): return decorate(v, entangler(v), make_weak_signature(v)) return decorate_assignment(callback, 3) def simple_decorator(caller, signature=None): """Decorate function with caller.""" def entangle(func): return decorate(func, caller, signature) return entangle def simple_weak_signature_decorator(caller): """Decorate function with caller and change signature to accept arbitrary additional arguments.""" def entangle(func): return decorate(func, caller, make_weak_signature(func)) return entangle def make_weak_signature(func): """Change signature to accept arbitrary additional arguments.""" argnames, varargs, kwargs, defaults = getargspec(func) if kwargs is None: kwargs = "_decorator__kwargs" if varargs is None: varargs = "_decorator__varargs" return argnames, varargs, kwargs, defaults def compose(*decorators): """Compose decorators.""" return lambda func: reduce(lambda f, g: g(f), decorators, func) def func_composition(func): """Return composition (decorator wise) of function.""" return getattr(func, "__composition__", [func]) def func_original(func): """Return original (undecorated) function.""" return func_composition(func)[0] def func_id(func): """Return identity of function. Identity is invariant under decorator application (if decorator is created with decorator() or weak_signature_decorator()). """ return id(func_original(func)) def func_eq(f, g): """Check if functions are identical.""" return func_id(f) == func_id(g) __all__ = ["decorator", "compose", "func_id", "func_eq", "func_original", "func_composition", "weak_signature_decorator", "decorate", "make_weak_signature", "simple_decorator", "simple_weak_signature_decorator",] PKA>{Gturbogears/decorator.pyc; HIc @sdkZdklZdklZlZdklZedZedZ dZ edZ dZ d Z d Zd Zd Zd ZdZdddddddddddg ZdS(N(scopy(s getargspecs formatargspec(sdecorate_assignmentc sl|ej o|\} }}ne|\} }}|ejo f}ne| ||dd!}e i e e |e| ||dddd!}d|i||f} ed|d|} | | U| |i}|i|_|ii|_|i|_e|doe|i|_n |g|_|ii||Sd S( sDecorate func with caller.iis formatvaluecsdiS(Ns=%s(sargnamessdefvalsnext(svalue(sdefvalsargnames(s-build\bdist.win32\egg\turbogears\decorator.pysss' def %s(%s): return caller(func, %s) sfuncscallers__composition__N(s signaturesNonesargnamessvarargsskwargssdefaultss getargspecsfuncs formatargspecs parameterss itertoolsscountslensdefvalsargss__name__sfunc_strsdictscallers exec_dictsnewfuncs__doc__s__dict__scopys __module__shasattrs__composition__sappend( sfuncscallers signaturesargssdefaultss parametersskwargssargnamessnewfuncsdefvalsvarargssfunc_strs exec_dict((sargnamessdefvals-build\bdist.win32\egg\turbogears\decorator.pysdecorate s,       cs d}t|dSdS(sRDecorate function with entangler. Use signature as signature or preserve original signature if signature is None. Enables alternative decorator syntax for Python 2.3 as seen in PEAK: [my_decorator(foo)] def baz(): pass Mind, the decorator needs to be a closure for this syntax to work. cst||SdS(N(sdecoratesvs entanglers signature(sframesksvs old_locals(s entanglers signature(s-build\bdist.win32\egg\turbogears\decorator.pyscallback9siN(scallbacksdecorate_assignment(s entanglers signaturescallback((s entanglers signatures-build\bdist.win32\egg\turbogears\decorator.pys decorator+s csd}t|dSdS(s;Decorate function with entangler and change signature to accept arbitrary additional arguments. Enables alternative decorator syntax for Python 2.3 as seen in PEAK: [my_decorator(foo)] def baz(): pass Mind, the decorator needs to be a closure for this syntax to work. cs t||t|SdS(N(sdecoratesvs entanglersmake_weak_signature(sframesksvs old_locals(s entangler(s-build\bdist.win32\egg\turbogears\decorator.pyscallbackIsiN(scallbacksdecorate_assignment(s entanglerscallback((s entanglers-build\bdist.win32\egg\turbogears\decorator.pysweak_signature_decorator=s  csd}|SdS(sDecorate function with caller.cst|SdS(N(sdecoratesfuncscallers signature(sfunc(scallers signature(s-build\bdist.win32\egg\turbogears\decorator.pysentangleOsN(sentangle(scallers signaturesentangle((scallers signatures-build\bdist.win32\egg\turbogears\decorator.pyssimple_decoratorMscsd}|SdS(s`Decorate function with caller and change signature to accept arbitrary additional arguments.cst|t|SdS(N(sdecoratesfuncscallersmake_weak_signature(sfunc(scaller(s-build\bdist.win32\egg\turbogears\decorator.pysentangleVsN(sentangle(scallersentangle((scallers-build\bdist.win32\egg\turbogears\decorator.pyssimple_weak_signature_decoratorSs cCsZt|\}}}}|tjo d}n|tjo d}n||||fSdS(s:Change signature to accept arbitrary additional arguments.s_decorator__kwargss_decorator__varargsN(s getargspecsfuncsargnamessvarargsskwargssdefaultssNone(sfuncsvarargssargnamessdefaultsskwargs((s-build\bdist.win32\egg\turbogears\decorator.pysmake_weak_signatureZs    csdSdS(sCompose decorators.cstd|S(NcCs ||S(N(sgsf(sfsg((s-build\bdist.win32\egg\turbogears\decorator.pyses(sreduces decoratorssfunc(sfunc(s decorators(s-build\bdist.win32\egg\turbogears\decorator.pysesN((s decorators((s decoratorss-build\bdist.win32\egg\turbogears\decorator.pyscomposecscCst|d|gSdS(s0Return composition (decorator wise) of function.s__composition__N(sgetattrsfunc(sfunc((s-build\bdist.win32\egg\turbogears\decorator.pysfunc_compositiongscCst|dSdS(s'Return original (undecorated) function.iN(sfunc_compositionsfunc(sfunc((s-build\bdist.win32\egg\turbogears\decorator.pys func_originalkscCstt|SdS(sReturn identity of function. Identity is invariant under decorator application (if decorator is created with decorator() or weak_signature_decorator()). N(sids func_originalsfunc(sfunc((s-build\bdist.win32\egg\turbogears\decorator.pysfunc_idoscCst|t|jSdS(s!Check if functions are identical.N(sfunc_idsfsg(sfsg((s-build\bdist.win32\egg\turbogears\decorator.pysfunc_eqwss decoratorscomposesfunc_idsfunc_eqs func_originalsfunc_compositionsweak_signature_decoratorsdecoratesmake_weak_signaturessimple_decoratorssimple_weak_signature_decorator(s itertoolsscopysinspects getargspecs formatargspecspeak.util.decoratorssdecorate_assignmentsNonesdecorates decoratorsweak_signature_decoratorssimple_decoratorssimple_weak_signature_decoratorsmake_weak_signaturescomposesfunc_compositions func_originalsfunc_idsfunc_eqs__all__(ssimple_decoratorsweak_signature_decoratorscopys__all__smake_weak_signaturesfunc_compositions formatargspecssimple_weak_signature_decorators itertoolsscomposesdecoratesfunc_eqsdecorate_assignments getargspecs func_originals decoratorsfunc_id((s-build\bdist.win32\egg\turbogears\decorator.pys?s            PKK9J%--turbogears/docgen.pyimport os import time from glob import glob from setuptools import Command import pkg_resources pkg_resources.require("Kid >= 0.6.4") import kid import re from distutils import log class GenSite(Command): """setuptools command to generate the TurboGears website""" user_options = [ ("srcdirs=", "s", "directories containing the source files (default: docs)"), ("destdir=", "d", "destination output directory (default: dist/site)"), ("encoding=", "e", "encoding for output (default: utf8)"), ("force", "f", "regenerate all files"), ("ignoredirs=", "i", "directories to ignore (default: ['.svn', '.cvs'])"), ("ignorefiles=", "x", "files to ignore (default: ['.*\\.pyc', '.DS_Store'])"), ("nodelete=", "l", "directories to leave alone rather than delete"), ("templates=", "t", "mapping of templates to load (format: name=templatefile,name=templatefile)"), ("copydirs=", "c", "copy files from these directories without template proc. (destdir=srcdir,...)"), ("noprintable", "N", "don't make printable version of tutorials"), ("eggdir=", "g", "which directory has the eggs in it (default: '../thirdparty/eggs')") ] boolean_options = ["force"] srcdirs = None destdir = "dist/site" encoding = "utf8" force = False ignoredirs = None ignorefiles = None nodelete = None templates = None copydirs = None eggdir = "../thirdparty/eggs" noprintable = False def initialize_options(self): pass def finalize_options(self): if self.srcdirs is None: self.srcdirs = ["docs"] if self.srcdirs == "": self.srcdirs = [] self.ensure_string_list("srcdirs") self.ensure_string("destdir", "dist/site") self.ensure_string("encoding", "utf8") if self.ignoredirs is None: self.ignoredirs = [".svn", ".cvs"] self.ensure_string_list("ignoredirs") if self.ignorefiles is None: self.ignorefiles = ['.*\\.pyc', '.DS_Store'] if self.nodelete is None: self.nodelete = ["dist/site/preview"] self.ensure_string_list("nodelete") self.ensure_string_list("ignorefiles") regexes = [] for pat in self.ignorefiles: regexes.append(re.compile(pat)) self.ignorepatterns = regexes self.templates, self.templates_order = self._split_mapping(self.templates, True) self.copydirs = self._split_mapping(self.copydirs) def _split_mapping(self, valToSplit, preserve_order=False): mapping = {} order = [] if valToSplit and isinstance(valToSplit, basestring): pairs = re.split(",\s*", valToSplit) for pair in pairs: name, filename = re.split("\s*=\s*", pair) mapping[name] = os.path.abspath(filename) order.append(name) if preserve_order: return mapping, order return mapping def check_if_newer(self, src, dest): srcmtime = os.path.getmtime(src) if os.path.exists(dest): destmtime = os.path.getmtime(dest) else: destmtime = 0 return srcmtime > destmtime def copy_if_newer(self, src, dest): if self.force or self.check_if_newer(src, dest): d = os.path.dirname(dest) if not os.path.exists(d): os.makedirs(d) self.copy_file(src, dest) def render_template(self, src, dest, depth): if not self.force and not self.check_if_newer(src, dest): return if not self.dry_run: log.info("rendering %s" % dest) else: log.info("skipping rendering %s" % dest) return template = kid.load_template(src, cache=False) template.Template.serializer = self.serializer toroot = "../" * depth destfile = dest[len(self.destdir)+1:] updated = time.strftime("%b %d, %Y", time.localtime(os.path.getmtime(src))) output = template.serialize(encoding=self.encoding, root=toroot, updated=updated, destfile=destfile, eggs=self.eggs) output = output.replace("$$", "$") destfile = open(dest, "w") destfile.write(output) destfile.close() def update_site_files(self, srcdir, processTemplates = True, destroot=None): if not destroot: destroot = self.destdir for root, dirs, files in os.walk(srcdir): if root != srcdir: fromroot = root[len(srcdir)+1:] segments = fromroot.split(os.sep) if set(segments).intersection(self.ignoredirs): continue depth = len(segments) else: fromroot = "" depth = 0 destdir = os.path.join(destroot, fromroot) if not os.path.exists(destdir): if not self.dry_run: log.info("creating directory %s" % (destdir)) os.makedirs(destdir) else: log.info("skipping creating directory %s" % (destdir)) for file in files: ignore = False abs = os.path.abspath(file) for pat in self.ignorepatterns: if pat.match(file): ignore = True break if ignore: continue for tempfile in self.templates.values(): if tempfile == abs: ignore = True break if ignore: continue ext = os.path.splitext(file)[1] dest = os.path.join(destdir, file) self.currentfiles.add(dest) if not processTemplates or ext != ".html": self.copy_if_newer(os.path.join(root, file), dest) else: self.render_template(os.path.join(root, file), dest, depth) def delete_excess_files(self): for root, dirs, files in os.walk(self.destdir): leavealone = False for dirname in self.nodelete: if root.startswith(dirname): leavealone = True break if leavealone: continue for file in files: dest = os.path.join(root, file) if dest not in self.currentfiles: if not self.dry_run: log.info("deleting %s" % dest) os.unlink(dest) else: log.info("skipping deleting %s" % dest) def run(self): destdir = self.destdir log.info("generating website to %s" % destdir) if not os.path.exists(destdir): log.info("creating %s" % destdir) os.makedirs(destdir) for name in self.templates_order: filename = self.templates[name] log.info("template %s loaded as %s" % (filename, name)) kid.load_template(filename, name=name) if self.eggdir: if not self.eggdir.endswith("/"): self.eggdir += "/" choplen = len(self.eggdir) self.eggs = [fn[choplen:] for fn in glob(self.eggdir + "*")] self.eggs.sort() self.currentfiles = set() self.serializer = kid.HTMLSerializer(encoding=self.encoding) for d in self.srcdirs: self.update_site_files(d) for dest, src in self.copydirs.items(): if os.path.isdir(src): self.update_site_files(src, processTemplates=False, destroot=os.path.join(self.destdir, dest)) else: destfile = os.path.join(self.destdir, os.path.normpath(dest)) self.copy_if_newer(src, destfile) self.currentfiles.add(destfile) self.printable_tutorial() self.delete_excess_files() def printable_tutorial(self): if self.noprintable: return self._make_printable(os.path.join("docs", "tutorials", "wiki20"), 3) self._make_printable(os.path.join("docs", "wiki20")) def _make_printable(self, tutdir, up_to_root=2): endpath = tutdir tutdir = os.path.join(self.srcdirs[0], tutdir) try: from xml.etree import cElementTree as ElementTree except ImportError: # Py < 2.5 try: import cElementTree as ElementTree except ImportError: # no C implementation try: from xml.etree import ElementTree except ImportError: # Py < 2.5 try: from elementtree import ElementTree except ImportError: raise ImportError, "ElementTree not installed." masterdoc = """ TurboGears: 20 Minute Wiki Tutorial """ docs = os.listdir(tutdir) docs.sort() for doc in docs: if not doc.endswith(".html"): continue log.info("combining %s" % doc) tree = ElementTree.parse(os.path.join(tutdir, doc)) body = tree.find("{http://www.w3.org/1999/xhtml}body") map(body.remove, body.findall("{http://www.w3.org/1999/xhtml}script")) bodytext = ElementTree.tostring(body) bodytext = bodytext.replace("", "") bodytext = bodytext.replace('', "") masterdoc += bodytext masterdoc += """ """ masterdoc = masterdoc.replace("html:", "") template = kid.Template(source=masterdoc, root="../" * up_to_root) template.serializer = self.serializer destend = os.path.join(self.destdir, endpath) if not os.path.exists(destend): os.makedirs(destend) outfn = os.path.join(destend, "printable.html") print "combined output: %s" % outfn outfile = open(outfn, "w") masterdoc = template.serialize(encoding=self.encoding) masterdoc = masterdoc.replace("$${", "${") outfile.write(masterdoc) outfile.close() self.currentfiles.add(outfn) PKA>-W=4=4turbogears/docgen.pyc; HIc@s{dkZdkZdklZdklZdkZeiddkZdkZdk l Z defdYZ dS(N(sglob(sCommands Kid >= 0.6.4(slogsGenSitec BsRtZdZdddfdddfddd fd d d fd ddfdddfdddfdddfdddfdddfdd d!fg Zd gZeZd"Zd#Ze Z eZ eZ eZ eZeZd$Ze Zd%Zd&Ze d'Zd(Zd)Zd*Zeed+Zd,Zd-Zd.Zd/d0ZRS(1s5setuptools command to generate the TurboGears websitessrcdirs=sss7directories containing the source files (default: docs)sdestdir=sds1destination output directory (default: dist/site)s encoding=ses#encoding for output (default: utf8)sforcesfsregenerate all filess ignoredirs=sis1directories to ignore (default: ['.svn', '.cvs'])s ignorefiles=sxs3files to ignore (default: ['.*\.pyc', '.DS_Store'])s nodelete=sls-directories to leave alone rather than deletes templates=stsJmapping of templates to load (format: name=templatefile,name=templatefile)s copydirs=scsMcopy files from these directories without template proc. (destdir=srcdir,...)s noprintablesNs)don't make printable version of tutorialsseggdir=sgsBwhich directory has the eggs in it (default: '../thirdparty/eggs')s dist/sitesutf8s../thirdparty/eggscCsdS(N((sself((s*build\bdist.win32\egg\turbogears\docgen.pysinitialize_options+scCsj|itjodg|_n|idjo g|_n|id|idd|idd|itjodd g|_n|id |itjod d g|_n|itjod g|_n|id|idg}x'|iD]}|i t i |qW||_ |i|it\|_|_|i|i|_dS(Nsdocssssrcdirssdestdirs dist/sitesencodingsutf8s.svns.cvss ignoredirss.*\.pycs .DS_Storesdist/site/previewsnodeletes ignorefiles(sselfssrcdirssNonesensure_string_lists ensure_strings ignoredirss ignorefilessnodeletesregexesspatsappendsrescompilesignorepatternss_split_mappings templatessTruestemplates_orderscopydirs(sselfspatsregexes((s*build\bdist.win32\egg\turbogears\docgen.pysfinalize_options.s.       !c Csh}g}|o t|tobtid|}xM|D]A}tid|\}}t i i |||<|i|q<Wn|o||fSn|SdS(Ns,\s*s\s*=\s*(smappingsorders valToSplits isinstances basestringsressplitspairsspairsnamesfilenamesosspathsabspathsappendspreserve_order( sselfs valToSplitspreserve_ordersnamesmappingsfilenamespairspairssorder((s*build\bdist.win32\egg\turbogears\docgen.pys_split_mappingHscCsOtii|}tii|otii|}nd}||jSdS(Ni(sosspathsgetmtimessrcssrcmtimesexistssdests destmtime(sselfssrcsdestssrcmtimes destmtime((s*build\bdist.win32\egg\turbogears\docgen.pyscheck_if_newerUs cCsl|ip|i||oKtii|}tii | oti |n|i ||ndS(N( sselfsforcescheck_if_newerssrcsdestsosspathsdirnamesdsexistssmakedirss copy_file(sselfssrcsdestsd((s*build\bdist.win32\egg\turbogears\docgen.pys copy_if_newer]s c Cs4|i o|i|| odSn|i otid|ntid|dSti |dt }|i |i _ d|}|t|id}tidtitii|}|id|id|d |d |d |i}|id d }t|d}|i ||i!dS(Ns rendering %ssskipping rendering %sscaches../is %b %d, %Ysencodingsrootsupdatedsdestfileseggss$$s$sw("sselfsforcescheck_if_newerssrcsdestsdry_runslogsinfoskids load_templatesFalsestemplates serializersTemplatesdepthstorootslensdestdirsdestfilestimesstrftimes localtimesosspathsgetmtimesupdateds serializesencodingseggssoutputsreplacesopenswritesclose( sselfssrcsdestsdepthsupdatedsdestfilestemplatesoutputstoroot((s*build\bdist.win32\egg\turbogears\docgen.pysrender_templateds"  ' cCsQ| o |i}nx5ti|D]$\}} }||joV|t |d}|i ti }t|i|ioq%nt |}n d}d}tii||}tii| oB|i o"tid|ti|qtid|nx8|D]0}t}tii|} x,|iD]!}|i |o t!}Pq=q=W|oqnx/|i"i#D]} | | jo t!}PqqW|oqntii%|d} tii||} |i(i)| | p | djo#|i+tii||| q|i,tii||| |qWq%WdS(Nisiscreating directory %ssskipping creating directory %ss.html(-sdestrootsselfsdestdirsosswalkssrcdirsrootsdirssfilesslensfromrootssplitssepssegmentsssets intersections ignoredirssdepthspathsjoinsexistssdry_runslogsinfosmakedirssfilesFalsesignoresabspathsabssignorepatternsspatsmatchsTrues templatessvaluesstempfilessplitextsextsdests currentfilessaddsprocessTemplatess copy_if_newersrender_template(sselfssrcdirsprocessTemplatessdestrootsfilessdestdirsfromrootsfilespatstempfilesextsabssdirssdestsrootsignoresdepthssegments((s*build\bdist.win32\egg\turbogears\docgen.pysupdate_site_filesysX        cCsxti|iD]\}}}t}x,|i D]!}|i |o t }Pq2q2W|oqnxu|D]m}tii||}||ijoB|i o"tid|ti|qtid|qlqlWqWdS(Ns deleting %ssskipping deleting %s(sosswalksselfsdestdirsrootsdirssfilessFalses leavealonesnodeletesdirnames startswithsTruesfilespathsjoinsdests currentfilessdry_runslogsinfosunlink(sselfsdirssfilessdests leavealonesfilesdirnamesroot((s*build\bdist.win32\egg\turbogears\docgen.pysdelete_excess_filess$   c Cs*|i}tid|tii| o"tid|ti|nxH|iD]=} |i | }tid|| ft i |d| qZW|io|iid o|id7_nt|i}gi}t|idD]} || |q~|_|iint|_t id|i|_x|iD]}|i|qUWx|i i!D]\}}tii$|o/|i|dt%d tii&|i|q|tii&|itii'|}|i)|||ii*|q|W|i+|i,dS( Nsgenerating website to %ss creating %sstemplate %s loaded as %ssnames/s*sencodingsprocessTemplatessdestroot(-sselfsdestdirslogsinfososspathsexistssmakedirsstemplates_ordersnames templatessfilenameskids load_templateseggdirsendswithslenschoplensappends_[1]sglobsfnseggsssortssets currentfilessHTMLSerializersencodings serializerssrcdirssdsupdate_site_filesscopydirssitemssdestssrcsisdirsFalsesjoinsnormpathsdestfiles copy_if_newersaddsprintable_tutorialsdelete_excess_files( sselfssrcsdestsdestdirsfilenames_[1]sdsdestfileschoplensfnsname((s*build\bdist.win32\egg\turbogears\docgen.pysruns>    ;    $ cCsT|iodSn|itiidddd|itiidddS(Nsdocss tutorialsswiki20i(sselfs noprintables_make_printablesosspathsjoin(sself((s*build\bdist.win32\egg\turbogears\docgen.pysprintable_tutorials "icCs|} tii|id|}ydkl} Wnt j oy dk} Wqt j o^ydkl } Wqt j o7ydk l } Wqt j ot dqXqXqXnXd}ti |}|ix|D]} | id oqntid| | itii|| }|id}t|i|id | i|} | id d } | id d } || 7}qW|d 7}|idd }tid|dd|} |i"| _"tii|i#| }tii%| oti&|ntii|d}d|GHt(|d}| i*d|i+}|idd}|i,||i-|i.i/|dS(Ni(s cElementTree(s ElementTreesElementTree not installed.sz TurboGears: 20 Minute Wiki Tutorial s.htmls combining %ss"{http://www.w3.org/1999/xhtml}bodys${http://www.w3.org/1999/xhtml}scripts ss5s shtml:ssourcesroots../sprintable.htmlscombined output: %sswsencodings$${s${(0stutdirsendpathsosspathsjoinsselfssrcdirss xml.etrees cElementTrees ElementTrees ImportErrors elementtrees masterdocslistdirsdocsssortsdocsendswithslogsinfosparsestreesfindsbodysmapsremovesfindallstostringsbodytextsreplaceskidsTemplates up_to_rootstemplates serializersdestdirsdestendsexistssmakedirssoutfnsopensoutfiles serializesencodingswritescloses currentfilessadd(sselfstutdirs up_to_rootsbodys masterdocsdestendsdocsstreesoutfilesbodytextsendpathstemplatesdocs ElementTreesoutfn((s*build\bdist.win32\egg\turbogears\docgen.pys_make_printablesZ        (s__name__s __module__s__doc__s user_optionssboolean_optionssNonessrcdirssdestdirsencodingsFalsesforces ignoredirss ignorefilessnodeletes templatesscopydirsseggdirs noprintablesinitialize_optionssfinalize_optionss_split_mappingscheck_if_newers copy_if_newersrender_templatesTruesupdate_site_filessdelete_excess_filessrunsprintable_tutorials_make_printable(((s*build\bdist.win32\egg\turbogears\docgen.pysGenSite s2       0  % ( sosstimesglobs setuptoolssCommands pkg_resourcessrequireskidsres distutilsslogsGenSite( sGenSiteslogsglobs pkg_resourcessresCommandstimesosskid((s*build\bdist.win32\egg\turbogears\docgen.pys?s         PKK9turbogears/errorhandling.pyimport sys from itertools import izip, islice from inspect import getargspec import cherrypy from dispatch import generic, NoApplicableMethods, strategy from turbogears.util import inject_args, adapt_call, call_on_stack, has_arg, \ remove_keys, Enum, combine_contexts from turbogears.decorator import func_eq from turbogears.genericfunctions import MultiorderGenericFunction default = strategy.default [generic(MultiorderGenericFunction)] def dispatch_error(controller, tg_source, tg_errors, tg_exceptions, *args, **kw): """Dispatch error. Error handler is a function registered via register_handler or if no such decorator was applied, the method triggering the error. """ [dispatch_error.when( "(tg_errors and has_arg(tg_source, 'tg_errors'))", order=3)] def _register_implicit_errh(controller, tg_source, tg_errors, tg_exceptions, *args, **kw): """Register implicitly declared error handler and re-dispatch. Any method declaring tg_errors parameter is considered an implicitly declared error handler. """ error_handler(tg_source)(tg_source) return dispatch_error(controller, tg_source, tg_errors, tg_exceptions, *args, **kw) [dispatch_error.when( "(tg_exceptions and has_arg(tg_source, 'tg_exceptions'))", order=3)] def _register_implicit_exch(controller, tg_source, tg_errors, tg_exceptions, *args, **kw): """Register implicitly declared exception handler and re-dispatch. Any method declaring tg_exceptions parameter is considered an implicitly declared exception handler. """ exception_handler(tg_source)(tg_source) return dispatch_error(controller, tg_source, tg_errors, tg_exceptions, *args, **kw) def dispatch_error_adaptor(func): """Construct a signature isomorphic to dispatch_error. The actual handler will receive only arguments explicitly declared, and a possible tg_format parameter. """ def adaptor(controller, tg_source, tg_errors, tg_exceptions, *args, **kw): tg_format = kw.pop('tg_format', None) args, kw = inject_args(func, {"tg_source":tg_source, "tg_errors":tg_errors, "tg_exceptions":tg_exceptions}, args, kw, 1) args, kw = adapt_call(func, args, kw, 1) if tg_format is not None: kw['tg_format'] = tg_format return func(controller, *args, **kw) return adaptor def try_call(func, self, *args, **kw): """Call function, catch and dispatch any resulting exception.""" # turbogears.database import here to avoid circular imports from turbogears.database import restart_transaction try: return func(self, *args, **kw) except Exception, e: if isinstance(e, cherrypy.HTTPRedirect) or \ call_on_stack("dispatch_error", {"tg_source":func, "tg_exception":e}, 4): raise else: exc_type, exc_value, exc_trace = sys.exc_info() remove_keys(kw, ("tg_source", "tg_errors", "tg_exceptions")) if 'tg_format' in cherrypy.request.params: kw['tg_format'] = 'json' if getattr(cherrypy.request, "in_transaction", None): restart_transaction(1) try: output = dispatch_error(self, func, None, e, *args, **kw) except NoApplicableMethods: raise exc_type, exc_value, exc_trace else: del exc_trace return output def run_with_errors(errors, func, self, *args, **kw): """Branch execution depending on presence of errors.""" if errors: if hasattr(self, "validation_error"): import warnings warnings.warn( "Use decorator error_handler() on per-method base " "rather than defining a validation_error() method.", DeprecationWarning, 2) return self.validation_error(func.__name__, kw, errors) else: remove_keys(kw, ("tg_source", "tg_errors", "tg_exceptions")) if 'tg_format' in cherrypy.request.params: kw['tg_format'] = 'json' try: return dispatch_error(self, func, errors, None, *args, **kw) except NoApplicableMethods: raise NotImplementedError("Method %s.%s() has no applicable " "error handler." % (self.__class__.__name__, func.__name__)) else: return func(self, *args, **kw) def register_handler(handler=None, rules=None): """Register handler as an error handler for decorated method. If handler is not given, method is considered it's own error handler. rules can be a string containing an arbitrary logical Python expression to be used as dispatch rule allowing multiple error handlers for a single method. register_handler decorator is an invariant. """ def register(func): when = "func_eq(tg_source, func)" if rules: when += " and (%s)" % rules dispatch_error.when(dispatch_error.parse(when, *combine_contexts( depth=[0, 1])), order=1)(dispatch_error_adaptor(handler or func)) return func return register def bind_rules(pre_rules): """Prepend rules to error handler specialisation.""" def registrant(handler=None, rules=None): when = pre_rules if rules: when += " and (%s)" % rules return register_handler(handler, when) return registrant error_handler = bind_rules("tg_errors") exception_handler = bind_rules("tg_exceptions") FailsafeSchema = Enum("none", "values", "map_errors", "defaults") [generic()] def dispatch_failsafe(schema, values, errors, source, kw): """Dispatch fail-safe mechanism for failed inputs.""" [dispatch_failsafe.when(strategy.default)] def _failsafe_none(schema, values, errors, source, kw): """No fail-safe values.""" return kw [dispatch_failsafe.when( "schema is FailsafeSchema.values and isinstance(values, dict) and " "isinstance(errors, dict)")] def _failsafe_values_dict(schema, values, errors, source, kw): """Map erroneous inputs to values.""" for key in errors: if key in values: kw[key] = values[key] return kw [dispatch_failsafe.when( "schema is FailsafeSchema.values and isinstance(errors, dict)")] def _failsafe_values_atom(schema, values, errors, source, kw): """Map all erroneous inputs to a single value.""" for key in errors: kw[key] = values return kw [dispatch_failsafe.when( "schema is FailsafeSchema.map_errors and isinstance(errors, dict)")] def _failsafe_map_errors(schema, values, errors, source, kw): """Map erroneous inputs to corresponding exceptions.""" kw.update(errors) return kw [dispatch_failsafe.when( "schema is FailsafeSchema.defaults and isinstance(errors, dict)")] def _failsafe_defaults(schema, values, errors, source, kw): """Map erroneous inputs to method defaults.""" argnames, defaultvals = getargspec(source)[::3] defaults = dict(izip(islice(argnames, len(argnames) - len(defaultvals), None), defaultvals)) for key in errors: if key in defaults: kw[key] = defaults[key] return kw __all__ = ["dispatch_error", "dispatch_error_adaptor", "try_call", "run_with_errors", "default", "register_handler", "FailsafeSchema", "dispatch_failsafe", "error_handler", "exception_handler"] PKA> 7b,,turbogears/errorhandling.pyc; HIc @sdkZdklZlZdklZdkZdklZl Z l Z dk l Z l Z lZlZlZlZlZdklZdklZe iZeegdZeidd d gd Zeid d d gd ZdZdZdZeedZ dZ!e!dZ"e!dZ#eddddZ$egdZ%e%ie igdZ&e%idgdZ'e%idgdZ(e%idgd Z)e%id!gd"Z*d#d$d%d&d'd(d)d*d+d,g Z+dS(-N(sizipsislice(s getargspec(sgenericsNoApplicableMethodssstrategy(s inject_argss adapt_calls call_on_stackshas_args remove_keyssEnumscombine_contexts(sfunc_eq(sMultiorderGenericFunctioncOsdS(sDispatch error. Error handler is a function registered via register_handler or if no such decorator was applied, the method triggering the error. N((s controllers tg_sources tg_errorss tg_exceptionssargsskw((s1build\bdist.win32\egg\turbogears\errorhandling.pysdispatch_errorss/(tg_errors and has_arg(tg_source, 'tg_errors'))sordericOs-t||t||||||SdS(sRegister implicitly declared error handler and re-dispatch. Any method declaring tg_errors parameter is considered an implicitly declared error handler. N(s error_handlers tg_sourcesdispatch_errors controllers tg_errorss tg_exceptionssargsskw(s controllers tg_sources tg_errorss tg_exceptionssargsskw((s1build\bdist.win32\egg\turbogears\errorhandling.pys_register_implicit_errhss7(tg_exceptions and has_arg(tg_source, 'tg_exceptions'))cOs-t||t||||||SdS(sRegister implicitly declared exception handler and re-dispatch. Any method declaring tg_exceptions parameter is considered an implicitly declared exception handler. N(sexception_handlers tg_sourcesdispatch_errors controllers tg_errorss tg_exceptionssargsskw(s controllers tg_sources tg_errorss tg_exceptionssargsskw((s1build\bdist.win32\egg\turbogears\errorhandling.pys_register_implicit_exch)scsd}|SdS(sConstruct a signature isomorphic to dispatch_error. The actual handler will receive only arguments explicitly declared, and a possible tg_format parameter. cs|idt}thd|<d|<d|<||d\}}t ||d\}}|tj o||dschema is FailsafeSchema.defaults and isinstance(errors, dict)c Cst|ddd\}}ttt|t|t|t|}x-|D]%}||jo||||> sys.stderr, ( "Directory %s ignored by pattern %s" % (fn, pattern)) break if bad_name: continue if os.path.isfile(os.path.join(fn, '__init__.py')): if not package: new_package = name else: new_package = package + '.' + name stack.append((fn, '', new_package, False)) else: stack.append((fn, prefix + name + '/', package, only_in_packages)) elif package or not only_in_packages: # is a file bad_name = False for pattern in exclude: if (fnmatchcase(name, pattern) or fn.lower() == pattern.lower()): bad_name = True if show_ignored: print >> sys.stderr, ( "File %s ignored by pattern %s" % (fn, pattern)) break if bad_name: continue out.setdefault(package, []).append(prefix+name) return out if __name__ == '__main__': import pprint pprint.pprint( find_package_data(show_ignored=True)) PKA>~ȥY Y turbogears/finddata.pyc; HIc@sdkZdkZdklZdklZddddddfZdd d d d d dfZddeeee dZ e djo#dk Z e i e dendS(N(s fnmatchcase(s convert_paths*.pys*.pycs*~s.*s*.baks*.swp*sCVSs_darcss./builds./distsEGG-INFOs *.egg-infos.sc Cs?h} t|d||fg} x| o | id\}} }}xti |D]}ti i ||} ti i| ot}xd|D]\} t|| p| i| ijo-t}|otid| | fIJnPqqW|oqVnti iti i | do=| o |}n|d|}| i| d|tfq.| i| | |d||fqV|p| ot}xd|D]\} t|| p| i| ijo-t}|otid| | fIJnPqqW|oqVn| i|gi| |qVqVWq$W| SdS( sj Return a dictionary suitable for use in ``package_data`` in a distutils ``setup.py`` file. The dictionary looks like:: {'package': [files]} Where ``files`` is a list of all the files in that package that don't match anything in ``exclude``. If ``only_in_packages`` is true, then top-level directories that are not packages won't be included (but directories under packages will). Directories matching any pattern in ``exclude_directories`` will be ignored; by default directories with leading ``.``, ``CVS``, and ``_darcs`` will be ignored. If ``show_ignored`` is true, then all the files that aren't included in package data are shown on stderr (for debugging purposes). Note patterns use wildcards, or can be exact paths (including leading ``./``), and all searching is case-insensitive. sis"Directory %s ignored by pattern %ss __init__.pys.s/sFile %s ignored by pattern %sN(souts convert_pathswherespackagesonly_in_packagessstackspopsprefixsosslistdirsnamespathsjoinsfnsisdirsFalsesbad_namesexclude_directoriesspatterns fnmatchcaseslowersTrues show_ignoredssyssstderrsisfiles new_packagesappendsexcludes setdefault(swherespackagesexcludesexclude_directoriessonly_in_packagess show_ignoredsnames new_packagesbad_namesprefixspatternsstacksfnsout((s,build\bdist.win32\egg\turbogears\finddata.pysfind_package_datasN) " %) *s__main__s show_ignored( sosssyssfnmatchs fnmatchcasesdistutils.utils convert_pathsstandard_excludesstandard_exclude_directoriessTruesFalsesfind_package_datas__name__spprint(s convert_paths fnmatchcasespprintssyssstandard_exclude_directoriessstandard_excludesfind_package_datasos((s,build\bdist.win32\egg\turbogears\finddata.pys?s    M  PKK9}D turbogears/genericfunctions.pyimport sys from itertools import izip, repeat, chain as ichain from dispatch import strategy, functions class MultiorderGenericFunction(functions.GenericFunction): """Generic function allowing a priori method ordering.""" def __init__(self, func): functions.GenericFunction.__init__(self, func) self.order_when = [] self.order_around = [] def when(self, cond, order=0): if order not in self.order_when: self.order_when.append(order) self.order_when.sort() return self._decorate(cond, "primary%d" % order) def around(self, cond, order=0): if order not in self.order_around: self.order_around.append(order) self.order_around.sort() return self._decorate(cond, "around%d" % order) # Based on dispatch.functions.GenericFunction.combine def combine(self, cases): strict = [strategy.ordered_signatures,strategy.safe_methods] loose = [strategy.ordered_signatures,strategy.all_methods] primary_names = ['primary%d' % order for order in self.order_when] around_names = ['around%d' % order for order in self.order_around] cases = strategy.separate_qualifiers( cases, before = loose, after =loose, **dict(izip(ichain(primary_names, around_names), repeat(strict))) ) primary = strategy.method_chain(ichain( *[cases.get(primary, []) for primary in primary_names])) if cases.get('after') or cases.get('before'): befores = strategy.method_list(cases.get('before',[])) afters = strategy.method_list(list(cases.get('after',[]))[::-1]) def chain(*args,**kw): for tmp in befores(*args,**kw): pass # toss return values result = primary(*args,**kw) for tmp in afters(*args,**kw): pass # toss return values return result else: chain = primary if (self.order_around): chain = strategy.method_chain(ichain(*([cases.get(around, []) for around in around_names] + [[chain]]))) return chain def getter(var): """Create an accessor for given variable.""" frame = sys._getframe(1) return lambda: var in frame.f_locals and frame.f_locals[var] or \ frame.f_globals[var] __all__ = ["MultiorderGenericFunction", "getter", ] PKA>iturbogears/genericfunctions.pyc; HIc@sgdkZdklZlZlZdklZlZdei fdYZ dZ ddgZ dS(N(sizipsrepeatschain(sstrategys functionssMultiorderGenericFunctioncBs8tZdZdZddZddZdZRS(s3Generic function allowing a priori method ordering.cCs)tii||g|_g|_dS(N(s functionssGenericFunctions__init__sselfsfuncs order_whens order_around(sselfsfunc((s4build\bdist.win32\egg\turbogears\genericfunctions.pys__init__ s icCsI||ijo!|ii||iin|i|d|SdS(Ns primary%d(sordersselfs order_whensappendssorts _decoratescond(sselfscondsorder((s4build\bdist.win32\egg\turbogears\genericfunctions.pyswhenscCsI||ijo!|ii||iin|i|d|SdS(Nsaround%d(sordersselfs order_aroundsappendssorts _decoratescond(sselfscondsorder((s4build\bdist.win32\egg\turbogears\genericfunctions.pysaroundsc stitig}titig}gi}|i D]} |d| q5~} gi}|i D]} |d| qc~}ti|d|d|ttt| |t|}titgi}| D]||igq~|idp |ido_ti|idgtit|idgdddd}n}|i oPtitgi}|D]}||i|gq~|gg}n|SdS(Ns primary%dsaround%dsbeforesaftericsKx||D]}qW||}x||D]}q9W|SdS(N(sbeforessargsskwstmpsprimarysresultsafters(sargsskwstmpsresult(sprimarysafterssbefores(s4build\bdist.win32\egg\turbogears\genericfunctions.pyschain2s(sstrategysordered_signaturess safe_methodssstricts all_methodssloosesappends_[1]sselfs order_whensorders primary_namess order_arounds around_namessseparate_qualifiersscasessdictsizipsichainsrepeats method_chainsprimarysgets method_listsbeforesslistsaftersschainsaround( sselfscasess around_namesschainsloosesprimarysarounds_[1]sstricts primary_namessafterssordersbefores((sprimarysafterssbeforess4build\bdist.win32\egg\turbogears\genericfunctions.pyscombines.. 3B . P(s__name__s __module__s__doc__s__init__swhensaroundscombine(((s4build\bdist.win32\egg\turbogears\genericfunctions.pysMultiorderGenericFunctions    cs tiddSdS(s&Create an accessor for given variable.ics)ijo ip iS(N(svarsframesf_localss f_globals((svarsframe(s4build\bdist.win32\egg\turbogears\genericfunctions.pysEsN(ssyss _getframesframe(svarsframe((svarsframes4build\bdist.win32\egg\turbogears\genericfunctions.pysgetterBssgetter( ssyss itertoolssizipsrepeatschainsichainsdispatchsstrategys functionssGenericFunctionsMultiorderGenericFunctionsgetters__all__( s functionssrepeats__all__sizipsstrategyssyssgettersichainsMultiorderGenericFunction((s4build\bdist.win32\egg\turbogears\genericfunctions.pys?s ; PKK9UUturbogears/paginate.py import types from math import ceil import logging import warnings try: set except NameError: # Python 2.3 from sets import Set as set import cherrypy try: import sqlobject except ImportError: sqlobject = None try: import sqlalchemy except ImportError: sqlalchemy = None import turbogears from turbogears.controllers import redirect from turbogears.decorator import weak_signature_decorator from turbogears.view import variable_providers from formencode.variabledecode import variable_encode from turbogears.widgets import PaginateDataGrid from turbogears.util import add_tg_args log = logging.getLogger("turbogears.paginate") # lists of databases that lack support for OFFSET # this will need to be updated periodically as modules change _so_no_offset = 'mssql maxdb sybase'.split() _sa_no_offset = 'mssql maxdb access'.split() # this is a global that is set the first time paginate() is called _simulate_offset = None # these are helper classes for getting data that has no table column class attrwrapper: """Helper class for accessing objec attributes.""" def __init__(self, name): self.name = name def __call__(self, obj): for name in self.name.split('.'): obj = getattr(obj, name) return obj class itemwrapper: """Helper class for dicitionary access.""" def __init__(self, name): self.name = name def __call__(self, obj): return obj[self.name] def paginate(var_name, default_order='', default_reversed=None, limit=10, max_limit=0, allow_limit_override=None, max_pages=5, max_sort=1000, dynamic_limit=None): """The famous TurboGears paginate decorator. @param var_name: The variable name that the paginate decorator will try to control. This key must be present in the dictionnary returned from your controller in order for the paginate decorator to be able to handle it. @type var_name: string @param default_order: The column name(s) that will be used to orde pagination results. Due to the way pagination is implemented specifying a default_order will override any result ordering performed in the controller. @type default_order: string or a list of strings. Any string starting with "-" (minus sign) indicates a reverse order for that field/column. @param default_reversed: Deprecated, use default_order with minus sign. @type default_reversed: Boolean @param limit: The hard-coded limit that the paginate decorator will impose on the number of "var_name" to display at the same time. This value can be overridden by the use of the dynamic_limit keyword argument. @type limit: integer @param max_limit: The maximum number to which the imposed limit can be increased using the dynamic_limit keyword argument in the URL. If this is set to 0, no dynamic change at all will be allowed; if it is set to None, any change will be allowed. @type max_limit: int @param allow_limit_override: Deprecated, use max_limit. @type allow_limit_override: Boolean @param max_pages: Used to generate the tg.paginate.pages variable. If the page count is larger than max_pages, tg.paginate.pages will only contain the page numbers surrounding the current page at a distance of max_pages/2. A zero value means that all pages will be shown, no matter how much. @type max_pages: integer @param max_sort: The maximum number of records that will be sorted in memory if the data cannot be sorted using SQL. If set to 0, sorting in memory will never be performed; if set to None, no limit will be imposed. @type max_sort: integer @param dynamic_limit: If specified, this parameter must be the name of a key present in the dictionary returned by your decorated controller. The value found for this key will be used as the limit for our pagination and will override the other settings, the hard-coded one declared in the decorator itself AND the URL parameter one. This enables the programmer to store a limit settings inside the application preferences and then let the user manage it. @type dynamic_limit: string """ def entangle(func): get = turbogears.config.get def decorated(func, *args, **kw): def kwpop(name, default=None): return kw.pop(var_name + '_tgp_' + name, kw.pop('tg_paginate_' + name, default)) if default_reversed is not None: warnings.warn("default_reversed is deprecated." " Use default_order='-field' to indicate" " default reversed order, or" " default_order=['field1', '-field2, 'field3']" " for multiple fields.", DeprecationWarning, 2) if allow_limit_override is not None: warnings.warn("allow_limit_override is deprecated." " Use max_limit to specify an upper bound for limit.", DeprecationWarning, 2) page = kwpop('no') if page is None: page = 1 elif page == 'last': page = None else: try: page = int(page) if page < 1: raise ValueError except (TypeError, ValueError): page = 1 if get('paginate.redirect_on_out_of_range'): cherrypy.request.params[var_name + '_tgp_no'] = page redirect(cherrypy.request.path_info, cherrypy.request.params) try: limit_ = int(kwpop('limit')) if max_limit is not None: if max_limit <= 0 and not allow_limit_override: raise ValueError limit_ = min(limit_, max_limit) except (TypeError, ValueError): limit_ = limit order = kwpop('order') ordering = kwpop('ordering') log.debug("paginate params: page=%s, limit=%s, order=%s", page, limit_, order) # get the output from the decorated function output = func(*args, **kw) if not isinstance(output, dict): return output try: var_data = output[var_name] except KeyError: raise KeyError("paginate: var_name" " (%s) not found in output dict" % var_name) if not hasattr(var_data, '__getitem__') and callable(var_data): # e.g. SQLAlchemy query class var_data = var_data() if not hasattr(var_data, '__getitem__'): raise TypeError('Paginate variable is not a sequence') if dynamic_limit: try: dyn_limit = output[dynamic_limit] except KeyError: raise KeyError("paginate: dynamic_limit" " (%s) not found in output dict" % dynamic_limit) limit_ = dyn_limit if ordering: ordering = str(ordering).split(',') else: ordering = default_order or [] if isinstance(ordering, basestring): # adapt old style default_order to new style if default_reversed: ordering = "-" + ordering ordering = [ordering] elif default_reversed: raise ValueError("paginate: default_reversed (deprecated)" " only allowed when default_order is a basestring") if order: order = str(order) log.debug('paginate: ordering was %s, sort is %s', ordering, order) sort_ordering(ordering, order) log.debug('paginate: ordering is %s', ordering) try: row_count = len(var_data) except TypeError: try: # SQL query row_count = var_data.count() or 0 except AttributeError: # other iterator var_data = list(var_data) row_count = len(var_data) if ordering: var_data = sort_data(var_data, ordering, max_sort is None or 0 < row_count <= max_sort) # If limit is zero then return all our rows if not limit_: limit_ = row_count or 1 page_count = int(ceil(float(row_count)/limit_)) if page is None: page = max(page_count, 1) if get('paginate.redirect_on_last_page'): cherrypy.request.params[var_name + '_tgp_no'] = page redirect(cherrypy.request.path_info, cherrypy.request.params) elif page > page_count: page = max(page_count, 1) if get('paginate.redirect_on_out_of_range'): cherrypy.request.params[var_name + '_tgp_no'] = page redirect(cherrypy.request.path_info, cherrypy.request.params) offset = (page-1) * limit_ pages_to_show = _select_pages_to_show(page, page_count, max_pages) # remove pagination parameters from request input_values = variable_encode(cherrypy.request.params.copy()) input_values.pop('self', None) for input_key in input_values.keys(): if (input_key.startswith(var_name + '_tgp_') or input_key.startswith('tg_paginate_')): del input_values[input_key] paginate_instance = Paginate( current_page=page, limit=limit_, pages=pages_to_show, page_count=page_count, input_values=input_values, order=order, ordering=ordering, row_count=row_count, var_name=var_name) cherrypy.request.paginate = paginate_instance if not hasattr(cherrypy.request, 'paginates'): cherrypy.request.paginates = dict() cherrypy.request.paginates[var_name] = paginate_instance # we replace the var with the sliced one endpoint = offset + limit_ log.debug("paginate: slicing data between %d and %d", offset, endpoint) global _simulate_offset if _simulate_offset is None: _simulate_offset = get('paginate.simulate_offset', None) if _simulate_offset is None: _simulate_offset = False so_db = get('sqlobject.dburi', 'NOMATCH:').split(':', 1)[0] sa_db = get('sqlalchemy.dburi', 'NOMATCH:').split(':', 1)[0] if so_db in _so_no_offset or sa_db in _sa_no_offset: _simulate_offset = True log.warning("paginate: simulating OFFSET," " paginate may be slow" " (disable with paginate.simulate_offset=False)") if _simulate_offset: var_data = iter(var_data[:endpoint]) # skip over the number of records specified by offset for i in xrange(offset): var_data.next() # return the records that remain output[var_name] = list(var_data) else: try: output[var_name] = var_data[offset:endpoint] except TypeError: for i in xrange(offset): var_data.next() output[var_name] = [var_data.next() for i in xrange(offset, endpoint)] return output if not get('tg.strict_parameters', False): # add hint that paginate parameters shall be left intact args = set() for arg in 'no', 'limit', 'order', 'ordering': args.add(var_name + '_tgp_' + arg) args.add('tg_paginate_' + arg) add_tg_args(func, args) return decorated return weak_signature_decorator(entangle) def _paginate_var_provider(d): """Auxiliary function for providing the paginate variable.""" paginate = getattr(cherrypy.request, 'paginate', None) if paginate: d.update(dict(paginate=paginate)) paginates = getattr(cherrypy.request, 'paginates', None) if paginates: d.update(dict(paginates=paginates)) variable_providers.append(_paginate_var_provider) class Paginate: """Class for paginate variable provider.""" def __init__(self, current_page, pages, page_count, input_values, limit, order, ordering, row_count, var_name): self.var_name = var_name self.pages = pages self.limit = limit self.page_count = page_count self.current_page = current_page self.input_values = input_values self.order = order self.ordering = ordering self.row_count = row_count self.first_item = page_count and ((current_page - 1) * limit + 1) or 0 self.last_item = min(current_page * limit, row_count) self.reversed = ordering and ordering[0][0] == '-' # If ordering is empty, don't add it. input_values = {var_name + '_tgp_limit': limit} if ordering: input_values[var_name + '_tgp_ordering'] = ','.join(ordering) self.input_values.update(input_values) if current_page < page_count: self.input_values.update({ var_name + '_tgp_no': current_page + 1, var_name + '_tgp_limit': limit }) self.href_next = turbogears.url( cherrypy.request.path_info, self.input_values) self.input_values.update({ var_name + '_tgp_no': 'last', var_name + '_tgp_limit': limit }) self.href_last = turbogears.url( cherrypy.request.path_info, self.input_values) else: self.href_next = None self.href_last = None if current_page > 1: self.input_values.update({ var_name + '_tgp_no': current_page - 1, var_name + '_tgp_limit': limit }) self.href_prev = turbogears.url( cherrypy.request.path_info, self.input_values) self.input_values.update({ var_name + '_tgp_no': 1, var_name + '_tgp_limit': limit }) self.href_first = turbogears.url( cherrypy.request.path_info, self.input_values) else: self.href_prev = None self.href_first = None def get_href(self, page, order=None, reverse_order=None): # Note that reverse_order is not used. It should be cleaned up here # and in the template. I'm not removing it now because I don't want # to break the API. order = order or None input_values = self.input_values.copy() input_values[self.var_name + '_tgp_no'] = page if order: input_values[ self.var_name + '_tgp_order'] = order return turbogears.url('', input_values) def _select_pages_to_show(current_page, page_count, max_pages=None): """Auxiliary function for getting the range of pages to show.""" if max_pages is not None and max_pages > 0: start = current_page - (max_pages // 2) - (max_pages % 2) + 1 end = start + max_pages - 1 if start < 1: start, end = 1, min(page_count, max_pages) elif end > page_count: start, end = max(1, page_count - max_pages + 1), page_count else: start, end = 1, page_count return xrange(start, end + 1) # Auxiliary functions for dealing with columns and SQL def sort_ordering(ordering, sort_name): """Rearrange ordering based on sort_name.""" try: index = ordering.index(sort_name) except ValueError: try: index = ordering.index('-' + sort_name) except ValueError: ordering.insert(0, sort_name) else: del ordering[index] ordering.insert(0, (index and '-' or '') + sort_name) else: del ordering[index] ordering.insert(0, (not index and '-' or '') + sort_name) def sqlalchemy_get_column(colname, var_data): """Return a column from sqlalchemy var_data based on colname.""" try: mapper = var_data.mapper except AttributeError: try: mapper = var_data._mapper_zero() except AttributeError: mapper = var_data._query.mapper propnames = colname.split('.') colname = propnames.pop()[len(mapper.column_prefix or ''):] for propname in propnames: prop = mapper.get_property( propname, resolve_synonyms=True, raiseerr=False) if not prop: break mapper = prop.mapper return getattr(mapper.c, colname, None) def sqlobject_get_column(colname, var_data): """Return a column from sqlobject var_data based on colname.""" return getattr(var_data.sourceClass.q, colname, None) def sql_get_column(colname, var_data): """Return a column from var_data based on colname.""" if sqlalchemy: try: return sqlalchemy_get_column(colname, var_data) except AttributeError: pass if sqlobject: try: return sqlobject_get_column(colname, var_data) except AttributeError: pass raise TypeError('Cannot find columns of paginate variable') def sqlalchemy_order_col(col, descending=False): """Return an sqlalchemy ordered column for col.""" if descending: return sqlalchemy.sql.desc(col) else: return sqlalchemy.sql.asc(col) def sqlobject_order_col(col, descending=False): """Return an sqlobject ordered column for col.""" if descending: return sqlobject.DESC(col) else: return col def sql_order_col(col, ascending=True): """Return an ordered column for col.""" if sqlalchemy and isinstance(col, sqlalchemy.sql.ColumnElement): return sqlalchemy_order_col(col, ascending) elif sqlobject and isinstance(col, types.InstanceType): # Sadly, there is no better way to check for sqlobject col type return sqlobject_order_col(col, ascending) raise TypeError("Expected Column, but got %s" % type(col)) def sort_data(data, ordering, in_memory=True): """Sort data based on ordering. Tries to sort the data using SQL whenever possible, otherwise sorts the data as list in memory unless in_memory is false. """ try: order_by = data.order_by # SQLAlchemy get_column, order_col = sqlalchemy_get_column, sqlalchemy_order_col except AttributeError: try: order_by = data.orderBy # SQLObject get_column, order_col = sqlobject_get_column, sqlobject_order_col except AttributeError: order_by = None order_cols = [] key_cols = [] num_ascending = num_descending = 0 for order in ordering: if order[0] == '-': order = order[1:] descending = True else: descending = False if order_by: col = get_column(order, data) if col: order_cols.append(order_col(col, descending)) continue if not order_cols: key_cols.append((order, descending)) if descending: num_descending += 1 else: num_ascending += 1 if order_by and order_cols: data = order_by(order_cols) if key_cols: if in_memory: data = list(data) if not data: return data wrapper = isinstance(data[0], dict) and itemwrapper or attrwrapper keys = [(wrapper(col[0]), col[1]) for col in key_cols] if num_ascending == 0 or num_descending == 0: reverse = num_ascending == 0 keys = [key[0] for key in keys] if len(key_cols) == 1: key = keys[0] else: key = lambda row: [key(row) for key in keys] else: reverse = num_descending > num_ascending def reverse_key(key, descending): if reverse == descending: return key else: keys = map(key, data) try: keys = list(set(keys)) except TypeError: # unhashable keys.sort() return lambda row: -keys.index(key(row)) else: keys.sort() keys = dict([(k, -n) for n, k in enumerate(keys)]) return lambda row: keys[key(row)] keys = [reverse_key(*key) for key in keys] key = lambda row: [key(row) for key in keys] try: data.sort(key=key, reverse=reverse) except TypeError: # Python 2.3 if reverse: cmpkey = lambda row1, row2: cmp(key(row2), key(row1)) else: cmpkey = lambda row1, row2: cmp(key(row1), key(row2)) data.sort(cmpkey) else: log.debug("paginate: sorting in memory not allowed") return data PKA>%YYturbogears/paginate.pyc; HIc @sdkZdklZdkZdkZyeWn ej odklZnXdk Z y dk Z Wne j o e Z nXy dk Z Wne j o e Z nXdkZdklZdklZdklZdklZdklZdklZeid Zd iZd iZe a d fd YZ!dfdYZ"de dde dde dZ#dZ$ei%e$dfdYZ&e dZ'dZ(dZ)dZ*dZ+e,dZ-e,dZ.e/d Z0e/d!Z1dS("N(sceil(sSet(sredirect(sweak_signature_decorator(svariable_providers(svariable_encode(sPaginateDataGrid(s add_tg_argssturbogears.paginatesmssql maxdb sybasesmssql maxdb accesss attrwrappercBs tZdZdZdZRS(s,Helper class for accessing objec attributes.cCs ||_dS(N(snamesself(sselfsname((s,build\bdist.win32\egg\turbogears\paginate.pys__init__-scCs4x)|iidD]}t||}qW|SdS(Ns.(sselfsnamessplitsgetattrsobj(sselfsobjsname((s,build\bdist.win32\egg\turbogears\paginate.pys__call__/s(s__name__s __module__s__doc__s__init__s__call__(((s,build\bdist.win32\egg\turbogears\paginate.pys attrwrapper+s  s itemwrappercBs tZdZdZdZRS(s$Helper class for dicitionary access.cCs ||_dS(N(snamesself(sselfsname((s,build\bdist.win32\egg\turbogears\paginate.pys__init__6scCs||iSdS(N(sobjsselfsname(sselfsobj((s,build\bdist.win32\egg\turbogears\paginate.pys__call__8s(s__name__s __module__s__doc__s__init__s__call__(((s,build\bdist.win32\egg\turbogears\paginate.pys itemwrapper4s  si iiic s2d} t| SdS(s The famous TurboGears paginate decorator. @param var_name: The variable name that the paginate decorator will try to control. This key must be present in the dictionnary returned from your controller in order for the paginate decorator to be able to handle it. @type var_name: string @param default_order: The column name(s) that will be used to orde pagination results. Due to the way pagination is implemented specifying a default_order will override any result ordering performed in the controller. @type default_order: string or a list of strings. Any string starting with "-" (minus sign) indicates a reverse order for that field/column. @param default_reversed: Deprecated, use default_order with minus sign. @type default_reversed: Boolean @param limit: The hard-coded limit that the paginate decorator will impose on the number of "var_name" to display at the same time. This value can be overridden by the use of the dynamic_limit keyword argument. @type limit: integer @param max_limit: The maximum number to which the imposed limit can be increased using the dynamic_limit keyword argument in the URL. If this is set to 0, no dynamic change at all will be allowed; if it is set to None, any change will be allowed. @type max_limit: int @param allow_limit_override: Deprecated, use max_limit. @type allow_limit_override: Boolean @param max_pages: Used to generate the tg.paginate.pages variable. If the page count is larger than max_pages, tg.paginate.pages will only contain the page numbers surrounding the current page at a distance of max_pages/2. A zero value means that all pages will be shown, no matter how much. @type max_pages: integer @param max_sort: The maximum number of records that will be sorted in memory if the data cannot be sorted using SQL. If set to 0, sorting in memory will never be performed; if set to None, no limit will be imposed. @type max_sort: integer @param dynamic_limit: If specified, this parameter must be the name of a key present in the dictionary returned by your decorated controller. The value found for this key will be used as the limit for our pagination and will override the other settings, the hard-coded one declared in the decorator itself AND the URL parameter one. This enables the programmer to store a limit settings inside the application preferences and then let the user manage it. @type dynamic_limit: string cstii d}dt o]t}x@ddddfD],}|id||id|q`Wt ||n|SdS( Ncstd} tj otidtdntj otidtdn| d}|tjo d}n|djo t}ny't|}|djo t nWn]t t fj oKd}do1|t i id y| }Wn#t!j ot!d nX|}n|ot&|i'd}nW pg}t|t)o"od|}n|g}not dn|o0t&|}tid||t*||ntid|yt+| } WnXt j oLy| i-pd } Wqt.j ot/| } t+| } qXnX|o:t0| |tjpd | jo jn} n| o| pd}ntt2t3| |}|tjoQt5|d}do1|t i id D]5}|i@dp |i@do ||=q\q\WtAd|d |d| d|d|d |d |d | d! } | t i _Ct"t i d" ott i _Dn| t i iD<||}tid#||tFtjod$taFtFtjoytGaFd%d&i'd'dd }d(d&i'd'dd }|tJjp |tKjotLaFtiMd)qqntFoEtN| | } xtO|D]}| iQqWt/| |scs|joSntyttWn*tj oi dSnYXi t gi }t D]\}}||| fq~dSdS(Ncsi| S(N(skeyssindexskeysrow(srow(skeysskey(s,build\bdist.win32\egg\turbogears\paginate.pys*scs|S(N(skeysskeysrow(srow(skeysskey(s,build\bdist.win32\egg\turbogears\paginate.pys.s(sreverses descendingskeysmapsdataskeysslistssets TypeErrorssortsdictsappends_[1]s enumeratesnsk(skeys descendingskeyssksns_[1](sreversesdata(skeyskeyss,build\bdist.win32\egg\turbogears\paginate.pys reverse_key!s   @skeysreversecst||S(N(scmpskeysrow2srow1(srow1srow2(skey(s,build\bdist.win32\egg\turbogears\paginate.pys5scst||S(N(scmpskeysrow1srow2(srow1srow2(skey(s,build\bdist.win32\egg\turbogears\paginate.pys7ss'paginate: sorting in memory not allowedN((sdatasorder_byssqlalchemy_get_columnssqlalchemy_order_cols get_columns order_colsAttributeErrorsorderByssqlobject_get_columnssqlobject_order_colsNones order_colsskey_colss num_ascendingsnum_descendingsorderingsordersTrues descendingsFalsescolsappends in_memoryslists isinstancesdicts itemwrappers attrwrapperswrappers_[1]skeyssreverseskeyslens reverse_keyssorts TypeErrorscmpkeyslogsdebug(sdatasorderings in_memoryscmpkeys get_columnsorder_bys order_colsswrapperskeyss order_cols descendingskeys reverse_keyskey_colssreversesorders_[1]scols num_ascendingsnum_descending((sdataskeyssreverseskeys,build\bdist.win32\egg\turbogears\paginate.pys sort_datasr       !; + -  (2stypessmathsceilsloggingswarningsssets NameErrorssetssSetscherrypys sqlobjects ImportErrorsNones sqlalchemys turbogearssturbogears.controllerssredirectsturbogears.decoratorsweak_signature_decoratorsturbogears.viewsvariable_providerssformencode.variabledecodesvariable_encodesturbogears.widgetssPaginateDataGridsturbogears.utils add_tg_argss getLoggerslogssplits _so_no_offsets _sa_no_offsets_simulate_offsets attrwrappers itemwrapperspaginates_paginate_var_providersappendsPaginates_select_pages_to_shows sort_orderingssqlalchemy_get_columnssqlobject_get_columnssql_get_columnsFalsessqlalchemy_order_colssqlobject_order_colsTrues sql_order_cols sort_data( ssets turbogearsspaginates_paginate_var_providerssqlobject_order_colssqlalchemy_get_columnsredirectscherrypys sort_datasPaginateDataGrids sort_orderings _sa_no_offsets sqlalchemyswarningssceilssql_get_columnssqlobject_get_columns itemwrappers_select_pages_to_showstypesslogs sqlobjectsweak_signature_decoratorsloggingsvariable_providersssqlalchemy_order_cols sql_order_colsvariable_encodesPaginates add_tg_argss _so_no_offsets attrwrapper((s,build\bdist.win32\egg\turbogears\paginate.pys?sV                   !  H        PKK9\wcturbogears/release.pyversion = "1.0.8" author = "Kevin Dangoor" email = "dangoor+turbogears@gmail.com" copyright = "Copyright 2005-2008 Kevin Dangoor and contributors" license = "MIT" PKA>turbogears/release.pyc; HIc@s"dZdZdZdZdZdS(s1.0.8s Kevin Dangoorsdangoor+turbogears@gmail.coms2Copyright 2005-2008 Kevin Dangoor and contributorssMITN(sversionsauthorsemails copyrightslicense(slicensesversionsemails copyrightsauthor((s+build\bdist.win32\egg\turbogears\release.pys?sPKK9EEturbogears/scheduler.py"""Module that provides a cron-like task scheduler. This task scheduler is designed to be used from inside your own program. You can schedule Python functions to be called at specific intervals or days. It uses the standard 'sched' module for the actual task scheduling, but provides much more: - repeated tasks (at intervals, or on specific days) - error handling (exceptions in tasks don't kill the scheduler) - optional to run scheduler in its own thread or separate process - optional to run a task in its own thread or separate process If the threading module is available, you can use the various Threaded variants of the scheduler and associated tasks. If threading is not available, you could still use the forked variants. If fork is also not available, all processing is done in a single process, sequentially. There are three Scheduler classes: Scheduler ThreadedScheduler ForkedScheduler You usually add new tasks to a scheduler using the add_interval_task or add_daytime_task methods, with the appropriate processmethod argument to select sequential, threaded or forked processing. NOTE: it is impossible to add new tasks to a ForkedScheduler, after the scheduler has been started! For more control you could use one of the following Task classes and use schedule_task or schedule_task_abs: IntervalTask ThreadedIntervalTask ForkedIntervalTask WeekdayTask ThreadedWeekdayTask ForkedWeekdayTask MonthdayTask ThreadedMonthdayTask ForkedMonthdayTask Kronos is the Greek God of Time. This module is based on Kronos by Irmen de Jong, but has been modified to better fit within TurboGears. Additionally, this module appeared to no longer be supported/in development. """ # # $Id: kronos.py,v 1.5 2004/10/06 22:43:49 irmen Exp $ # # (c) Irmen de Jong. # This is open-source software, released under the MIT Software License: # http://www.opensource.org/licenses/mit-license.php # import os, sys import sched, time import traceback import weakref from turbogears.util import Enum method = Enum("sequential", "forked", "threaded") class Scheduler: """The Scheduler itself.""" def __init__(self): self.running=True self.sched = sched.scheduler(time.time, self.__delayfunc) def __delayfunc(self, delay): # This delay function is basically a time.sleep() that is # divided up, so that we can check the self.running flag while delaying. # there is an additional check in here to ensure that the top item of # the queue hasn't changed if delay<10: time.sleep(delay) else: toptime = self.sched.queue[0][0] endtime = time.time() + delay period=5 stoptime = endtime - period while self.running and stoptime > time.time() and \ self.sched.queue[0][0] == toptime: time.sleep(period) if not self.running or self.sched.queue[0][0] != toptime: return now = time.time() if endtime > now: time.sleep(endtime - now) def _acquire_lock(self): pass def _release_lock(self): pass def add_interval_task(self, action, taskname, initialdelay, interval, processmethod, args, kw): """Add a new Interval Task to the schedule. A very short initialdelay or one of zero cannot be honored, you will see a slight delay before the task is first executed. This is because the scheduler needs to pick it up in its loop.""" if initialdelay<0 or interval<1: raise ValueError("delay or interval must be >0") # Select the correct IntervalTask class. Not all types may be available! if processmethod==method.sequential: TaskClass=IntervalTask elif processmethod==method.threaded: TaskClass = ThreadedIntervalTask elif processmethod==method.forked: TaskClass = ForkedIntervalTask else: raise ValueError("invalid processmethod") if not args: args=[] if not kw: kw={} task = TaskClass(taskname, interval, action, args, kw) self.schedule_task(task, initialdelay) return task def add_daytime_task(self, action, taskname, weekdays, monthdays, timeonday, processmethod, args, kw): """Add a new Day Task (Weekday or Monthday) to the schedule.""" if weekdays and monthdays: raise ValueError("you can only specify weekdays or monthdays, not both") if not args: args=[] if not kw: kw={} if weekdays: # Select the correct WeekdayTask class. Not all types may be available! if processmethod==method.sequential: TaskClass=WeekdayTask elif processmethod==method.threaded: TaskClass = ThreadedWeekdayTask elif processmethod==method.forked: TaskClass = ForkedWeekdayTask else: raise ValueError("invalid processmethod") task=TaskClass(taskname, weekdays, timeonday, action, args, kw) if monthdays: # Select the correct MonthdayTask class. Not all types may be available! if processmethod==method.sequential: TaskClass=MonthdayTask elif processmethod==method.threaded: TaskClass = ThreadedMonthdayTask elif processmethod==method.forked: TaskClass = ForkedMonthdayTask else: raise ValueError("invalid processmethod") task=TaskClass(taskname, monthdays, timeonday, action, args, kw) firsttime=task.get_schedule_time(True) self.schedule_task_abs(task, firsttime) return task def schedule_task(self, task, delay): """Low-level method to add a new task to the scheduler with the given delay (seconds).""" if self.running: self._acquire_lock() # lock the sched queue, if needed try: task.event = self.sched.enter(delay, 0, task, (weakref.ref(self),) ) finally: self._release_lock() else: task.event = self.sched.enter(delay, 0, task, (weakref.ref(self),) ) def schedule_task_abs(self, task, abstime): """Low-level method to add a new task to the scheduler for the given absolute time value.""" if self.running: self._acquire_lock() # lock the sched queue, if needed try: task.event = self.sched.enterabs(abstime, 0, task, (weakref.ref(self),) ) finally: self._release_lock() else: task.event = self.sched.enterabs(abstime, 0, task, (weakref.ref(self),) ) def start(self): """Start the scheduler.""" self._run() def stop(self): """Remove all pending tasks and stop the Scheduler.""" self.running=False self.sched.queue[:]=[] def cancel(self, task): self.sched.cancel(task.event) def _run(self): # Low-level run method to do the actual scheduling loop. while self.running: try: self.sched.run() except Exception,x: print >>sys.stderr, "ERROR DURING SCHEDULER EXECUTION",x print >>sys.stderr, "".join(traceback.format_exception(*sys.exc_info())) print >>sys.stderr, "-"*20 # queue is empty; sleep a short while before checking again if self.running: time.sleep(5) class Task: """Abstract base class of all scheduler tasks""" def __init__(self, name, action, args, kw): """This is an abstract class!""" self.name=name self.action=action self.args=args self.kw=kw def __call__(self, schedulerref): """Execute the task action in the scheduler's thread.""" try: self.execute() except Exception,x: self.handle_exception(x) self.reschedule(schedulerref()) def reschedule(self, scheduler): """This is an abstract class, this method is defined in one of the sub classes!""" raise NotImplementedError("you're using the abstract base class 'Task', use a concrete class instead") def execute(self): """Execute the actual task.""" self.action(*self.args, **self.kw) def handle_exception(self, exc): """Handle any exception that occured during task execution.""" print >>sys.stderr, "ERROR DURING TASK EXECUTION",exc print >>sys.stderr,"".join(traceback.format_exception(*sys.exc_info())) print >>sys.stderr,"-"*20 class IntervalTask(Task): """A repeated task that occurs at certain intervals (in seconds).""" def __init__(self, name, interval, action, args=None, kw=None): Task.__init__(self, name, action, args, kw) self.interval=interval def reschedule(self, scheduler): # reschedule this task according to its interval (in seconds). scheduler.schedule_task(self, self.interval) class DayTaskRescheduler: """A mixin class that contains the reschedule logic for the DayTasks.""" def __init__(self, timeonday): self.timeonday=timeonday def get_schedule_time(self, today): """Calculate the time value at which this task is to be scheduled.""" now=list(time.localtime()) if today: # schedule for today. let's see if that is still possible if (now[3], now[4]) >= self.timeonday: now[2]+=1 # too bad, it will be tomorrow else: now[2]+=1 # tomorrow now[3], now[4] = self.timeonday # set new time on day (hour,minute) now[5]=0 # seconds return time.mktime(now) def reschedule(self, scheduler): # Reschedule this task according to the daytime for the task. # The task is scheduled for tomorrow, for the given daytime. # (The execute method in the concrete Task classes will check # if the current day is a day on which the task must run). abstime = self.get_schedule_time(False) scheduler.schedule_task_abs(self, abstime) class WeekdayTask(DayTaskRescheduler, Task): """A task that is called at specific days in a week (1-7), at a fixed time on the day.""" def __init__(self, name, weekdays, timeonday, action, args=None, kw=None): if type(timeonday) not in (list,tuple) or len(timeonday) != 2: raise TypeError("timeonday must be a 2-tuple (hour,minute)") if type(weekdays) not in (list,tuple): raise TypeError("weekdays must be a sequence of weekday numbers 1-7 (1 is Monday)") DayTaskRescheduler.__init__(self, timeonday) Task.__init__(self, name, action, args, kw) self.days=weekdays def execute(self): # This is called every day, at the correct time. We only need to # check if we should run this task today (this day of the week). weekday=time.localtime().tm_wday+1 if weekday in self.days: self.action(*self.args, **self.kw) class MonthdayTask(DayTaskRescheduler, Task): """A task that is called at specific days in a month (1-31), at a fixed time on the day.""" def __init__(self, name, monthdays, timeonday, action, args=None, kw=None): if type(timeonday) not in (list,tuple) or len(timeonday) != 2: raise TypeError("timeonday must be a 2-tuple (hour,minute)") if type(monthdays) not in (list,tuple): raise TypeError("monthdays must be a sequence of monthdays numbers 1-31") DayTaskRescheduler.__init__(self, timeonday) Task.__init__(self, name, action, args, kw) self.days=monthdays def execute(self): # This is called every day, at the correct time. We only need to # check if we should run this task today (this day of the month). if time.localtime().tm_mday in self.days: self.action(*self.args, **self.kw) try: import threading class ThreadedScheduler(Scheduler): """A Scheduler that runs in its own thread.""" def __init__(self): Scheduler.__init__(self) self._lock=threading.Lock() # we require a lock around the task queue def start(self): # Start method that splices of a thread in which the scheduler will run. self.thread=threading.Thread(target=self._run) self.thread.setDaemon(True) self.thread.start() def stop(self): # Stop method that stops the scheduler and waits for the thread to finish. Scheduler.stop(self) try: self.thread.join() except AttributeError: pass def _acquire_lock(self): self._lock.acquire() # lock the thread's task queue def _release_lock(self): self._lock.release() # release the thread's task queue class ThreadedTaskMixin: """A mixin class to make a Task execute in a separate thread.""" def __call__(self, schedulerref): # execute the task action in its own thread. threading.Thread(target=self.threadedcall).start() self.reschedule(schedulerref()) def threadedcall(self): # This method is run within its own thread, so we have to # do the execute() call and exception handling here. try: self.execute() except Exception,x: self.handle_exception(x) class ThreadedIntervalTask(ThreadedTaskMixin, IntervalTask): """Interval Task that executes in its own thread.""" pass class ThreadedWeekdayTask(ThreadedTaskMixin, WeekdayTask): """Weekday Task that executes in its own thread.""" pass class ThreadedMonthdayTask(ThreadedTaskMixin, MonthdayTask): """Monthday Task that executes in its own thread.""" pass except ImportError: # threading is not available pass if hasattr(os,"fork"): import signal class ForkedScheduler(Scheduler): """A Scheduler that runs in its own forked process.""" def __del__(self): if hasattr(self, "childpid"): os.kill(self.childpid, signal.SIGKILL) def start(self): # Start method that forks of a new process in which the scheduler will run. pid = os.fork() if pid==0: # we are the child signal.signal(signal.SIGUSR1, self.signalhandler) self._run() os._exit(0) else: # we are the parent self.childpid=pid del self.sched # can no longer insert in the scheduler queue def stop(self): # Stop method that stops the scheduler and waits for the process to finish. os.kill(self.childpid, signal.SIGUSR1) os.waitpid(self.childpid,0) def signalhandler(self, sig, stack): Scheduler.stop(self) class ForkedTaskMixin: """A mixin class to make a Task execute in a separate process.""" def __call__(self, schedulerref): # execute the task action in its own process. pid=os.fork() if pid==0: # we are the child try: self.execute() except Exception,x: self.handle_exception(x) os._exit(0) else: # we are the parent self.reschedule(schedulerref()) class ForkedIntervalTask(ForkedTaskMixin, IntervalTask): """Interval Task that executes in its own process.""" pass class ForkedWeekdayTask(ForkedTaskMixin, WeekdayTask): """Weekday Task that executes in its own process.""" pass class ForkedMonthdayTask(ForkedTaskMixin, MonthdayTask): """Monthday Task that executes in its own process.""" pass _scheduler_instance = None def _get_scheduler(): global _scheduler_instance si = _scheduler_instance if not si: si = ThreadedScheduler() _scheduler_instance = si return si def _start_scheduler(): si = _get_scheduler() si.start() def _stop_scheduler(): if not _scheduler_instance: return si = _get_scheduler() si.stop() def add_interval_task(action, interval, args=None, kw=None, initialdelay=0, processmethod=method.threaded, taskname=None): si = _get_scheduler() return si.add_interval_task(action=action, interval=interval, args=args, kw=kw, initialdelay=initialdelay, processmethod=processmethod, taskname=taskname) def add_weekday_task(action, weekdays, timeonday, args=None, kw=None, processmethod=method.threaded, taskname=None): si = _get_scheduler() return si.add_daytime_task(action=action, taskname=taskname, weekdays=weekdays, monthdays=None, timeonday=timeonday, processmethod=processmethod, args=args, kw=kw) def add_monthday_task(action, monthdays, timeonday, args=None, kw=None, processmethod=method.threaded, taskname=None): si = _get_scheduler() return si.add_daytime_task(action=action, taskname=taskname, weekdays=None, monthdays=monthdays, timeonday=timeonday, processmethod=processmethod, args=args, kw=kw) def cancel(task): si = _get_scheduler() si.cancel(task) PKA>^ccturbogears/scheduler.pyc; HIc@s}dZdkZdkZdkZdkZdkZdkZdklZedddZ dfdYZ dfd YZ d e fd YZ d fd YZ de e fdYZde e fdYZydkZde fdYZdfdYZdee fdYZdeefdYZdeefdYZWnej onXeedodkZde fdYZdfd YZd!ee fd"YZd#eefd$YZd%eefd&YZnead'Z d(Z!d)Z"eed*e i#ed+Z$eee i#ed,Z%eee i#ed-Z&d.Z'dS(/sModule that provides a cron-like task scheduler. This task scheduler is designed to be used from inside your own program. You can schedule Python functions to be called at specific intervals or days. It uses the standard 'sched' module for the actual task scheduling, but provides much more: - repeated tasks (at intervals, or on specific days) - error handling (exceptions in tasks don't kill the scheduler) - optional to run scheduler in its own thread or separate process - optional to run a task in its own thread or separate process If the threading module is available, you can use the various Threaded variants of the scheduler and associated tasks. If threading is not available, you could still use the forked variants. If fork is also not available, all processing is done in a single process, sequentially. There are three Scheduler classes: Scheduler ThreadedScheduler ForkedScheduler You usually add new tasks to a scheduler using the add_interval_task or add_daytime_task methods, with the appropriate processmethod argument to select sequential, threaded or forked processing. NOTE: it is impossible to add new tasks to a ForkedScheduler, after the scheduler has been started! For more control you could use one of the following Task classes and use schedule_task or schedule_task_abs: IntervalTask ThreadedIntervalTask ForkedIntervalTask WeekdayTask ThreadedWeekdayTask ForkedWeekdayTask MonthdayTask ThreadedMonthdayTask ForkedMonthdayTask Kronos is the Greek God of Time. This module is based on Kronos by Irmen de Jong, but has been modified to better fit within TurboGears. Additionally, this module appeared to no longer be supported/in development. N(sEnums sequentialsforkedsthreadeds SchedulercBsztZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d ZRS( sThe Scheduler itself.cCs(t|_titi|i|_dS(N(sTruesselfsrunningsscheds schedulerstimes_Scheduler__delayfunc(sself((s-build\bdist.win32\egg\turbogears\scheduler.pys__init__9s cCs|djoti|n|iidd}ti|}d}||}xJ|i o+|tijo|iidd|joti|qUW|i p|iidd|jodSnti}||joti||ndS(Ni ii( sdelaystimessleepsselfsschedsqueuestoptimesendtimesperiodsstoptimesrunningsnow(sselfsdelaystoptimesnowsperiodsstoptimesendtime((s-build\bdist.win32\egg\turbogears\scheduler.pys __delayfunc=s  8&  cCsdS(N((sself((s-build\bdist.win32\egg\turbogears\scheduler.pys _acquire_lockRscCsdS(N((sself((s-build\bdist.win32\egg\turbogears\scheduler.pys _release_lockSsc Cs|djp |djotdn|tijo t}nA|tijo t }n'|ti jo t }n td| o g}n| o h}n||||||} |i| || SdS(sAdd a new Interval Task to the schedule. A very short initialdelay or one of zero cannot be honored, you will see a slight delay before the task is first executed. This is because the scheduler needs to pick it up in its loop.iisdelay or interval must be >0sinvalid processmethodN(s initialdelaysintervals ValueErrors processmethodsmethods sequentials IntervalTasks TaskClasssthreadedsThreadedIntervalTasksforkedsForkedIntervalTasksargsskwstasknamesactionstasksselfs schedule_task( sselfsactionstasknames initialdelaysintervals processmethodsargsskws TaskClassstask((s-build\bdist.win32\egg\turbogears\scheduler.pysadd_interval_taskUs"      c Csi|o|otdn| o g}n| o h}n|oy|tijo t} nA|ti jo t } n'|ti jo t } n td| ||||||} n|oy|tijo t} nA|ti jo t} n'|ti jo t} n td| ||||||} n| it} |i| | | SdS(s9Add a new Day Task (Weekday or Monthday) to the schedule.s4you can only specify weekdays or monthdays, not bothsinvalid processmethodN(sweekdayss monthdayss ValueErrorsargsskws processmethodsmethods sequentials WeekdayTasks TaskClasssthreadedsThreadedWeekdayTasksforkedsForkedWeekdayTaskstasknames timeondaysactionstasks MonthdayTasksThreadedMonthdayTasksForkedMonthdayTasksget_schedule_timesTrues firsttimesselfsschedule_task_abs( sselfsactionstasknamesweekdayss monthdayss timeondays processmethodsargsskwstasks TaskClasss firsttime((s-build\bdist.win32\egg\turbogears\scheduler.pysadd_daytime_taskls8          cCs|ioJ|iz.|ii|d|ti|f|_ Wd|i Xn+|ii|d|ti|f|_ dS(sSLow-level method to add a new task to the scheduler with the given delay (seconds).iN( sselfsrunnings _acquire_locksschedsentersdelaystasksweakrefsrefsevents _release_lock(sselfstasksdelay((s-build\bdist.win32\egg\turbogears\scheduler.pys schedule_tasks  cCs|ioJ|iz.|ii|d|ti|f|_ Wd|i Xn+|ii|d|ti|f|_ dS(sVLow-level method to add a new task to the scheduler for the given absolute time value.iN( sselfsrunnings _acquire_locksschedsenterabssabstimestasksweakrefsrefsevents _release_lock(sselfstasksabstime((s-build\bdist.win32\egg\turbogears\scheduler.pysschedule_task_abss  cCs|idS(sStart the scheduler.N(sselfs_run(sself((s-build\bdist.win32\egg\turbogears\scheduler.pysstartscCst|_g|ii(dS(s0Remove all pending tasks and stop the Scheduler.N(sFalsesselfsrunningsschedsqueue(sself((s-build\bdist.win32\egg\turbogears\scheduler.pysstops cCs|ii|idS(N(sselfsschedscancelstasksevent(sselfstask((s-build\bdist.win32\egg\turbogears\scheduler.pyscancelscCsx|ioy|iiWn^tj oR}tidI|IJtidit i ti IJtiddIJnX|iot i dqqWdS(Ns ERROR DURING SCHEDULER EXECUTIONss-ii(sselfsrunningsschedsruns Exceptionsxssyssstderrsjoins tracebacksformat_exceptionsexc_infostimessleep(sselfsx((s-build\bdist.win32\egg\turbogears\scheduler.pys_runs % (s__name__s __module__s__doc__s__init__s_Scheduler__delayfuncs _acquire_locks _release_locksadd_interval_tasksadd_daytime_tasks schedule_tasksschedule_task_abssstartsstopscancels_run(((s-build\bdist.win32\egg\turbogears\scheduler.pys Scheduler6s       "    sTaskcBs;tZdZdZdZdZdZdZRS(s*Abstract base class of all scheduler taskscCs(||_||_||_||_dS(sThis is an abstract class!N(snamesselfsactionsargsskw(sselfsnamesactionsargsskw((s-build\bdist.win32\egg\turbogears\scheduler.pys__init__s    cCsGy|iWn"tj o}|i|nX|i|dS(s2Execute the task action in the scheduler's thread.N(sselfsexecutes Exceptionsxshandle_exceptions reschedules schedulerref(sselfs schedulerrefsx((s-build\bdist.win32\egg\turbogears\scheduler.pys__call__s cCstddS(sLThis is an abstract class, this method is defined in one of the sub classes!sIyou're using the abstract base class 'Task', use a concrete class insteadN(sNotImplementedError(sselfs scheduler((s-build\bdist.win32\egg\turbogears\scheduler.pys reschedulescCs|i|i|idS(sExecute the actual task.N(sselfsactionsargsskw(sself((s-build\bdist.win32\egg\turbogears\scheduler.pysexecutescCsMtidI|IJtidititiIJtiddIJdS(s8Handle any exception that occured during task execution.sERROR DURING TASK EXECUTIONss-iN(ssyssstderrsexcsjoins tracebacksformat_exceptionsexc_info(sselfsexc((s-build\bdist.win32\egg\turbogears\scheduler.pyshandle_exceptions%(s__name__s __module__s__doc__s__init__s__call__s reschedulesexecuteshandle_exception(((s-build\bdist.win32\egg\turbogears\scheduler.pysTasks     s IntervalTaskcBs&tZdZeedZdZRS(s>A repeated task that occurs at certain intervals (in seconds).cCs&ti|||||||_dS(N(sTasks__init__sselfsnamesactionsargsskwsinterval(sselfsnamesintervalsactionsargsskw((s-build\bdist.win32\egg\turbogears\scheduler.pys__init__scCs|i||idS(N(s schedulers schedule_tasksselfsinterval(sselfs scheduler((s-build\bdist.win32\egg\turbogears\scheduler.pys reschedules(s__name__s __module__s__doc__sNones__init__s reschedule(((s-build\bdist.win32\egg\turbogears\scheduler.pys IntervalTasks sDayTaskReschedulercBs)tZdZdZdZdZRS(sBA mixin class that contains the reschedule logic for the DayTasks.cCs ||_dS(N(s timeondaysself(sselfs timeonday((s-build\bdist.win32\egg\turbogears\scheduler.pys__init__scCstti}|o6|d|df|ijo|dcd7": continue orig_filename = filename if filename.endswith(".pyc"): filename = filename[:-1] try: mtime = os.stat(filename).st_mtime except OSError, e: if orig_filename.endswith('.pyc') and e[0] == errno.ENOENT: # This prevents us from endlessly restarting # if there is an old .pyc lying around # after a .py file has been deleted try: os.unlink(orig_filename) except: pass sys.exit(3) # force reload if filename not in mtimes: mtimes[filename] = mtime continue if mtime > mtimes[filename]: sys.exit(3) # force reload time.sleep(freq) cherrypy.lib.autoreload.reloader_thread = reloader_thread webpath = '' DNS_SD_PID = None def start_bonjour(package=None): global DNS_SD_PID if DNS_SD_PID: return if not getattr(cherrypy, 'root', None): return if not package: package = cherrypy.root.__module__ package = package[:package.find(".")] host = config.get('server.socket_host', '') port = str(config.get('server.socket_port')) env = config.get('server.environment') name = package + ": " + env type = "_http._tcp" cmds = [['/usr/bin/avahi-publish-service', ["-H", host, name, type, port]], ['/usr/bin/dns-sd', ['-R', name, type, "."+host, port, "path=/"]]] for cmd, args in cmds: # TODO:. This check is flawed. If one has both services installed and # avahi isn't the one running, then this won't work. We should either # try registering with both or checking what service is running and use # that. Program availability on the filesystem was never enough... if os.path.exists(cmd): DNS_SD_PID = os.spawnv(os.P_NOWAIT, cmd, [cmd]+args) atexit.register(stop_bonjour) break def stop_bonjour(): if not DNS_SD_PID: return try: os.kill(DNS_SD_PID, signal.SIGTERM) except OSError: pass class VirtualPathFilter(object): """Filter that makes CherryPy ignorant of a URL root path. That is, you can mount your app so the URI "/users/~rdel/myapp/" maps to the root object "/". """ def __init__(self, webpath=''): webpath = webpath.rstrip('/') if webpath and not webpath.startswith('/'): webpath = '/' + webpath self.webpath = webpath def before_request_body(self): """Determine the relevant path info by stripping of prefixes. Strips webpath and SCRIPT_NAME from request.object_path and sets request.path_info (since CherryPy 2 does not set it). """ webpath = self.webpath try: webpath += request.wsgi_environ['SCRIPT_NAME'].rstrip('/') except (AttributeError, KeyError): pass if webpath: if request.object_path.startswith(webpath): request.object_path = request.object_path[len(webpath):] or '/' if request.path.startswith(webpath): request.path_info = request.path[len(webpath):] or '/' else: request.path_info = request.path # check for webpath only if not forwarded try: if not request.wsgi_environ['HTTP_X_FORWARDED_SERVER']: raise KeyError except (AttributeError, KeyError): raise cherrypy.NotFound(request.path) else: request.path_info = request.path class NestedVariablesFilter(object): def before_main(self): if hasattr(request, 'params'): request.params = NestedVariables.to_python(request.params or {}) def startTurboGears(): """Handles TurboGears tasks when the CherryPy server starts. This adds the "tg_js" configuration to make MochiKit accessible. It also turns on stdlib logging when in development mode. """ # Set up old-style logging cherrypy.config.environments['development'][ 'log_debug_info_filter.on'] = False if not config.get('tg.new_style_logging'): if config.get('server.log_to_screen'): setuplog = logging.getLogger() setuplog.setLevel(logging.DEBUG) fmt = logging.Formatter( "%(asctime)s %(name)s %(levelname)s %(message)s") handler = logging.StreamHandler(sys.stdout) handler.setLevel(logging.DEBUG) handler.setFormatter(fmt) setuplog.addHandler(handler) logfile = config.get('server.log_file') if logfile: setuplog = logging.getLogger('turbogears.access') setuplog.propagate = 0 fmt = logging.Formatter("%(message)s") handler = logging.FileHandler(logfile) handler.setLevel(logging.INFO) handler.setFormatter(fmt) setuplog.addHandler(handler) # Add static filters resource_filename = pkg_resources.resource_filename config.update({'/tg_static': { 'static_filter.on': True, 'static_filter.dir': os.path.abspath(resource_filename(__name__, 'static')), 'log_debug_info_filter.on': False, }}) config.update({'/tg_js': { 'static_filter.on': True, 'static_filter.dir': os.path.abspath(resource_filename(__name__, 'static/js')), 'log_debug_info_filter.on': False, }}) mochikit_version = config.get( 'tg.mochikit_version', config.get('tg_mochikit.version', '1.3')) mochikit_suffix = '_'.join(mochikit_version.split('.', 2)[:2]) mochikit_file = os.path.abspath(resource_filename( __name__, 'static/js/MochiKit_%s.js' % mochikit_suffix)) if os.path.exists(mochikit_file): config.update({'/tg_js/MochiKit.js': { 'static_filter.on': True, 'static_filter.file': mochikit_file, }}) config.update({'/tg_widgets/turbogears/js/MochiKit.js': { 'static_filter.on': True, 'static_filter.file': mochikit_file }}) else: log.warning("MochiKit version %s not available" % mochikit_version) # Add decoding filter if config.get('decoding_filter.on', path='/') is None: config.update({'/': { 'decoding_filter.on': True, 'decoding_filter.encoding': config.get('kid.encoding', 'utf8') }}) # Initialize template engines and load base templates view.load_engines() view.loadBaseTemplates() # Add request filters global webpath webpath = config.get('server.webpath') or '' if getattr(cherrypy, 'root', None): if not hasattr(cherrypy.root, '_cp_filters'): cherrypy.root._cp_filters = [] cherrypy.root._cp_filters.extend([VirtualPathFilter(webpath), EndTransactionsFilter(), NestedVariablesFilter()]) webpath = webpath.lstrip('/') if webpath and not webpath.endswith('/'): webpath += '/' # Register server with Bonjour framework bonjoursetting = config.get('tg.bonjour', None) if bonjoursetting or config.get('server.environment') == 'development': start_bonjour(bonjoursetting) # Bind metadata for SQLAlchemy if config.get("sqlalchemy.dburi"): database.get_engine() # Start all TurboGears extensions extensions = pkg_resources.iter_entry_points('turbogears.extensions') for entrypoint in extensions: ext = entrypoint.load() if hasattr(ext, 'start_extension'): ext.start_extension() # Call registered startup functions for item in call_on_startup: item() # Start the scheduler if config.get('tg.scheduler', False): scheduler._start_scheduler() log.info('Scheduler started') def stopTurboGears(): # end all transactions and clear out the hubs to # help ensure proper reloading in autoreload situations for hub in hub_registry: hub.end() hub_registry.clear() stop_bonjour() # Shut down all TurboGears extensions extensions= pkg_resources.iter_entry_points( "turbogears.extensions" ) for entrypoint in extensions: ext= entrypoint.load() if hasattr(ext, "shutdown_extension"): ext.shutdown_extension() for item in call_on_shutdown: item() if config.get("tg.scheduler", False): scheduler._stop_scheduler() log.info("Scheduler stopped") old_object_trail = _cputil.get_object_trail # hang on to object trail to use it to find an app root if need be def get_object_trail(object_path=None): trail = old_object_trail(object_path) try: request.object_trail = trail except AttributeError: pass return trail _cputil.get_object_trail = get_object_trail class SimpleWSGIServer(CherryPyWSGIServer): """A WSGI server that accepts a WSGI application as a parameter.""" RequestHandlerClass = CPHTTPRequest def __init__(self): conf = cherrypy.config.get wsgi_app = wsgiApp if conf('server.environment') == 'development': try: from paste.evalexception.middleware import EvalException except ImportError: pass else: wsgi_app = EvalException(wsgi_app, global_conf={}) cherrypy.config.update({'server.throw_errors':True}) bind_addr = (conf('server.socket_host'), conf('server.socket_port')) CherryPyWSGIServer.__init__(self, bind_addr, wsgi_app, conf("server.thread_pool"), conf("server.socket_host"), request_queue_size = conf("server.socket_queue_size")) def start_server(root): cherrypy.root = root if config.get('tg.fancy_exception', False): server.start(server=SimpleWSGIServer()) else: server.start() if startTurboGears not in server.on_start_server_list: server.on_start_server_list.append(startTurboGears) if stopTurboGears not in server.on_stop_server_list: server.on_stop_server_list.append(stopTurboGears) call_on_startup = [] call_on_shutdown = [] PKA>(0&9&9turbogears/startup.pyc; HIc@sdZdkZdkZdkZdkZdkZdkZdkZdkZdk Z dk l Z l Z l Z dk lZdklZlZdklZdklZlZlZdklZdklZlZeid Zeid d Zee i i!_d a"e#a$e#d Z%dZ&de'fdYZ(de'fdYZ)dZ*dZ+e i,Z-e#dZ,e,e _,defdYZ.dZ/e*e i0joe i0i1e*ne+e i2joe i2i1e+ngZ3gZ4dS(s)Things to do when TurboGears is imported.N(s_cputilsrequestsserver(sNestedVariables(swsgiApps CPHTTPRequest(sCherryPyWSGIServer(sconfigs schedulersdatabase(sview(s hub_registrysEndTransactionsFiltersturbogears.startups TurboGearsc sd} h}tidttjo dGHdSnxtiii ooPt dt i i }gi}|D]}|t i |q~}nt| t i i}x,t dtd|D] }|idp |d joqn|}|id o|d }nyti|i}Wnetj oY} |id o| d tijoyti |WqqXnt i!d nX||jo|||WdS(sMonkeypatch for the reloader provided by CherryPy. This reloader is designed to reload a single package. This is more efficient and, more important, compatible with zipped libraries that may not provide access to the individual files.cCs=t|do%t|ido|iiSq5n|SdS(Ns __loader__sarchive(shasattrsmodules __loader__sarchive(smodule((s+build\bdist.win32\egg\turbogears\startup.pysarchive_selector"ssautoreload.packagesTurboGears requires autoreload.package to be set. It can be an empty value, which will use CherryPy's default behavior which is to check every module. Setting an actual package makes the check much faster.Ncs |iS(N(smodnames startswithspackage(smodname(spackage(s+build\bdist.win32\egg\turbogears\startup.pys2scCs|S(N(sv(sv((s+build\bdist.win32\egg\turbogears\startup.pys7scCst|dtS(Ns__file__(sgetattrsmsNone(sm((s+build\bdist.win32\egg\turbogears\startup.pys8ss.kidss.pyciii(%sarchive_selectorsmtimessconfigsgetsNonespackagescherrypyslibs autoreloads RUN_RELOADERsfilterssyssmodulesskeyssmodnamessappends_[1]smodnamesmodlistsmapsvaluessfilenamesendswiths orig_filenamesossstatsst_mtimesmtimesOSErrorseserrnosENOENTsunlinksexitstimessleepsfreq( sfreqsmodnamessmtimes_[1]sfilenames orig_filenamesmtimessmodnamesmodlistsesarchive_selectorspackage((spackages+build\bdist.win32\egg\turbogears\startup.pysreloader_threadsJ   2 $  sc Cs<todSnttdt odSn| o#tii}||id }nti dd}t ti d}ti d}|d|}d}d d ||||ggd d ||d||d ggg}xX|D]P\}}tii|o1titi||g|atitPqqWdS(Nsroots.sserver.socket_hostssserver.socket_portsserver.environments: s _http._tcps/usr/bin/avahi-publish-services-Hs/usr/bin/dns-sds-Rspath=/(s DNS_SD_PIDsgetattrscherrypysNonespackagesroots __module__sfindsconfigsgetshostsstrsportsenvsnamestypescmdsscmdsargssosspathsexistssspawnvsP_NOWAITsatexitsregisters stop_bonjour( spackagesargssenvstypescmdshostsportscmdssname((s+build\bdist.win32\egg\turbogears\startup.pys start_bonjourVs( =  cCsAt odSnytittiWntj onXdS(N(s DNS_SD_PIDsosskillssignalsSIGTERMsOSError(((s+build\bdist.win32\egg\turbogears\startup.pys stop_bonjourts sVirtualPathFiltercBs#tZdZddZdZRS(sFilter that makes CherryPy ignorant of a URL root path. That is, you can mount your app so the URI "/users/~rdel/myapp/" maps to the root object "/". scCsB|id}|o|id od|}n||_dS(Ns/(swebpathsrstrips startswithsself(sselfswebpath((s+build\bdist.win32\egg\turbogears\startup.pys__init__scCs|i}y|tidid7}Wnttfj onX|otii|o!tit |pdt_nti i|o!ti t |pdt_ qti t_ ytid o tnWqttfj ot i ti qXn ti t_ dS(sDetermine the relevant path info by stripping of prefixes. Strips webpath and SCRIPT_NAME from request.object_path and sets request.path_info (since CherryPy 2 does not set it). s SCRIPT_NAMEs/sHTTP_X_FORWARDED_SERVERN(sselfswebpathsrequests wsgi_environsrstripsAttributeErrorsKeyErrors object_paths startswithslenspaths path_infoscherrypysNotFound(sselfswebpath((s+build\bdist.win32\egg\turbogears\startup.pysbefore_request_bodys$ !! (s__name__s __module__s__doc__s__init__sbefore_request_body(((s+build\bdist.win32\egg\turbogears\startup.pysVirtualPathFilter}s  sNestedVariablesFiltercBstZdZRS(NcCs4ttdo titipht_ndS(Nsparams(shasattrsrequestsNestedVariabless to_pythonsparams(sself((s+build\bdist.win32\egg\turbogears\startup.pys before_mains(s__name__s __module__s before_main(((s+build\bdist.win32\egg\turbogears\startup.pysNestedVariablesFiltersc CsttiiddqqWxt?D] } | qIWtid*totAiBt$iCd+nd,S(-sHandles TurboGears tasks when the CherryPy server starts. This adds the "tg_js" configuration to make MochiKit accessible. It also turns on stdlib logging when in development mode. s developmentslog_debug_info_filter.onstg.new_style_loggingsserver.log_to_screens.%(asctime)s %(name)s %(levelname)s %(message)ssserver.log_filesturbogears.accessis %(message)ss /tg_staticsstatic_filter.onsstatic_filter.dirsstatics/tg_jss static/jsstg.mochikit_versionstg_mochikit.versions1.3s_s.isstatic/js/MochiKit_%s.jss/tg_js/MochiKit.jssstatic_filter.files%/tg_widgets/turbogears/js/MochiKit.jss!MochiKit version %s not availablesdecoding_filter.onspaths/sdecoding_filter.encodings kid.encodingsutf8sserver.webpathssroots _cp_filterss tg.bonjoursserver.environmentssqlalchemy.dburisturbogears.extensionssstart_extensions tg.schedulersScheduler startedN(DsFalsescherrypysconfigs environmentssgetsloggings getLoggerssetuplogssetLevelsDEBUGs Formattersfmts StreamHandlerssyssstdoutshandlers setFormatters addHandlerslogfiles propagates FileHandlersINFOs pkg_resourcessresource_filenamesupdatesTruesosspathsabspaths__name__smochikit_versionsjoinssplitsmochikit_suffixs mochikit_filesexistsslogswarningsNonesviews load_enginessloadBaseTemplatesswebpathsgetattrshasattrsroots _cp_filterssextendsVirtualPathFiltersEndTransactionsFiltersNestedVariablesFilterslstripsendswithsbonjoursettings start_bonjoursdatabases get_enginesiter_entry_pointss extensionss entrypointsloadsextsstart_extensionscall_on_startupsitems schedulers_start_schedulersinfo( sresource_filenames mochikit_filesfmtshandlers entrypointsmochikit_suffixssetuplogsbonjoursettingslogfilesmochikit_versionsitemsexts extensions((s+build\bdist.win32\egg\turbogears\startup.pysstartTurboGearssx     FF(,8  ,   cCsxtD]}|iqWtittid}x8|D]0}|i }t |do|i qBqBWxt D] }|q}WtidtotitidndS(Nsturbogears.extensionssshutdown_extensions tg.schedulersScheduler stopped(s hub_registryshubsendsclears stop_bonjours pkg_resourcessiter_entry_pointss extensionss entrypointsloadsextshasattrsshutdown_extensionscall_on_shutdownsitemsconfigsgetsFalses schedulers_stop_schedulerslogsinfo(shubsitemsexts entrypoints extensions((s+build\bdist.win32\egg\turbogears\startup.pysstopTurboGears s"    cCs7t|}y |t_Wntj onX|SdS(N(sold_object_trails object_pathstrailsrequests object_trailsAttributeError(s object_pathstrail((s+build\bdist.win32\egg\turbogears\startup.pysget_object_trail;s   sSimpleWSGIServercBstZdZeZdZRS(s=A WSGI server that accepts a WSGI application as a parameter.c Cstii}t}|ddjoVydkl}Wntj oq{X||dh}tii hdt <n|d|df}t i ||||d|dd |d dS( Nsserver.environments development(s EvalExceptions global_confsserver.throw_errorssserver.socket_hostsserver.socket_portsserver.thread_poolsrequest_queue_sizesserver.socket_queue_size(scherrypysconfigsgetsconfswsgiAppswsgi_appspaste.evalexception.middlewares EvalExceptions ImportErrorsupdatesTrues bind_addrsCherryPyWSGIServers__init__sself(sselfs EvalExceptions bind_addrsconfswsgi_app((s+build\bdist.win32\egg\turbogears\startup.pys__init__Js (s__name__s __module__s__doc__s CPHTTPRequestsRequestHandlerClasss__init__(((s+build\bdist.win32\egg\turbogears\startup.pysSimpleWSGIServerFs cCsA|t_tidtotidtn tidS(Nstg.fancy_exceptionsserver(srootscherrypysconfigsgetsFalsesserversstartsSimpleWSGIServer(sroot((s+build\bdist.win32\egg\turbogears\startup.pys start_server[s (5s__doc__sosserrnosloggingssysstimesatexitssignals pkg_resourcesscherrypys_cputilsrequestsserversformencode.variabledecodesNestedVariablesscherrypy._cpwsgiswsgiApps CPHTTPRequestscherrypy._cpwsgiserversCherryPyWSGIServers turbogearssconfigs schedulersdatabasesviewsturbogears.databases hub_registrysEndTransactionsFilters getLoggerslogsrequiresreloader_threadslibs autoreloadswebpathsNones DNS_SD_PIDs start_bonjours stop_bonjoursobjectsVirtualPathFiltersNestedVariablesFiltersstartTurboGearssstopTurboGearssget_object_trailsold_object_trailsSimpleWSGIServers start_serverson_start_server_listsappendson_stop_server_listscall_on_startupscall_on_shutdown($sSimpleWSGIServerscherrypyswsgiAppsreloader_threadsatexitsEndTransactionsFilters stop_bonjourslogserrnosNestedVariablessstartTurboGearss start_bonjoursconfigs hub_registryscall_on_startups_cputilsstopTurboGearsssyss schedulersget_object_trails CPHTTPRequestsCherryPyWSGIServersloggings start_serversold_object_trailsdatabasescall_on_shutdownssignalsVirtualPathFiltersrequests pkg_resourcessserverstimesNestedVariablesFiltersossview((s+build\bdist.win32\egg\turbogears\startup.pys?sN              4  + q     PKK9  $ $turbogears/testutil.pyimport os import types import logging import unittest import Cookie import cStringIO as StringIO import cherrypy from cherrypy import _cphttptools try: import sqlobject from sqlobject.inheritance import InheritableSQLObject except ImportError: sqlobject = None try: import sqlalchemy except ImportError: sqlalchemy = None from turbogears import startup, config, update_config, \ controllers, database, validators from turbogears.identity import current_provider from turbogears.util import get_model # For clean tests, remove all compiled Kid templates for w in os.walk('.'): if not os.sep + '.' in w[0]: for f in w[2]: if f.endswith('.kid'): f = os.path.join(w[0], f[:-3] + 'pyc') if os.path.exists(f): os.remove(f) # Load test configuration if os.path.exists('test.cfg'): for w in os.walk('.'): if w[0].endswith(os.sep + 'config') and not os.sep + '.' in w[0]: modulename = "%s.app" % w[0][2:].replace(os.sep, ".") break else: modulename = None update_config(configfile="test.cfg", modulename=modulename) else: database.set_db_uri("sqlite:///:memory:") config.update({'global': {'autoreload.on': False, 'tg.new_style_logging': True}}) def start_cp(): if not config.get("cherrypy_started", False): cherrypy.server.start(serverClass=None, initOnly=True) config.update({"cherrypy_started" : True}) test_user = None def set_identity_user(user): """Setup a user for configuring request's identity.""" global test_user test_user = user def attach_identity(req): if config.get("identity.on", False): req.identity = (test_user and current_provider.authenticated_identity(test_user) or current_provider.anonymous_identity()) def create_request(request, method="GET", protocol="HTTP/1.1", headers={}, rfile=None, clientAddress="127.0.0.1", remoteHost="localhost", scheme="http"): start_cp() if not rfile: rfile = StringIO.StringIO("") if type(headers) != dict: headerList = headers else: headerList = [(key, value) for key, value in headers.items()] headerList.append(("Host", "localhost")) if not hasattr(cherrypy.root, "started"): startup.startTurboGears() cherrypy.root.started = True req = _cphttptools.Request(clientAddress, 80, remoteHost, scheme) cherrypy.serving.request = req attach_identity(req) cherrypy.serving.response = _cphttptools.Response() req.run(" ".join((method, request, protocol)), headerList, rfile) createRequest = create_request # deprecated class BrowsingSession(object): def __init__(self): self.visit = None self.response, self.status = None, None self.cookie = Cookie.SimpleCookie() def goto(self, *args, **kwargs): if self.cookie: headers = kwargs.setdefault('headers', {}) headers['Cookie'] = self.cookie.output() create_request(*args, **kwargs) # If we were given an encoding in the content type we should use it to # decode the response: ctype_parts = cherrypy.response.headers['Content-Type'].split(';') for parameter in ctype_parts[1:]: attribute, value = parameter.strip().split('=') try: self.unicode_response = cherrypy.response.body[0].decode(value) break except: # If the named encoding doesn't work then it doesn't work. We # just won't create the unicode_response field. pass self.response = cherrypy.response.body[0] self.status = cherrypy.response.status if cherrypy.response.simple_cookie: self.cookie.update(cherrypy.response.simple_cookie) def _return_directly(output, *args): return output class DummySession: session_storage = dict to_be_loaded = None class DummyRequest(_cphttptools.Request): """A very simple dummy request.""" remote_host = "127.0.0.1" def __init__(self, method='GET', path='/', headers=None): super(DummyRequest, self).__init__("127.0.0.1", "4711", "127.0.0.1") self.headers = headers or {} self.method = method self.path = path self.path_info = '' self.query_string = '' self.base = '' self.params = {} self.object_trail = [] self._session = DummySession() def purge__(self): pass def call(method, *args, **kw): start_cp() output, response = call_with_request(method, DummyRequest(), *args, **kw) return output def call_with_request(method, request, *args, **kw): """More fine-grained version of call method. This allows using request/response. """ orig_proc_output = controllers._process_output controllers._process_output = _return_directly cherrypy.serving.response = _cphttptools.Response() cherrypy.serving.response.version = "1.1" cherrypy.serving.request = request if not hasattr(request, "identity"): attach_identity(request) output = None try: output = method(*args, **kw) finally: del cherrypy.serving.request controllers._process_output = orig_proc_output response = cherrypy.serving.response return output, response class DBTest(unittest.TestCase): model = None def _get_soClasses(self): try: return [self.model.__dict__[x] for x in self.model.soClasses] except AttributeError: return self.model.__dict__.values() def setUp(self): if not self.model: self.model = get_model() if not self.model: raise "Unable to run database tests without a model" for item in self._get_soClasses(): if isinstance(item, types.TypeType) and issubclass(item, sqlobject.SQLObject) and item != sqlobject.SQLObject \ and item != InheritableSQLObject: item.createTable(ifNotExists=True) def tearDown(self): database.rollback_all() for item in self._get_soClasses()[::-1]: if isinstance(item, types.TypeType) and issubclass(item, sqlobject.SQLObject) and item != sqlobject.SQLObject \ and item != InheritableSQLObject: item.dropTable(ifExists=True) def reset_cp(): cherrypy.root = None def catch_validation_errors(widget, value): """Catch and unpack validation errors (for testing purposes).""" try: value = widget.validate(value) except validators.Invalid, errors: try: errors = errors.unpack_errors() except AttributeError: pass else: errors = {} return value, errors class MemoryListHandler(logging.Handler): def __init__(self): logging.Handler.__init__(self, level=logging.DEBUG) self.log = [] def emit(self, record): print "Got record: %s" % record print "formatted as: %s" % self.format(record) self.log.append(self.format(record)) def print_log(self): print "\n".join(self.log) self.log = [] def get_log(self): log = self.log self.log = [] return log _memhandler = MemoryListHandler() _currentcat = None def capture_log(category): """Capture log for one category. The category can either be a single category (a string like 'foo.bar') or a list of them. You *must* call print_log() to reset when you're done. """ global _currentcat assert not _currentcat if not isinstance(category, list) and not isinstance(category, tuple): category = [category] _currentcat = category for cat in category: log = logging.getLogger(cat) log.setLevel(logging.DEBUG) log.addHandler(_memhandler) def _reset_logging(): """Manage the resetting of the loggers.""" global _currentcat if not _currentcat: return for cat in _currentcat: log = logging.getLogger(cat) log.removeHandler(_memhandler) _currentcat = None def print_log(): """Print the log captured by capture_log to stdout. Resets that log and resets the temporarily added handlers. """ _reset_logging() _memhandler.print_log() def get_log(): """Return the list of log messages captured by capture_log. Resets that log and resets the temporarily added handlers. """ _reset_logging() return _memhandler.get_log() def sqlalchemy_cleanup(): database.metadata.clear() try: database.metadata.dispose() except AttributeError: # not threadlocal if database.metadata.bind: database.metadata.bind.dispose() database._engine = None if database.mapper == database.session.mapper: # the following does not work for SA < 0.4 sqlalchemy.orm.clear_mappers() __all__ = ["call", "create_request", "createRequest", "DBTest", "attach_identity", "set_identity_user", "capture_log", "print_log", "get_log", "sqlalchemy_cleanup"] PKA>L'V:V:turbogears/testutil.pyc; HIc @sdkZdkZdkZdkZdkZdkZdkZdklZydk Z dk l Z Wne j o e Z nXy dkZWne j o e ZnXdklZlZlZlZlZlZdklZdklZxeidD]Zeidedj orxoedD]_Zeid oIeii eded d Zeii!eoei"eqq*q*WqqWeii!d oxweidD]`Zedieid oeidedj o&deddi#eidZ$PqqWe Z$edd de$nei%dei&hdhde'<de(<<dZ)e a*dZ+dZ,ddhe ddddZ-e-Z.de/fdYZ0d Z1d!fd"YZ2d#ei3fd$YZ4d%Z5d&Z6d'ei7fd(YZ8d)Z9d*Z:d+ei;fd,YZ<e<Z=e a>d-Z?d.Z@d/ZAd0ZBd1ZCd2d3d4d'd5d6d7d8d9d:g ZDdS(;N(s _cphttptools(sInheritableSQLObject(sstartupsconfigs update_configs controllerssdatabases validators(scurrent_provider(s get_models.iis.kidispycstest.cfgsconfigs%s.apps configfiles modulenamessqlite:///:memory:sglobals autoreload.onstg.new_style_loggingcCsKtidt o3tiidtdttihdt<ndS(Nscherrypy_starteds serverClasssinitOnly( sconfigsgetsFalsescherrypysserversstartsNonesTruesupdate(((s,build\bdist.win32\egg\turbogears\testutil.pysstart_cp3scCs |adS(s0Setup a user for configuring request's identity.N(susers test_user(suser((s,build\bdist.win32\egg\turbogears\testutil.pysset_identity_user;scCsAtidto*to titp ti|_ndS(Ns identity.on( sconfigsgetsFalses test_userscurrent_providersauthenticated_identitysanonymous_identitysreqsidentity(sreq((s,build\bdist.win32\egg\turbogears\testutil.pysattach_identityAssGETsHTTP/1.1s 127.0.0.1s localhostshttpc Cs"t| otid}nt|tjo |} n:gi} |i D]\} } | | | fqS~ } | iddft t id otitt i_nti|d||}|t i_t|tit i_|idi|||f| |dS(NssHosts localhostsstartediPs ("sstart_cpsrfilesStringIOstypesheaderssdicts headerListsappends_[1]sitemsskeysvalueshasattrscherrypysrootsstartupsstartTurboGearssTruesstarteds _cphttptoolssRequests clientAddresss remoteHostsschemesreqsservingsrequestsattach_identitysResponsesresponsesrunsjoinsmethodsprotocol( srequestsmethodsprotocolsheaderssrfiles clientAddresss remoteHostsschemesreqs headerListskeysvalues_[1]((s,build\bdist.win32\egg\turbogears\testutil.pyscreate_requestHs 9   sBrowsingSessioncBstZdZdZRS(NcCs4t|_ttf\|_|_ti|_dS(N(sNonesselfsvisitsresponsesstatussCookies SimpleCookiescookie(sself((s,build\bdist.win32\egg\turbogears\testutil.pys__init__as cOs|io)|idh}|ii|dtij o/}y|i}WqZtj oqZXnXh}||fSdS(s:Catch and unpack validation errors (for testing purposes).N(swidgetsvalidatesvalues validatorssInvalidserrorss unpack_errorssAttributeError(swidgetsvalueserrors((s,build\bdist.win32\egg\turbogears\testutil.pyscatch_validation_errorss sMemoryListHandlercBs,tZdZdZdZdZRS(NcCs&tii|dtig|_dS(Nslevel(sloggingsHandlers__init__sselfsDEBUGslog(sself((s,build\bdist.win32\egg\turbogears\testutil.pys__init__scCs8d|GHd|i|GH|ii|i|dS(NsGot record: %ssformatted as: %s(srecordsselfsformatslogsappend(sselfsrecord((s,build\bdist.win32\egg\turbogears\testutil.pysemits cCsdi|iGHg|_dS(Ns (sjoinsselfslog(sself((s,build\bdist.win32\egg\turbogears\testutil.pys print_logscCs|i}g|_|SdS(N(sselfslog(sselfslog((s,build\bdist.win32\egg\turbogears\testutil.pysget_logs  (s__name__s __module__s__init__semits print_logsget_log(((s,build\bdist.win32\egg\turbogears\testutil.pysMemoryListHandlers   cCst ptt|t ot|t o |g}n|ax:|D]2}ti|}|i ti |i t qKWdS(sCapture log for one category. The category can either be a single category (a string like 'foo.bar') or a list of them. You *must* call print_log() to reset when you're done. N(s _currentcatsAssertionErrors isinstancescategorysliststuplescatsloggings getLoggerslogssetLevelsDEBUGs addHandlers _memhandler(scategoryslogscat((s,build\bdist.win32\egg\turbogears\testutil.pys capture_logs" cCsGt odSnx*tD]"}ti|}|itqWtadS(s$Manage the resetting of the loggers.N(s _currentcatscatsloggings getLoggerslogs removeHandlers _memhandlersNone(slogscat((s,build\bdist.win32\egg\turbogears\testutil.pys_reset_loggingscCsttidS(svPrint the log captured by capture_log to stdout. Resets that log and resets the temporarily added handlers. N(s_reset_loggings _memhandlers print_log(((s,build\bdist.win32\egg\turbogears\testutil.pys print_log scCsttiSdS(s~Return the list of log messages captured by capture_log. Resets that log and resets the temporarily added handlers. N(s_reset_loggings _memhandlersget_log(((s,build\bdist.win32\egg\turbogears\testutil.pysget_log*scCstiiytiiWn4tj o(tiiotiiiqUnXtt_titi ijot i i ndS(N( sdatabasesmetadatasclearsdisposesAttributeErrorsbindsNones_enginesmapperssessions sqlalchemysorms clear_mappers(((s,build\bdist.win32\egg\turbogears\testutil.pyssqlalchemy_cleanup4s   scallscreate_requests createRequestsattach_identitysset_identity_users capture_logs print_logsget_logssqlalchemy_cleanup(EsosstypessloggingsunittestsCookies cStringIOsStringIOscherrypys _cphttptoolss sqlobjectssqlobject.inheritancesInheritableSQLObjects ImportErrorsNones sqlalchemys turbogearssstartupsconfigs update_configs controllerssdatabases validatorssturbogears.identityscurrent_providersturbogears.utils get_modelswalkswssepsfsendswithspathsjoinsexistssremovesreplaces modulenames set_db_urisupdatesFalsesTruesstart_cps test_usersset_identity_usersattach_identityscreate_requests createRequestsobjectsBrowsingSessions_return_directlys DummySessionsRequests DummyRequestscallscall_with_requestsTestCasesDBTestsreset_cpscatch_validation_errorssHandlersMemoryListHandlers _memhandlers _currentcats capture_logs_reset_loggings print_logsget_logssqlalchemy_cleanups__all__(,s modulenamescherrypyscurrent_providersunittests print_logsstartupscatch_validation_errorss validatorssMemoryListHandlers DummySessions__all__sBrowsingSessionscreate_requests update_configsCookiestypess _memhandlersDBTestscallsconfigs sqlalchemys_reset_loggingsstart_cpscall_with_requestsattach_identitysset_identity_users _cphttptoolssget_logssqlalchemy_cleanups_return_directlys DummyRequestsInheritableSQLObjects sqlobjectsreset_cpsfsloggings capture_logsStringIOsdatabases controllerss createRequests get_modelswsos((s,build\bdist.win32\egg\turbogears\testutil.pys?s|            +   !!4!  (           PKK9\4S4Sturbogears/util.py"""The TurboGears utility module.""" import os import sys import re import logging import warnings import htmlentitydefs from inspect import getargspec, getargvalues from itertools import izip, islice, chain, imap from operator import isSequenceType from urllib import quote, unquote try: set except NameError: # Python 2.3 from sets import Set as set import pkg_resources from cherrypy import request from turbogears.decorator import decorator from turbogears import config def deprecated(message=None): """Decorator which can be used to mark functions as deprecated. It will result in a warning being emmitted when the function is used. Inspired by http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/391367 """ def decorate(func): if not decorate.message: decorate.message = \ "Call to deprecated function %s." % func.__name__ def newFunc(*args, **kwargs): warnings.warn(decorate.message, category=DeprecationWarning, stacklevel = 2) return func(*args, **kwargs) try: newFunc.__name__ = func.__name__ except TypeError: # not writable in Python 2.3 pass newFunc.__doc__ = func.__doc__ newFunc.__dict__.update(func.__dict__) return newFunc decorate.message = message return decorate class Bunch(dict): """Simple but handy collector of a bunch of named stuff.""" def __repr__(self): keys = self.keys() keys.sort() args = ', '.join(['%s=%r' % (key, self[key]) for key in keys]) return '%s(%s)' % (self.__class__.__name__, args) def __getattr__(self, name): try: return self[name] except KeyError: raise AttributeError(name) __setattr__ = dict.__setitem__ def __delattr__(self, name): try: del self[name] except KeyError: raise AttributeError(name) class DictObj(Bunch): def __init__(self, *args, **kw): super(DictObj, self).__init__(*args, **kw) __init__ = deprecated( "Use Bunch instead of DictObj and DictWrapper.")(__init__) DictWrapper = DictObj def Enum(*names): """True immutable symbolic enumeration with qualified value access. Written by Zoran Isailovski: http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/413486 """ # Uncomment the following line if you don't like empty enums. # assert names, "Empty enums are not supported" class EnumClass(object): __slots__ = names def __iter__(self): return iter(constants) def __len__(self): return len(constants) def __getitem__(self, i): return constants[i] def __repr__(self): return 'Enum' + str(names) def __str__(self): return 'enum ' + str(constants) enumType = EnumClass() class EnumValue(object): __slots__ = ('__value') def __init__(self, value): self.__value = value Value = property(lambda self: self.__value) EnumType = property(lambda self: enumType) def __hash__(self): return hash(self.__value) def __cmp__(self, other): # C fans might want to remove the following assertion # to make all enums comparable by ordinal value {;)) assert self.EnumType is other.EnumType, \ "Only values from the same enum are comparable" return cmp(self.__value, other.__value) def __invert__(self): return constants[maximum - self.__value] def __nonzero__(self): return bool(self.__value) def __repr__(self): return str(names[self.__value]) maximum = len(names) - 1 constants = [None] * len(names) for i, each in enumerate(names): val = EnumValue(i) setattr(EnumClass, each, val) constants[i] = val constants = tuple(constants) return enumType class setlike(list): """Set preserving item order.""" def add(self, item): if item not in self: self.append(item) def add_all(self, iterable): for item in iterable: self.add(item) def get_project_meta(name): """Get egg-info file with that name in the current project.""" for dirname in os.listdir("./"): if dirname.lower().endswith("egg-info"): fname = os.path.join(dirname, name) return fname def get_project_config(): """Try to select appropriate project configuration file.""" return os.path.exists('setup.py') and 'dev.cfg' or 'prod.cfg' def load_project_config(configfile=None): """Try to update the project settings from the config file specified. If configfile is C{None}, uses L{get_project_config} to locate one. """ if configfile is None: configfile = get_project_config() if not os.path.isfile(configfile): print 'Config file %s not found or is not a file.' % ( os.path.abspath(configfile),) sys.exit() package = get_package_name() config.update_config(configfile=configfile, modulename = package + ".config") def get_package_name(): """Try to find out the package name of the current directory.""" package = config.get("package") if package: return package if hasattr(sys, 'argv') and "--egg" in sys.argv: projectname = sys.argv[sys.argv.index("--egg")+1] egg = pkg_resources.get_distribution(projectname) top_level = egg._get_metadata("top_level.txt") else: fname = get_project_meta('top_level.txt') top_level = fname and open(fname) or [] for package in top_level: package = package.rstrip() if package and package != 'locales': return package def get_project_name(): pkg_info = get_project_meta('PKG-INFO') if pkg_info: name = list(open(pkg_info))[1][6:-1] return name.strip() def get_model(): package_name = get_package_name() if not package_name: return None package = __import__(package_name, {}, {}, ["model"]) if hasattr(package, "model"): return package.model def ensure_sequence(obj): """Construct a sequence from object.""" if obj is None: return [] elif isSequenceType(obj): return obj else: return [obj] def to_kw(func, args, kw, start=0): """Convert all applicable arguments to keyword arguments.""" argnames, defaults = getargspec(func)[::3] defaults = ensure_sequence(defaults) kv_pairs = izip( islice(argnames, start, len(argnames) - len(defaults)), args) for k, v in kv_pairs: kw[k] = v return args[len(argnames)-len(defaults)-start:], kw def from_kw(func, args, kw, start=0): """Extract named positional arguments from keyword arguments.""" argnames, defaults = getargspec(func)[::3] defaults = ensure_sequence(defaults) newargs = [kw.pop(name) for name in islice(argnames, start, len(argnames) - len(defaults)) if name in kw] newargs.extend(args) return newargs, kw def adapt_call(func, args, kw, start=0): """Remove excess arguments.""" argnames, varargs, kwargs, defaults = getargspec(func) defaults = ensure_sequence(defaults) del argnames[:start] if kwargs in (None, "_decorator__kwargs"): remove_keys(kw, [key for key in kw.iterkeys() if key not in argnames]) if varargs in (None, "_decorator__varargs"): args = args[:len(argnames) - len(defaults)] else: pivot = len(argnames) - len(defaults) args = tuple(chain(islice(args, pivot), imap(kw.pop, islice( argnames, pivot, None)), islice(args, pivot, None))) return args, kw def call_on_stack(func_name, kw, start=0): """Check if a call to function matching pattern is on stack.""" try: frame = sys._getframe(start+1) except ValueError: return False while frame.f_back: frame = frame.f_back if frame.f_code.co_name == func_name: args = getargvalues(frame)[3] for key in kw.iterkeys(): try: if kw[key] != args[key]: break except (KeyError, TypeError): break else: return True return False def remove_keys(dict_, seq): """Gracefully remove keys from dict.""" for key in seq: dict_.pop(key, None) return dict_ def has_arg(func, argname): """Check whether function has argument.""" return argname in getargspec(func)[0] def arg_index(func, argname): """Find index of argument as declared for given function.""" argnames = getargspec(func)[0] if has_arg(func, argname): return argnames.index(argname) else: return None def inject_arg(func, argname, argval, args, kw, start=0): """Insert argument into call.""" argnames, defaults = getargspec(func)[::3] defaults = ensure_sequence(defaults) pos = arg_index(func, argname) if pos is None or pos > len(argnames) - len(defaults) - 1: kw[argname] = argval else: pos -= start args = tuple(chain(islice(args, pos), (argval,), islice(args, pos, None))) return args, kw def inject_args(func, injections, args, kw, start=0): """Insert arguments into call.""" for argname, argval in injections.iteritems(): args, kw = inject_arg(func, argname, argval, args, kw, start) return args, kw def inject_call(func, injections, *args, **kw): """Insert arguments and call.""" args, kw = inject_args(func, injections, args, kw) return func(*args, **kw) def add_tg_args(func, args): """Add hint for special arguments that shall not be removed.""" try: tg_args = func._tg_args except AttributeError: tg_args = set() tg_args.update(args) func._tg_args = tg_args def bind_args(**add): """Call with arguments set to a predefined value.""" def entagle(func): return lambda func, *args, **kw: inject_call(func, add, *args, **kw) def make_decorator(func): argnames, varargs, kwargs, defaults = getargspec(func) defaults = list(ensure_sequence(defaults)) defaults = [d for d in defaults if argnames[-len(defaults) + defaults.index(d)] not in add] argnames = [arg for arg in argnames if arg not in add] return decorator(entagle, (argnames, varargs, kwargs, defaults))(func) return make_decorator def recursive_update(to_dict, from_dict): """Recursively update all dicts in to_dict with values from from_dict.""" # probably slow as hell :( should be optimized somehow... for k, v in from_dict.iteritems(): if isinstance(v, dict) and isinstance(to_dict[k], dict): recursive_update(to_dict[k], v) else: to_dict[k] = v return to_dict def combine_contexts(frames=None, depth=None): """Combine contexts (globals, locals) of frames.""" locals_ = {} globals_ = {} if frames is None: frames = [] if depth is not None: frames.extend([sys._getframe(d+1) for d in depth]) for frame in frames: locals_.update(frame.f_locals) globals_.update(frame.f_globals) return locals_, globals_ def request_available(): """Check if cherrypy.request is available.""" try: setattr(request, "tg_dumb_attribute", True) return True except AttributeError: return False def flatten_sequence(seq): """Flatten sequence.""" for item in seq: if isSequenceType(item) and not isinstance(item, basestring): for item in flatten_sequence(item): yield item else: yield item def load_class(dottedpath): """Load a class from a module in dotted-path notation. E.g.: load_class("package.module.class"). Based on recipe 16.3 from Python Cookbook, 2ed., by Alex Martelli, Anna Martelli Ravenscroft, and David Ascher (O'Reilly Media, 2005) """ assert dottedpath is not None, "dottedpath must not be None" splitted_path = dottedpath.split('.') modulename = '.'.join(splitted_path[:-1]) classname = splitted_path[-1] try: try: module = __import__(modulename, globals(), locals(), [classname]) except ValueError: # Py < 2.5 if not modulename: module = __import__(__name__.split('.')[0], globals(), locals(), [classname]) except ImportError: # properly log the exception information and return None # to tell caller we did not succeed logging.exception('tg.utils: Could not import %s' ' because exception occured' % dottedpath) return None return getattr(module, classname) def parse_http_accept_header(accept): """Parse an HTTP Accept header (RFC 2616) into a sorted list. The quality factors in the header determine the sort order. The values can include possible media-range parameters. This function can also be used for the Accept-Charset, Accept-Encoding and Accept-Language headers. """ if accept is None: return [] items = [] for item in accept.split(','): params = item.split(';') for i, param in enumerate(params[1:]): param = param.split('=', 1) if param[0].strip() == 'q': try: q = float(param[1]) if not 0 < q <= 1: raise ValueError except (IndexError, ValueError): q = 0 else: item = ';'.join(params[:i+1]) break else: q = 1 if q: item = item.strip() if item: items.append((item, q)) items.sort(lambda i1, i2: cmp(i2[1], i1[1])) return [item[0] for item in items] def simplify_http_accept_header(accept): """Parse an HTTP Accept header (RFC 2616) into a preferred value. The quality factors in the header determine the preference. Possible media-range parameters are allowed, but will be ignored. This function can also be used for the Accept-Charset, Accept-Encoding and Accept-Language headers. This is similar to parse_http_accept_header(accept)[0], but faster. """ if accept is None: return None best_item = accept best_q = 0 for item in accept.split(','): params = item.split(';') item = params.pop(0) for param in params: param = param.split('=', 1) if param[0].strip() == 'q': try: q = float(param[1]) if not 0 < q <= 1: raise ValueError except (IndexError, ValueError): q = 0 break else: q = 1 if q > best_q: item = item.strip() if item: best_item = item if q == 1: break best_q = q return best_item def to_unicode(value): """Convert encoded string to unicode string. Uses get_template_encoding_default() to guess source string encoding. Handles turbogears.i18n.lazystring correctly. """ if isinstance(value, str): # try to make sure we won't get UnicodeDecodeError from the template # by converting all encoded strings to Unicode strings try: value = unicode(value) except UnicodeDecodeError: try: value = unicode(value, get_template_encoding_default()) except UnicodeDecodeError: # fail early raise ValueError("Non-unicode string: %r" % value) return value def to_utf8(value): """Convert a unicode string to utf-8 encoded plain string. Handles turbogears.i18n.lazystring correctly. Does nothing to already encoded string. """ if isinstance(value, str): pass elif hasattr(value, '__unicode__'): value = unicode(value) if isinstance(value, unicode): value = value.encode('utf-8') return value _safe_for_cookie = ''.join(filter(lambda c: c != quote(c) and c not in "$,; \t\f\n\r\v", map(chr, xrange(256)))) def quote_cookie(value): """Escape chars in value that should not be put directly in a cookie.""" return quote(value, _safe_for_cookie) def unquote_cookie(value): """Unescape chars in a cookie value, the reverse of quote_cookie(value).""" return unquote(value) def get_template_encoding_default(engine_name=None): """Return default encoding for template files (Kid, Genshi, etc.).""" if engine_name is None: engine_name = config.get('tg.defaultview', 'kid') return config.get('%s.encoding' % engine_name, 'utf-8') _format_mime_types = dict( plain='text/plain', text='text/plain', html='text/html', xhtml = 'text/html', # see note below xml='text/xml', json='application/json') def get_mime_type_for_format(format): """Return default MIME media type for a template format. Note: By default we are serving xhtml as "text/html" instead of the more correct "application/xhtml+xml", since many browsers, particularly MSIE, do not support this. We are assuming that xhtml means XHTML 1.0 here, where this approach is possible. It would be possible to use some kind of content negotiation to deliver a customized content type, but we avoid this because it causes more harm (e.g. with proxies involved) than good. If you want to serve the proper content type (e.g. for XHTML 1.1), set tg.format_mime_types= {'xhtml': 'application/xhtml+xml'}. You can also set a particular content type per controller using the content_type parameter of the expose decorator. For detailed information about this issues, see here: http://www.smackthemouse.com/xhtmlxml, http://schneegans.de/web/xhtml/. """ mime_type = config.get('tg.format_mime_types', {}).get(format) if not mime_type: mime_type = _format_mime_types.get(format, 'text/html') return mime_type def mime_type_has_charset(mime_type): """Return whether the MIME media type supports a charset parameter. Note: According to RFC4627, we do not output a charset parameter for "application/json" (this type always uses a UTF encoding). """ if not mime_type: return False if mime_type.startswith('text/'): return True if mime_type.startswith('application/'): if mime_type.endswith('/xml') or mime_type.endswith('+xml'): return True if mime_type.endswith('/javascript'): return True return False def find_precision(value): """Find precision of some arbitrary value. The main intention for this function is to use it together with turbogears.i18n.format.format_decimal() where one has to inform the precision wanted. So, use it like this: format_decimal(some_number, find_precision(some_number)) """ decimals = '' try: stub, decimals = str(value).split('.') except ValueError: pass return len(decimals) def copy_if_mutable(value, feedback=False): """Make a copy of the value if it is mutable. Returns the value. If feedback is set to true, also returns whether value was mutable as the second element of a tuple. """ if isinstance(value, dict): mutable = True value = value.copy() elif isinstance(value, list): mutable = True value = value[:] else: mutable = False if feedback: return value, mutable else: return value def fixentities(htmltext): """Replace HTML character entities with numerical references. Note: This won't handle CDATA sections properly. """ def repl(matchobj): entity = htmlentitydefs.entitydefs.get(matchobj.group(1).lower()) if not entity: return matchobj.group(0) elif len(entity) == 1: if entity in "&<>'\"": return matchobj.group(0) return "&#%d;" % ord(entity) else: return entity return re.sub("&(\w+);?", repl, htmltext) __all__ = ["Bunch", "DictObj", "DictWrapper", "Enum", "setlike", "get_package_name", "get_model", "load_project_config", "ensure_sequence", "has_arg", "to_kw", "from_kw", "adapt_call", "call_on_stack", "remove_keys", "arg_index", "inject_arg", "inject_args", "add_tg_args", "bind_args", "recursive_update", "combine_contexts", "request_available", "flatten_sequence", "load_class", "parse_http_accept_header", "simplify_http_accept_header", "to_unicode", "to_utf8", "quote_cookie", "unquote_cookie", "get_template_encoding_default", "get_mime_type_for_format", "mime_type_has_charset", "find_precision", "copy_if_mutable", "deprecated"] PKA> &turbogears/util.pyc; HIc%@s{dZdkZdkZdkZdkZdkZdkZdklZl Z dk l Z l Z l Z lZdklZdklZlZyeWn ej odklZnXdkZdklZdklZd klZed Z d e!fd YZ"d e"fdYZ#e#Z$dZ%de&fdYZ'dZ(dZ)edZ*dZ+dZ,dZ-dZ.ddZ/ddZ0ddZ1ddZ2dZ3dZ4d Z5dd!Z6dd"Z7d#Z8d$Z9d%Z:d&Z;eed'Z<d(Z=d)Z>d*Z?d+Z@d,ZAd-ZBd.ZCd/iDeEd0eFeGeHd1ZId2ZJd3ZKed4ZLe!d5d6d7d6d8d9d:d9d;d<d=d>ZMd?ZNd@ZOdAZPeQdBZRdCZSd d dDdEddFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddeg%ZTdS(fsThe TurboGears utility module.N(s getargspecs getargvalues(sizipsisliceschainsimap(sisSequenceType(squotesunquote(sSet(srequest(s decorator(sconfigcsd|_SdS(sDecorator which can be used to mark functions as deprecated. It will result in a warning being emmitted when the function is used. Inspired by http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/391367 cs{i odi_nd}yi|_Wntj onXi|_|iii|SdS(NsCall to deprecated function %s.cs-tiidtdd||SdS(Nscategorys stackleveli(swarningsswarnsdecoratesmessagesDeprecationWarningsfuncsargsskwargs(sargsskwargs(sdecoratesfunc(s(build\bdist.win32\egg\turbogears\util.pysnewFunc's ( sdecoratesmessagesfuncs__name__snewFuncs TypeErrors__doc__s__dict__supdate(sfuncsnewFunc(sdecorate(sfuncs(build\bdist.win32\egg\turbogears\util.pysdecorate#s  N(sdecoratesmessage(smessagesdecorate((sdecorates(build\bdist.win32\egg\turbogears\util.pys deprecateds  sBunchcBs2tZdZdZdZeiZdZRS(s5Simple but handy collector of a bunch of named stuff.cCsl|i}|idigi}|D]}|d|||fq*~}d|ii |fSdS(Ns, s%s=%rs%s(%s)( sselfskeysssortsjoinsappends_[1]skeysargss __class__s__name__(sselfskeyss_[1]sargsskey((s(build\bdist.win32\egg\turbogears\util.pys__repr__9s  >cCs2y ||SWntj ot|nXdS(N(sselfsnamesKeyErrorsAttributeError(sselfsname((s(build\bdist.win32\egg\turbogears\util.pys __getattr__?s cCs1y ||=Wntj ot|nXdS(N(sselfsnamesKeyErrorsAttributeError(sselfsname((s(build\bdist.win32\egg\turbogears\util.pys __delattr__Gs ( s__name__s __module__s__doc__s__repr__s __getattr__sdicts __setitem__s __setattr__s __delattr__(((s(build\bdist.win32\egg\turbogears\util.pysBunch6s    sDictObjcBs#tZdZedeZRS(NcOstt|i||dS(N(ssupersDictObjsselfs__init__sargsskw(sselfsargsskw((s(build\bdist.win32\egg\turbogears\util.pys__init__Pss-Use Bunch instead of DictObj and DictWrapper.(s__name__s __module__s__init__s deprecated(((s(build\bdist.win32\egg\turbogears\util.pysDictObjNs c sdtfdY}|dtfdY}tdtgtx@t D]2\}}||}t |||||vscsS(N(senumType(sself(senumType(s(build\bdist.win32\egg\turbogears\util.pyswscCst|iSdS(N(shashsselfs_EnumValue__value(sself((s(build\bdist.win32\egg\turbogears\util.pys__hash__xscCs4|i|ijp tdt|i|iSdS(Ns-Only values from the same enum are comparable(sselfsEnumTypesothersAssertionErrorscmps_EnumValue__value(sselfsother((s(build\bdist.win32\egg\turbogears\util.pys__cmp__zscs|iSdS(N(s constantssmaximumsselfs_EnumValue__value(sself(smaximums constants(s(build\bdist.win32\egg\turbogears\util.pys __invert__scCst|iSdS(N(sboolsselfs_EnumValue__value(sself((s(build\bdist.win32\egg\turbogears\util.pys __nonzero__scst|iSdS(N(sstrsnamessselfs_EnumValue__value(sself(snames(s(build\bdist.win32\egg\turbogears\util.pys__repr__s( s__name__s __module__s __slots__s__init__spropertysValuesEnumTypes__hash__s__cmp__s __invert__s __nonzero__s__repr__((snamessenumTypesmaximums constants(s(build\bdist.win32\egg\turbogears\util.pys EnumValuers    iN(sobjects EnumClasssenumTypes EnumValueslensnamessmaximumsNones constantss enumeratesiseachsvalssetattrstuple( snamess EnumClasssvalsismaximums EnumValueseachs constantssenumType((snamessenumTypesmaximums constantss(build\bdist.win32\egg\turbogears\util.pysEnumXs "   ssetlikecBs tZdZdZdZRS(sSet preserving item order.cCs"||jo|i|ndS(N(sitemsselfsappend(sselfsitem((s(build\bdist.win32\egg\turbogears\util.pysadds cCs"x|D]}|i|qWdS(N(siterablesitemsselfsadd(sselfsiterablesitem((s(build\bdist.win32\egg\turbogears\util.pysadd_alls(s__name__s __module__s__doc__saddsadd_all(((s(build\bdist.win32\egg\turbogears\util.pyssetlikes  cCsQxJtidD]9}|iidotii||}|SqqWdS(s8Get egg-info file with that name in the current project.s./segg-infoN( sosslistdirsdirnameslowersendswithspathsjoinsnamesfname(snamesdirnamesfname((s(build\bdist.win32\egg\turbogears\util.pysget_project_metas cCs"tiidodpdSdS(s5Try to select appropriate project configuration file.ssetup.pysdev.cfgsprod.cfgN(sosspathsexists(((s(build\bdist.win32\egg\turbogears\util.pysget_project_configscCs{|tjo t}ntii| o&dtii|fGHtint }t i d|d|ddS(sTry to update the project settings from the config file specified. If configfile is C{None}, uses L{get_project_config} to locate one. s*Config file %s not found or is not a file.s configfiles modulenames.configN( s configfilesNonesget_project_configsosspathsisfilesabspathssyssexitsget_package_namespackagesconfigs update_config(s configfilespackage((s(build\bdist.win32\egg\turbogears\util.pysload_project_configs    cCstid}|o|Snttdo dtijo?titiidd}ti |}|i d}n't d}|o t|pg}x6|D].}|i}|o |djo|SqqWdS(s:Try to find out the package name of the current directory.spackagesargvs--eggis top_level.txtslocalesN(sconfigsgetspackageshasattrssyssargvsindexs projectnames pkg_resourcessget_distributionseggs _get_metadatas top_levelsget_project_metasfnamesopensrstrip(spackages projectnames top_levelsfnamesegg((s(build\bdist.win32\egg\turbogears\util.pysget_package_names   cCsBtd}|o+tt|ddd!}|iSndS(NsPKG-INFOiii(sget_project_metaspkg_infoslistsopensnamesstrip(spkg_infosname((s(build\bdist.win32\egg\turbogears\util.pysget_project_names cCsPt}| otSnt|hhdg}t|do |iSndS(Nsmodel(sget_package_names package_namesNones __import__spackageshasattrsmodel(s package_namespackage((s(build\bdist.win32\egg\turbogears\util.pys get_models  cCs5|tjogSnt|o|Sn|gSdS(s!Construct a sequence from object.N(sobjsNonesisSequenceType(sobj((s(build\bdist.win32\egg\turbogears\util.pysensure_sequences   ic Cst|ddd\}}t|}tt||t|t||}x|D]\}}|||^s((sfunc(sadd(s(build\bdist.win32\egg\turbogears\util.pysentagle]scst|\}}}}tt|}gi}|D]9}|t | |i |jo||q8q8~}gi}|D]!}|jo||qq~}t||||f|SdS(N(s getargspecsfuncsargnamessvarargsskwargssdefaultsslistsensure_sequencesappends_[1]sdslensindexsaddsargs decoratorsentagle(sfuncsvarargssargnamess_[1]sdefaultsskwargssargsd(sentaglesadd(s(build\bdist.win32\egg\turbogears\util.pysmake_decorator`s P8N(sentaglesmake_decorator(saddsentaglesmake_decorator((saddsentagles(build\bdist.win32\egg\turbogears\util.pys bind_args[s cCshx]|iD]O\}}t|tot||tot|||q |||| o/tt iddt t |g}qnXWn(tj otid|tSnXt||SdS(sLoad a class from a module in dotted-path notation. E.g.: load_class("package.module.class"). Based on recipe 16.3 from Python Cookbook, 2ed., by Alex Martelli, Anna Martelli Ravenscroft, and David Ascher (O'Reilly Media, 2005) sdottedpath must not be Nones.iis7tg.utils: Could not import %s because exception occuredN(s dottedpathsNonesAssertionErrorssplits splitted_pathsjoins modulenames classnames __import__sglobalsslocalssmodules ValueErrors__name__s ImportErrorsloggings exceptionsgetattr(s dottedpaths modulenamesmodules classnames splitted_path((s(build\bdist.win32\egg\turbogears\util.pys load_classs  "% cCs|tjogSng}x&|idD]}|id}xt|dD]\}}|idd}|di djo{y=t |d}d|jo djn o t nWnt t fj o d}nXdi||d }PqQqQWd}|o.|i }|o|i||fq@q+q+W|idgi}|D]}||dqb~SdS( s)Parse an HTTP Accept header (RFC 2616) into a sorted list. The quality factors in the header determine the sort order. The values can include possible media-range parameters. This function can also be used for the Accept-Charset, Accept-Encoding and Accept-Language headers. s,s;is=isqcCst|d|dS(Ni(scmpsi2si1(si1si2((s(build\bdist.win32\egg\turbogears\util.pyssN(sacceptsNonesitemsssplitsitemsparamss enumeratesisparamsstripsfloatsqs ValueErrors IndexErrorsjoinsappendssorts_[1](saccepts_[1]sisitemssqsitemsparamssparam((s(build\bdist.win32\egg\turbogears\util.pysparse_http_accept_headers4     cCsK|tjotSn|}d}x|idD]}|id}|id}x|D]}|idd}|di djody=t |d}d|jo djn o t nWnt t fj o d}nXPq\q\Wd}||jo9|i }|o"|}|djoPn|}q?q1q1W|SdS(sParse an HTTP Accept header (RFC 2616) into a preferred value. The quality factors in the header determine the preference. Possible media-range parameters are allowed, but will be ignored. This function can also be used for the Accept-Charset, Accept-Encoding and Accept-Language headers. This is similar to parse_http_accept_header(accept)[0], but faster. is,s;s=isqN(sacceptsNones best_itemsbest_qssplitsitemsparamsspopsparamsstripsfloatsqs ValueErrors IndexError(sacceptsbest_qs best_itemsqsitemsparamssparam((s(build\bdist.win32\egg\turbogears\util.pyssimplify_http_accept_headers:       cCs~t|tofyt|}Wqvtj oCyt|t}Wqrtj otd|qrXqvXn|SdS(sConvert encoded string to unicode string. Uses get_template_encoding_default() to guess source string encoding. Handles turbogears.i18n.lazystring correctly. sNon-unicode string: %rN(s isinstancesvaluesstrsunicodesUnicodeDecodeErrorsget_template_encoding_defaults ValueError(svalue((s(build\bdist.win32\egg\turbogears\util.pys to_unicodescCs_t|ton!t|dot|}nt|to|id}n|SdS(sConvert a unicode string to utf-8 encoded plain string. Handles turbogears.i18n.lazystring correctly. Does nothing to already encoded string. s __unicode__sutf-8N(s isinstancesvaluesstrshasattrsunicodesencode(svalue((s(build\bdist.win32\egg\turbogears\util.pysto_utf8sscCs|t|jo |djS(Ns $,; (scsquote(sc((s(build\bdist.win32\egg\turbogears\util.pys&sicCst|tSdS(sBEscape chars in value that should not be put directly in a cookie.N(squotesvalues_safe_for_cookie(svalue((s(build\bdist.win32\egg\turbogears\util.pys quote_cookie)scCst|SdS(sEUnescape chars in a cookie value, the reverse of quote_cookie(value).N(sunquotesvalue(svalue((s(build\bdist.win32\egg\turbogears\util.pysunquote_cookie.scCs;|tjotidd}ntid|dSdS(s?Return default encoding for template files (Kid, Genshi, etc.).stg.defaultviewskids %s.encodingsutf-8N(s engine_namesNonesconfigsget(s engine_name((s(build\bdist.win32\egg\turbogears\util.pysget_template_encoding_default3s splains text/plainstextshtmls text/htmlsxhtmlsxmlstext/xmlsjsonsapplication/jsoncCsAtidhi|}| oti|d}n|SdS(sReturn default MIME media type for a template format. Note: By default we are serving xhtml as "text/html" instead of the more correct "application/xhtml+xml", since many browsers, particularly MSIE, do not support this. We are assuming that xhtml means XHTML 1.0 here, where this approach is possible. It would be possible to use some kind of content negotiation to deliver a customized content type, but we avoid this because it causes more harm (e.g. with proxies involved) than good. If you want to serve the proper content type (e.g. for XHTML 1.1), set tg.format_mime_types= {'xhtml': 'application/xhtml+xml'}. You can also set a particular content type per controller using the content_type parameter of the expose decorator. For detailed information about this issues, see here: http://www.smackthemouse.com/xhtmlxml, http://schneegans.de/web/xhtml/. stg.format_mime_typess text/htmlN(sconfigsgetsformats mime_types_format_mime_types(sformats mime_type((s(build\bdist.win32\egg\turbogears\util.pysget_mime_type_for_format?s cCs| otSn|idotSn|idoD|idp |idotSn|idotSq|ntSdS(sReturn whether the MIME media type supports a charset parameter. Note: According to RFC4627, we do not output a charset parameter for "application/json" (this type always uses a UTF encoding). stext/s application/s/xmls+xmls /javascriptN(s mime_typesFalses startswithsTruesendswith(s mime_type((s(build\bdist.win32\egg\turbogears\util.pysmime_type_has_charsetXs  cCsId}yt|id\}}Wntj onXt|SdS(s$Find precision of some arbitrary value. The main intention for this function is to use it together with turbogears.i18n.format.format_decimal() where one has to inform the precision wanted. So, use it like this: format_decimal(some_number, find_precision(some_number)) ss.N(sdecimalssstrsvaluessplitsstubs ValueErrorslen(svaluesstubsdecimals((s(build\bdist.win32\egg\turbogears\util.pysfind_precisionks cCsjt|tot}|i}n(t|tot}|}nt}|o||fSn|SdS(sMake a copy of the value if it is mutable. Returns the value. If feedback is set to true, also returns whether value was mutable as the second element of a tuple. N( s isinstancesvaluesdictsTruesmutablescopyslistsFalsesfeedback(svaluesfeedbacksmutable((s(build\bdist.win32\egg\turbogears\util.pyscopy_if_mutable}s cCs d}tid||SdS(svReplace HTML character entities with numerical references. Note: This won't handle CDATA sections properly. cCstii|idi}| o|idSnHt|djo0|djo|idSndt|Sn|SdS(Niis&<>'"s&#%d;( shtmlentitydefss entitydefssgetsmatchobjsgroupslowersentityslensord(smatchobjsentity((s(build\bdist.win32\egg\turbogears\util.pysrepls! s&(\w+);?N(sreplsressubshtmltext(shtmltextsrepl((s(build\bdist.win32\egg\turbogears\util.pys fixentitiess s DictWrappersEnumsget_package_names get_modelsload_project_configsensure_sequenceshas_argsto_kwsfrom_kws adapt_calls call_on_stacks remove_keyss arg_indexs inject_args inject_argss add_tg_argss bind_argssrecursive_updatescombine_contextssrequest_availablesflatten_sequences load_classsparse_http_accept_headerssimplify_http_accept_headers to_unicodesto_utf8s quote_cookiesunquote_cookiesget_template_encoding_defaultsget_mime_type_for_formatsmime_type_has_charsetsfind_precisionscopy_if_mutables deprecated(Us__doc__sosssyssresloggingswarningsshtmlentitydefssinspects getargspecs getargvaluess itertoolssizipsisliceschainsimapsoperatorsisSequenceTypesurllibsquotesunquotessets NameErrorssetssSets pkg_resourcesscherrypysrequeststurbogears.decorators decorators turbogearssconfigsNones deprecatedsdictsBunchsDictObjs DictWrappersEnumslistssetlikesget_project_metasget_project_configsload_project_configsget_package_namesget_project_names get_modelsensure_sequencesto_kwsfrom_kws adapt_calls call_on_stacks remove_keysshas_args arg_indexs inject_args inject_argss inject_calls add_tg_argss bind_argssrecursive_updatescombine_contextssrequest_availablesflatten_sequences load_classsparse_http_accept_headerssimplify_http_accept_headers to_unicodesto_utf8sjoinsfiltersmapschrsxranges_safe_for_cookies quote_cookiesunquote_cookiesget_template_encoding_defaults_format_mime_typessget_mime_type_for_formatsmime_type_has_charsetsfind_precisionsFalsescopy_if_mutables fixentitiess__all__(Asunquotes adapt_callssets arg_indexschainsizipsmime_type_has_charsetsto_utf8sensure_sequencesget_template_encoding_defaultsfind_precisionsto_kwscombine_contextss to_unicodesDictObjscopy_if_mutablesget_project_names__all__sres call_on_stacks inject_argsEnumsget_project_metas quote_cookiesisSequenceTypesfrom_kwsget_project_configs getargvaluess inject_callsparse_http_accept_headers remove_keyss getargspecsconfigs_safe_for_cookies fixentitiess_format_mime_typesswarningssquotes inject_argss load_classshtmlentitydefss bind_argsssyss DictWrapperssimplify_http_accept_headersislicesget_package_nameshas_argsimaps decoratorsrequest_availablesloggingsunquote_cookiessetlikesrecursive_updates deprecatedsrequests pkg_resourcessget_mime_type_for_formats get_modelsload_project_configs add_tg_argssflatten_sequencesossBunch((s(build\bdist.win32\egg\turbogears\util.pys?s             9                $ (           PKK9GQ> > turbogears/validators.py"""Convenient validators and converters for data coming in from the web. This module also imports everything from formencode.validators, so all common validation routines are available here.""" import time import re from datetime import datetime import warnings import simplejson from formencode.validators import * from formencode.compound import * from formencode.api import Invalid, NoDefault from formencode.schema import Schema from formencode import ForEach from turbogears.i18n import format from turbogears import util from turbojson import jsonify from formencode import validators # to disambiguate the Number validator... def _(s): return s # dummy # FormEncode should call TG's gettext function with domain = "FormEncode" Validator.gettextargs['domain'] = 'FormEncode' class TgFancyValidator(FancyValidator): gettextargs = {'domain': 'TurboGears'} class Money(TgFancyValidator): """Validate a monetary value with currency.""" messages = { 'badFormat': _('Invalid number format'), 'empty': _('Empty values not allowed'), } def __init__(self, allow_empty=None, *args, **kw): if allow_empty is not None: warnings.warn("Use not_empty instead of allow_empty", DeprecationWarning, 2) not_empty = not allow_empty kw["not_empty"] = not_empty super(Money, self).__init__(*args, **kw) def _to_python(self, value, state): """Parse a string and return a float or integer.""" try: return format.parse_decimal(value) except ValueError: raise Invalid(self.message('badFormat', state), value, state) def _from_python(self, value, state): """Return a string using the correct grouping.""" return format.format_currency(value) class Number(TgFancyValidator): """Validate a decimal number.""" def _to_python(self, value, state): """Parse a string and return a float or integer.""" if isinstance(value, basestring): try: value = format.parse_decimal(value) except ValueError: pass return validators.Number.to_python(value, state) def _from_python(self, value, state): """Return a string using the correct grouping.""" dec_places = util.find_precision(value) if dec_places > 0: return format.format_decimal(value, dec_places) else: return format.format_number(value) class DateTimeConverter(TgFancyValidator): """Convert between Python datetime objects and strings.""" messages = { 'badFormat': _('Invalid datetime format'), 'empty': _('Empty values not allowed'), } def __init__(self, format="%Y/%m/%d %H:%M", allow_empty=None, *args, **kwargs): if allow_empty is not None: warnings.warn("Use not_empty instead of allow_empty", DeprecationWarning, 2) not_empty = not allow_empty kwargs["not_empty"] = not_empty super(DateTimeConverter, self).__init__(*args, **kwargs) self.format = format def _to_python(self, value, state): """Parse a string and return a datetime object.""" if value and isinstance(value, datetime): return value else: try: format = self.format if callable(format): format = format() tpl = time.strptime(value, format) except ValueError: raise Invalid(self.message('badFormat', state), value, state) # shoudn't use time.mktime() because it can give OverflowError, # depending on the date (e.g. pre 1970) and underlying C library return datetime(year=tpl.tm_year, month=tpl.tm_mon, day=tpl.tm_mday, hour=tpl.tm_hour, minute=tpl.tm_min, second=tpl.tm_sec) def _from_python(self, value, state): """Return a string representation of a datetime object.""" if not value: return None elif isinstance(value, datetime): # Python stdlib can only handle dates with year greater than 1900 format = self.format if callable(format): format = format() if format is None: format = "%Y-%m-%d" if value.year <= 1900: return strftime_before1900(value, format) else: return value.strftime(format) else: return value # Improved FieldStorageUploadConverter heeding not_empty=False # (see TurboGears ticket #1705, FormEncode bug #1905250) class FieldStorageUploadConverter(TgFancyValidator): messages = { 'notEmpty': _("Filename must not be empty"), } def _to_python(self, value, state=None): try: filename = value.filename except AttributeError: filename = None if not filename and self.not_empty: raise Invalid(self.message('notEmpty', state), value, state) return value # For translated messages that are not wrapped in a Validator.messages # dictionary, we need to reinstate the Turbogears gettext function under # the name "_", with the "TurboGears" domain, so that the TurboGears.mo # file is selected. import turbogears.i18n _ = lambda s: turbogears.i18n.gettext(s, domain='TurboGears') class MultipleSelection(ForEach): """A default validator for SelectionFields with multiple selection.""" if_missing = NoDefault if_empty = [] def to_python(self, value, state=None): try: return super(MultipleSelection, self).to_python(value, state) except Invalid: raise Invalid(_("Please select at least a value"), value, state) class Schema(Schema): """Modified Schema validator for TurboGears. A schema validates a dictionary of values, applying different validators (by key) to the different values. This modified Schema allows fields that do not appear in the fields parameter of your schema, but filters them out from the value dictionary. You might want to set filter_extra_fields to True when you're building a dynamic form with unpredictable keys and need these values. """ filter_extra_fields = True allow_extra_fields = True if_key_missing = None def from_python(self, value, state=None): # The Schema shouldn't do any from_python conversion because # adjust_value already takes care of that for all childs. return value class JSONValidator(TgFancyValidator): """A validator for JSON format.""" def _from_python(self, value, state): return jsonify.encode(value) def _to_python(self, value, state): return simplejson.loads(value) # Auxiliary functions def _findall(text, substr): # Also finds overlaps sites = [] i = 0 while 1: j = text.find(substr, i) if j == -1: break sites.append(j) i = j+1 return sites _illegal_s = re.compile(r"((^|[^%])(%%)*%s)") def strftime_before1900(dt, fmt): """strftime implementation supporting proleptic Gregorian dates before 1900. @see: http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/306860 """ if _illegal_s.search(fmt): raise TypeError("This strftime implementation does not handle %s") if dt.year > 1900: return dt.strftime(fmt) year = dt.year # For every non-leap year century, advance by # 6 years to get into the 28-year repeat cycle delta = 2000 - year off = 6*(delta // 100 + delta // 400) year += off # Move to around the year 2000 year = year + ((2000 - year)//28)*28 timetuple = dt.timetuple() s1 = time.strftime(fmt, (year,) + timetuple[1:]) sites1 = _findall(s1, str(year)) s2 = time.strftime(fmt, (year+28,) + timetuple[1:]) sites2 = _findall(s2, str(year+28)) sites = [] for site in sites1: if site in sites2: sites.append(site) s = s1 syear = "%4d" % (dt.year,) for site in sites: s = s[:site] + syear + s[site+4:] return s PKA>ƁϠ//turbogears/validators.pyc; HIc@sdZdkZdkZdklZdkZdkZdkTdkTdkl Z l Z dk l Z dk lZdklZdklZd klZd k lZd Zd eid ssMultipleSelectioncBs&tZdZeZgZedZRS(s@A default validator for SelectionFields with multiple selection.cCsOytt|i||SWn+tj ottd||nXdS(NsPlease select at least a value(ssupersMultipleSelectionsselfs to_pythonsvaluesstatesInvalids_(sselfsvaluesstate((s.build\bdist.win32\egg\turbogears\validators.pys to_pythons(s__name__s __module__s__doc__s NoDefaults if_missingsif_emptysNones to_python(((s.build\bdist.win32\egg\turbogears\validators.pysMultipleSelections sSchemacBs,tZdZeZeZeZedZRS(sModified Schema validator for TurboGears. A schema validates a dictionary of values, applying different validators (by key) to the different values. This modified Schema allows fields that do not appear in the fields parameter of your schema, but filters them out from the value dictionary. You might want to set filter_extra_fields to True when you're building a dynamic form with unpredictable keys and need these values. cCs|SdS(N(svalue(sselfsvaluesstate((s.build\bdist.win32\egg\turbogears\validators.pys from_pythons( s__name__s __module__s__doc__sTruesfilter_extra_fieldssallow_extra_fieldssNonesif_key_missings from_python(((s.build\bdist.win32\egg\turbogears\validators.pysSchemas s JSONValidatorcBs tZdZdZdZRS(sA validator for JSON format.cCsti|SdS(N(sjsonifysencodesvalue(sselfsvaluesstate((s.build\bdist.win32\egg\turbogears\validators.pys _from_pythonscCsti|SdS(N(s simplejsonsloadssvalue(sselfsvaluesstate((s.build\bdist.win32\egg\turbogears\validators.pys _to_pythons(s__name__s __module__s__doc__s _from_pythons _to_python(((s.build\bdist.win32\egg\turbogears\validators.pys JSONValidators  cCs^g}d}xGno?|i||}|djoPn|i||d}qW|SdS(Niii(ssitessistextsfindssubstrsjsappend(stextssubstrsisjssites((s.build\bdist.win32\egg\turbogears\validators.pys_findalls  s((^|[^%])(%%)*%s)cCsti|otdn|idjo|i|Sn|i}d|} d| d| d}||7}|d|dd}|i } t i||f| d} t | t |}t i||df| d}t |t |d}g}x,|D]$} | |jo|i| qqW| } d |if}x(|D] } | | || | d } qTW| Sd S( sstrftime implementation supporting proleptic Gregorian dates before 1900. @see: http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/306860 s/This strftime implementation does not handle %siliiidiiis%4diN(s _illegal_sssearchsfmts TypeErrorsdtsyearsstrftimesdeltasoffs timetuplestimess1s_findallsstrssites1ss2ssites2ssitesssitesappendssssyear(sdtsfmtssyearsoffss2syearssitesssites1ssites2sss timetuplesdeltassitess1((s.build\bdist.win32\egg\turbogears\validators.pysstrftime_before1900s4    ! (%s__doc__stimesresdatetimeswarningss simplejsonsformencode.validatorssformencode.compoundsformencode.apisInvalids NoDefaultsformencode.schemasSchemas formencodesForEachsturbogears.i18nsformats turbogearssutils turbojsonsjsonifys validatorss_s Validators gettextargssFancyValidatorsTgFancyValidatorsMoneysNumbersDateTimeConvertersFieldStorageUploadConvertersMultipleSelections JSONValidators_findallscompiles _illegal_ssstrftime_before1900(s_findalls turbogearssInvalidsdatetimes validatorssTgFancyValidatorsSchemasFieldStorageUploadConvertersformatsres _illegal_ssDateTimeConverters NoDefaults simplejsonswarningssstrftime_before1900sMultipleSelectionsutils_s JSONValidatorsMoneysjsonifysNumbersForEachstime((s.build\bdist.win32\egg\turbogears\validators.pys?s:             9    PKK98lAAturbogears/__init__.py"TurboGears Front-to-Back Web Framework" import pkg_resources from turbogears import config from turbogears.controllers import expose, flash, validate, redirect, \ error_handler, exception_handler, url from turbogears import controllers, view, database, validators, command, \ i18n, widgets, startup, scheduler from turbogears.release import version as __version__, author as __author__, \ email as __email__, license as __license__, \ copyright as __copyright__ from turbogears.widgets import mochikit from turbogears.widgets import jsi18nwidget from turbogears.config import update_config from turbogears.paginate import paginate from turbogears.startup import start_server extensions = pkg_resources.iter_entry_points("turbogears.extensions") for entrypoint in extensions: ext = entrypoint.load() if hasattr(ext, "tgsymbols"): globals().update(ext.tgsymbols()) i18n.install() # adds _ (gettext) to builtins namespace __all__ = ["url", "expose", "redirect", "validate", "flash", "error_handler", "exception_handler", "view", "controllers", "update_config", "database", "command", "validators", "mochikit", "widgets", "config", "start_server", "scheduler"] PKA>  turbogears/__init__.pyc; HIc@sdZdkZdklZdklZlZlZlZl Z l Z l Z dkl Z l Z lZlZlZlZlZlZlZdklZlZlZlZlZdk l!Z!dk l"Z"dk#l$Z$d k%l&Z&d k'l(Z(ei)d Z*xDe*D]<Z+e+i,Z-e.e-d oe/i0e-i1qqWei2d dddddddddddddddddgZ3dS(s&TurboGears Front-to-Back Web FrameworkN(sconfig(sexposesflashsvalidatesredirects error_handlersexception_handlersurl( s controllerssviewsdatabases validatorsscommandsi18nswidgetssstartups scheduler(sversionsauthorsemailslicenses copyright(smochikit(s jsi18nwidget(s update_config(spaginate(s start_serversturbogears.extensionss tgsymbolssurlsexposesredirectsvalidatesflashs error_handlersexception_handlersviews controllerss update_configsdatabasescommands validatorssmochikitswidgetssconfigs start_servers scheduler(4s__doc__s pkg_resourcess turbogearssconfigsturbogears.controllerssexposesflashsvalidatesredirects error_handlersexception_handlersurls controllerssviewsdatabases validatorsscommandsi18nswidgetssstartups schedulersturbogears.releasesversions __version__sauthors __author__semails __email__slicenses __license__s copyrights __copyright__sturbogears.widgetssmochikits jsi18nwidgetsturbogears.configs update_configsturbogears.paginatespaginatesturbogears.startups start_serversiter_entry_pointss extensionss entrypointsloadsextshasattrsglobalssupdates tgsymbolssinstalls__all__( sexception_handlerspaginatesstartups __email__s error_handlers validatorssredirects__all__sflashs update_configs entrypointsmochikitswidgetss extensionss __version__sconfigs __license__sexposes __author__s jsi18nwidgets schedulersi18nsvalidates __copyright__s start_serversdatabasesurls pkg_resourcess controllerssextscommandsview((s,build\bdist.win32\egg\turbogears\__init__.pys?s$  1=%       PKK9hL(66turbogears/command/base.py"""Commands for the TurboGears command line tool.""" import optparse import sys import os import os.path import glob import pkg_resources import dispatch import configobj import turbogears from turbogears.util import get_model, load_project_config, \ get_project_config, get_package_name from turbogears.identity import SecureObject, from_any_host from turbogears import config, database from sacommand import sacommand sys.path.insert(0, os.getcwd()) no_connection_param = ["help", "list"] no_model_param = ["help"] def silent_os_remove(fname): """Try to remove file 'fname' but mute any error that may happen. Returns True if file was actually removed and False otherwise. """ try: os.remove(fname) return True except os.error: pass return False class CommandWithDB(object): """Base class for commands that need to use the database""" config = None def __init__(self, version): pass def find_config(self): """Chooses the config file, trying to guess whether this is a development or installed project.""" load_project_config(self.config) self.dburi = config.get("sqlobject.dburi", None) if self.dburi and self.dburi.startswith("notrans_"): self.dburi = self.dburi[8:] class SQL(CommandWithDB): """Wrapper command for sqlobject-admin, and some sqlalchemy support. This automatically supplies sqlobject-admin with the database that is found in the config file. Will also supply the model module as appropriate. """ desc = "Run the database provider manager" need_project = True def __init__(self, version): if len(sys.argv) == 1 or sys.argv[1][0] == "-": parser = optparse.OptionParser( usage="%prog sql [command]\n\n" \ "hint: '%prog sql help' will list the sqlobject " \ "commands", version="%prog " + version) parser.add_option("-c", "--config", help="config file", dest="config") options, args = parser.parse_args(sys.argv[1:3]) if not options.config: parser.error("Please provide a valid option or command.") self.config = options.config # get rid of our config option if args: del sys.argv[1] else: del sys.argv[1:3] self.find_config() def run(self): """Executes the sqlobject-admin code.""" if not "--egg" in sys.argv and not turbogears.util.get_project_name(): print "This don't look like a TurboGears project." return else: command = sys.argv[1] if config.get("sqlalchemy.dburi"): try: sacommand(command, sys.argv) except dispatch.interfaces.NoApplicableMethods: sacommand("help", []) return try: from sqlobject.manager import command except ImportError: print "Error: SQLObject not installed." return sqlobjcommand = command if sqlobjcommand not in no_connection_param: if self.dburi: print "Using database URI %s" % self.dburi sys.argv.insert(2, self.dburi) sys.argv.insert(2, "-c") else: print ("Database URI not specified in the config file" " (%s).\nPlease be sure it's on the command line." % (self.config or get_project_config())) if sqlobjcommand not in no_model_param: if not "--egg" in sys.argv: eggname = glob.glob("*.egg-info") if not eggname or not os.path.exists( os.path.join(eggname[0], "sqlobject.txt")): eggname = self.fix_egginfo(eggname) eggname = eggname[0].replace(".egg-info", "") if not "." in sys.path: sys.path.append(".") pkg_resources.working_set.add_entry(".") sys.argv.insert(2, eggname) sys.argv.insert(2, "--egg") command.the_runner.run(sys.argv) def fix_egginfo(self, eggname): """Add egg-info directory if necessary.""" print """ This project seems incomplete. In order to use the sqlobject commands without manually specifying a model, there needs to be an egg-info directory with an appropriate sqlobject.txt file. I can fix this automatically. Would you like me to? """ dofix = raw_input("Enter [y] or n: ") if not dofix or dofix.lower()[0] == 'y': oldargs = sys.argv sys.argv = ["setup.py", "egg_info"] import imp imp.load_module("setup", *imp.find_module("setup", ["."])) sys.argv = oldargs import setuptools package = setuptools.find_packages()[0] eggname = glob.glob("*.egg-info") sqlobjectmeta = open(os.path.join(eggname[0], "sqlobject.txt"), "w") sqlobjectmeta.write("""db_module=%(package)s.model history_dir=$base/%(package)s/sqlobject-history """ % dict(package=package)) else: sys.exit(0) return eggname class Shell(CommandWithDB): """Convenient version of the Python interactive shell. This shell attempts to locate your configuration file and model module so that it can import everything from your model and make it available in the Python shell namespace. """ desc = "Start a Python prompt with your database available" need_project = True def run(self): """Run the shell""" self.find_config() mod = get_model() if mod: locals = mod.__dict__ else: locals = dict(__name__="tg-admin") if config.get("sqlalchemy.dburi"): using_sqlalchemy = True database.get_engine() locals.update(dict(session=database.session, metadata=database.metadata)) else: using_sqlalchemy = False try: # try to use IPython if possible import IPython class CustomIPShell(IPython.iplib.InteractiveShell): def raw_input(self, *args, **kw): try: return IPython.iplib.InteractiveShell.raw_input(self, *args, **kw) # needs decoding (see below)? except EOFError: r = raw_input("Do you wish to commit your " "database changes? [yes]") if not r.lower().startswith("n"): if using_sqlalchemy: self.push("session.flush()") else: self.push("hub.commit()") raise EOFError shell = IPython.Shell.IPShell(user_ns=locals, shell_class=CustomIPShell) shell.mainloop() except ImportError: import code class CustomShell(code.InteractiveConsole): def raw_input(self, *args, **kw): try: import readline except ImportError: pass try: r = code.InteractiveConsole.raw_input(self, *args, **kw) for encoding in (getattr(sys.stdin, 'encoding', None), sys.getdefaultencoding(), 'utf-8', 'latin-1'): if encoding: try: return r.decode(encoding) except UnicodeError: pass return r except EOFError: r = raw_input("Do you wish to commit your " "database changes? [yes]") if not r.lower().startswith("n"): if using_sqlalchemy: self.push("session.flush()") else: self.push("hub.commit()") raise EOFError shell = CustomShell(locals=locals) shell.interact() class ToolboxCommand(CommandWithDB): desc = "Launch the TurboGears Toolbox" def __init__(self, version): self.hostlist = ['127.0.0.1', '::1', '::ffff:127.0.0.1'] parser = optparse.OptionParser( usage="%prog toolbox [options]", version="%prog " + version) parser.add_option("-n", "--no-open", help="don't open browser automatically", dest="noopen", action="store_true", default=False) parser.add_option("-c", "--add-client", help="allow client ip address specified to connect to toolbox" " (can be specified more than once)", dest="host", action="append", default=None) parser.add_option("-p", "--port", help="port to run the Toolbox on", dest="port", default=7654) parser.add_option("--config", help="config file", dest="config", default=self.config or get_project_config()) options, args = parser.parse_args(sys.argv[1:]) self.port = int(options.port) self.noopen = options.noopen self.config = options.config if options.host: self.hostlist = self.hostlist + options.host turbogears.widgets.load_widgets() def openbrowser(self): import webbrowser webbrowser.open("http://localhost:%d" % self.port) def run(self): import cherrypy from turbogears import toolbox # Make sure we have full configuration with every option # in it so other plugins or whatever find what they need # when starting even inside the toolblox conf = get_package_name() conf = conf and "%s.config" % conf or None conf = config.config_obj(configfile=self.config, modulename=conf) if 'global' in conf: config.update({'global': conf['global']}) root = SecureObject(toolbox.Toolbox(), from_any_host(self.hostlist), exclude=['noaccess']) cherrypy.tree.mount(root, "/") # amend some parameters since we are running from the command # line in order to change port, log methods... config.update({'global': { 'server.socket_port': self.port, 'server.webpath': '/', 'server.environment': 'development', 'server.log_to_screen': True, 'autoreload.on': False, 'server.package': 'turbogears.toolbox', 'log_debug_info_filter.on': False, 'identity.failure_url': '/noaccess', 'identity.force_external_redirect': False, 'tg.defaultview': 'kid', 'tg.strict_parameters': False, 'kid.outputformat': 'html default', 'kid.encoding': 'utf-8' }}) if not self.noopen: cherrypy.server.start_with_callback(self.openbrowser) else: cherrypy.server.start() commands = None def main(): """Main command runner. Manages the primary command line arguments.""" # add commands defined by entrypoints commands = {} for entrypoint in pkg_resources.iter_entry_points("turbogears.command"): command = entrypoint.load() commands[entrypoint.name] = (command.desc, entrypoint) def _help(): """Custom help text for tg-admin.""" print """ TurboGears %s command line interface Usage: %s [options] Options: -c CONFIG --config=CONFIG Config file to use -e EGG_SPEC --egg=EGG_SPEC Run command on given Egg Commands:""" % (turbogears.__version__, sys.argv[0]) longest = max([len(key) for key in commands.keys()]) format = "%" + str(longest) + "s %s" commandlist = commands.keys() commandlist.sort() for key in commandlist: print format % (key, commands[key][0]) parser = optparse.OptionParser() parser.allow_interspersed_args = False parser.add_option("-c", "--config", dest="config") parser.add_option("-e", "--egg", dest="egg") parser.print_help = _help options, args = parser.parse_args(sys.argv[1:]) # if command is not found display help if not args or not commands.has_key(args[0]): _help() sys.exit() commandname = args[0] # strip command and any global options from the sys.argv sys.argv = [sys.argv[0]] + args[1:] command = commands[commandname][1] command = command.load() if options.egg: egg = pkg_resources.get_distribution(options.egg) os.chdir(egg.location) if hasattr(command,"need_project"): if not turbogears.util.get_project_name(): print "This command needs to be run from inside a project directory" return elif not options.config and not os.path.isfile(get_project_config()): print """No default config file was found. If it has been renamed use: tg-admin --config= %s""" % commandname return command.config = options.config command = command(turbogears.__version__) command.run() __all__ = ["main"] PKA>F-ƇAAturbogears/command/base.pyc; HIc@sTdZdkZdkZdkZdkZdkZdkZdkZdkZdk Z dk l Z l Z l Z lZdklZlZdk lZlZdklZeiideiddgZdgZd Zd efd YZd efd YZdefdYZdefdYZe Z!dZ"dgZ#dS(s.Commands for the TurboGears command line tool.N(s get_modelsload_project_configsget_project_configsget_package_name(s SecureObjects from_any_host(sconfigsdatabase(s sacommandishelpslistcCs6yti|tSWntij onXtSdS(sTry to remove file 'fname' but mute any error that may happen. Returns True if file was actually removed and False otherwise. N(sossremovesfnamesTrueserrorsFalse(sfname((s0build\bdist.win32\egg\turbogears\command\base.pyssilent_os_removes s CommandWithDBcBs&tZdZeZdZdZRS(s5Base class for commands that need to use the databasecCsdS(N((sselfsversion((s0build\bdist.win32\egg\turbogears\command\base.pys__init__.scCsWt|itidt|_|io|iido|id|_ndS(sdChooses the config file, trying to guess whether this is a development or installed project.ssqlobject.dburisnotrans_iN(sload_project_configsselfsconfigsgetsNonesdburis startswith(sself((s0build\bdist.win32\egg\turbogears\command\base.pys find_config1s  (s__name__s __module__s__doc__sNonesconfigs__init__s find_config(((s0build\bdist.win32\egg\turbogears\command\base.pys CommandWithDB)s  sSQLcBs5tZdZdZeZdZdZdZRS(sWrapper command for sqlobject-admin, and some sqlalchemy support. This automatically supplies sqlobject-admin with the database that is found in the config file. Will also supply the model module as appropriate. s!Run the database provider managercCsttidjptidddjotidddd|}|idd d d d d |itidd!\}}|i o|i dn|i |_ |otid=qtidd5n|idS(Niis-susagesL%prog sql [command] hint: '%prog sql help' will list the sqlobject commandssversions%prog s-cs--configshelps config filesdestsconfigis)Please provide a valid option or command.(slenssyssargvsoptparses OptionParsersversionsparsers add_options parse_argssoptionssargssconfigserrorsselfs find_config(sselfsversionsargssparsersoptions((s0build\bdist.win32\egg\turbogears\command\base.pys__init__Gs.    cCs0dtij otii o dGHdSntid}tidoEyt|tiWn&t i i j otdgnXdSnydk l}Wnt j odGHdSnX|}|tjo]|io9d |iGHtiid |itiid d q1d |iptGHn|tjodtij otid }| p$tiitii|dd o|i|}n|didd}dtij o$tiidtii dntiid |tiid dqn|i!i"tidS(s"Executes the sqlobject-admin code.s--eggs*This don't look like a TurboGears project.Nissqlalchemy.dburishelp(scommandsError: SQLObject not installed.sUsing database URI %sis-cs\Database URI not specified in the config file (%s). Please be sure it's on the command line.s *.egg-infois sqlobject.txts .egg-infoss.(#ssyssargvs turbogearssutilsget_project_namescommandsconfigsgets sacommandsdispatchs interfacessNoApplicableMethodsssqlobject.managers ImportErrors sqlobjcommandsno_connection_paramsselfsdburisinsertsget_project_configsno_model_paramsglobseggnamesosspathsexistssjoins fix_egginfosreplacesappends pkg_resourcess working_sets add_entrys the_runnersrun(sselfs sqlobjcommandseggnamescommand((s0build\bdist.win32\egg\turbogears\command\base.pysrun]sF"      /cCsdGHtd}| p|iddjoti}ddgt_dk}|id|idd g|t_dk }|i d}t i d }ttii|dd d }|id td|ntid|SdS(s$Add egg-info directory if necessary.s This project seems incomplete. In order to use the sqlobject commands without manually specifying a model, there needs to be an egg-info directory with an appropriate sqlobject.txt file. I can fix this automatically. Would you like me to? sEnter [y] or n: isyssetup.pysegg_infoNssetups.s *.egg-infos sqlobject.txtswsLdb_module=%(package)s.model history_dir=$base/%(package)s/sqlobject-history spackage(s raw_inputsdofixslowerssyssargvsoldargssimps load_modules find_modules setuptoolss find_packagesspackagesglobseggnamesopensosspathsjoins sqlobjectmetaswritesdictsexit(sselfseggnamesimpspackages sqlobjectmetasdofixsoldargss setuptools((s0build\bdist.win32\egg\turbogears\command\base.pys fix_egginfos      " ( s__name__s __module__s__doc__sdescsTrues need_projects__init__sruns fix_egginfo(((s0build\bdist.win32\egg\turbogears\command\base.pysSQL:s   /sShellcBs#tZdZdZeZdZRS(sConvenient version of the Python interactive shell. This shell attempts to locate your configuration file and model module so that it can import everything from your model and make it available in the Python shell namespace. s2Start a Python prompt with your database availablec s1|it}|o |i}ntdd}tido6t t i |i tdt idt intyTdkdiifdY}iid |d |}|iWnTtj oHdkd ifd Y}|d |}|inXdS(s Run the shells__name__stg-adminssqlalchemy.dburissessionsmetadataNs CustomIPShellcstZdZRS(Ncsyiii|||SWnetj oYtd}|i i d o)o|i dqz|i dntnXdS(Ns2Do you wish to commit your database changes? [yes]snssession.flush()s hub.commit()( sIPythonsiplibsInteractiveShells raw_inputsselfsargsskwsEOFErrorsrslowers startswithsusing_sqlalchemyspush(sselfsargsskwsr(susing_sqlalchemysIPython(s0build\bdist.win32\egg\turbogears\command\base.pys raw_inputs (s__name__s __module__s raw_input((sIPythonsusing_sqlalchemy(s0build\bdist.win32\egg\turbogears\command\base.pys CustomIPShellssuser_nss shell_classs CustomShellcstZdZRS(Ncsy dk}Wntj onXyii|||}xat t i dt t i ddfD]8}|o+y|i|SWqtj oqXqfqfW|SWnetj oYtd}|iid o)o|idq|idntnXdS(Nsencodingsutf-8slatin-1s2Do you wish to commit your database changes? [yes]snssession.flush()s hub.commit()(sreadlines ImportErrorscodesInteractiveConsoles raw_inputsselfsargsskwsrsgetattrssyssstdinsNonesgetdefaultencodingsencodingsdecodes UnicodeErrorsEOFErrorslowers startswithsusing_sqlalchemyspush(sselfsargsskwsencodingsrsreadline(scodesusing_sqlalchemy(s0build\bdist.win32\egg\turbogears\command\base.pys raw_inputs* (  (s__name__s __module__s raw_input((scodesusing_sqlalchemy(s0build\bdist.win32\egg\turbogears\command\base.pys CustomShellsslocals(sselfs find_configs get_modelsmods__dict__slocalssdictsconfigsgetsTruesusing_sqlalchemysdatabases get_enginesupdatessessionsmetadatasFalsesIPythonsiplibsInteractiveShells CustomIPShellsShellsIPShellsshellsmainloops ImportErrorscodesInteractiveConsoles CustomShellsinteract( sselfscodes CustomIPShellsshellsusing_sqlalchemys CustomShellsIPythonslocalssmod((scodesusing_sqlalchemysIPythons0build\bdist.win32\egg\turbogears\command\base.pysruns.     "  (s__name__s __module__s__doc__sdescsTrues need_projectsrun(((s0build\bdist.win32\egg\turbogears\command\base.pysShells sToolboxCommandcBs)tZdZdZdZdZRS(NsLaunch the TurboGears Toolboxc CsDdddg|_tidddd|}|idd d d d d dddt|iddd dd ddddt|iddd dd ddd|idd dd dd|i pt |i t i d\}}t|i|_|i|_|i |_ |io|i|i|_ntiidS(Ns 127.0.0.1s::1s::ffff:127.0.0.1susages%prog toolbox [options]sversions%prog s-ns --no-openshelps don't open browser automaticallysdestsnoopensactions store_truesdefaults-cs --add-clientsYallow client ip address specified to connect to toolbox (can be specified more than once)shostsappends-ps--portsport to run the Toolbox onsportis--configs config filesconfigi(sselfshostlistsoptparses OptionParsersversionsparsers add_optionsFalsesNonesconfigsget_project_configs parse_argsssyssargvsoptionssargssintsportsnoopenshosts turbogearsswidgetss load_widgets(sselfsversionsargssparsersoptions((s0build\bdist.win32\egg\turbogears\command\base.pys__init__s,         cCs!dk}|id|idS(Nshttp://localhost:%d(s webbrowsersopensselfsport(sselfs webbrowser((s0build\bdist.win32\egg\turbogears\command\base.pys openbrowser!s cCsxdk}dkl}t}|od|pt}tid|id|}d|joti hd|d<nt |i t |i ddg}|ii|dti hdhd |i<d d<d d <d t<dt<dd<dt<dd<dt<dd<dt<dd<dd<<|i o|ii|in|iidS(N(stoolboxs %s.configs configfiles modulenamesglobalsexcludesnoaccesss/sserver.socket_portsserver.webpathsserver.environments developmentsserver.log_to_screens autoreload.onsserver.packagesturbogears.toolboxslog_debug_info_filter.onsidentity.failure_urls /noaccesss identity.force_external_redirectstg.defaultviewskidstg.strict_parametersskid.outputformats html defaults kid.encodingsutf-8(scherrypys turbogearsstoolboxsget_package_namesconfsNonesconfigs config_objsselfsupdates SecureObjectsToolboxs from_any_hostshostlistsrootstreesmountsportsTruesFalsesnoopensserversstart_with_callbacks openbrowsersstart(sselfscherrypysrootsconfstoolbox((s0build\bdist.win32\egg\turbogears\command\base.pysrun%s     (s__name__s __module__sdescs__init__s openbrowsersrun(((s0build\bdist.win32\egg\turbogears\command\base.pysToolboxCommands  c shx9tidD](}|i}|i|f|i Options: -c CONFIG --config=CONFIG Config file to use -e EGG_SPEC --egg=EGG_SPEC Run command on given Egg Commands:is%ss %sN(s turbogearss __version__ssyssargvsmaxsappends_[1]scommandsskeysskeyslenslongestsstrsformats commandlistssort(s_[1]sformats commandlistslongestskey(scommands(s0build\bdist.win32\egg\turbogears\command\base.pys_helpZs 9  s-cs--configsdestsconfigs-es--eggseggiis need_projects<This command needs to be run from inside a project directoryNsYNo default config file was found. If it has been renamed use: tg-admin --config= %s('scommandss pkg_resourcessiter_entry_pointss entrypointsloadscommandsdescsnames_helpsoptparses OptionParsersparsersFalsesallow_interspersed_argss add_options print_helps parse_argsssyssargvsoptionssargsshas_keysexits commandnameseggsget_distributionsosschdirslocationshasattrs turbogearssutilsget_project_namesconfigspathsisfilesget_project_configs __version__srun( scommandssargssparsers commandnames_helpscommands entrypointseggsoptions((scommandss0build\bdist.win32\egg\turbogears\command\base.pysmainRsB        "   smain($s__doc__soptparsessyssossos.pathsglobs pkg_resourcessdispatchs configobjs turbogearssturbogears.utils get_modelsload_project_configsget_project_configsget_package_namesturbogears.identitys SecureObjects from_any_hostsconfigsdatabases sacommandspathsinsertsgetcwdsno_connection_paramsno_model_paramssilent_os_removesobjects CommandWithDBsSQLsShellsToolboxCommandsNonescommandssmains__all__(s configobjsToolboxCommands turbogearssdispatchsno_model_params CommandWithDBs__all__s sacommandssilent_os_removesget_project_configsmainsconfigsno_connection_paramsoptparsesglobssyssShells from_any_hostsget_package_names SecureObjectscommandssdatabases pkg_resourcess get_modelsload_project_configsSQLsos((s0build\bdist.win32\egg\turbogears\command\base.pys?s0             oVQ APKK9Js~ȶDDturbogears/command/i18n.py# test-file: test_command_i18n.py """Command-line user interface for i18n administration.""" import re import glob import os import os.path import atexit import optparse import tempfile from pkg_resources import resource_filename import formencode import kid import turbogears import turbogears.i18n from turbogears import config from turbogears.toolbox.admi18n import pygettext, msgfmt, catalog from turbogears.toolbox.admi18n.catalog import normalize from turbogears.command.base import silent_os_remove from turbogears.util import load_project_config, get_package_name class ProgramError(StandardError): """Signals about a general application error.""" def copy_file(src, dest): if os.path.exists(dest): os.remove(dest) data = open(src, 'rb').read() open(dest, 'wb').write(data) _str_literal = r"""(?:'((?:[^']|\\')*)'|"((?:[^"]|\\")*)")""" _py_i18n_re = re.compile(r"\b_\s*\(\s*[uU]?[rR]?%s\s*\)" % _str_literal) _js_i18n_re = re.compile(r"\b_\s*\(\s*%s\s*\)" % _str_literal) class InternationalizationTool(object): """Manages i18n data via command-line interface. Contributed to TurboGears by Max Ischenko (http://maxischenko.in.ua). """ desc = "Manage i18n data" need_project = True config = None load_config = True locale_dir = 'locales' domain = 'messages' name = None package = None def __init__(self, version): parser = optparse.OptionParser(usage=""" %prog [options] Available commands: add Creates a message catalog for specified locale collect Scan source files to gather translatable strings in a .pot file merge Sync message catalog in different languages with .pot file compile Compile message catalog (.po -> .mo) create_js_messages Create message catalogs for JS usage clean Delete backups and compiled files """, version="%prog " + version) parser.add_option("-f", "--force", default=False, action="store_true", dest="force_ops", help="Force potentially damaging actions") parser.add_option("-a", "--ascii", default=False, action="store_true", dest="ascii_output", help="Escape non-ascii characters") parser.add_option("-K", "--no-kid-support", default=True, action="store_false", dest="kid_support", help="Do not extract messages from Kid templates") parser.add_option("", "--loose-kid-support", action="store_true", dest="loose_kid_support", help="Extract ALL messages from Kid templates (this is default)") parser.add_option("", "--strict-kid-support", action="store_false", dest="loose_kid_support", help="Extract only messages marked with lang attribute" " from Kid templates") parser.add_option("", "--src-dir", default=None, action="store", dest="source_dir", help="Directory that contains source files") parser.add_option("", "--no-js-support", default=True, action="store_false", dest="js_support", help="Extract messages from js-files.") parser.add_option("", "--js-base-dir", action="store", dest="js_base_dir", default="static/javascript", help="Base directory of javascript files" " for generated message-files.") parser.set_defaults(loose_kid_support=True, js_support=True) self.parser = parser def load_project_config(self): """Choose the config file. Try to guess whether this is a development or installed project. """ # check whether user specified custom settings if self.load_config: load_project_config(self.config) if config.get("i18n.locale_dir"): self.locale_dir = config.get("i18n.locale_dir") print 'Use %s as a locale directory' % self.locale_dir if config.get('i18n.domain'): self.domain = config.get("i18n.domain") print 'Use %s as a message domain' % self.domain if os.path.exists(self.locale_dir) and \ not os.path.isdir(self.locale_dir): raise ProgramError, ( '%s is not a directory' % self.locale_dir) if not os.path.exists(self.locale_dir): os.makedirs(self.locale_dir) def parse_args(self): return self.parser.parse_args() def run(self): self.load_project_config() options, args = self.parse_args() if not args: self.parser.error("No command specified") self.options = options command, args = args[0], args[1:] if 'collect' == command: self.scan_source_files() elif 'add' == command: self.add_languages(args) elif 'compile' == command: self.compile_message_catalogs() elif 'merge' == command: self.merge_message_catalogs() elif 'clean' == command: self.clean_generated_files() elif 'create_js_messages' == command: self.create_js_messages() else: self.parser.error("Command not recognized") def create_js_messages(self): self.load_project_config() languages = [] # we assume the the structure of messages is always # //LC_MESSAGES ... # to extract the languages known to the app locale_dir_prefix = self.locale_dir.split(os.sep) for fname in self.list_message_catalogs(): languages.append(fname.split(os.sep)[len(locale_dir_prefix):][0]) import turbogears.i18n.utils as utils srcdir = self.options.source_dir or get_package_name().split('.', 1)[0] def list_js_files(): for root, dirs, files in os.walk(srcdir): if os.path.basename(root).lower() in ('cvs', '.svn'): continue for fname in files: name, ext = os.path.splitext(fname) srcfile = os.path.join(root, fname) if ext == '.js': yield srcfile def escape(arg): if "'" in arg: return '"%s"' % arg return "'%s'" % arg for locale in languages: def gl(): return locale utils._get_locale = gl messages = [] for filename in list_js_files(): for key in self.get_strings_in_js(os.path.join(filename))[0]: key = unicode(key) msg = unicode(_(key, locale)) messages.append((key, msg)) # for a final return header = """ if (typeof(MESSAGES) == "undefined") { MESSAGES = {}; } LANG = '%s'; _messages = [ """ % locale footer = """ ]; for(var i in _messages) { MESSAGES[_messages[i][0]] = _messages[i][1]; } """ message_block = u",\n".join(["[%s , %s]" % (escape(msgid), escape(msgstr)) for msgid, msgstr in messages]).encode("utf-8") message_block = message_block + "\n" outfilename = os.path.join(srcdir, self.options.js_base_dir, 'messages-%s.js' % locale) print "Creating message file <%s>." % outfilename mf = open(outfilename, "w") mf.write(header) mf.write(message_block) mf.write(footer) mf.close() def clean_generated_files(self): potfile = self.get_potfile_path() silent_os_remove(potfile.replace('.pot', '.bak')) for fname in self.list_message_catalogs(): silent_os_remove(fname.replace('.po', '.mo')) silent_os_remove(fname.replace('.po', '.back')) def merge_message_catalogs(self): potfile = self.get_potfile_path() catalogs = self.list_message_catalogs() catalog.merge(potfile, catalogs) def compile_message_catalogs(self): for fname in self.list_message_catalogs(): dest = fname.replace('.po','.mo') msgfmt.make(fname, dest) if os.path.exists(dest): print 'Compiled %s OK' % fname else: print 'Compilation of %s failed!' % fname def _copy_file_withcheck(self, sourcefile, targetfile): if not (os.path.exists(targetfile) and not self.options.force_ops): copy_file(sourcefile, targetfile) print 'Copy', sourcefile, 'to', targetfile else: print "File %s exists, use --force to override" % targetfile def _copy_moduletranslation(self, sourcefile, targetdir, language): modulefilename = os.path.basename(sourcefile) if os.path.exists(sourcefile): targetfile = os.path.join(targetdir, modulefilename) self._copy_file_withcheck(sourcefile, targetfile) else: print ("%s translation for language '%s' does not exist" " (file searched '%s').\nPlease consider to contribute" " a translation." % (modulefilename, language, sourcefile)) def add_languages(self, codes): potfile = self.get_potfile_path() if not os.path.isfile(potfile): print "Run 'collect' first to create", potfile return for code in codes: catalog_file = self.get_locale_catalog(code) langdir = os.path.dirname(catalog_file) if not os.path.exists(langdir): os.makedirs(langdir) sourcefile_fe = os.path.join(formencode.api.get_localedir(), code, \ "LC_MESSAGES","FormEncode.mo") self._copy_moduletranslation(sourcefile_fe, langdir, code) basedir_i18n_tg = resource_filename("turbogears.i18n", "data") sourcefile_tg = os.path.join(basedir_i18n_tg, code, \ "LC_MESSAGES", "TurboGears.mo") self._copy_moduletranslation(sourcefile_tg, langdir, code) self._copy_file_withcheck(potfile, catalog_file) def scan_source_files(self): source_files = [] kid_files = [] js_files = [] srcdir = self.options.source_dir or get_package_name().split('.', 1)[0] print 'Scanning source directory', srcdir for root, dirs, files in os.walk(srcdir): if os.path.basename(root).lower() in ('cvs', '.svn'): continue for fname in files: name, ext = os.path.splitext(fname) srcfile = os.path.join(root, fname) if ext == '.py': source_files.append(srcfile) elif ext == '.kid': kid_files.append(srcfile) elif ext == '.js': js_files.append(srcfile) else: pass # do nothing tmp_handle, tmp_potfile = tempfile.mkstemp( '.pot', 'tmp', self.locale_dir) os.close(tmp_handle) potbasename = os.path.basename(tmp_potfile)[:-4] pygettext_options = ['-v', '-d', potbasename, \ '-p', os.path.dirname(tmp_potfile)] if self.options.ascii_output: pygettext_options.insert(0, '-E') pygettext.sys.argv = [''] + pygettext_options + source_files pygettext.main() if not os.path.exists(tmp_potfile): raise ProgramError, 'pygettext failed' atexit.register(silent_os_remove, tmp_potfile) if kid_files and self.options.kid_support: self.scan_kid_files(tmp_potfile, kid_files) if js_files and self.options.js_support: self.scan_js_files(tmp_potfile, js_files) potfile = self.get_potfile_path() if os.path.isfile(potfile): bakfile = potfile.replace('.pot', '.bak') silent_os_remove(bakfile) os.rename(potfile, bakfile) print 'Backup existing file to', bakfile os.rename(tmp_potfile, potfile) print 'Message templates written to', potfile def scan_kid_files(self, potfile, files): messages = [] tags_to_ignore = ['script', 'style'] keys = [] def process_text(is_attribute, k, tag): key = None s = _py_i18n_re.search(k) if s: key = (s.group(1) or s.group(2) or '').strip() elif not is_attribute: # we don't have a kid expression in there, so it is # "just" a text entry - which we want to be translated! import kid.codewriter as cw parts = cw.interpolate(k) if isinstance(parts, list) and len(parts) > 1: print "Warning: Mixed content in tag <%s>: %s" % (tag, k) elif isinstance(parts, basestring): key = k.strip() if key and (key not in keys) and (tag not in tags_to_ignore): messages.append((tag, fname, key)) keys.append(key) for fname in files: print 'Working on', fname tree = None fh = open(fname) try: tree = kid.document(fh) except Exception, e: fh.close() print 'Skip %s: %s' % (fname, e) continue sentinel = None tag = None for ev, el in tree: if ev == kid.parser.START: if not isinstance(el.tag, unicode): # skip comments, processing instructions etc. continue if el.get('lang', None) is not None: # if we have a lang-attribute, ignore this # node AND all it's descendants. sentinel = el continue # set the tag from the current one. tag = re.sub('({[^}]+})?(\w+)', '\\2', el.tag) if tag in ('script', 'style'): # skip JavaScript, CSS etc. sentinel = el continue # process the attribute texts for attrib_text in el.attrib.values(): process_text(True, attrib_text, tag) elif ev == kid.parser.END: if el is sentinel: sentinel = None elif ev == kid.parser.TEXT: if sentinel is None and el.strip(): process_text(False, el, tag) fh.close() fd = open(potfile, 'at+') for tag, fname, text in messages: text = normalize(text.encode('utf-8')) print >> fd, '#: %s:%s' % (fname, tag) print >> fd, 'msgid %s' % text print >> fd, 'msgstr ""' print >> fd, '' fd.close() def get_strings_in_js(self, fname): messages = [] keys = [] for i, line in enumerate(open(fname)): s = _js_i18n_re.search(line) while s: key = s.group(1) or s.group(2) pos = s.end() if key and (key not in keys): messages.append((i + 1, fname, key)) keys.append(key) s = _js_i18n_re.search(line, pos) return keys, messages def scan_js_files(self, potfile, files): messages = [] keys = [] for fname in files: print 'Working on', fname k, m = self.get_strings_in_js(fname) keys.extend(k) messages.extend(m) fd = open(potfile, 'at+') for linenumber, fname, text in messages: text = normalize(text.encode('utf-8')) print >> fd, '#: %s:%i' % (fname, linenumber) print >> fd, 'msgid %s' % text print >> fd, 'msgstr ""' print >> fd, '' fd.close() def get_potfile_path(self): return os.path.join(self.locale_dir, '%s.pot' % self.domain) def get_locale_catalog(self, code): return os.path.join(self.locale_dir, code, 'LC_MESSAGES', '%s.po' % self.domain) def list_message_catalogs(self): files = [] for name in glob.glob(self.locale_dir + '/*'): if os.path.isdir(name): fname = os.path.join(name, 'LC_MESSAGES', '%s.po' % self.domain) if os.path.isfile(fname): files.append(fname) return files def fix_tzinfo(self, potfile): """Fix tzinfo. In certain enviroments, tzinfo as formatted by strftime() is not utf-8, e.g. Windows XP with Russian MUL. This leads to later error when a program trying to read catalog. """ data = file(potfile, 'rb').read() def repl(m): """Remove tzinfo if it breaks encoding.""" tzinfo = m.group(2) try: tzinfo.decode('utf-8') except UnicodeDecodeError: return m.group(1) # cut tz info return m.group(0) # leave unchanged data = re.sub( "(POT-Creation-Date: [\d-]+ [0-9:]+)\+([^\\\\]+)", repl, data) file(potfile, 'wb').write(data) def main(): tool = InternationalizationTool() tool.run() if __name__ == '__main__': main() PKA> 4TTturbogears/command/i18n.pyc; HIc@sOdZdkZdkZdkZdkZdkZdkZdkZdkl Z dk Z dk Z dk Z dk Z dk lZdklZlZlZdklZdklZdklZlZdefd YZd Zd Zeid eZeid eZ de!fdYZ"dZ#e$djo e#ndS(s4Command-line user interface for i18n administration.N(sresource_filename(sconfig(s pygettextsmsgfmtscatalog(s normalize(ssilent_os_remove(sload_project_configsget_package_names ProgramErrorcBstZdZRS(s*Signals about a general application error.(s__name__s __module__s__doc__(((s0build\bdist.win32\egg\turbogears\command\i18n.pys ProgramErrors cCsStii|oti|nt|di}t|di |dS(Nsrbswb( sosspathsexistssdestsremovesopenssrcsreadsdataswrite(ssrcsdestsdata((s0build\bdist.win32\egg\turbogears\command\i18n.pys copy_filess'(?:'((?:[^']|\\')*)'|"((?:[^"]|\\")*)")s\b_\s*\(\s*[uU]?[rR]?%s\s*\)s\b_\s*\(\s*%s\s*\)sInternationalizationToolcBstZdZdZeZeZeZdZ dZ eZ eZ dZ dZdZdZdZd Zd Zd Zd Zd ZdZdZdZdZdZdZdZdZdZRS(s~Manages i18n data via command-line interface. Contributed to TurboGears by Max Ischenko (http://maxischenko.in.ua). sManage i18n dataslocalessmessagesc Csstidddd|}|idddtdd d d d d |idddtdd d dd d|idddtddd dd d|idddd d dd d|iddddd dd d|idddtddd dd d |idd!dtddd d"d d#|idd$ddd d%dd&d d'|idtd"t||_dS((Nsusages %prog [options] Available commands: add Creates a message catalog for specified locale collect Scan source files to gather translatable strings in a .pot file merge Sync message catalog in different languages with .pot file compile Compile message catalog (.po -> .mo) create_js_messages Create message catalogs for JS usage clean Delete backups and compiled files sversions%prog s-fs--forcesdefaultsactions store_truesdests force_opsshelps"Force potentially damaging actionss-as--asciis ascii_outputsEscape non-ascii characterss-Ks--no-kid-supports store_falses kid_supports*Do not extract messages from Kid templatesss--loose-kid-supportsloose_kid_supports9Extract ALL messages from Kid templates (this is default)s--strict-kid-supportsCExtract only messages marked with lang attribute from Kid templatess --src-dirsstores source_dirs$Directory that contains source filess--no-js-supports js_supportsExtract messages from js-files.s --js-base-dirs js_base_dirsstatic/javascripts?Base directory of javascript files for generated message-files.( soptparses OptionParsersversionsparsers add_optionsFalsesTruesNones set_defaultssself(sselfsversionsparser((s0build\bdist.win32\egg\turbogears\command\i18n.pys__init__:s:                    cCs|iot|intido"tid|_d|iGHntido"tid|_d|iGHntii |iotii |i ot d|intii |i oti |indS(skChoose the config file. Try to guess whether this is a development or installed project. si18n.locale_dirsUse %s as a locale directorys i18n.domainsUse %s as a message domains%s is not a directoryN( sselfs load_configsload_project_configsconfigsgets locale_dirsdomainsosspathsexistssisdirs ProgramErrorsmakedirs(sself((s0build\bdist.win32\egg\turbogears\command\i18n.pysload_project_configds -cCs|iiSdS(N(sselfsparsers parse_args(sself((s0build\bdist.win32\egg\turbogears\command\i18n.pys parse_args~scCs|i|i\}}| o|iidn||_|d|df\}}d|jo|ind|jo|i |n}d|jo|i nbd|jo|i nGd|jo|i n,d |jo|i n|iid dS( NsNo command specifiediiscollectsaddscompilesmergescleanscreate_js_messagessCommand not recognized(sselfsload_project_configs parse_argssoptionssargssparserserrorscommandsscan_source_filess add_languagesscompile_message_catalogssmerge_message_catalogssclean_generated_filesscreate_js_messages(sselfsargsscommandsoptions((s0build\bdist.win32\egg\turbogears\command\i18n.pysruns&        c s)|ig} |iiti}x;|iD]-} | i | itit |dq2Wdk i i}|iiptidddd}d}xu| D]md}||_g}xo|D]d} x[|itii| dD]:}t|}tt|} |i || fqWqWd}d}d igi }|D],\} }|d || ||fqk~i&d }|d }tii|ii(d }d|GHt*|d}|i,||i,||i,||i-qWdS(Nis.ic#sxtiD]\}}}tii|iddfjoqnxP|D]H}tii |\}}tii ||}|djo|VqRqRWqWdS(Nscvss.svns.js(sosswalkssrcdirsrootsdirssfilesspathsbasenameslowersfnamessplitextsnamesextsjoinssrcfile(sdirssfilessnamessrcfilesextsfnamesroot(ssrcdir(s0build\bdist.win32\egg\turbogears\command\i18n.pys list_js_filess% cCs%d|jo d|Snd|SdS(Ns's"%s"s'%s'(sarg(sarg((s0build\bdist.win32\egg\turbogears\command\i18n.pysescapes  csSdS(N(slocale((slocale(s0build\bdist.win32\egg\turbogears\command\i18n.pysglssY if (typeof(MESSAGES) == "undefined") { MESSAGES = {}; } LANG = '%s'; _messages = [ s^ ]; for(var i in _messages) { MESSAGES[_messages[i][0]] = _messages[i][1]; } u, s [%s , %s]sutf-8s smessages-%s.jssCreating message file <%s>.sw(.sselfsload_project_configs languagess locale_dirssplitsosssepslocale_dir_prefixslist_message_catalogssfnamesappendslensturbogears.i18n.utilssi18nsutilssoptionss source_dirsget_package_namessrcdirs list_js_filessescapeslocalesgls _get_localesmessagessfilenamesget_strings_in_jsspathsjoinskeysunicodes_smsgsheadersfooters_[1]smsgidsmsgstrsencodes message_blocks js_base_dirs outfilenamesopensmfswritesclose(sselfslocalesutilss list_js_filessheadersescapesglsmsgstrs outfilenamesmsgidsfilenames languagessfnamesmsgssrcdirslocale_dir_prefixskeysmfsfootersmessagess message_blocks_[1]((slocalessrcdirs0build\bdist.win32\egg\turbogears\command\i18n.pyscreate_js_messagessD  +&       U      cCsi|i}t|iddx@|iD]2}t|iddt|iddq/WdS(Ns.pots.baks.pos.mos.back(sselfsget_potfile_pathspotfilessilent_os_removesreplaceslist_message_catalogssfname(sselfspotfilesfname((s0build\bdist.win32\egg\turbogears\command\i18n.pysclean_generated_filess   cCs,|i}|i}ti||dS(N(sselfsget_potfile_pathspotfileslist_message_catalogsscatalogsscatalogsmerge(sselfspotfilescatalogs((s0build\bdist.win32\egg\turbogears\command\i18n.pysmerge_message_catalogss  cCsfx_|iD]Q}|idd}ti||tii |o d|GHq d|GHq WdS(Ns.pos.mosCompiled %s OKsCompilation of %s failed!( sselfslist_message_catalogssfnamesreplacesdestsmsgfmtsmakesosspathsexists(sselfsdestsfname((s0build\bdist.win32\egg\turbogears\command\i18n.pyscompile_message_catalogss  cCsQtii|o |ii o"t||dG|GdG|GHn d|GHdS(NsCopystos'File %s exists, use --force to override( sosspathsexistss targetfilesselfsoptionss force_opss copy_files sourcefile(sselfs sourcefiles targetfile((s0build\bdist.win32\egg\turbogears\command\i18n.pys_copy_file_withchecks" cCsdtii|}tii|o)tii||}|i ||nd|||fGHdS(Nsr%s translation for language '%s' does not exist (file searched '%s'). Please consider to contribute a translation.( sosspathsbasenames sourcefilesmodulefilenamesexistssjoins targetdirs targetfilesselfs_copy_file_withcheckslanguage(sselfs sourcefiles targetdirslanguagesmodulefilenames targetfile((s0build\bdist.win32\egg\turbogears\command\i18n.pys_copy_moduletranslations c Cs|i}tii| odG|GHdSnx|D]}|i|}tii |}tii | oti |ntiitii|dd}|i|||tdd}tii||dd}|i||||i||q8WdS(NsRun 'collect' first to creates LC_MESSAGESs FormEncode.mosturbogears.i18nsdatas TurboGears.mo(sselfsget_potfile_pathspotfilesosspathsisfilescodesscodesget_locale_catalogs catalog_filesdirnameslangdirsexistssmakedirssjoins formencodesapis get_localedirs sourcefile_fes_copy_moduletranslationsresource_filenamesbasedir_i18n_tgs sourcefile_tgs_copy_file_withcheck( sselfscodesspotfileslangdirs sourcefile_tgscodes sourcefile_fesbasedir_i18n_tgs catalog_file((s0build\bdist.win32\egg\turbogears\command\i18n.pys add_languagess$    cCsg} g} g}|iiptiddd} dG| GHxt i | D]\}} }t ii|iddfjoqQnx|D]}t ii|\} }t ii||}|djo| i|q|djo| i|q|d jo|i|qqWqQWtid d |i\}}t i|t ii|d }d d|dt ii|g}|ii!o|i"ddndg|| t#i$_%t#i&t ii'| o t(dnt)i*t+|| o |ii,o|i-|| n|o |ii.o|i/||n|i0}t ii2|o9|i3d d}t+|t i5||dG|GHnt i5||dG|GHdS(Ns.iisScanning source directoryscvss.svns.pys.kids.jss.potstmpis-vs-ds-ps-Esspygettext faileds.baksBackup existing file tosMessage templates written to(6s source_filess kid_filessjs_filessselfsoptionss source_dirsget_package_namessplitssrcdirsosswalksrootsdirssfilesspathsbasenameslowersfnamessplitextsnamesextsjoinssrcfilesappendstempfilesmkstemps locale_dirs tmp_handles tmp_potfilescloses potbasenamesdirnamespygettext_optionss ascii_outputsinserts pygettextssyssargvsmainsexistss ProgramErrorsatexitsregisterssilent_os_removes kid_supportsscan_kid_filess js_supports scan_js_filessget_potfile_pathspotfilesisfilesreplacesbakfilesrename(sselfsfilessroots tmp_handlespotfilessrcfilespygettext_optionssextsfnames source_filesssrcdirs kid_filessdirssnames tmp_potfilesjs_filess potbasenamesbakfile((s0build\bdist.win32\egg\turbogears\command\i18n.pysscan_source_filessV& %    !      c s|gddggd}x|D]dGGHt}t} yt i | }Wn1t j o%} | id| fGHq4nXt}t}xA|D]9\}}|t iijot|it oqn|idttj o |}qntidd|i}|ddfjo |}qnx|iiD]}|t||qWWq|t iijo||jo t}qq|t iijo2|tjo |i o|t!||qqqW| iq4Wt|d } xbD]Z\}} t%| i&d } | d |fIJ| d | IJ| d IJ| dIJqW| idS(Nsscriptsstylecst}ti|}|o0|idp|idpdi}n~| oudk i }|i |}t|tot|djod||fGHqt|to|i}qn|o|jo |jo'i||fi|ndS(Niiss&Warning: Mixed content in tag <%s>: %s(sNoneskeys _py_i18n_ressearchsksssgroupsstrips is_attributeskid.codewriters codewriterscws interpolatespartss isinstanceslistslenstags basestringskeysstags_to_ignoresmessagessappendsfname(s is_attributeskstagspartsssskeyscw(stags_to_ignoresmessagesskeyssfname(s0build\bdist.win32\egg\turbogears\command\i18n.pys process_textEs0 #!s Working ons Skip %s: %sslangs({[^}]+})?(\w+)s\2sat+sutf-8s#: %s:%ssmsgid %ss msgstr ""s('smessagesstags_to_ignoreskeyss process_textsfilessfnamesNonestreesopensfhskidsdocuments ExceptionsesclosessentinelstagsevselsparsersSTARTs isinstancesunicodesgetsressubsattribsvaluess attrib_textsTruesENDsTEXTsstripsFalsespotfilesfdstexts normalizesencode(sselfspotfilesfilesselsmessagesstagssentinelsevsfnamestextskeyssfdsfhses process_textstreestags_to_ignores attrib_text((smessagessfnameskeysstags_to_ignores0build\bdist.win32\egg\turbogears\command\i18n.pysscan_kid_files@s`       c Csg}g}xtt|D]\}}ti|}x|o|i dp |i d}|i }|o ||jo+|i|d||f|i|nti||}q=WqW||fSdS(Nii(smessagesskeyss enumeratesopensfnamesislines _js_i18n_ressearchsssgroupskeysendspossappend( sselfsfnameskeyskeyssmessagesspossisssline((s0build\bdist.win32\egg\turbogears\command\i18n.pysget_strings_in_jss  c Csg}g}xF|D]>}dG|GH|i|\} }|i| |i|qWt |d}xb|D]Z\}}} t| id} |d||fIJ|d| IJ|dIJ|dIJqkW|idS(Ns Working onsat+sutf-8s#: %s:%ismsgid %ss msgstr ""s(smessagesskeyssfilessfnamesselfsget_strings_in_jssksmsextendsopenspotfilesfds linenumberstexts normalizesencodesclose( sselfspotfilesfilesskeyssmsmessagessfdsfnames linenumberstextsk((s0build\bdist.win32\egg\turbogears\command\i18n.pys scan_js_filess"   cCs!tii|id|iSdS(Ns%s.pot(sosspathsjoinsselfs locale_dirsdomain(sself((s0build\bdist.win32\egg\turbogears\command\i18n.pysget_potfile_pathscCs'tii|i|dd|iSdS(Ns LC_MESSAGESs%s.po(sosspathsjoinsselfs locale_dirscodesdomain(sselfscode((s0build\bdist.win32\egg\turbogears\command\i18n.pysget_locale_catalogscCsg}xxti|idD]`}tii|oGtii|dd|i }tii |o|i |q}qqW|SdS(Ns/*s LC_MESSAGESs%s.po( sfilessglobsselfs locale_dirsnamesosspathsisdirsjoinsdomainsfnamesisfilesappend(sselfsfilessnamesfname((s0build\bdist.win32\egg\turbogears\command\i18n.pyslist_message_catalogsscCsMt|di}d}tid||}t|di|dS(sFix tzinfo. In certain enviroments, tzinfo as formatted by strftime() is not utf-8, e.g. Windows XP with Russian MUL. This leads to later error when a program trying to read catalog. srbcCsT|id}y|idWn tj o|idSnX|idSdS(s$Remove tzinfo if it breaks encoding.isutf-8iiN(smsgroupstzinfosdecodesUnicodeDecodeError(smstzinfo((s0build\bdist.win32\egg\turbogears\command\i18n.pysreplss-(POT-Creation-Date: [\d-]+ [0-9:]+)\+([^\\]+)swbN(sfilespotfilesreadsdatasreplsressubswrite(sselfspotfilesreplsdata((s0build\bdist.win32\egg\turbogears\command\i18n.pys fix_tzinfos  ( s__name__s __module__s__doc__sdescsTrues need_projectsNonesconfigs load_configs locale_dirsdomainsnamespackages__init__sload_project_configs parse_argssrunscreate_js_messagessclean_generated_filessmerge_message_catalogsscompile_message_catalogss_copy_file_withchecks_copy_moduletranslations add_languagessscan_source_filessscan_kid_filessget_strings_in_jss scan_js_filessget_potfile_pathsget_locale_catalogslist_message_catalogss fix_tzinfo(((s0build\bdist.win32\egg\turbogears\command\i18n.pysInternationalizationTool)s8  *    >     / F     cCst}|idS(N(sInternationalizationToolstoolsrun(stool((s0build\bdist.win32\egg\turbogears\command\i18n.pysmains s__main__(%s__doc__sresglobsossos.pathsatexitsoptparsestempfiles pkg_resourcessresource_filenames formencodeskids turbogearssturbogears.i18nsconfigsturbogears.toolbox.admi18ns pygettextsmsgfmtscatalogs"turbogears.toolbox.admi18n.catalogs normalizesturbogears.command.basessilent_os_removesturbogears.utilsload_project_configsget_package_names StandardErrors ProgramErrors copy_files _str_literalscompiles _py_i18n_res _js_i18n_resobjectsInternationalizationToolsmains__name__(s turbogearssresource_filenames _py_i18n_resatexits _js_i18n_res normalizes formencodestempfilesressilent_os_removesmainsconfigsmsgfmts _str_literalsoptparses copy_filesglobscatalogsget_package_nameskidsInternationalizationTools pygettexts ProgramErrorsload_project_configsos((s0build\bdist.win32\egg\turbogears\command\i18n.pys?s6                  PKK9ݤPturbogears/command/info.py"""Commands for listing TurboGears default and extension packages info""" import pkg_resources entrypoints = {"tg-admin Commands" : "turbogears.command", "Template Engines" : "python.templating.engines", "Widget Packages" : "turbogears.widgets", "TurboGears Extensions" : "turbogears.extensions", "Identity Providers" : "turbogears.identity.provider", "Visit Managers" : "turbogears.visit.manager", "Toolbox Gadgets" : "turbogears.toolboxcommand"} def retrieve_info(): """retrieve default and extension packages info""" # get default packages packages=['%s' % i for i in pkg_resources.require("Turbogears")] # get extension packages plugins = {} for name, pointname in entrypoints.items(): plugins[name] = ["%s (%s)" % (entrypoint.name, str(entrypoint.dist)) for entrypoint in pkg_resources.iter_entry_points(pointname) ] return packages, plugins class InfoCommand: """Shows version info for debuging""" desc = "Show version info" def __init__(self,*args, **kwargs): pass def run(self): print """TurboGears Complete Version Information TurboGears requires: """ packages, plugins = retrieve_info() for p in packages: print '*', p for name, pluginlist in plugins.items(): print "\n", name, "\n" for plugin in pluginlist: print '*', plugin PKA> turbogears/command/info.pyc; HIc@stdZdkZhdd<dd<dd<dd <d d <d d <ddTurboGears Complete Version Information TurboGears requires: s*s (s retrieve_infospackagesspluginsspsitemssnames pluginlistsplugin(sselfs pluginlistsnamespluginspspluginsspackages((s0build\bdist.win32\egg\turbogears\command\info.pysrun#s   (s__name__s __module__s__doc__sdescs__init__srun(((s0build\bdist.win32\egg\turbogears\command\info.pys InfoCommands  (s__doc__s pkg_resourcess entrypointss retrieve_infos InfoCommand(s entrypointss InfoCommands pkg_resourcess retrieve_info((s0build\bdist.win32\egg\turbogears\command\info.pys?s E PKK9m{;{; turbogears/command/quickstart.py"""Quickstart command to generate a new project. Quickstart takes the files from turbogears.quickstart and processes them to produce a new, ready-to-run project. """ import pkg_resources import re import os import os.path import shutil import stat import optparse import sys import turbogears from paste.script import templates, create_distro try: set except NameError: # Python 2.3 from sets import Set as set beginning_letter = re.compile(r"^[^a-z]*") valid_only = re.compile(r"[^a-z0-9_]") class TGTemplate(templates.Template): def run(self, command, output_dirs, vars): vars.setdefault('einame', vars['project'].replace('-', '_')) vars.setdefault('turbogearsversion', pkg_resources.get_distribution('turbogears').version) vars.setdefault('sys_executable', os.path.normpath(sys.executable)) # define version-compatible decorator syntax if sys.version_info >= (2, 4): vars['b'] = '@' vars['e'] = '' else: vars['b'] = '[' vars['e'] = ']' super(TGTemplate, self).run(command, output_dirs, vars) class BaseTemplate(TGTemplate): egg_plugins = ["TurboGears"] _template_dir = pkg_resources.resource_filename( "turbogears.qstemplates", "qsbase" ) summary = "tg base template" use_cheetah = True class TurbogearsTemplate(TGTemplate): required_templates = ["tgbase"] _template_dir = pkg_resources.resource_filename( "turbogears.qstemplates", "quickstart") summary = "web framework" use_cheetah = True class TGBig(TGTemplate): required_templates = ["turbogears"] _template_dir = pkg_resources.resource_filename( "turbogears.qstemplates", "quickstartbig") summary = "For more complex projects" use_cheetah = True def post(self, command, output_dir, vars): packagedir = os.path.join(output_dir, vars["package"]) controllersdir = os.path.join(packagedir, "controllers") controllersfile = os.path.join(packagedir, "controllers.py") rootfile = os.path.join(controllersdir, "root.py") if os.path.exists(controllersdir) and \ os.path.exists(controllersfile): controllerstext = open(controllersfile).read() roottext = open(rootfile).read() from paste.script.copydir import query_interactive thesame = controllerstext == roottext if not thesame: print "\nYou seem to be upgrading from a smaller quickstart." print "There is currently a controllers package and a" print "controllers module, which would get confusing." if not command.simulate and (controllerstext == roottext or query_interactive(controllersfile, rootfile, controllerstext, roottext, False)): shutil.copyfile(controllersfile, rootfile) try: if not os.path.exists(os.path.join(os.path.dirname( os.path.abspath(controllersfile)), '.svn')): raise OSError command.run_command('svn', 'revert', controllersfile) command.run_command('svn', 'delete', controllersfile) except OSError: os.unlink(controllersfile) controllerspyc = controllersfile + "c" if os.path.exists(controllerspyc): os.unlink(controllerspyc) class TGWidgetTemplate(TGTemplate): required_templates = ["tgbase"] _template_dir = pkg_resources.resource_filename( "turbogears.qstemplates", "widget") summary = "TurboGears widget projects" def get_requirement(name, pkg=None): dist = pkg_resources.get_distribution("TurboGears") for r in set(dist.requires((name,))) - set(dist.requires()): if r.project_name.lower() == (pkg or name): return r raise ValueError("Did not find matching %s requirement" " in the TurboGears setup.py:extras_require." % name) class quickstart: "Implementation of quickstart." desc = "Create a new TurboGears project" name = None package = None templates = "turbogears" svn_repository = None sqlalchemy = False sqlobject = False elixir = False identity = False def __init__(self, version): parser = optparse.OptionParser( usage="%prog quickstart [options] [project name]", version="%prog " + version) parser.add_option("-s", "--sqlalchemy", help="use SQLAlchemy instead of SQLObject", action="store_true", dest="sqlalchemy", default = False) parser.add_option("-e", "--elixir", help="use SQLAlchemy Elixir instead of SQLObject", action="store_true", dest="elixir", default = False) parser.add_option("-o", "--sqlobject", help="use SQLObject instead of SQLAlchemy", action="store_true", dest="sqlobject", default = False) parser.add_option("-i", "--identity", help="provide Identity support", action="store_true", dest="identity", default = False) parser.add_option("-p", "--package", help="package name for the code", dest="package") parser.add_option("-t", "--templates", help="user specific templates", dest="templates", default = self.templates) parser.add_option("-r", "--svn-repository", metavar="REPOS", help="create project in given SVN repository", dest="svn_repository", default = self.svn_repository) parser.add_option("--dry-run", help="dry run (don't actually do anything)", action="store_true", dest="dry_run") options, args = parser.parse_args() self.__dict__.update(options.__dict__) if not True in [self.elixir, self.sqlalchemy, self.sqlobject]: self.sqlobject = True if self.elixir: self.sqlalchemy = True if args: self.name = args[0] self.turbogearsversion = version def run(self): "Quickstarts the new project." while not self.name: self.name = raw_input("Enter project name: ") while not self.package: package = self.name.lower() package = beginning_letter.sub("", package) package = valid_only.sub("", package) self.package = raw_input("Enter package name [%s]: " % package) if not self.package: self.package = package doidentity = self.identity while not doidentity: doidentity = raw_input("Do you need Identity " "(usernames/passwords) in this project? [no] ") doidentity = doidentity.lower() if not doidentity or doidentity.startswith('n'): self.identity="none" break if doidentity.startswith("y"): doidentity = True break print "Please enter y(es) or n(o)." doidentity = None if doidentity is True: if self.sqlalchemy or self.elixir: self.identity = "sqlalchemy" else: self.identity = "sqlobject" self.name = pkg_resources.safe_name(self.name) env = pkg_resources.Environment() if self.name.lower() in env: print 'The name "%s" is already in use by' % self.name, for dist in env[self.name]: print dist return import imp try: if imp.find_module(self.package): print 'The package name "%s" is already in use' % self.package return except ImportError: pass if os.path.exists(self.name): print 'A directory called "%s" already exists. Exiting.' % self.name return command = create_distro.CreateDistroCommand("quickstart") cmd_args = [] for template in self.templates.split(" "): cmd_args.append("--template=%s" % template) if self.svn_repository: cmd_args.append("--svn-repository=%s" % self.svn_repository) if self.dry_run: cmd_args.append("--simulate") cmd_args.append("-q") cmd_args.append(self.name) cmd_args.append("sqlalchemy=%s" % self.sqlalchemy) cmd_args.append("elixir=%s" % self.elixir) cmd_args.append("sqlobject=%s" % self.sqlobject) cmd_args.append("identity=%s" % self.identity) cmd_args.append("package=%s" % self.package) # set the exact ORM-version for the proper requirements # it's extracted from our own requirements, so looking # them up must be in sync (there must be the extras_require named sqlobject/sqlalchemy) if self.sqlobject: sqlobjectversion = str(get_requirement('sqlobject')) cmd_args.append("sqlobjectversion=%s" % sqlobjectversion) if self.sqlalchemy: sqlalchemyversion = str(get_requirement('sqlalchemy')) cmd_args.append("sqlalchemyversion=%s" % sqlalchemyversion) if self.elixir: elixirversion = str(get_requirement('future', 'elixir')) cmd_args.append("elixirversion=%s" % elixirversion) command.run(cmd_args) if not self.dry_run: os.chdir(self.name) if self.sqlobject: # Create the SQLObject history directory only when needed. # With paste.script it's only possible to skip files, but # not directories. So we are handling this manually. sodir = '%s/sqlobject-history' % self.package if not os.path.exists(sodir): os.mkdir(sodir) try: if not os.path.exists(os.path.join(os.path.dirname( os.path.abspath(sodir)), '.svn')): raise OSError command.run_command('svn', 'add', sodir) except OSError: pass startscript = "start-%s.py" % self.package if os.path.exists(startscript): oldmode = os.stat(startscript).st_mode os.chmod(startscript, oldmode | stat.S_IXUSR) sys.argv = ["setup.py", "egg_info"] import imp imp.load_module("setup", *imp.find_module("setup", ["."])) # dirty hack to allow "empty" dirs for base, path, files in os.walk("./"): for file in files: if file == "empty": os.remove(os.path.join(base, file)) class update: "Implementation of update" desc = "Update an existing turbogears project" need_project = True name = None templates = "turbogears" identity = False sqlalchemy = False sqlobject = True elixir = False def __init__(self, version): parser = optparse.OptionParser(usage="%prog update [options]", version="%prog " + version) parser.add_option("-s", "--sqlalchemy", help="use SQLAlchemy instead of SQLObject", action="store_true", dest="sqlalchemy", default = False) parser.add_option("-e", "--elixir", help="use SQLAlchemy Elixir instead of SQLObject", action="store_true", dest="elixir", default = False) parser.add_option("-o", "--sqlobject", help="use SQLObject instead of SQLAlchemy", action="store_true", dest="sqlobject", default = True) parser.add_option("-i", "--identity", help="provide Identity support", action="store_true", dest="identity", default = False) parser.add_option("-t", "--templates", help="user specific templates", dest="templates", default=self.templates) options, args = parser.parse_args() self.__dict__.update(options.__dict__) def run(self): "Updates an existing project" self.name = turbogears.util.get_project_name() self.package = turbogears.util.get_package_name() turbogears.command.base.load_project_config() if not self.sqlalchemy: if turbogears.config.get('sqlalchemy.dburi'): self.sqlalchemy = True if self.elixir: self.sqlalchemy = True self.sqlobject = False elif self.sqlalchemy: self.sqlobject = False else: self.sqlobject = True if not self.identity: if turbogears.config.get('identity.on'): self.identity = True if self.identity: if self.sqlalchemy: self.identity = 'sqlalchemy' else: self.identity = 'sqlobject' else: self.identity = 'none' currentdir = os.path.basename(os.getcwd()) if not currentdir == self.name: print 'It looks like your project dir "%s" is named wrongly.' % currentdir print 'Please rename it to "%s".' % self.name return command = create_distro.CreateDistroCommand("update") cmd_args = [] cmd_args.append("-o../") for template in self.templates.split(" "): cmd_args.append("--template=%s" % template) cmd_args.append(self.name) cmd_args.append("sqlalchemy=%s" % self.sqlalchemy) cmd_args.append("elixir=%s" % self.elixir) cmd_args.append("sqlobject=%s" % self.sqlobject) cmd_args.append("identity=%s" % self.identity) cmd_args.append("package=%s" % self.package) # set the exact ORM-version for the proper requirements # it's extracted from our own requirements, so looking # them up must be in sync (there must be the extras_require named sqlobject/sqlalchemy) if self.sqlobject: sqlobjectversion = str(get_requirement('sqlobject')) cmd_args.append("sqlobjectversion=%s" % sqlobjectversion) if self.sqlalchemy: sqlalchemyversion = str(get_requirement('sqlalchemy')) cmd_args.append("sqlalchemyversion=%s" % sqlalchemyversion) command.run(cmd_args) startscript = "start-%s.py" % self.package if os.path.exists(startscript): oldmode = os.stat(startscript).st_mode os.chmod(startscript, oldmode | stat.S_IXUSR) sys.argv = ["setup.py", "egg_info"] import imp imp.load_module("setup", *imp.find_module("setup", ["."])) # dirty hack to allow "empty" dirs for base, path, files in os.walk("./"): for file in files: if file == "empty": os.remove(os.path.join(base, file)) PKA>n>>!turbogears/command/quickstart.pyc; HIc@sZdZdkZdkZdkZdkZdkZdkZdkZdkZdk Z dk l Z l Z ye Wn ej odklZ nXeidZeidZde ifdYZdefd YZd efd YZd efd YZdefdYZedZdfdYZdfdYZdS(sQuickstart command to generate a new project. Quickstart takes the files from turbogears.quickstart and processes them to produce a new, ready-to-run project. N(s templatess create_distro(sSets^[^a-z]*s [^a-z0-9_]s TGTemplatecBstZdZRS(NcCs|id|didd|idtidi|idtiit i t i dd fjod |d  turbogears/command/sacommand.pyc; HIc@sdkZdklZdklZy<dklZlZlZl Z l Z dk l Z l Z Wnej o eZ nAXydklZlZWn%ej oe e f\ZZnXeigdZeidgdZeid gd Zeid gd Zeid gdZeidgdZeidgdZdZdZdZdZdS(N(sconfig(s get_model(sMetaDatas exceptionssTablesStringsUnicode(smetadatas get_engine(sTexts UnicodeTextcCsdS(N((scommandsargs((s5build\bdist.win32\egg\turbogears\command\sacommand.pys sacommandss0command and command != 'help' and not get_enginecCs dGHdS(Ns Error: SQLAlchemy not installed.((scommandsargs((s5build\bdist.win32\egg\turbogears\command\sacommand.pys no_enginesscommand == 'help'cCs dGHdS(NsTurboGears SQLAlchemy Helper tg-admin sql command [options] Available commands: create Create tables execute Execute SQL statements help Show help list List tables that appear in the model status Show differences between model and database ((scommandsargs((s5build\bdist.win32\egg\turbogears\command\sacommand.pyshelpsscommand == 'create'cCs.dtidGHtttidS(NsCreating tables at %sssqlalchemy.dburi(sconfigsgets get_engines get_modelsmetadatas create_all(scommandsargs((s5build\bdist.win32\egg\turbogears\command\sacommand.pyscreate&sscommand == 'list'cCs-txtiiD]}|iGHqWdS(N(s get_modelsmetadatastablessvaluesstblsfullname(scommandsargsstbl((s5build\bdist.win32\egg\turbogears\command\sacommand.pyslist_-sscommand == 'execute'cCsJt}x:|dD].}|i|}yt|GHWqqXqWdS(Ni(s get_enginesengsargsscmdsexecutesretslist(scommandsargssengscmdsret((s5build\bdist.win32\egg\turbogears\command\sacommand.pysexecute3s  scommand == 'status'cCsQtttttti}x|D] }|GHq-W| o dGHndS(NsDatabase matches model(s get_engines get_modelscompare_metadatasmetadatasMetaDatasbindsretsl(scommandsargsslsret((s5build\bdist.win32\egg\turbogears\command\sacommand.pysstatus>s cCs-gi}|D]}|d|q~SdS(Ns (sappends_[1]slssl(slss_[1]sl((s5build\bdist.win32\egg\turbogears\command\sacommand.pysindentGscCsg}x|iiD]}y%t|i|dtd|i }Wn0t i j o!|i d|idfqXt||}|o2|id|i|i t|dgqqW|SdS(Nsautoloadsschemas Create table ss Change table (srcspymstablessvaluesspytsTablesnamesdbmsTruesschemasdbts exceptionssNoSuchTableErrorsextendsfullnames compare_tablesretsappendsindent(spymsdbmspytsretsrcsdbt((s5build\bdist.win32\egg\turbogears\command\sacommand.pyscompare_metadataJs%"c CsWg} tgi}|iiD]}||i|fq ~}t gi}|iD]}|i o|dq\q\~}x|iD]} | ii} |i| o`t| |i|| |}|o+| id| i| it|n|i| q| id| iqWx|D]}| id|q4W| SdS(NisChange column s Add column sRemove column (srcsdictsappends_[1]sdbtscolumnsskeysssslowersdbcolssboolscs primary_keysany_pkeyspytspycsnameshas_keyscompare_columnsretsextendsindentspopsdbcol( spytsdbtscsany_pkeysdbcolssdbcolsrets_[1]sssrcspycsname((s5build\bdist.win32\egg\turbogears\command\sacommand.pys compare_tableXs"B> cCsg}|i|if\}}t|tot|i }n$t|t ot |i }nt||i  o|i d|i inFt|to5|i |i jo|i dt|i qn|o|i|ijo"|i |iodpdn|itj o |itj o|i|ijo!|i dt|iin|itj o|i|ijo"|i |iodpdn|SdS(NsChange type to sChange length to sMake primary keysRemove primary keysChange default to s Add indexs Remove index(srcspycstypesdbcspytsdbts isinstancesUnicodesStringslengths UnicodeTextsTexts __class__sappends__name__sstrsany_pkeys primary_keysdefaultsNonesargsindex(spycsdbcsany_pkeyspytsrcsdbt((s5build\bdist.win32\egg\turbogears\command\sacommand.pyscompare_columnjs$""3!#"( sdispatchs turbogearssconfigsturbogears.utils get_models sqlalchemysMetaDatas exceptionssTablesStringsUnicodesturbogears.databasesmetadatas get_engines ImportErrorsNonesTexts UnicodeTextsgenerics sacommandsarounds no_engineswhenshelpscreateslist_sexecutesstatussindentscompare_metadatas compare_tablescompare_column(shelps UnicodeTextsdispatchscompare_metadatasStringscreates sacommandsconfigsmetadatasstatuss get_enginesexecutescompare_columns compare_tableslist_sindentsTexts get_modelsUnicodes exceptionssTablesMetaDatas no_engine((s5build\bdist.win32\egg\turbogears\command\sacommand.pys?s:   %           PKK9NNturbogears/command/__init__.py"""TurboGears command line tools""" from turbogears.command.base import main PKA> turbogears/command/__init__.pyc; HIc@sdZdklZdS(sTurboGears command line tools(smainN(s__doc__sturbogears.command.basesmain(smain((s4build\bdist.win32\egg\turbogears\command\__init__.pys?sPKK98turbogears/feed/atom0_3.kid id myfeed modified name email uri copyright tagline title id modified issued name email uri content summary copyright PKK9turbogears/feed/atom1_0.kid id myfeed updated name email uri icon logo rights subtitle title id updated published name email uri content summary rights PKK9b'M turbogears/feed/feed.pyimport time import cherrypy import turbogears from warnings import warn class FeedController(turbogears.controllers.Controller): """ Object for generating feeds in multiple formats """ def __init__(self, default="atom1.0"): self.default = default self.formats = ["atom1.0", "atom0.3", "rss2.0"] def date_to_3339(self, date): date = date.strftime("%Y-%m-%dT%H:%M:%SZ") return date def date_to_822(self, date): date = date.strftime("%a, %d %b %Y %H:%M:%S GMT") return date def depr_entrys(self, feed): if "entrys" in feed: warn("You should use 'entries' instead of 'entrys'", DeprecationWarning, 3) feed['entries'] = feed['entrys'] del feed['entrys'] def format_dates(self, feed, format): if format == 822: convert_date = self.date_to_822 else: convert_date = self.date_to_3339 if feed.has_key('updated'): feed["updated"] = convert_date(feed["updated"]) self.depr_entrys(feed) for entry in feed['entries']: if entry.has_key('updated'): entry["updated"] = convert_date(entry["updated"]) if entry.has_key('published'): entry["published"] = convert_date(entry["published"]) return feed def index(self, **kwargs): turbogears.redirect("%s" % self.default, kwargs) index = turbogears.expose()(index) def atom1_0(self, **kwargs): feed = self.get_feed_data(**kwargs) self.format_dates(feed, 3339) feed["href"] = turbogears.url("/") + "atom1.0" self.depr_entrys(feed) return feed atom1_0 = turbogears.expose(template="turbogears.feed.atom1_0", format="xml", content_type="application/atom+xml")(atom1_0) def atom0_3(self, **kwargs): feed = self.get_feed_data(**kwargs) self.format_dates(feed, 3339) feed["href"] = turbogears.url("/") + "atom0.3" self.depr_entrys(feed) return feed atom0_3 = turbogears.expose(template="turbogears.feed.atom0_3", format="xml", content_type="application/atom+xml")(atom0_3) def rss2_0(self, **kwargs): feed = self.get_feed_data(**kwargs) self.format_dates(feed, 822) self.depr_entrys(feed) return feed rss2_0 = turbogears.expose(template="turbogears.feed.rss2_0", format="xml", content_type="application/rss+xml")(rss2_0) PKA>rturbogears/feed/feed.pyc; HIc@sHdkZdkZdkZdklZdeiifdYZdS(N(swarnsFeedControllercBstZdZddZdZdZdZdZdZe i eZdZ e i d d d d d de Z dZ e i d dd d d de Z dZ e i d dd d d de Z RS(s1 Object for generating feeds in multiple formats satom1.0cCs||_dddg|_dS(Nsatom1.0satom0.3srss2.0(sdefaultsselfsformats(sselfsdefault((s-build\bdist.win32\egg\turbogears\feed\feed.pys__init__ s cCs|id}|SdS(Ns%Y-%m-%dT%H:%M:%SZ(sdatesstrftime(sselfsdate((s-build\bdist.win32\egg\turbogears\feed\feed.pys date_to_3339scCs|id}|SdS(Ns%a, %d %b %Y %H:%M:%S GMT(sdatesstrftime(sselfsdate((s-build\bdist.win32\egg\turbogears\feed\feed.pys date_to_822scCs:d|jo)tdtd|d|d<|d=ndS(Nsentryss,You should use 'entries' instead of 'entrys'isentries(sfeedswarnsDeprecationWarning(sselfsfeed((s-build\bdist.win32\egg\turbogears\feed\feed.pys depr_entryss   cCs|djo |i}n |i}|ido||d|d myfeed link description lastBuildDate lang generated title guid link pubDate description PKK9QFFturbogears/feed/__init__.pyfrom turbogears.feed import feed FeedController = feed.FeedController PKA>4turbogears/feed/__init__.pyc; HIc@sdklZeiZdS((sfeedN(sturbogears.feedsfeedsFeedController(sfeedsFeedController((s1build\bdist.win32\egg\turbogears\feed\__init__.pys?s PKK9turbogears/i18n/format.py"""Localized formatting functions. These functions extract localization data from config files located in the data/directory. """ from turbogears.i18n.utils import get_locale import pkg_resources import os import re def is_locale_format(locale): """Check if locale is supported.""" py_filename = pkg_resources.resource_filename( "turbogears.i18n.data", "%s.py" % locale) if os.path.exists(py_filename): return True pyc_filename = pkg_resources.resource_filename( "turbogears.i18n.data", "%s.pyc" % locale) if os.path.exists(pyc_filename): return True return False def get_locale_module(locale): """Get i18n module supporting the locale.""" try: # check if locale is supported. If not, check again with # first part of locale for example, "fi_FI" > "fi". if not is_locale_format(locale): locale = locale[:2] name = "turbogears.i18n.data.%s" % locale mod = __import__(name) parts = name.split(".")[1:] for p in parts: mod = getattr(mod, p) return mod except (ImportError, AttributeError): return None def get(locale, name, default=None): """Get an attribute value for the locale.""" locale = get_locale(locale) mod = get_locale_module(locale) return getattr(mod, name, default) def get_countries(locale=None): """Get all supported countries. Returns a list of tuples, consisting of international country code and localized name, e.g. ('AU', 'Australia'). """ countries = get(locale, "countries", {}).items() countries.sort(lambda x, y: cmp(x[1], y[1])) return countries def get_country(key, locale=None): """Get localized name of country based on international country code.""" return get(locale, "countries", {})[key] def get_languages(locale=None): """Get all supported languages. Returns a list of tuples, with language code and localized name, e.g. ('en', 'English'). """ languages = get(locale, "languages", {}).items() languages.sort(lambda x, y: cmp(x[1], y[1])) return languages def get_language(key, locale=None): """Get localized name of language based on language code.""" return get(locale, "languages", {})[key] def get_month_names(locale=None): """Get list of full month names, starting with January.""" return get(locale, "months", []) def get_abbr_month_names(locale=None): """Get list of abbreviated month names, starting with Jan.""" return get(locale, "abbrMonths", []) def get_weekday_names(locale=None): """Get list of full weekday names.""" return get(locale, "days", []) def get_abbr_weekday_names(locale=None): """Get list of abbreviated weekday names.""" return get(locale, "abbrDays", get_weekday_names(locale)) def get_decimal_format(locale=None): """Get decimal point for the locale.""" return get(locale, "numericSymbols", {}).get("decimal", ".") def get_group_format(locale=None): """Get digit group separator for thousands for the locale.""" return get(locale, "numericSymbols", {}).get("group", ",") def format_number(value, locale=None): """Get number formatted with grouping for thousands. E.g. 5000000 will be formatted as 5,000,000. """ gf = get_group_format(locale) thou = re.compile(r"([0-9])([0-9][0-9][0-9]([%s]|$))" % gf).search v = str(value) mo = thou(v) while mo is not None: i = mo.start(0) v = v[:i+1] + gf + v[i+1:] mo = thou(v) return unicode(v) def format_decimal(value, num_places, locale=None): """Get number formatted with grouping for thousands and decimal places. E.g. 5000000.898 will be formatted as 5,000,000.898. """ v = ("%%.%df" % num_places) % value if num_places == 0: return format_number(v, locale=locale) num, decimals = v.split(".", 1) return format_number(num, locale) + unicode( get_decimal_format(locale) + decimals) def format_currency(value, locale=None): """Get formatted currency value.""" return format_decimal(value, 2, locale) def parse_number(value, locale=None): """Take localized number string and return a long integer. Throws ValueError if bad format. """ return long(value.replace(get_group_format(locale), "")) def parse_decimal(value, locale=None): """Take localized decimal string and return a float. Throws ValueError if bad format. """ value = value.replace(get_group_format(locale), "") value = value.replace(get_decimal_format(locale), ".") return float(value) def get_date_format(format, locale=None): """Get localized date format.""" formats = get(locale, "dateFormats", {}) return formats.get(format, None) def format_date(dt, format="medium", locale=None, time_format="", date_format=""): """Get formatted date value. format can be "full", "long", "medium" or "short". To have complete control over formatting, use time_format and date_format parameters. @param dt: datetime @type dt: datetime.datetime @param format: format("full", "long", "medium", "short") @type format: string @param locale: the locale @type locale: string @param time_format: standard time formatting string, e.g. %H:%M @type time_format:s tring @param time_format: date formatting template string. Template variables include standard date formatting string like %d or %Y plus a few locale-specific names: %%(abbrmonthname)s, %%(dayname)s, %%(abbrmonthname)s and %%(monthname)s. @type time_format: string """ pattern = date_format or get_date_format(format, locale) if not pattern: return str(dt) month = dt.month - 1 weekday = dt.weekday() # becasue strftime() accepts str only but not unicode, # we encode string to utf-8 and then decode back date_str = dt.strftime(pattern.encode('utf8') + time_format) return date_str.decode('utf8') % dict( monthname=get_month_names(locale)[month], abbrmonthname=get_abbr_month_names(locale)[month], dayname=get_weekday_names(locale)[weekday], abbrdayname=get_abbr_weekday_names(locale)[weekday]) PKA>3((turbogears/i18n/format.pyc; ȸHIc@s%dZdklZdkZdkZdkZdZdZedZ edZ edZ edZ ed Z ed Zed Zed Zed ZedZedZedZedZedZedZedZedZdedddZdS(s}Localized formatting functions. These functions extract localization data from config files located in the data/directory. (s get_localeNcCsjtidd|}tii|otSntidd|}tii|otSnt SdS(sCheck if locale is supported.sturbogears.i18n.datas%s.pys%s.pycN( s pkg_resourcessresource_filenameslocales py_filenamesosspathsexistssTrues pyc_filenamesFalse(slocales py_filenames pyc_filename((s/build\bdist.win32\egg\turbogears\i18n\format.pysis_locale_formatscCsymt| o|d }nd|}t|}|idd}x|D]}t||}qOW|SWnt t fj o t SnXdS(s&Get i18n module supporting the locale.isturbogears.i18n.data.%ss.iN( sis_locale_formatslocalesnames __import__smodssplitspartsspsgetattrs ImportErrorsAttributeErrorsNone(slocalesnamespspartssmod((s/build\bdist.win32\egg\turbogears\i18n\format.pysget_locale_modules  cCs,t|}t|}t|||SdS(s&Get an attribute value for the locale.N(s get_localeslocalesget_locale_modulesmodsgetattrsnamesdefault(slocalesnamesdefaultsmod((s/build\bdist.win32\egg\turbogears\i18n\format.pysget,s  cCs0t|dhi}|id|SdS(sGet all supported countries. Returns a list of tuples, consisting of international country code and localized name, e.g. ('AU', 'Australia'). s countriescCst|d|dS(Ni(scmpsxsy(sxsy((s/build\bdist.win32\egg\turbogears\i18n\format.pys;sN(sgetslocalesitemss countriesssort(slocales countries((s/build\bdist.win32\egg\turbogears\i18n\format.pys get_countries3scCst|dh|SdS(sBGet localized name of country based on international country code.s countriesN(sgetslocaleskey(skeyslocale((s/build\bdist.win32\egg\turbogears\i18n\format.pys get_country?scCs0t|dhi}|id|SdS(sGet all supported languages. Returns a list of tuples, with language code and localized name, e.g. ('en', 'English'). s languagescCst|d|dS(Ni(scmpsxsy(sxsy((s/build\bdist.win32\egg\turbogears\i18n\format.pysLsN(sgetslocalesitemss languagesssort(slocales languages((s/build\bdist.win32\egg\turbogears\i18n\format.pys get_languagesDscCst|dh|SdS(s6Get localized name of language based on language code.s languagesN(sgetslocaleskey(skeyslocale((s/build\bdist.win32\egg\turbogears\i18n\format.pys get_languagePscCst|dgSdS(s4Get list of full month names, starting with January.smonthsN(sgetslocale(slocale((s/build\bdist.win32\egg\turbogears\i18n\format.pysget_month_namesUscCst|dgSdS(s7Get list of abbreviated month names, starting with Jan.s abbrMonthsN(sgetslocale(slocale((s/build\bdist.win32\egg\turbogears\i18n\format.pysget_abbr_month_namesZscCst|dgSdS(sGet list of full weekday names.sdaysN(sgetslocale(slocale((s/build\bdist.win32\egg\turbogears\i18n\format.pysget_weekday_names_scCst|dt|SdS(s&Get list of abbreviated weekday names.sabbrDaysN(sgetslocalesget_weekday_names(slocale((s/build\bdist.win32\egg\turbogears\i18n\format.pysget_abbr_weekday_namesdscCs t|dhiddSdS(s!Get decimal point for the locale.snumericSymbolssdecimals.N(sgetslocale(slocale((s/build\bdist.win32\egg\turbogears\i18n\format.pysget_decimal_formatiscCs t|dhiddSdS(s7Get digit group separator for thousands for the locale.snumericSymbolssgroups,N(sgetslocale(slocale((s/build\bdist.win32\egg\turbogears\i18n\format.pysget_group_formatnscCst|}tid|i}t|}||}xK|t j o=|i d}||d |||d}||}q=Wt|SdS(siGet number formatted with grouping for thousands. E.g. 5000000 will be formatted as 5,000,000. s ([0-9])([0-9][0-9][0-9]([%s]|$))iiN(sget_group_formatslocalesgfsrescompilessearchsthousstrsvaluesvsmosNonesstartsisunicode(svalueslocalesismosgfsvsthou((s/build\bdist.win32\egg\turbogears\i18n\format.pys format_numberss    cCsld||}|djot|d|Sn|idd\}}t||tt ||SdS(sGet number formatted with grouping for thousands and decimal places. E.g. 5000000.898 will be formatted as 5,000,000.898. s%%.%dfislocales.iN( s num_placessvaluesvs format_numberslocalessplitsnumsdecimalssunicodesget_decimal_format(svalues num_placesslocalesnumsvsdecimals((s/build\bdist.win32\egg\turbogears\i18n\format.pysformat_decimals  cCst|d|SdS(sGet formatted currency value.iN(sformat_decimalsvalueslocale(svalueslocale((s/build\bdist.win32\egg\turbogears\i18n\format.pysformat_currencyscCs t|it|dSdS(scTake localized number string and return a long integer. Throws ValueError if bad format. sN(slongsvaluesreplacesget_group_formatslocale(svalueslocale((s/build\bdist.win32\egg\turbogears\i18n\format.pys parse_numberscCs>|it|d}|it|d}t|SdS(s]Take localized decimal string and return a float. Throws ValueError if bad format. ss.N(svaluesreplacesget_group_formatslocalesget_decimal_formatsfloat(svalueslocale((s/build\bdist.win32\egg\turbogears\i18n\format.pys parse_decimalscCs&t|dh}|i|tSdS(sGet localized date format.s dateFormatsN(sgetslocalesformatssformatsNone(sformatslocalesformats((s/build\bdist.win32\egg\turbogears\i18n\format.pysget_date_formatssmediumsc Cs|p t||}| ot|Sn|id}|i}|i |i d|}|i dtdt||dt||dt||dt||SdS(sGet formatted date value. format can be "full", "long", "medium" or "short". To have complete control over formatting, use time_format and date_format parameters. @param dt: datetime @type dt: datetime.datetime @param format: format("full", "long", "medium", "short") @type format: string @param locale: the locale @type locale: string @param time_format: standard time formatting string, e.g. %H:%M @type time_format:s tring @param time_format: date formatting template string. Template variables include standard date formatting string like %d or %Y plus a few locale-specific names: %%(abbrmonthname)s, %%(dayname)s, %%(abbrmonthname)s and %%(monthname)s. @type time_format: string isutf8s monthnames abbrmonthnamesdaynames abbrdaynameN(s date_formatsget_date_formatsformatslocalespatternsstrsdtsmonthsweekdaysstrftimesencodes time_formatsdate_strsdecodesdictsget_month_namessget_abbr_month_namessget_weekday_namessget_abbr_weekday_names( sdtsformatslocales time_formats date_formatspatternsmonthsweekdaysdate_str((s/build\bdist.win32\egg\turbogears\i18n\format.pys format_dates  (s__doc__sturbogears.i18n.utilss get_locales pkg_resourcessossresis_locale_formatsget_locale_modulesNonesgets get_countriess get_countrys get_languagess get_languagesget_month_namessget_abbr_month_namessget_weekday_namessget_abbr_weekday_namessget_decimal_formatsget_group_formats format_numbersformat_decimalsformat_currencys parse_numbers parse_decimalsget_date_formats format_date(s parse_decimals get_languagesget_month_namess pkg_resourcessget_weekday_namessget_group_formats get_countriess parse_numbersformat_currencysres get_localesget_decimal_formatsgetsget_abbr_month_namess format_numbersformat_decimals get_countrysis_locale_formats format_dates get_languagessget_date_formatsget_locale_modulesget_abbr_weekday_namessos((s/build\bdist.win32\egg\turbogears\i18n\format.pys?s0                   PKK9Vx turbogears/i18n/kidutils.py""" Functions for use with Kid template """ from kid.parser import START, TEXT, END import turbogears # use plain_gettext because Kid template's strings always evaluated immediately from turbogears.i18n.tg_gettext import plain_gettext as gettext from turbogears.i18n.utils import google_translate def translate(item, attr=None): """Translates the text of element plus the text of all child elements. If attr is present this is used to provide the locale name; if not then value provided by get_locale is used. For example:
this is a test testing
The string 'this is a test' is rendered by the locale provided by get_locale, the string 'testing' by the German locale. Possible use in Kid template:

Welcome!

@param item: element to be translated @type item: ElementTree element @param attr: attribute name used to store locale, if any """ if attr is None:attr = turbogears.config.get("i18n.templateLocaleAttribute", "lang") translate_all(item, item.get(attr), attr) return item def __translate_text(text, lang): prefix = '' postfix = '' if len(text) > 0 and text[0].isspace(): prefix = text[0] if len(text) > 1 and text[-1].isspace(): postfix = text[-1] return prefix + gettext(text.strip(), lang) + postfix def translate_all(tree, lang, attr, inroot=True): """Recursive function to translate all text in child elements @param tree: parent ElementTree element @param lang: language setting @param attr: attribute name used to store locale """ if tree.text: tree.text = __translate_text(tree.text, lang) if tree.tail and not inroot: # Don't translate tail of root. It is beyond the scope of the lang attr tree.tail = __translate_text(tree.tail, lang) for element in tree: # check overriding lang attribute if element.get(attr):lang = element.get(attr) translate_all(element, lang, attr, False) def i18n_filter(stream, template, locale=None): """Kid template filter which calls translates all elements matching language attribute(set in configuration as i18n.templateLocaleAttribute, default 'lang') """ lang_attr = turbogears.config.get("i18n.templateLocaleAttribute", "lang") locales=[locale] for ev, item in stream: if ev==START: l = item.get(lang_attr) if l: locale = l locales.append(l) elif ev==TEXT: prefix = '' postfix = '' if len(item) > 0 and item[0] == ' ': prefix =' ' if len(item) > 1 and item[-1] == ' ': postfix =' ' text = item.strip() if text: item = gettext(text, locale) item = prefix + item + postfix elif ev==END: if item.get(lang_attr): locales.pop() locale = locales[-1] yield (ev, item) PKA>ݨ;;turbogears/i18n/kidutils.pyc; ȸHIc@ssdZdklZlZlZdkZdklZdk l Z e dZ dZ edZe dZdS( s% Functions for use with Kid template (sSTARTsTEXTsENDN(s plain_gettext(sgoogle_translatecCsG|tjotiidd}nt||i|||SdS(s)Translates the text of element plus the text of all child elements. If attr is present this is used to provide the locale name; if not then value provided by get_locale is used. For example:
this is a test testing
The string 'this is a test' is rendered by the locale provided by get_locale, the string 'testing' by the German locale. Possible use in Kid template:

Welcome!

@param item: element to be translated @type item: ElementTree element @param attr: attribute name used to store locale, if any si18n.templateLocaleAttributeslangN(sattrsNones turbogearssconfigsgets translate_allsitem(sitemsattr((s1build\bdist.win32\egg\turbogears\i18n\kidutils.pys translate s  cCsd}d}t|djo|dio|d}nt|djo|dio|d}n|t|i||SdS(Nsiii(sprefixspostfixslenstextsisspacesgettextsstripslang(stextslangspostfixsprefix((s1build\bdist.win32\egg\turbogears\i18n\kidutils.pys__translate_text's$$cCs|iot|i||_n|io| ot|i||_nxD|D]<}|i|o|i|}nt |||t qUWdS(sRecursive function to translate all text in child elements @param tree: parent ElementTree element @param lang: language setting @param attr: attribute name used to store locale N( streestexts__translate_textslangstailsinrootselementsgetsattrs translate_allsFalse(streeslangsattrsinrootselement((s1build\bdist.win32\egg\turbogears\i18n\kidutils.pys translate_all.s c csgtiidd}|g} xB|D]:\}}|t jo1|i|}|o|}| i |qUn|t jod}d} t|djo|ddjo d}nt|djo|ddjo d} n|i}|o!t||}||| }qUn:|tjo,|i|o| i| d}qUn||fVq%WdS( sKid template filter which calls translates all elements matching language attribute(set in configuration as i18n.templateLocaleAttribute, default 'lang') si18n.templateLocaleAttributeslangsis iiN(s turbogearssconfigsgets lang_attrslocaleslocalessstreamsevsitemsSTARTslsappendsTEXTsprefixspostfixslensstripstextsgettextsENDspop( sstreamstemplateslocalesevslsitemsprefixstexts lang_attrspostfixslocales((s1build\bdist.win32\egg\turbogears\i18n\kidutils.pys i18n_filter?s4    $ $    (s__doc__s kid.parsersSTARTsTEXTsENDs turbogearssturbogears.i18n.tg_gettexts plain_gettextsgettextsturbogears.i18n.utilssgoogle_translatesNones translates__translate_textsTrues translate_alls i18n_filter( sENDs turbogearss translate_allsTEXTs i18n_filtersgettextsSTARTsgoogle_translates__translate_texts translate((s1build\bdist.win32\egg\turbogears\i18n\kidutils.pys?s      PKK9LpAAturbogears/i18n/tg_gettext.pyimport os import sys from gettext import translation from turbogears import config from turbogears.util import get_package_name, request_available from turbogears.i18n.utils import get_locale from turbojson.jsonify import jsonify _catalogs = {} def get_locale_dir(): localedir = config.get("i18n.locale_dir") if not localedir: package = get_package_name() if package: localedir = os.path.join(os.path.dirname( sys.modules[package].__path__[0]), "locales") return localedir def is_locale_supported(locale, domain=None): """Check if [domain].mo file exists for this language.""" if not domain: domain = config.get("i18n.domain", "messages") localedir = get_locale_dir() return localedir and os.path.exists(os.path.join( localedir, locale, "LC_MESSAGES", "%s.mo" % domain)) def get_catalog(locale, domain = None): """Return translations for given locale.""" if not domain: domain = config.get("i18n.domain", "messages") catalog = _catalogs.get(domain) if not catalog: catalog = _catalogs[domain] = {} messages = catalog.get(locale) if not messages: localedir = get_locale_dir() messages = catalog[locale] = translation(domain=domain, localedir=localedir, languages=[locale]) return messages def plain_gettext(key, locale=None, domain=None): """Get the gettext value for key. Added to builtins as '_'. Returns Unicode string. @param key: text to be translated @param locale: locale code to be used. If locale is None, gets the value provided by get_locale. """ gettext_func = config.get("i18n.gettext", tg_gettext) return gettext_func(key, locale, domain) def tg_gettext(key, locale=None, domain=None): """Get the gettext value for key. Added to builtins as '_'. Returns Unicode string. @param key: text to be translated @param locale: locale code to be used. If locale is None, gets the value provided by get_locale. """ if locale is None: locale = get_locale() if not is_locale_supported(locale): locale = locale[:2] if key == '': return '' # special case try: return get_catalog(locale, domain).ugettext(key) except KeyError: return key except IOError: return key def plain_ngettext(key1, key2, num, locale=None): """Translate two possible texts based on whether num is greater than 1. @param key1: text if num==1 @param key2: text if num!=1 @param num: a number @type num: integer @locale: locale code to be used. If locale is None, gets the value provided by get_locale. """ if num==1: return plain_gettext(key1, locale) else: return plain_gettext(key2, locale) class lazystring(object): """Has a number of lazily evaluated functions replicating a string. Just override the eval() method to produce the actual value. """ def __init__(self, func, *args, **kw): self.func = func self.args = args self.kw = kw def eval(self): return self.func(*self.args, **self.kw) def __unicode__(self): return unicode(self.eval()) def __str__(self): return str(self.eval()) def __mod__(self, other): return self.eval() % other def __cmp__(self, other): return cmp(self.eval(), other) def __eq__(self, other): return self.eval() == other def __deepcopy__(self, memo): return self def lazify(func): def newfunc(*args, **kw): lazystr = lazystring(func, *args, **kw) return lazystr return newfunc [jsonify.when("isinstance(obj, lazystring)")] def jsonify_lazystring(obj): return unicode(obj) lazy_gettext = lazify(plain_gettext) lazy_ngettext = lazify(plain_ngettext) def gettext(key, locale=None, domain=None): """Get the gettext value for key. Added to builtins as '_'. Returns Unicode string. @param key: text to be translated @param locale: locale code to be used. If locale is None, gets the value provided by get_locale. """ if request_available(): return plain_gettext(key, locale, domain) else: return lazy_gettext(key, locale, domain) def ngettext(key1, key2, num, locale=None): """Translate two possible texts based on whether num is greater than 1. @param key1: text if num==1 @param key2: text if num!=1 @param num: a number @type num: integer @param locale: locale code to be used. If locale is None, gets the value provided by get_locale. """ if request_available(): return plain_ngettext(key1, key2, num, locale) else: return lazy_ngettext(key1, key2, num, locale) def install(): """Add the gettext function to __builtins__ as '_'.""" __builtins__["_"] = gettext PKA>Ӊa""turbogears/i18n/tg_gettext.pyc; ȸHIc@s"dkZdkZdklZdklZdklZlZdk l Z dk l Z hZ dZedZedZeed Zeed Zed Zd efd YZdZe idgdZeeZeeZeedZedZdZdS(N(s translation(sconfig(sget_package_namesrequest_available(s get_locale(sjsonifycCsftid}| oGt}|o3tiitiit i |i dd}q^n|SdS(Nsi18n.locale_dirislocales( sconfigsgets localedirsget_package_namespackagesosspathsjoinsdirnamessyssmoduless__path__(spackages localedir((s3build\bdist.win32\egg\turbogears\i18n\tg_gettext.pysget_locale_dir s &cCs[| otidd}nt}|o)tiitii||dd|SdS(s3Check if [domain].mo file exists for this language.s i18n.domainsmessagess LC_MESSAGESs%s.moN( sdomainsconfigsgetsget_locale_dirs localedirsosspathsexistssjoinslocale(slocalesdomains localedir((s3build\bdist.win32\egg\turbogears\i18n\tg_gettext.pysis_locale_supporteds  cCs| otidd}nti|}| oh}t|(.*?)', re.DOTALL).search(s) data = match.groups()[0] return unicode(data, "utf-8").strip() def lang_in_gettext_format(lang): if len(lang) > 2: country = lang[3:].upper() lang = lang[:2] + "_" + country return lang def get_accept_languages(accept): """Returns a list of languages, by order of preference, based on an HTTP Accept-Language string.See W3C RFC 2616 (http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html) for specification. """ langs = parse_http_accept_header(accept) for index, lang in enumerate(langs): langs[index] = lang_in_gettext_format(lang) return langs def get_locale(locale=None): """ Returns user locale, using _get_locale or app-specific locale lookup function. """ if not locale: get_locale_f = config.get("i18n.get_locale", _get_locale) locale = get_locale_f() return locale def _get_locale(): """Default function for returning locale. First looks in session for locale key, then checks the HTTP Accept-Language header, and finally checks the config default locale setting. This can be replaced by your own function by setting cherrypy config setting i18n.get_locale to your function name. """ if not request_available(): return config.get("i18n.default_locale", "en") if config.get("session_filter.on", False): locale_key = config.get("i18n.session_key", "locale") locale = cherrypy.session.get(locale_key) if locale: return locale browser_accept_lang = _get_locale_from_accept_header() return browser_accept_lang or config.get("i18n.default_locale", "en") def _get_locale_from_accept_header(): """ Checks HTTP Accept-Language header to find preferred language if any. """ try: header = cherrypy.request.headers.get("Accept-Language") if header: accept_languages = get_accept_languages(header) if accept_languages: return accept_languages[0] except AttributeError: pass def set_session_locale(locale): """ Sets the i18n session locale. Raises an error if session support is not enabled. """ cherrypy.session[config.get("i18n.session_key", "locale")] = locale PKA>+gturbogears/i18n/utils.pyc; ȸHIc@sdZdkZdkZdkZdkZdkZdklZdkl Z l Z dZ dZ dZ edZdZd Zd ZdS( s! General i18n utility functions. N(sconfig(sparse_http_accept_headersrequest_availablec Cstihdd||f<d|<dd<dd<}tid}|i dd ||i }|i }|itid tii|}|id }t|d iSdS( Nslangpairs%s|%sstextsiesUTF8soestranslate.google.comsPOSTs /translate_ts)isutf-8(surllibs urlencodes from_langsto_langstextsparamsshttplibsHTTPConnectionsconnsrequests getresponsesrespsreadsssclosesrescompilesDOTALLssearchsmatchsgroupssdatasunicodesstrip( s from_langsto_langstextsrespsssparamssmatchsdatasconn((s.build\bdist.win32\egg\turbogears\i18n\utils.pysgoogle_translate s=    cCsAt|djo&|di}|d d|}n|SdS(Niis_(slenslangsupperscountry(slangscountry((s.build\bdist.win32\egg\turbogears\i18n\utils.pyslang_in_gettext_formatscCsAt|}x*t|D]\}}t|||(;turbogears/i18n/__init__.pyc; ȸHIc@sdZdklZlZlZlZlZlZlZdk l Z l Z l Z l Z dklZlZlZlZlZlZlZlZlZlZlZlZlZdklZlZdS(s6 TurboGears internationalization/localization module. (sgettextsngettextsinstallsis_locale_supporteds lazy_gettexts lazy_ngettexts plain_gettext(s get_localesget_accept_languagessset_session_localesgoogle_translate( s get_countriess get_countrysget_month_namessget_abbr_month_namessget_weekday_namessget_abbr_weekday_namess get_languagess format_dates format_numbersformat_decimalsformat_currencys parse_numbers parse_decimal(s translates i18n_filterN(s__doc__sturbogears.i18n.tg_gettextsgettextsngettextsinstallsis_locale_supporteds lazy_gettexts lazy_ngettexts plain_gettextsturbogears.i18n.utilss get_localesget_accept_languagessset_session_localesgoogle_translatesturbogears.i18n.formats get_countriess get_countrysget_month_namessget_abbr_month_namessget_weekday_namessget_abbr_weekday_namess get_languagess format_dates format_numbersformat_decimalsformat_currencys parse_numbers parse_decimalsturbogears.i18n.kidutilss translates i18n_filter(s parse_decimalsget_month_namessget_weekday_namessget_accept_languagess get_countriess get_languagessformat_currencysgettexts plain_gettextsgoogle_translates translates lazy_gettexts get_locales lazy_ngettextsget_abbr_month_namess format_numbersset_session_localesngettexts get_countrysis_locale_supporteds format_dates parse_numbers i18n_filtersget_abbr_weekday_namessinstallsformat_decimal((s1build\bdist.win32\egg\turbogears\i18n\__init__.pys?s1UPKK9,mmturbogears/i18n/data/af.py# Formatting configuration for locale af languages={'af': 'Afrikaanse'} countries={'ZA': 'Suid-Afrika'} months=['Januarie', 'Februarie', 'Maart', 'April', 'Mei', 'Junie', 'Julie', 'Augustus', 'September', 'Oktober', 'November', 'Desember'] abbrMonths=['Jan', 'Feb', 'Mar', 'Apr', 'Mei', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Des'] days=['Maandag', 'Dinsdag', 'Woensdag', 'Donderdag', 'Vrydag', 'Saterdag', 'Sondag'] abbrDays=['Ma', 'Di', 'Wo', 'Do', 'Vr', 'Sa', 'So'] dateFormats={'medium': '%Y %%(abbrmonthname)s %d ', 'full': '%%(dayname)s, %Y %%(monthname)s %d ', 'long': '%Y %%(monthname)s %d ', 'short': '%y/%m/%d'} numericSymbols={'group': ',', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': '.', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'} PKA>jturbogears/i18n/data/af.pyc; ȸHIc @sHhdd<d?d@<dAdB<dCdD<dEdF<dGdHD\turbogears/i18n/data/af_ZA.pyc; ȸHIc @sHhdd<d?d@<dAdB<dCdD<dEdF<dGdH{ڤ)++turbogears/i18n/data/am.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd/<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<d?d@<dAdBr1J++turbogears/i18n/data/am_ET.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd/<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<d?d@<dAdBu''turbogears/i18n/data/ar.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd?>''turbogears/i18n/data/ar_AE.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd+''turbogears/i18n/data/ar_BH.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddM''turbogears/i18n/data/ar_DZ.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd@m ''turbogears/i18n/data/ar_EG.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddZ''turbogears/i18n/data/ar_IN.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd*qW''turbogears/i18n/data/ar_IQ.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd>turbogears/i18n/data/ar_JO.py# Formatting configuration for locale ar_JO languages={'el': u'\u0627\u0644\u064a\u0648\u0646\u0627\u0646\u064a\u0629', 'gu': u'\u0627\u0644\u063a\u0648\u062c\u0627\u0631\u0627\u062a\u064a\u0629', 'en': u'\u0627\u0644\u0627\u0646\u062c\u0644\u064a\u0632\u064a\u0629', 'zh': u'\u0627\u0644\u0635\u064a\u0646\u064a\u0629', 'sw': u'\u0627\u0644\u0633\u0648\u0627\u062d\u0644\u064a\u0629', 'ca': u'\u0627\u0644\u0643\u0627\u062a\u0627\u0644\u0648\u064a\u0646\u064a\u0629', 'it': u'\u0627\u0644\u0627\u064a\u0637\u0627\u0644\u064a\u0629', 'ar': u'\u0627\u0644\u0639\u0631\u0628\u064a\u0629', 'id': u'\u0627\u0644\u0627\u0646\u062f\u0648\u0646\u064a\u0633\u064a\u0629', 'es': u'\u0627\u0644\u0627\u0633\u0628\u0627\u0646\u064a\u0629', 'ru': u'\u0627\u0644\u0631\u0648\u0633\u064a\u0629', 'nl': u'\u0627\u0644\u0647\u0648\u0644\u0646\u062f\u064a\u0629', 'pt': u'\u0627\u0644\u0628\u0631\u062a\u063a\u0627\u0644\u064a\u0629', 'tr': u'\u0627\u0644\u062a\u0631\u0643\u064a\u0629', 'ne': u'\u0627\u0644\u0646\u064a\u0628\u0627\u0644\u064a\u0629', 'lt': u'\u0627\u0644\u0644\u062a\u0648\u0627\u0646\u064a\u0629', 'pa': u'\u0627\u0644\u0628\u0646\u062c\u0627\u0628\u064a\u0629', 'th': u'\u0627\u0644\u062a\u0627\u064a\u0644\u0627\u0646\u062f\u064a\u0629', 'vi': u'\u0627\u0644\u0641\u064a\u062a\u0646\u0627\u0645\u064a\u0629', 'ro': u'\u0627\u0644\u0631\u0648\u0645\u0627\u0646\u064a\u0629', 'be': u'\u0627\u0644\u0628\u064a\u0644\u0648\u0631\u0648\u0633\u064a\u0629', 'fr': u'\u0627\u0644\u0641\u0631\u0646\u0633\u064a\u0629', 'bg': u'\u0627\u0644\u0628\u0644\u063a\u0627\u0631\u064a\u0629', 'uk': u'\u0627\u0644\u0627\u0648\u0643\u0631\u0627\u0646\u064a\u0629', 'hr': u'\u0627\u0644\u0643\u0631\u0648\u0627\u062a\u064a\u0629', 'bn': u'\u0627\u0644\u0628\u0646\u063a\u0627\u0644\u064a\u0629', 'bo': u'\u0627\u0644\u062a\u0628\u062a\u064a\u0629', 'da': u'\u0627\u0644\u062f\u0627\u0646\u0645\u0627\u0631\u0643\u064a\u0629', 'fa': u'\u0627\u0644\u0641\u0627\u0631\u0633\u064a\u0629', 'hi': u'\u0627\u0644\u0647\u0646\u062f\u064a\u0629', 'dz': u'\u0627\u0644\u0632\u0648\u0646\u062e\u0627\u064a\u0629', 'dv': u'\u0627\u0644\u0645\u0627\u0644\u062f\u064a\u0641\u064a\u0629', 'fi': u'\u0627\u0644\u0641\u0646\u0644\u0646\u062f\u064a\u0629', 'ja': u'\u0627\u0644\u064a\u0627\u0628\u0627\u0646\u064a\u0629', 'he': u'\u0627\u0644\u0639\u0628\u0631\u064a\u0629', 'tl': u'\u0627\u0644\u062a\u0627\u063a\u0627\u0644\u0648\u063a\u064a\u0629', 'sr': u'\u0627\u0644\u0635\u0631\u0628\u064a\u0629', 'sq': u'\u0627\u0644\u0627\u0644\u0628\u0627\u0646\u064a\u0629', 'mn': u'\u0627\u0644\u0645\u0646\u063a\u0648\u0644\u064a\u0629', 'ko': u'\u0627\u0644\u0643\u0648\u0631\u064a\u0629', 'km': u'\u0627\u0644\u062e\u0645\u064a\u0631\u064a\u0629', 'ur': u'\u0627\u0644\u0627\u0631\u062f\u064a\u0629', 'de': u'\u0627\u0644\u0627\u0644\u0645\u0627\u0646\u064a\u0629', 'ms': u'\u0644\u063a\u0629 \u0627\u0644\u0645\u0644\u0627\u064a\u0648', 'ug': u'\u0627\u0644\u0627\u063a\u0648\u0631\u064a\u0629', 'my': u'\u0627\u0644\u0628\u0648\u0631\u0645\u064a\u0629'} countries={'BD': u'\u0628\u0646\u063a\u0644\u0627\u062f\u064a\u0634', 'BE': u'\u0628\u0644\u062c\u064a\u0643\u0627', 'BF': u'\u0628\u0648\u0631\u0643\u064a\u0646\u0627 \u0641\u0627\u0633\u0648', 'BG': u'\u0628\u0644\u063a\u0627\u0631\u064a\u0627', 'BA': u'\u0627\u0644\u0628\u0648\u0633\u0646\u0629 \u0648\u0627\u0644\u0647\u0631\u0633\u0643', 'BB': u'\u0628\u0631\u0628\u0627\u062f\u0648\u0633', 'BN': u'\u0628\u0631\u0648\u0646\u0627\u064a', 'BO': u'\u0628\u0648\u0644\u064a\u0641\u064a\u0627', 'BH': u'\u0627\u0644\u0628\u062d\u0631\u064a\u0646', 'BI': u'\u0628\u0648\u0631\u0648\u0646\u062f\u064a', 'BJ': u'\u0628\u0646\u064a\u0646', 'BT': u'\u0628\u0648\u062a\u0627\u0646', 'JM': u'\u062c\u0627\u0645\u0627\u064a\u0643\u0627', 'BW': u'\u0628\u0648\u062a\u0633\u0648\u0627\u0646\u0627', 'WS': u'\u0633\u0627\u0645\u0648\u0627', 'BR': u'\u0627\u0644\u0628\u0631\u0627\u0632\u064a\u0644', 'BS': u'\u0627\u0644\u0628\u0647\u0627\u0645\u0627', 'BY': u'\u0631\u0648\u0633\u064a\u0627 \u0627\u0644\u0628\u064a\u0636\u0627\u0621', 'BZ': u'\u0628\u0644\u064a\u0632', 'RU': u'\u0631\u0648\u0633\u064a\u0627', 'RW': u'\u0631\u0648\u0627\u0646\u062f\u0627', 'TM': u'\u062a\u0631\u0643\u0645\u0627\u0646\u0633\u062a\u0627\u0646', 'TJ': u'\u062a\u0627\u062c\u064a\u0643\u0633\u062a\u0627\u0646', 'RO': u'\u0631\u0648\u0645\u0627\u0646\u064a\u0627', 'GW': u'\u063a\u064a\u0646\u064a\u0627 \u0628\u064a\u0633\u0627\u0648', 'GT': u'\u063a\u0648\u0627\u062a\u064a\u0645\u0627\u0644\u0627', 'GR': u'\u0627\u0644\u064a\u0648\u0646\u0627\u0646', 'GQ': u'\u063a\u064a\u0646\u064a\u0627 \u0627\u0644\u0627\u0633\u062a\u0648\u0627\u0626\u064a\u0629', 'JP': u'\u0627\u0644\u064a\u0627\u0628\u0627\u0646', 'GY': u'\u063a\u0648\u0627\u064a\u0627\u0646\u0627', 'GE': u'\u062c\u0648\u0631\u062c\u064a\u0627', 'GD': u'\u063a\u0631\u064a\u0646\u0627\u062f\u0627', 'GB': u'\u0627\u0644\u0645\u0645\u0644\u0643\u0629 \u0627\u0644\u0645\u062a\u062d\u062f\u0629', 'GA': u'\u063a\u0627\u0628\u0648\u0646', 'SV': u'\u0627\u0644\u0633\u0644\u0641\u0627\u062f\u0648\u0631', 'GN': u'\u063a\u064a\u0646\u064a\u0627', 'GM': u'\u063a\u0627\u0645\u0628\u064a\u0627', 'GH': u'\u063a\u0627\u0646\u0627', 'OM': u'\u0639\u0645\u0627\u0646', 'TN': u'\u062a\u0648\u0646\u0633', 'JO': u'\u0627\u0644\u0627\u0631\u062f\u0646', 'HR': u'\u0643\u0631\u0648\u0627\u062a\u064a\u0627', 'HT': u'\u0647\u0627\u064a\u062a\u064a', 'HU': u'\u0647\u0646\u063a\u0627\u0631\u064a\u0627', 'HN': u'\u0647\u0646\u062f\u0648\u0631\u0627\u0633', 'VE': u'\u0641\u0646\u0632\u0648\u064a\u0644\u0627', 'PW': u'\u0628\u0627\u0644\u0627\u0648', 'PT': u'\u0627\u0644\u0628\u0631\u062a\u063a\u0627\u0644', 'PY': u'\u0628\u0627\u0631\u0627\u063a\u0648\u0627\u064a', 'IQ': u'\u0627\u0644\u0639\u0631\u0627\u0642', 'PA': u'\u0628\u0646\u0645\u0627', 'PG': u'\u0628\u0627\u0628\u0648\u0627 \u063a\u064a\u0646\u064a\u0627 \u0627\u0644\u062c\u062f\u064a\u062f\u0629', 'PE': u'\u0628\u064a\u0631\u0648', 'PK': u'\u0627\u0644\u0628\u0627\u0643\u0633\u062a\u0627\u0646', 'PH': u'\u0627\u0644\u0641\u064a\u0644\u0628\u064a\u0646', 'PL': u'\u0628\u0648\u0644\u0646\u062f\u0627', 'ZM': u'\u0632\u0627\u0645\u0628\u064a\u0627', 'EH': u'\u0627\u0644\u0635\u062d\u0631\u0627\u0621 \u0627\u0644\u063a\u0631\u0628\u064a\u0629', 'EE': u'\u0627\u0633\u062a\u0648\u0646\u064a\u0627', 'EG': u'\u0645\u0635\u0631', 'ZA': u'\u062c\u0646\u0648\u0628 \u0627\u0641\u0631\u064a\u0642\u064a\u0627', 'EC': u'\u0627\u0643\u0648\u0627\u062f\u0648\u0631', 'VN': u'\u0641\u064a\u062a\u0646\u0627\u0645', 'SB': u'\u062c\u0632\u0631 \u0633\u0644\u064a\u0645\u0627\u0646', 'ET': u'\u0627\u062b\u064a\u0648\u0628\u064a\u0627', 'SO': u'\u0627\u0644\u0635\u0648\u0645\u0627\u0644', 'ZW': u'\u0632\u064a\u0645\u0628\u0627\u0628\u0648\u064a', 'ES': u'\u0627\u0633\u0628\u0627\u0646\u064a\u0627', 'ER': u'\u0627\u0631\u062a\u064a\u0631\u064a\u0627', 'MD': u'\u0645\u0648\u0644\u062f\u0648\u0641\u0627', 'MG': u'\u0645\u062f\u063a\u0634\u0642\u0631', 'MA': u'\u0627\u0644\u0645\u063a\u0631\u0628', 'MC': u'\u0645\u0648\u0646\u0627\u0643\u0648', 'UZ': u'\u0627\u0632\u0628\u0643\u0633\u062a\u0627\u0646', 'MM': u'\u0645\u064a\u0627\u0646\u0645\u0627\u0631', 'ML': u'\u0645\u0627\u0644\u064a', 'MN': u'\u0645\u0646\u063a\u0648\u0644\u064a\u0627', 'MH': u'\u062c\u0632\u0631 \u0627\u0644\u0645\u0627\u0631\u0634\u0627\u0644', 'MK': u'\u0645\u0642\u062f\u0648\u0646\u064a\u0627', 'MU': u'\u0645\u0648\u0631\u064a\u0634\u0648\u0633', 'MT': u'\u0645\u0627\u0644\u0637\u0629', 'MW': u'\u0645\u0644\u0627\u0648\u064a', 'MV': u'\u0645\u0627\u0644\u062f\u064a\u0641', 'MR': u'\u0645\u0648\u0631\u064a\u062a\u0627\u0646\u064a\u0627', 'UG': u'\u0627\u0648\u063a\u0646\u062f\u0627', 'MY': u'\u0645\u0627\u0644\u064a\u0632\u064a\u0627', 'MX': u'\u0627\u0644\u0645\u0643\u0633\u064a\u0643', 'IL': u'\u0627\u0633\u0631\u0627\u0626\u064a\u0644', 'FR': u'\u0641\u0631\u0646\u0633\u0627', 'FI': u'\u0641\u0646\u0644\u0646\u062f\u0627', 'FJ': u'\u0641\u064a\u062c\u064a', 'FM': u'\u0645\u064a\u0643\u0631\u0648\u0646\u064a\u0632\u064a\u0627', 'NI': u'\u0646\u064a\u0643\u0627\u0631\u0627\u063a\u0648\u0627', 'NL': u'\u0647\u0648\u0644\u0646\u062f\u0627', 'NO': u'\u0627\u0644\u0646\u0631\u0648\u064a\u062c', 'NA': u'\u0646\u0627\u0645\u064a\u0628\u064a\u0627', 'VU': u'\u0641\u0627\u0646\u0648\u0622\u062a\u0648', 'NE': u'\u0627\u0644\u0646\u064a\u062c\u0631', 'NG': u'\u0646\u064a\u062c\u064a\u0631\u064a\u0627', 'NZ': u'\u0632\u064a\u0644\u0646\u062f\u0627 \u0627\u0644\u062c\u062f\u064a\u062f\u0629', 'NP': u'\u0627\u0644\u0646\u064a\u0628\u0627\u0644', 'NR': u'\u0646\u0627\u0648\u0631\u0648', 'CH': u'\u0633\u0648\u064a\u0633\u0631\u0627', 'CO': u'\u0643\u0648\u0644\u0648\u0645\u0628\u064a\u0627', 'CN': u'\u0627\u0644\u0635\u064a\u0646', 'CM': u'\u0627\u0644\u0643\u0627\u0645\u064a\u0631\u0648\u0646', 'CL': u'\u062a\u0634\u064a\u0644\u064a', 'CA': u'\u0643\u0646\u062f\u0627', 'CG': u'\u0627\u0644\u0643\u0648\u0646\u063a\u0648', 'CF': u'\u062c\u0645\u0647\u0648\u0631\u064a\u0629 \u0627\u0641\u0631\u064a\u0642\u064a\u0627 \u0627\u0644\u0648\u0633\u0637\u0649', 'CZ': u'\u062c\u0645\u0647\u0648\u0631\u064a\u0629 \u0627\u0644\u062a\u0634\u064a\u0643', 'CY': u'\u0642\u0628\u0631\u0635', 'CR': u'\u0643\u0648\u0633\u062a\u0627\u0631\u064a\u0643\u0627', 'CV': u'\u0627\u0644\u0631\u0623\u0633 \u0627\u0644\u0627\u062e\u0636\u0631', 'CU': u'\u0643\u0648\u0628\u0627', 'SZ': u'\u0633\u0648\u0627\u0632\u064a\u0644\u0627\u0646\u062f', 'SY': u'\u0633\u0648\u0631\u064a\u0629', 'KG': u'\u0642\u064a\u0631\u063a\u064a\u0632\u0633\u062a\u0627\u0646', 'KE': u'\u0643\u064a\u0646\u064a\u0627', 'SR': u'\u0633\u0648\u0631\u064a\u0646\u0627\u0645', 'KI': u'\u0643\u064a\u0631\u064a\u0628\u0627\u062a\u064a', 'KH': u'\u0643\u0645\u0628\u0648\u062f\u064a\u0627', 'KN': u'\u0633\u0627\u0646\u062a \u0643\u064a\u062a\u0633 \u0648\u0646\u064a\u0641\u064a\u0633', 'KM': u'\u062c\u0632\u0631 \u0627\u0644\u0642\u0645\u0631', 'ST': u'\u0633\u0627\u0646 \u062a\u0648\u0645\u064a \u0648\u0628\u0631\u064a\u0646\u0633\u064a\u0628\u064a', 'SK': u'\u0633\u0644\u0648\u0641\u0627\u0643\u064a\u0627', 'KR': u'\u0643\u0648\u0631\u064a\u0627 \u0627\u0644\u062c\u0646\u0648\u0628\u064a\u0629', 'SI': u'\u0633\u0644\u0648\u0641\u064a\u0646\u064a\u0627', 'KP': u'\u0643\u0648\u0631\u064a\u0627 \u0627\u0644\u0634\u0645\u0627\u0644\u064a\u0629', 'KW': u'\u0627\u0644\u0643\u0648\u064a\u062a', 'SN': u'\u0627\u0644\u0633\u0646\u063a\u0627\u0644', 'SM': u'\u0633\u0627\u0646 \u0645\u0627\u0631\u064a\u0646\u0648', 'SL': u'\u0633\u064a\u0631\u0627\u0644\u064a\u0648\u0646', 'SC': u'\u0633\u064a\u0634\u0644', 'KZ': u'\u0643\u0627\u0632\u0627\u062e\u0633\u062a\u0627\u0646', 'SA': u'\u0627\u0644\u0639\u0631\u0628\u064a\u0629 \u0627\u0644\u0633\u0639\u0648\u062f\u064a\u0629', 'SG': u'\u0633\u0646\u063a\u0627\u0641\u0648\u0631\u0629', 'SE': u'\u0627\u0644\u0633\u0648\u064a\u062f', 'SD': u'\u0627\u0644\u0633\u0648\u062f\u0627\u0646', 'DO': u'\u0627\u0644\u062c\u0645\u0647\u0648\u0631\u064a\u0629 \u0627\u0644\u062f\u0648\u0645\u064a\u0646\u064a\u0643\u064a\u0629', 'DM': u'\u062f\u0648\u0645\u064a\u0646\u064a\u0643\u0627', 'DJ': u'\u062c\u064a\u0628\u0648\u062a\u064a', 'DK': u'\u0627\u0644\u062f\u0627\u0646\u0645\u0631\u0643', 'DE': u'\u0627\u0644\u0645\u0627\u0646\u064a\u0627', 'YE': u'\u0627\u0644\u064a\u0645\u0646', 'DZ': u'\u0627\u0644\u062c\u0632\u0627\u0626\u0631', 'US': u'\u0627\u0644\u0627\u0648\u0644\u0627\u064a\u0627\u062a \u0627\u0644\u0645\u062a\u062d\u062f\u0629 \u0627\u0644\u0627\u0645\u0631\u064a\u0643\u064a\u0629', 'UY': u'\u0627\u0631\u0648\u063a\u0648\u0627\u064a', 'LB': u'\u0644\u0628\u0646\u0627\u0646', 'LC': u'\u0633\u0627\u0646\u062a \u0644\u0648\u0633\u064a\u0627', 'LA': u'\u0644\u0627\u0648\u0633', 'TV': u'\u062a\u0648\u0641\u0627\u0644\u0648', 'TW': u'\u062a\u0627\u064a\u0648\u0627\u0646', 'TT': u'\u062a\u0631\u064a\u0646\u064a\u062f\u0627\u062f \u0648\u062a\u0648\u0628\u0627\u063a\u0648', 'TR': u'\u062a\u0631\u0643\u064a\u0627', 'LK': u'\u0633\u0631\u064a \u0644\u0627\u0646\u0643\u0627', 'LI': u'\u0644\u064a\u062e\u062a\u0646\u0634\u062a\u0627\u064a\u0646', 'LV': u'\u0644\u0627\u062a\u0641\u064a\u0627', 'TO': u'\u062a\u0648\u0646\u063a\u0627', 'LT': u'\u0644\u064a\u062a\u0648\u0627\u0646\u064a\u0627', 'LU': u'\u0644\u0648\u0643\u0633\u0648\u0645\u0628\u0631\u063a', 'LR': u'\u0644\u064a\u0628\u064a\u0631\u064a\u0627', 'LS': u'\u0644\u064a\u0633\u0648\u062a\u0648', 'TH': u'\u062a\u0627\u064a\u0644\u0646\u062f', 'TG': u'\u062a\u0648\u063a\u0648', 'TD': u'\u062a\u0634\u0627\u062f', 'LY': u'\u0644\u064a\u0628\u064a\u0627', 'VA': u'\u0627\u0644\u0641\u0627\u062a\u064a\u0643\u0627\u0646', 'VC': u'\u0633\u0627\u0646\u062a \u0641\u0646\u0633\u0646\u062a \u0648\u062c\u0632\u0631 \u063a\u0631\u064a\u0646\u0627\u062f\u064a\u0646', 'AE': u'\u0627\u0644\u0627\u0645\u0627\u0631\u0627\u062a \u0627\u0644\u0639\u0631\u0628\u064a\u0629 \u0627\u0644\u0645\u062a\u062d\u062f\u0629', 'AD': u'\u0627\u0646\u062f\u0648\u0631\u0627', 'AG': u'\u0627\u0646\u062a\u064a\u063a\u0648\u0627 \u0648\u0628\u0631\u0628\u0648\u062f\u0627', 'AF': u'\u0627\u0641\u063a\u0627\u0646\u0633\u062a\u0627\u0646', 'AI': u'\u0627\u0644\u0628\u0627\u0646\u064a\u0627', 'IS': u'\u0627\u064a\u0633\u0644\u0646\u062f\u0627', 'IR': u'\u0627\u064a\u0631\u0627\u0646', 'AM': u'\u0627\u0631\u0645\u064a\u0646\u064a\u0627', 'IT': u'\u0627\u064a\u0637\u0627\u0644\u064a\u0627', 'AO': u'\u0627\u0646\u063a\u0648\u0644\u0627', 'AR': u'\u0627\u0644\u0627\u0631\u062c\u0646\u062a\u064a\u0646', 'AU': u'\u0627\u0633\u062a\u0631\u0627\u0644\u064a\u0627', 'AT': u'\u0627\u0644\u0646\u0645\u0633\u0627', 'IN': u'\u0627\u0644\u0647\u0646\u062f', 'TZ': u'\u062a\u0627\u0646\u0632\u0627\u0646\u064a\u0627', 'AZ': u'\u0622\u0630\u0631\u0628\u064a\u062c\u0627\u0646', 'IE': u'\u0627\u064a\u0631\u0644\u0646\u062f\u0627', 'ID': u'\u0627\u0646\u062f\u0648\u0646\u064a\u0633\u064a\u0627', 'UA': u'\u0627\u0648\u0643\u0631\u0627\u0646\u064a\u0627', 'QA': u'\u0642\u0637\u0631', 'MZ': u'\u0645\u0648\u0632\u0645\u0628\u064a\u0642'} months=[u'\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a', u'\u0634\u0628\u0627\u0637', u'\u0622\u0630\u0627\u0631', u'\u0646\u064a\u0633\u0627\u0646', u'\u0623\u064a\u0627\u0631', u'\u062d\u0632\u064a\u0631\u0627\u0646', u'\u062a\u0645\u0648\u0632', u'\u0622\u0628', u'\u0623\u064a\u0644\u0648\u0644', u'\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644', u'\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a', u'\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644'] abbrMonths=[u'\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a', u'\u0634\u0628\u0627\u0637', u'\u0622\u0630\u0627\u0631', u'\u0646\u064a\u0633\u0627\u0646', u'\u0623\u064a\u0627\u0631', u'\u062d\u0632\u064a\u0631\u0627\u0646', u'\u062a\u0645\u0648\u0632', u'\u0622\u0628', u'\u0623\u064a\u0644\u0648\u0644', u'\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644', u'\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a', u'\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644'] days=[u'\u0627\u0644\u0627\u062b\u0646\u064a\u0646', u'\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621', u'\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621', u'\u0627\u0644\u062e\u0645\u064a\u0633', u'\u0627\u0644\u062c\u0645\u0639\u0629', u'\u0627\u0644\u0633\u0628\u062a', u'\u0627\u0644\u0623\u062d\u062f'] abbrDays=[u'\u0627\u0644\u0627\u062b\u0646\u064a\u0646', u'\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621', u'\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621', u'\u0627\u0644\u062e\u0645\u064a\u0633', u'\u0627\u0644\u062c\u0645\u0639\u0629', u'\u0627\u0644\u0633\u0628\u062a', u'\u0627\u0644\u0623\u062d\u062f'] dateFormats={'medium': '%d/%m/%Y', 'full': '%%(dayname)s, %d %%(monthname)s, %Y', 'long': '%d %%(monthname)s, %Y', 'short': '%d/%m/%Y'} numericSymbols={'group': u'\u066c', 'nativeZeroDigit': u'\u0660', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': u'\u066b', 'percentSign': u'\u066a', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'} PKA>ي''turbogears/i18n/data/ar_JO.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd>turbogears/i18n/data/ar_LB.py# Formatting configuration for locale ar_LB languages={'el': u'\u0627\u0644\u064a\u0648\u0646\u0627\u0646\u064a\u0629', 'gu': u'\u0627\u0644\u063a\u0648\u062c\u0627\u0631\u0627\u062a\u064a\u0629', 'en': u'\u0627\u0644\u0627\u0646\u062c\u0644\u064a\u0632\u064a\u0629', 'zh': u'\u0627\u0644\u0635\u064a\u0646\u064a\u0629', 'sw': u'\u0627\u0644\u0633\u0648\u0627\u062d\u0644\u064a\u0629', 'ca': u'\u0627\u0644\u0643\u0627\u062a\u0627\u0644\u0648\u064a\u0646\u064a\u0629', 'it': u'\u0627\u0644\u0627\u064a\u0637\u0627\u0644\u064a\u0629', 'ar': u'\u0627\u0644\u0639\u0631\u0628\u064a\u0629', 'id': u'\u0627\u0644\u0627\u0646\u062f\u0648\u0646\u064a\u0633\u064a\u0629', 'es': u'\u0627\u0644\u0627\u0633\u0628\u0627\u0646\u064a\u0629', 'ru': u'\u0627\u0644\u0631\u0648\u0633\u064a\u0629', 'nl': u'\u0627\u0644\u0647\u0648\u0644\u0646\u062f\u064a\u0629', 'pt': u'\u0627\u0644\u0628\u0631\u062a\u063a\u0627\u0644\u064a\u0629', 'tr': u'\u0627\u0644\u062a\u0631\u0643\u064a\u0629', 'ne': u'\u0627\u0644\u0646\u064a\u0628\u0627\u0644\u064a\u0629', 'lt': u'\u0627\u0644\u0644\u062a\u0648\u0627\u0646\u064a\u0629', 'pa': u'\u0627\u0644\u0628\u0646\u062c\u0627\u0628\u064a\u0629', 'th': u'\u0627\u0644\u062a\u0627\u064a\u0644\u0627\u0646\u062f\u064a\u0629', 'vi': u'\u0627\u0644\u0641\u064a\u062a\u0646\u0627\u0645\u064a\u0629', 'ro': u'\u0627\u0644\u0631\u0648\u0645\u0627\u0646\u064a\u0629', 'be': u'\u0627\u0644\u0628\u064a\u0644\u0648\u0631\u0648\u0633\u064a\u0629', 'fr': u'\u0627\u0644\u0641\u0631\u0646\u0633\u064a\u0629', 'bg': u'\u0627\u0644\u0628\u0644\u063a\u0627\u0631\u064a\u0629', 'uk': u'\u0627\u0644\u0627\u0648\u0643\u0631\u0627\u0646\u064a\u0629', 'hr': u'\u0627\u0644\u0643\u0631\u0648\u0627\u062a\u064a\u0629', 'bn': u'\u0627\u0644\u0628\u0646\u063a\u0627\u0644\u064a\u0629', 'bo': u'\u0627\u0644\u062a\u0628\u062a\u064a\u0629', 'da': u'\u0627\u0644\u062f\u0627\u0646\u0645\u0627\u0631\u0643\u064a\u0629', 'fa': u'\u0627\u0644\u0641\u0627\u0631\u0633\u064a\u0629', 'hi': u'\u0627\u0644\u0647\u0646\u062f\u064a\u0629', 'dz': u'\u0627\u0644\u0632\u0648\u0646\u062e\u0627\u064a\u0629', 'dv': u'\u0627\u0644\u0645\u0627\u0644\u062f\u064a\u0641\u064a\u0629', 'fi': u'\u0627\u0644\u0641\u0646\u0644\u0646\u062f\u064a\u0629', 'ja': u'\u0627\u0644\u064a\u0627\u0628\u0627\u0646\u064a\u0629', 'he': u'\u0627\u0644\u0639\u0628\u0631\u064a\u0629', 'tl': u'\u0627\u0644\u062a\u0627\u063a\u0627\u0644\u0648\u063a\u064a\u0629', 'sr': u'\u0627\u0644\u0635\u0631\u0628\u064a\u0629', 'sq': u'\u0627\u0644\u0627\u0644\u0628\u0627\u0646\u064a\u0629', 'mn': u'\u0627\u0644\u0645\u0646\u063a\u0648\u0644\u064a\u0629', 'ko': u'\u0627\u0644\u0643\u0648\u0631\u064a\u0629', 'km': u'\u0627\u0644\u062e\u0645\u064a\u0631\u064a\u0629', 'ur': u'\u0627\u0644\u0627\u0631\u062f\u064a\u0629', 'de': u'\u0627\u0644\u0627\u0644\u0645\u0627\u0646\u064a\u0629', 'ms': u'\u0644\u063a\u0629 \u0627\u0644\u0645\u0644\u0627\u064a\u0648', 'ug': u'\u0627\u0644\u0627\u063a\u0648\u0631\u064a\u0629', 'my': u'\u0627\u0644\u0628\u0648\u0631\u0645\u064a\u0629'} countries={'BD': u'\u0628\u0646\u063a\u0644\u0627\u062f\u064a\u0634', 'BE': u'\u0628\u0644\u062c\u064a\u0643\u0627', 'BF': u'\u0628\u0648\u0631\u0643\u064a\u0646\u0627 \u0641\u0627\u0633\u0648', 'BG': u'\u0628\u0644\u063a\u0627\u0631\u064a\u0627', 'BA': u'\u0627\u0644\u0628\u0648\u0633\u0646\u0629 \u0648\u0627\u0644\u0647\u0631\u0633\u0643', 'BB': u'\u0628\u0631\u0628\u0627\u062f\u0648\u0633', 'BN': u'\u0628\u0631\u0648\u0646\u0627\u064a', 'BO': u'\u0628\u0648\u0644\u064a\u0641\u064a\u0627', 'BH': u'\u0627\u0644\u0628\u062d\u0631\u064a\u0646', 'BI': u'\u0628\u0648\u0631\u0648\u0646\u062f\u064a', 'BJ': u'\u0628\u0646\u064a\u0646', 'BT': u'\u0628\u0648\u062a\u0627\u0646', 'JM': u'\u062c\u0627\u0645\u0627\u064a\u0643\u0627', 'BW': u'\u0628\u0648\u062a\u0633\u0648\u0627\u0646\u0627', 'WS': u'\u0633\u0627\u0645\u0648\u0627', 'BR': u'\u0627\u0644\u0628\u0631\u0627\u0632\u064a\u0644', 'BS': u'\u0627\u0644\u0628\u0647\u0627\u0645\u0627', 'BY': u'\u0631\u0648\u0633\u064a\u0627 \u0627\u0644\u0628\u064a\u0636\u0627\u0621', 'BZ': u'\u0628\u0644\u064a\u0632', 'RU': u'\u0631\u0648\u0633\u064a\u0627', 'RW': u'\u0631\u0648\u0627\u0646\u062f\u0627', 'TM': u'\u062a\u0631\u0643\u0645\u0627\u0646\u0633\u062a\u0627\u0646', 'TJ': u'\u062a\u0627\u062c\u064a\u0643\u0633\u062a\u0627\u0646', 'RO': u'\u0631\u0648\u0645\u0627\u0646\u064a\u0627', 'GW': u'\u063a\u064a\u0646\u064a\u0627 \u0628\u064a\u0633\u0627\u0648', 'GT': u'\u063a\u0648\u0627\u062a\u064a\u0645\u0627\u0644\u0627', 'GR': u'\u0627\u0644\u064a\u0648\u0646\u0627\u0646', 'GQ': u'\u063a\u064a\u0646\u064a\u0627 \u0627\u0644\u0627\u0633\u062a\u0648\u0627\u0626\u064a\u0629', 'JP': u'\u0627\u0644\u064a\u0627\u0628\u0627\u0646', 'GY': u'\u063a\u0648\u0627\u064a\u0627\u0646\u0627', 'GE': u'\u062c\u0648\u0631\u062c\u064a\u0627', 'GD': u'\u063a\u0631\u064a\u0646\u0627\u062f\u0627', 'GB': u'\u0627\u0644\u0645\u0645\u0644\u0643\u0629 \u0627\u0644\u0645\u062a\u062d\u062f\u0629', 'GA': u'\u063a\u0627\u0628\u0648\u0646', 'SV': u'\u0627\u0644\u0633\u0644\u0641\u0627\u062f\u0648\u0631', 'GN': u'\u063a\u064a\u0646\u064a\u0627', 'GM': u'\u063a\u0627\u0645\u0628\u064a\u0627', 'GH': u'\u063a\u0627\u0646\u0627', 'OM': u'\u0639\u0645\u0627\u0646', 'TN': u'\u062a\u0648\u0646\u0633', 'JO': u'\u0627\u0644\u0627\u0631\u062f\u0646', 'HR': u'\u0643\u0631\u0648\u0627\u062a\u064a\u0627', 'HT': u'\u0647\u0627\u064a\u062a\u064a', 'HU': u'\u0647\u0646\u063a\u0627\u0631\u064a\u0627', 'HN': u'\u0647\u0646\u062f\u0648\u0631\u0627\u0633', 'VE': u'\u0641\u0646\u0632\u0648\u064a\u0644\u0627', 'PW': u'\u0628\u0627\u0644\u0627\u0648', 'PT': u'\u0627\u0644\u0628\u0631\u062a\u063a\u0627\u0644', 'PY': u'\u0628\u0627\u0631\u0627\u063a\u0648\u0627\u064a', 'IQ': u'\u0627\u0644\u0639\u0631\u0627\u0642', 'PA': u'\u0628\u0646\u0645\u0627', 'PG': u'\u0628\u0627\u0628\u0648\u0627 \u063a\u064a\u0646\u064a\u0627 \u0627\u0644\u062c\u062f\u064a\u062f\u0629', 'PE': u'\u0628\u064a\u0631\u0648', 'PK': u'\u0627\u0644\u0628\u0627\u0643\u0633\u062a\u0627\u0646', 'PH': u'\u0627\u0644\u0641\u064a\u0644\u0628\u064a\u0646', 'PL': u'\u0628\u0648\u0644\u0646\u062f\u0627', 'ZM': u'\u0632\u0627\u0645\u0628\u064a\u0627', 'EH': u'\u0627\u0644\u0635\u062d\u0631\u0627\u0621 \u0627\u0644\u063a\u0631\u0628\u064a\u0629', 'EE': u'\u0627\u0633\u062a\u0648\u0646\u064a\u0627', 'EG': u'\u0645\u0635\u0631', 'ZA': u'\u062c\u0646\u0648\u0628 \u0627\u0641\u0631\u064a\u0642\u064a\u0627', 'EC': u'\u0627\u0643\u0648\u0627\u062f\u0648\u0631', 'VN': u'\u0641\u064a\u062a\u0646\u0627\u0645', 'SB': u'\u062c\u0632\u0631 \u0633\u0644\u064a\u0645\u0627\u0646', 'ET': u'\u0627\u062b\u064a\u0648\u0628\u064a\u0627', 'SO': u'\u0627\u0644\u0635\u0648\u0645\u0627\u0644', 'ZW': u'\u0632\u064a\u0645\u0628\u0627\u0628\u0648\u064a', 'ES': u'\u0627\u0633\u0628\u0627\u0646\u064a\u0627', 'ER': u'\u0627\u0631\u062a\u064a\u0631\u064a\u0627', 'MD': u'\u0645\u0648\u0644\u062f\u0648\u0641\u0627', 'MG': u'\u0645\u062f\u063a\u0634\u0642\u0631', 'MA': u'\u0627\u0644\u0645\u063a\u0631\u0628', 'MC': u'\u0645\u0648\u0646\u0627\u0643\u0648', 'UZ': u'\u0627\u0632\u0628\u0643\u0633\u062a\u0627\u0646', 'MM': u'\u0645\u064a\u0627\u0646\u0645\u0627\u0631', 'ML': u'\u0645\u0627\u0644\u064a', 'MN': u'\u0645\u0646\u063a\u0648\u0644\u064a\u0627', 'MH': u'\u062c\u0632\u0631 \u0627\u0644\u0645\u0627\u0631\u0634\u0627\u0644', 'MK': u'\u0645\u0642\u062f\u0648\u0646\u064a\u0627', 'MU': u'\u0645\u0648\u0631\u064a\u0634\u0648\u0633', 'MT': u'\u0645\u0627\u0644\u0637\u0629', 'MW': u'\u0645\u0644\u0627\u0648\u064a', 'MV': u'\u0645\u0627\u0644\u062f\u064a\u0641', 'MR': u'\u0645\u0648\u0631\u064a\u062a\u0627\u0646\u064a\u0627', 'UG': u'\u0627\u0648\u063a\u0646\u062f\u0627', 'MY': u'\u0645\u0627\u0644\u064a\u0632\u064a\u0627', 'MX': u'\u0627\u0644\u0645\u0643\u0633\u064a\u0643', 'IL': u'\u0627\u0633\u0631\u0627\u0626\u064a\u0644', 'FR': u'\u0641\u0631\u0646\u0633\u0627', 'FI': u'\u0641\u0646\u0644\u0646\u062f\u0627', 'FJ': u'\u0641\u064a\u062c\u064a', 'FM': u'\u0645\u064a\u0643\u0631\u0648\u0646\u064a\u0632\u064a\u0627', 'NI': u'\u0646\u064a\u0643\u0627\u0631\u0627\u063a\u0648\u0627', 'NL': u'\u0647\u0648\u0644\u0646\u062f\u0627', 'NO': u'\u0627\u0644\u0646\u0631\u0648\u064a\u062c', 'NA': u'\u0646\u0627\u0645\u064a\u0628\u064a\u0627', 'VU': u'\u0641\u0627\u0646\u0648\u0622\u062a\u0648', 'NE': u'\u0627\u0644\u0646\u064a\u062c\u0631', 'NG': u'\u0646\u064a\u062c\u064a\u0631\u064a\u0627', 'NZ': u'\u0632\u064a\u0644\u0646\u062f\u0627 \u0627\u0644\u062c\u062f\u064a\u062f\u0629', 'NP': u'\u0627\u0644\u0646\u064a\u0628\u0627\u0644', 'NR': u'\u0646\u0627\u0648\u0631\u0648', 'CH': u'\u0633\u0648\u064a\u0633\u0631\u0627', 'CO': u'\u0643\u0648\u0644\u0648\u0645\u0628\u064a\u0627', 'CN': u'\u0627\u0644\u0635\u064a\u0646', 'CM': u'\u0627\u0644\u0643\u0627\u0645\u064a\u0631\u0648\u0646', 'CL': u'\u062a\u0634\u064a\u0644\u064a', 'CA': u'\u0643\u0646\u062f\u0627', 'CG': u'\u0627\u0644\u0643\u0648\u0646\u063a\u0648', 'CF': u'\u062c\u0645\u0647\u0648\u0631\u064a\u0629 \u0627\u0641\u0631\u064a\u0642\u064a\u0627 \u0627\u0644\u0648\u0633\u0637\u0649', 'CZ': u'\u062c\u0645\u0647\u0648\u0631\u064a\u0629 \u0627\u0644\u062a\u0634\u064a\u0643', 'CY': u'\u0642\u0628\u0631\u0635', 'CR': u'\u0643\u0648\u0633\u062a\u0627\u0631\u064a\u0643\u0627', 'CV': u'\u0627\u0644\u0631\u0623\u0633 \u0627\u0644\u0627\u062e\u0636\u0631', 'CU': u'\u0643\u0648\u0628\u0627', 'SZ': u'\u0633\u0648\u0627\u0632\u064a\u0644\u0627\u0646\u062f', 'SY': u'\u0633\u0648\u0631\u064a\u0629', 'KG': u'\u0642\u064a\u0631\u063a\u064a\u0632\u0633\u062a\u0627\u0646', 'KE': u'\u0643\u064a\u0646\u064a\u0627', 'SR': u'\u0633\u0648\u0631\u064a\u0646\u0627\u0645', 'KI': u'\u0643\u064a\u0631\u064a\u0628\u0627\u062a\u064a', 'KH': u'\u0643\u0645\u0628\u0648\u062f\u064a\u0627', 'KN': u'\u0633\u0627\u0646\u062a \u0643\u064a\u062a\u0633 \u0648\u0646\u064a\u0641\u064a\u0633', 'KM': u'\u062c\u0632\u0631 \u0627\u0644\u0642\u0645\u0631', 'ST': u'\u0633\u0627\u0646 \u062a\u0648\u0645\u064a \u0648\u0628\u0631\u064a\u0646\u0633\u064a\u0628\u064a', 'SK': u'\u0633\u0644\u0648\u0641\u0627\u0643\u064a\u0627', 'KR': u'\u0643\u0648\u0631\u064a\u0627 \u0627\u0644\u062c\u0646\u0648\u0628\u064a\u0629', 'SI': u'\u0633\u0644\u0648\u0641\u064a\u0646\u064a\u0627', 'KP': u'\u0643\u0648\u0631\u064a\u0627 \u0627\u0644\u0634\u0645\u0627\u0644\u064a\u0629', 'KW': u'\u0627\u0644\u0643\u0648\u064a\u062a', 'SN': u'\u0627\u0644\u0633\u0646\u063a\u0627\u0644', 'SM': u'\u0633\u0627\u0646 \u0645\u0627\u0631\u064a\u0646\u0648', 'SL': u'\u0633\u064a\u0631\u0627\u0644\u064a\u0648\u0646', 'SC': u'\u0633\u064a\u0634\u0644', 'KZ': u'\u0643\u0627\u0632\u0627\u062e\u0633\u062a\u0627\u0646', 'SA': u'\u0627\u0644\u0639\u0631\u0628\u064a\u0629 \u0627\u0644\u0633\u0639\u0648\u062f\u064a\u0629', 'SG': u'\u0633\u0646\u063a\u0627\u0641\u0648\u0631\u0629', 'SE': u'\u0627\u0644\u0633\u0648\u064a\u062f', 'SD': u'\u0627\u0644\u0633\u0648\u062f\u0627\u0646', 'DO': u'\u0627\u0644\u062c\u0645\u0647\u0648\u0631\u064a\u0629 \u0627\u0644\u062f\u0648\u0645\u064a\u0646\u064a\u0643\u064a\u0629', 'DM': u'\u062f\u0648\u0645\u064a\u0646\u064a\u0643\u0627', 'DJ': u'\u062c\u064a\u0628\u0648\u062a\u064a', 'DK': u'\u0627\u0644\u062f\u0627\u0646\u0645\u0631\u0643', 'DE': u'\u0627\u0644\u0645\u0627\u0646\u064a\u0627', 'YE': u'\u0627\u0644\u064a\u0645\u0646', 'DZ': u'\u0627\u0644\u062c\u0632\u0627\u0626\u0631', 'US': u'\u0627\u0644\u0627\u0648\u0644\u0627\u064a\u0627\u062a \u0627\u0644\u0645\u062a\u062d\u062f\u0629 \u0627\u0644\u0627\u0645\u0631\u064a\u0643\u064a\u0629', 'UY': u'\u0627\u0631\u0648\u063a\u0648\u0627\u064a', 'LB': u'\u0644\u0628\u0646\u0627\u0646', 'LC': u'\u0633\u0627\u0646\u062a \u0644\u0648\u0633\u064a\u0627', 'LA': u'\u0644\u0627\u0648\u0633', 'TV': u'\u062a\u0648\u0641\u0627\u0644\u0648', 'TW': u'\u062a\u0627\u064a\u0648\u0627\u0646', 'TT': u'\u062a\u0631\u064a\u0646\u064a\u062f\u0627\u062f \u0648\u062a\u0648\u0628\u0627\u063a\u0648', 'TR': u'\u062a\u0631\u0643\u064a\u0627', 'LK': u'\u0633\u0631\u064a \u0644\u0627\u0646\u0643\u0627', 'LI': u'\u0644\u064a\u062e\u062a\u0646\u0634\u062a\u0627\u064a\u0646', 'LV': u'\u0644\u0627\u062a\u0641\u064a\u0627', 'TO': u'\u062a\u0648\u0646\u063a\u0627', 'LT': u'\u0644\u064a\u062a\u0648\u0627\u0646\u064a\u0627', 'LU': u'\u0644\u0648\u0643\u0633\u0648\u0645\u0628\u0631\u063a', 'LR': u'\u0644\u064a\u0628\u064a\u0631\u064a\u0627', 'LS': u'\u0644\u064a\u0633\u0648\u062a\u0648', 'TH': u'\u062a\u0627\u064a\u0644\u0646\u062f', 'TG': u'\u062a\u0648\u063a\u0648', 'TD': u'\u062a\u0634\u0627\u062f', 'LY': u'\u0644\u064a\u0628\u064a\u0627', 'VA': u'\u0627\u0644\u0641\u0627\u062a\u064a\u0643\u0627\u0646', 'VC': u'\u0633\u0627\u0646\u062a \u0641\u0646\u0633\u0646\u062a \u0648\u062c\u0632\u0631 \u063a\u0631\u064a\u0646\u0627\u062f\u064a\u0646', 'AE': u'\u0627\u0644\u0627\u0645\u0627\u0631\u0627\u062a \u0627\u0644\u0639\u0631\u0628\u064a\u0629 \u0627\u0644\u0645\u062a\u062d\u062f\u0629', 'AD': u'\u0627\u0646\u062f\u0648\u0631\u0627', 'AG': u'\u0627\u0646\u062a\u064a\u063a\u0648\u0627 \u0648\u0628\u0631\u0628\u0648\u062f\u0627', 'AF': u'\u0627\u0641\u063a\u0627\u0646\u0633\u062a\u0627\u0646', 'AI': u'\u0627\u0644\u0628\u0627\u0646\u064a\u0627', 'IS': u'\u0627\u064a\u0633\u0644\u0646\u062f\u0627', 'IR': u'\u0627\u064a\u0631\u0627\u0646', 'AM': u'\u0627\u0631\u0645\u064a\u0646\u064a\u0627', 'IT': u'\u0627\u064a\u0637\u0627\u0644\u064a\u0627', 'AO': u'\u0627\u0646\u063a\u0648\u0644\u0627', 'AR': u'\u0627\u0644\u0627\u0631\u062c\u0646\u062a\u064a\u0646', 'AU': u'\u0627\u0633\u062a\u0631\u0627\u0644\u064a\u0627', 'AT': u'\u0627\u0644\u0646\u0645\u0633\u0627', 'IN': u'\u0627\u0644\u0647\u0646\u062f', 'TZ': u'\u062a\u0627\u0646\u0632\u0627\u0646\u064a\u0627', 'AZ': u'\u0622\u0630\u0631\u0628\u064a\u062c\u0627\u0646', 'IE': u'\u0627\u064a\u0631\u0644\u0646\u062f\u0627', 'ID': u'\u0627\u0646\u062f\u0648\u0646\u064a\u0633\u064a\u0627', 'UA': u'\u0627\u0648\u0643\u0631\u0627\u0646\u064a\u0627', 'QA': u'\u0642\u0637\u0631', 'MZ': u'\u0645\u0648\u0632\u0645\u0628\u064a\u0642'} months=[u'\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a', u'\u0634\u0628\u0627\u0637', u'\u0622\u0630\u0627\u0631', u'\u0646\u064a\u0633\u0627\u0646', u'\u0646\u0648\u0627\u0631', u'\u062d\u0632\u064a\u0631\u0627\u0646', u'\u062a\u0645\u0648\u0632', u'\u0622\u0628', u'\u0623\u064a\u0644\u0648\u0644', u'\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644', u'\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a', u'\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644'] abbrMonths=[u'\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a', u'\u0634\u0628\u0627\u0637', u'\u0622\u0630\u0627\u0631', u'\u0646\u064a\u0633\u0627\u0646', u'\u0646\u0648\u0627\u0631', u'\u062d\u0632\u064a\u0631\u0627\u0646', u'\u062a\u0645\u0648\u0632', u'\u0622\u0628', u'\u0623\u064a\u0644\u0648\u0644', u'\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644', u'\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a', u'\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644'] days=[u'\u0627\u0644\u0627\u062b\u0646\u064a\u0646', u'\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621', u'\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621', u'\u0627\u0644\u062e\u0645\u064a\u0633', u'\u0627\u0644\u062c\u0645\u0639\u0629', u'\u0627\u0644\u0633\u0628\u062a', u'\u0627\u0644\u0623\u062d\u062f'] abbrDays=[u'\u0627\u0644\u0627\u062b\u0646\u064a\u0646', u'\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621', u'\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621', u'\u0627\u0644\u062e\u0645\u064a\u0633', u'\u0627\u0644\u062c\u0645\u0639\u0629', u'\u0627\u0644\u0633\u0628\u062a', u'\u0627\u0644\u0623\u062d\u062f'] dateFormats={'medium': '%d/%m/%Y', 'full': '%%(dayname)s, %d %%(monthname)s, %Y', 'long': '%d %%(monthname)s, %Y', 'short': '%d/%m/%Y'} numericSymbols={'group': u'\u066c', 'nativeZeroDigit': u'\u0660', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': u'\u066b', 'percentSign': u'\u066a', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'} PKA>\SOb''turbogears/i18n/data/ar_LB.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd"-a''turbogears/i18n/data/ar_LY.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd"WȲ''turbogears/i18n/data/ar_MA.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd9Ox''turbogears/i18n/data/ar_OM.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd*>turbogears/i18n/data/ar_QA.py# Formatting configuration for locale ar_QA languages={'el': u'\u0627\u0644\u064a\u0648\u0646\u0627\u0646\u064a\u0629', 'gu': u'\u0627\u0644\u063a\u0648\u062c\u0627\u0631\u0627\u062a\u064a\u0629', 'en': u'\u0627\u0644\u0627\u0646\u062c\u0644\u064a\u0632\u064a\u0629', 'zh': u'\u0627\u0644\u0635\u064a\u0646\u064a\u0629', 'sw': u'\u0627\u0644\u0633\u0648\u0627\u062d\u0644\u064a\u0629', 'ca': u'\u0627\u0644\u0643\u0627\u062a\u0627\u0644\u0648\u064a\u0646\u064a\u0629', 'it': u'\u0627\u0644\u0627\u064a\u0637\u0627\u0644\u064a\u0629', 'ar': u'\u0627\u0644\u0639\u0631\u0628\u064a\u0629', 'id': u'\u0627\u0644\u0627\u0646\u062f\u0648\u0646\u064a\u0633\u064a\u0629', 'es': u'\u0627\u0644\u0627\u0633\u0628\u0627\u0646\u064a\u0629', 'ru': u'\u0627\u0644\u0631\u0648\u0633\u064a\u0629', 'nl': u'\u0627\u0644\u0647\u0648\u0644\u0646\u062f\u064a\u0629', 'pt': u'\u0627\u0644\u0628\u0631\u062a\u063a\u0627\u0644\u064a\u0629', 'tr': u'\u0627\u0644\u062a\u0631\u0643\u064a\u0629', 'ne': u'\u0627\u0644\u0646\u064a\u0628\u0627\u0644\u064a\u0629', 'lt': u'\u0627\u0644\u0644\u062a\u0648\u0627\u0646\u064a\u0629', 'pa': u'\u0627\u0644\u0628\u0646\u062c\u0627\u0628\u064a\u0629', 'th': u'\u0627\u0644\u062a\u0627\u064a\u0644\u0627\u0646\u062f\u064a\u0629', 'vi': u'\u0627\u0644\u0641\u064a\u062a\u0646\u0627\u0645\u064a\u0629', 'ro': u'\u0627\u0644\u0631\u0648\u0645\u0627\u0646\u064a\u0629', 'be': u'\u0627\u0644\u0628\u064a\u0644\u0648\u0631\u0648\u0633\u064a\u0629', 'fr': u'\u0627\u0644\u0641\u0631\u0646\u0633\u064a\u0629', 'bg': u'\u0627\u0644\u0628\u0644\u063a\u0627\u0631\u064a\u0629', 'uk': u'\u0627\u0644\u0627\u0648\u0643\u0631\u0627\u0646\u064a\u0629', 'hr': u'\u0627\u0644\u0643\u0631\u0648\u0627\u062a\u064a\u0629', 'bn': u'\u0627\u0644\u0628\u0646\u063a\u0627\u0644\u064a\u0629', 'bo': u'\u0627\u0644\u062a\u0628\u062a\u064a\u0629', 'da': u'\u0627\u0644\u062f\u0627\u0646\u0645\u0627\u0631\u0643\u064a\u0629', 'fa': u'\u0627\u0644\u0641\u0627\u0631\u0633\u064a\u0629', 'hi': u'\u0627\u0644\u0647\u0646\u062f\u064a\u0629', 'dz': u'\u0627\u0644\u0632\u0648\u0646\u062e\u0627\u064a\u0629', 'dv': u'\u0627\u0644\u0645\u0627\u0644\u062f\u064a\u0641\u064a\u0629', 'fi': u'\u0627\u0644\u0641\u0646\u0644\u0646\u062f\u064a\u0629', 'ja': u'\u0627\u0644\u064a\u0627\u0628\u0627\u0646\u064a\u0629', 'he': u'\u0627\u0644\u0639\u0628\u0631\u064a\u0629', 'tl': u'\u0627\u0644\u062a\u0627\u063a\u0627\u0644\u0648\u063a\u064a\u0629', 'sr': u'\u0627\u0644\u0635\u0631\u0628\u064a\u0629', 'sq': u'\u0627\u0644\u0627\u0644\u0628\u0627\u0646\u064a\u0629', 'mn': u'\u0627\u0644\u0645\u0646\u063a\u0648\u0644\u064a\u0629', 'ko': u'\u0627\u0644\u0643\u0648\u0631\u064a\u0629', 'km': u'\u0627\u0644\u062e\u0645\u064a\u0631\u064a\u0629', 'ur': u'\u0627\u0644\u0627\u0631\u062f\u064a\u0629', 'de': u'\u0627\u0644\u0627\u0644\u0645\u0627\u0646\u064a\u0629', 'ms': u'\u0644\u063a\u0629 \u0627\u0644\u0645\u0644\u0627\u064a\u0648', 'ug': u'\u0627\u0644\u0627\u063a\u0648\u0631\u064a\u0629', 'my': u'\u0627\u0644\u0628\u0648\u0631\u0645\u064a\u0629'} countries={'BD': u'\u0628\u0646\u063a\u0644\u0627\u062f\u064a\u0634', 'BE': u'\u0628\u0644\u062c\u064a\u0643\u0627', 'BF': u'\u0628\u0648\u0631\u0643\u064a\u0646\u0627 \u0641\u0627\u0633\u0648', 'BG': u'\u0628\u0644\u063a\u0627\u0631\u064a\u0627', 'BA': u'\u0627\u0644\u0628\u0648\u0633\u0646\u0629 \u0648\u0627\u0644\u0647\u0631\u0633\u0643', 'BB': u'\u0628\u0631\u0628\u0627\u062f\u0648\u0633', 'BN': u'\u0628\u0631\u0648\u0646\u0627\u064a', 'BO': u'\u0628\u0648\u0644\u064a\u0641\u064a\u0627', 'BH': u'\u0627\u0644\u0628\u062d\u0631\u064a\u0646', 'BI': u'\u0628\u0648\u0631\u0648\u0646\u062f\u064a', 'BJ': u'\u0628\u0646\u064a\u0646', 'BT': u'\u0628\u0648\u062a\u0627\u0646', 'JM': u'\u062c\u0627\u0645\u0627\u064a\u0643\u0627', 'BW': u'\u0628\u0648\u062a\u0633\u0648\u0627\u0646\u0627', 'WS': u'\u0633\u0627\u0645\u0648\u0627', 'BR': u'\u0627\u0644\u0628\u0631\u0627\u0632\u064a\u0644', 'BS': u'\u0627\u0644\u0628\u0647\u0627\u0645\u0627', 'BY': u'\u0631\u0648\u0633\u064a\u0627 \u0627\u0644\u0628\u064a\u0636\u0627\u0621', 'BZ': u'\u0628\u0644\u064a\u0632', 'RU': u'\u0631\u0648\u0633\u064a\u0627', 'RW': u'\u0631\u0648\u0627\u0646\u062f\u0627', 'TM': u'\u062a\u0631\u0643\u0645\u0627\u0646\u0633\u062a\u0627\u0646', 'TJ': u'\u062a\u0627\u062c\u064a\u0643\u0633\u062a\u0627\u0646', 'RO': u'\u0631\u0648\u0645\u0627\u0646\u064a\u0627', 'GW': u'\u063a\u064a\u0646\u064a\u0627 \u0628\u064a\u0633\u0627\u0648', 'GT': u'\u063a\u0648\u0627\u062a\u064a\u0645\u0627\u0644\u0627', 'GR': u'\u0627\u0644\u064a\u0648\u0646\u0627\u0646', 'GQ': u'\u063a\u064a\u0646\u064a\u0627 \u0627\u0644\u0627\u0633\u062a\u0648\u0627\u0626\u064a\u0629', 'JP': u'\u0627\u0644\u064a\u0627\u0628\u0627\u0646', 'GY': u'\u063a\u0648\u0627\u064a\u0627\u0646\u0627', 'GE': u'\u062c\u0648\u0631\u062c\u064a\u0627', 'GD': u'\u063a\u0631\u064a\u0646\u0627\u062f\u0627', 'GB': u'\u0627\u0644\u0645\u0645\u0644\u0643\u0629 \u0627\u0644\u0645\u062a\u062d\u062f\u0629', 'GA': u'\u063a\u0627\u0628\u0648\u0646', 'SV': u'\u0627\u0644\u0633\u0644\u0641\u0627\u062f\u0648\u0631', 'GN': u'\u063a\u064a\u0646\u064a\u0627', 'GM': u'\u063a\u0627\u0645\u0628\u064a\u0627', 'GH': u'\u063a\u0627\u0646\u0627', 'OM': u'\u0639\u0645\u0627\u0646', 'TN': u'\u062a\u0648\u0646\u0633', 'JO': u'\u0627\u0644\u0627\u0631\u062f\u0646', 'HR': u'\u0643\u0631\u0648\u0627\u062a\u064a\u0627', 'HT': u'\u0647\u0627\u064a\u062a\u064a', 'HU': u'\u0647\u0646\u063a\u0627\u0631\u064a\u0627', 'HN': u'\u0647\u0646\u062f\u0648\u0631\u0627\u0633', 'VE': u'\u0641\u0646\u0632\u0648\u064a\u0644\u0627', 'PW': u'\u0628\u0627\u0644\u0627\u0648', 'PT': u'\u0627\u0644\u0628\u0631\u062a\u063a\u0627\u0644', 'PY': u'\u0628\u0627\u0631\u0627\u063a\u0648\u0627\u064a', 'IQ': u'\u0627\u0644\u0639\u0631\u0627\u0642', 'PA': u'\u0628\u0646\u0645\u0627', 'PG': u'\u0628\u0627\u0628\u0648\u0627 \u063a\u064a\u0646\u064a\u0627 \u0627\u0644\u062c\u062f\u064a\u062f\u0629', 'PE': u'\u0628\u064a\u0631\u0648', 'PK': u'\u0627\u0644\u0628\u0627\u0643\u0633\u062a\u0627\u0646', 'PH': u'\u0627\u0644\u0641\u064a\u0644\u0628\u064a\u0646', 'PL': u'\u0628\u0648\u0644\u0646\u062f\u0627', 'ZM': u'\u0632\u0627\u0645\u0628\u064a\u0627', 'EH': u'\u0627\u0644\u0635\u062d\u0631\u0627\u0621 \u0627\u0644\u063a\u0631\u0628\u064a\u0629', 'EE': u'\u0627\u0633\u062a\u0648\u0646\u064a\u0627', 'EG': u'\u0645\u0635\u0631', 'ZA': u'\u062c\u0646\u0648\u0628 \u0627\u0641\u0631\u064a\u0642\u064a\u0627', 'EC': u'\u0627\u0643\u0648\u0627\u062f\u0648\u0631', 'VN': u'\u0641\u064a\u062a\u0646\u0627\u0645', 'SB': u'\u062c\u0632\u0631 \u0633\u0644\u064a\u0645\u0627\u0646', 'ET': u'\u0627\u062b\u064a\u0648\u0628\u064a\u0627', 'SO': u'\u0627\u0644\u0635\u0648\u0645\u0627\u0644', 'ZW': u'\u0632\u064a\u0645\u0628\u0627\u0628\u0648\u064a', 'ES': u'\u0627\u0633\u0628\u0627\u0646\u064a\u0627', 'ER': u'\u0627\u0631\u062a\u064a\u0631\u064a\u0627', 'MD': u'\u0645\u0648\u0644\u062f\u0648\u0641\u0627', 'MG': u'\u0645\u062f\u063a\u0634\u0642\u0631', 'MA': u'\u0627\u0644\u0645\u063a\u0631\u0628', 'MC': u'\u0645\u0648\u0646\u0627\u0643\u0648', 'UZ': u'\u0627\u0632\u0628\u0643\u0633\u062a\u0627\u0646', 'MM': u'\u0645\u064a\u0627\u0646\u0645\u0627\u0631', 'ML': u'\u0645\u0627\u0644\u064a', 'MN': u'\u0645\u0646\u063a\u0648\u0644\u064a\u0627', 'MH': u'\u062c\u0632\u0631 \u0627\u0644\u0645\u0627\u0631\u0634\u0627\u0644', 'MK': u'\u0645\u0642\u062f\u0648\u0646\u064a\u0627', 'MU': u'\u0645\u0648\u0631\u064a\u0634\u0648\u0633', 'MT': u'\u0645\u0627\u0644\u0637\u0629', 'MW': u'\u0645\u0644\u0627\u0648\u064a', 'MV': u'\u0645\u0627\u0644\u062f\u064a\u0641', 'MR': u'\u0645\u0648\u0631\u064a\u062a\u0627\u0646\u064a\u0627', 'UG': u'\u0627\u0648\u063a\u0646\u062f\u0627', 'MY': u'\u0645\u0627\u0644\u064a\u0632\u064a\u0627', 'MX': u'\u0627\u0644\u0645\u0643\u0633\u064a\u0643', 'IL': u'\u0627\u0633\u0631\u0627\u0626\u064a\u0644', 'FR': u'\u0641\u0631\u0646\u0633\u0627', 'FI': u'\u0641\u0646\u0644\u0646\u062f\u0627', 'FJ': u'\u0641\u064a\u062c\u064a', 'FM': u'\u0645\u064a\u0643\u0631\u0648\u0646\u064a\u0632\u064a\u0627', 'NI': u'\u0646\u064a\u0643\u0627\u0631\u0627\u063a\u0648\u0627', 'NL': u'\u0647\u0648\u0644\u0646\u062f\u0627', 'NO': u'\u0627\u0644\u0646\u0631\u0648\u064a\u062c', 'NA': u'\u0646\u0627\u0645\u064a\u0628\u064a\u0627', 'VU': u'\u0641\u0627\u0646\u0648\u0622\u062a\u0648', 'NE': u'\u0627\u0644\u0646\u064a\u062c\u0631', 'NG': u'\u0646\u064a\u062c\u064a\u0631\u064a\u0627', 'NZ': u'\u0632\u064a\u0644\u0646\u062f\u0627 \u0627\u0644\u062c\u062f\u064a\u062f\u0629', 'NP': u'\u0627\u0644\u0646\u064a\u0628\u0627\u0644', 'NR': u'\u0646\u0627\u0648\u0631\u0648', 'CH': u'\u0633\u0648\u064a\u0633\u0631\u0627', 'CO': u'\u0643\u0648\u0644\u0648\u0645\u0628\u064a\u0627', 'CN': u'\u0627\u0644\u0635\u064a\u0646', 'CM': u'\u0627\u0644\u0643\u0627\u0645\u064a\u0631\u0648\u0646', 'CL': u'\u062a\u0634\u064a\u0644\u064a', 'CA': u'\u0643\u0646\u062f\u0627', 'CG': u'\u0627\u0644\u0643\u0648\u0646\u063a\u0648', 'CF': u'\u062c\u0645\u0647\u0648\u0631\u064a\u0629 \u0627\u0641\u0631\u064a\u0642\u064a\u0627 \u0627\u0644\u0648\u0633\u0637\u0649', 'CZ': u'\u062c\u0645\u0647\u0648\u0631\u064a\u0629 \u0627\u0644\u062a\u0634\u064a\u0643', 'CY': u'\u0642\u0628\u0631\u0635', 'CR': u'\u0643\u0648\u0633\u062a\u0627\u0631\u064a\u0643\u0627', 'CV': u'\u0627\u0644\u0631\u0623\u0633 \u0627\u0644\u0627\u062e\u0636\u0631', 'CU': u'\u0643\u0648\u0628\u0627', 'SZ': u'\u0633\u0648\u0627\u0632\u064a\u0644\u0627\u0646\u062f', 'SY': u'\u0633\u0648\u0631\u064a\u0629', 'KG': u'\u0642\u064a\u0631\u063a\u064a\u0632\u0633\u062a\u0627\u0646', 'KE': u'\u0643\u064a\u0646\u064a\u0627', 'SR': u'\u0633\u0648\u0631\u064a\u0646\u0627\u0645', 'KI': u'\u0643\u064a\u0631\u064a\u0628\u0627\u062a\u064a', 'KH': u'\u0643\u0645\u0628\u0648\u062f\u064a\u0627', 'KN': u'\u0633\u0627\u0646\u062a \u0643\u064a\u062a\u0633 \u0648\u0646\u064a\u0641\u064a\u0633', 'KM': u'\u062c\u0632\u0631 \u0627\u0644\u0642\u0645\u0631', 'ST': u'\u0633\u0627\u0646 \u062a\u0648\u0645\u064a \u0648\u0628\u0631\u064a\u0646\u0633\u064a\u0628\u064a', 'SK': u'\u0633\u0644\u0648\u0641\u0627\u0643\u064a\u0627', 'KR': u'\u0643\u0648\u0631\u064a\u0627 \u0627\u0644\u062c\u0646\u0648\u0628\u064a\u0629', 'SI': u'\u0633\u0644\u0648\u0641\u064a\u0646\u064a\u0627', 'KP': u'\u0643\u0648\u0631\u064a\u0627 \u0627\u0644\u0634\u0645\u0627\u0644\u064a\u0629', 'KW': u'\u0627\u0644\u0643\u0648\u064a\u062a', 'SN': u'\u0627\u0644\u0633\u0646\u063a\u0627\u0644', 'SM': u'\u0633\u0627\u0646 \u0645\u0627\u0631\u064a\u0646\u0648', 'SL': u'\u0633\u064a\u0631\u0627\u0644\u064a\u0648\u0646', 'SC': u'\u0633\u064a\u0634\u0644', 'KZ': u'\u0643\u0627\u0632\u0627\u062e\u0633\u062a\u0627\u0646', 'SA': u'\u0627\u0644\u0639\u0631\u0628\u064a\u0629 \u0627\u0644\u0633\u0639\u0648\u062f\u064a\u0629', 'SG': u'\u0633\u0646\u063a\u0627\u0641\u0648\u0631\u0629', 'SE': u'\u0627\u0644\u0633\u0648\u064a\u062f', 'SD': u'\u0627\u0644\u0633\u0648\u062f\u0627\u0646', 'DO': u'\u0627\u0644\u062c\u0645\u0647\u0648\u0631\u064a\u0629 \u0627\u0644\u062f\u0648\u0645\u064a\u0646\u064a\u0643\u064a\u0629', 'DM': u'\u062f\u0648\u0645\u064a\u0646\u064a\u0643\u0627', 'DJ': u'\u062c\u064a\u0628\u0648\u062a\u064a', 'DK': u'\u0627\u0644\u062f\u0627\u0646\u0645\u0631\u0643', 'DE': u'\u0627\u0644\u0645\u0627\u0646\u064a\u0627', 'YE': u'\u0627\u0644\u064a\u0645\u0646', 'DZ': u'\u0627\u0644\u062c\u0632\u0627\u0626\u0631', 'US': u'\u0627\u0644\u0627\u0648\u0644\u0627\u064a\u0627\u062a \u0627\u0644\u0645\u062a\u062d\u062f\u0629 \u0627\u0644\u0627\u0645\u0631\u064a\u0643\u064a\u0629', 'UY': u'\u0627\u0631\u0648\u063a\u0648\u0627\u064a', 'LB': u'\u0644\u0628\u0646\u0627\u0646', 'LC': u'\u0633\u0627\u0646\u062a \u0644\u0648\u0633\u064a\u0627', 'LA': u'\u0644\u0627\u0648\u0633', 'TV': u'\u062a\u0648\u0641\u0627\u0644\u0648', 'TW': u'\u062a\u0627\u064a\u0648\u0627\u0646', 'TT': u'\u062a\u0631\u064a\u0646\u064a\u062f\u0627\u062f \u0648\u062a\u0648\u0628\u0627\u063a\u0648', 'TR': u'\u062a\u0631\u0643\u064a\u0627', 'LK': u'\u0633\u0631\u064a \u0644\u0627\u0646\u0643\u0627', 'LI': u'\u0644\u064a\u062e\u062a\u0646\u0634\u062a\u0627\u064a\u0646', 'LV': u'\u0644\u0627\u062a\u0641\u064a\u0627', 'TO': u'\u062a\u0648\u0646\u063a\u0627', 'LT': u'\u0644\u064a\u062a\u0648\u0627\u0646\u064a\u0627', 'LU': u'\u0644\u0648\u0643\u0633\u0648\u0645\u0628\u0631\u063a', 'LR': u'\u0644\u064a\u0628\u064a\u0631\u064a\u0627', 'LS': u'\u0644\u064a\u0633\u0648\u062a\u0648', 'TH': u'\u062a\u0627\u064a\u0644\u0646\u062f', 'TG': u'\u062a\u0648\u063a\u0648', 'TD': u'\u062a\u0634\u0627\u062f', 'LY': u'\u0644\u064a\u0628\u064a\u0627', 'VA': u'\u0627\u0644\u0641\u0627\u062a\u064a\u0643\u0627\u0646', 'VC': u'\u0633\u0627\u0646\u062a \u0641\u0646\u0633\u0646\u062a \u0648\u062c\u0632\u0631 \u063a\u0631\u064a\u0646\u0627\u062f\u064a\u0646', 'AE': u'\u0627\u0644\u0627\u0645\u0627\u0631\u0627\u062a \u0627\u0644\u0639\u0631\u0628\u064a\u0629 \u0627\u0644\u0645\u062a\u062d\u062f\u0629', 'AD': u'\u0627\u0646\u062f\u0648\u0631\u0627', 'AG': u'\u0627\u0646\u062a\u064a\u063a\u0648\u0627 \u0648\u0628\u0631\u0628\u0648\u062f\u0627', 'AF': u'\u0627\u0641\u063a\u0627\u0646\u0633\u062a\u0627\u0646', 'AI': u'\u0627\u0644\u0628\u0627\u0646\u064a\u0627', 'IS': u'\u0627\u064a\u0633\u0644\u0646\u062f\u0627', 'IR': u'\u0627\u064a\u0631\u0627\u0646', 'AM': u'\u0627\u0631\u0645\u064a\u0646\u064a\u0627', 'IT': u'\u0627\u064a\u0637\u0627\u0644\u064a\u0627', 'AO': u'\u0627\u0646\u063a\u0648\u0644\u0627', 'AR': u'\u0627\u0644\u0627\u0631\u062c\u0646\u062a\u064a\u0646', 'AU': u'\u0627\u0633\u062a\u0631\u0627\u0644\u064a\u0627', 'AT': u'\u0627\u0644\u0646\u0645\u0633\u0627', 'IN': u'\u0627\u0644\u0647\u0646\u062f', 'TZ': u'\u062a\u0627\u0646\u0632\u0627\u0646\u064a\u0627', 'AZ': u'\u0622\u0630\u0631\u0628\u064a\u062c\u0627\u0646', 'IE': u'\u0627\u064a\u0631\u0644\u0646\u062f\u0627', 'ID': u'\u0627\u0646\u062f\u0648\u0646\u064a\u0633\u064a\u0627', 'UA': u'\u0627\u0648\u0643\u0631\u0627\u0646\u064a\u0627', 'QA': u'\u0642\u0637\u0631', 'MZ': u'\u0645\u0648\u0632\u0645\u0628\u064a\u0642'} months=[u'\u064a\u0646\u0627\u064a\u0631', u'\u0641\u0628\u0631\u0627\u064a\u0631', u'\u0645\u0627\u0631\u0633', u'\u0623\u0628\u0631\u064a\u0644', u'\u0645\u0627\u064a\u0648', u'\u064a\u0648\u0646\u064a\u0648', u'\u064a\u0648\u0644\u064a\u0648', u'\u0623\u063a\u0633\u0637\u0633', u'\u0633\u0628\u062a\u0645\u0628\u0631', u'\u0623\u0643\u062a\u0648\u0628\u0631', u'\u0646\u0648\u0641\u0645\u0628\u0631', u'\u062f\u064a\u0633\u0645\u0628\u0631'] abbrMonths=[u'\u064a\u0646\u0627\u064a\u0631', u'\u0641\u0628\u0631\u0627\u064a\u0631', u'\u0645\u0627\u0631\u0633', u'\u0623\u0628\u0631\u064a\u0644', u'\u0645\u0627\u064a\u0648', u'\u064a\u0648\u0646\u064a\u0648', u'\u064a\u0648\u0644\u064a\u0648', u'\u0623\u063a\u0633\u0637\u0633', u'\u0633\u0628\u062a\u0645\u0628\u0631', u'\u0623\u0643\u062a\u0648\u0628\u0631', u'\u0646\u0648\u0641\u0645\u0628\u0631', u'\u062f\u064a\u0633\u0645\u0628\u0631'] days=[u'\u0627\u0644\u0627\u062b\u0646\u064a\u0646', u'\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621', u'\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621', u'\u0627\u0644\u062e\u0645\u064a\u0633', u'\u0627\u0644\u062c\u0645\u0639\u0629', u'\u0627\u0644\u0633\u0628\u062a', u'\u0627\u0644\u0623\u062d\u062f'] abbrDays=[u'\u0627\u0644\u0627\u062b\u0646\u064a\u0646', u'\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621', u'\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621', u'\u0627\u0644\u062e\u0645\u064a\u0633', u'\u0627\u0644\u062c\u0645\u0639\u0629', u'\u0627\u0644\u0633\u0628\u062a', u'\u0627\u0644\u0623\u062d\u062f'] dateFormats={'medium': '%d/%m/%Y', 'full': '%%(dayname)s, %d %%(monthname)s, %Y', 'long': '%d %%(monthname)s, %Y', 'short': '%d/%m/%Y'} numericSymbols={'group': u'\u066c', 'nativeZeroDigit': u'\u0660', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': u'\u066b', 'percentSign': u'\u066a', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'} PKA>s݂''turbogears/i18n/data/ar_QA.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd*>turbogears/i18n/data/ar_SA.py# Formatting configuration for locale ar_SA languages={'el': u'\u0627\u0644\u064a\u0648\u0646\u0627\u0646\u064a\u0629', 'gu': u'\u0627\u0644\u063a\u0648\u062c\u0627\u0631\u0627\u062a\u064a\u0629', 'en': u'\u0627\u0644\u0627\u0646\u062c\u0644\u064a\u0632\u064a\u0629', 'zh': u'\u0627\u0644\u0635\u064a\u0646\u064a\u0629', 'sw': u'\u0627\u0644\u0633\u0648\u0627\u062d\u0644\u064a\u0629', 'ca': u'\u0627\u0644\u0643\u0627\u062a\u0627\u0644\u0648\u064a\u0646\u064a\u0629', 'it': u'\u0627\u0644\u0627\u064a\u0637\u0627\u0644\u064a\u0629', 'ar': u'\u0627\u0644\u0639\u0631\u0628\u064a\u0629', 'id': u'\u0627\u0644\u0627\u0646\u062f\u0648\u0646\u064a\u0633\u064a\u0629', 'es': u'\u0627\u0644\u0627\u0633\u0628\u0627\u0646\u064a\u0629', 'ru': u'\u0627\u0644\u0631\u0648\u0633\u064a\u0629', 'nl': u'\u0627\u0644\u0647\u0648\u0644\u0646\u062f\u064a\u0629', 'pt': u'\u0627\u0644\u0628\u0631\u062a\u063a\u0627\u0644\u064a\u0629', 'tr': u'\u0627\u0644\u062a\u0631\u0643\u064a\u0629', 'ne': u'\u0627\u0644\u0646\u064a\u0628\u0627\u0644\u064a\u0629', 'lt': u'\u0627\u0644\u0644\u062a\u0648\u0627\u0646\u064a\u0629', 'pa': u'\u0627\u0644\u0628\u0646\u062c\u0627\u0628\u064a\u0629', 'th': u'\u0627\u0644\u062a\u0627\u064a\u0644\u0627\u0646\u062f\u064a\u0629', 'vi': u'\u0627\u0644\u0641\u064a\u062a\u0646\u0627\u0645\u064a\u0629', 'ro': u'\u0627\u0644\u0631\u0648\u0645\u0627\u0646\u064a\u0629', 'be': u'\u0627\u0644\u0628\u064a\u0644\u0648\u0631\u0648\u0633\u064a\u0629', 'fr': u'\u0627\u0644\u0641\u0631\u0646\u0633\u064a\u0629', 'bg': u'\u0627\u0644\u0628\u0644\u063a\u0627\u0631\u064a\u0629', 'uk': u'\u0627\u0644\u0627\u0648\u0643\u0631\u0627\u0646\u064a\u0629', 'hr': u'\u0627\u0644\u0643\u0631\u0648\u0627\u062a\u064a\u0629', 'bn': u'\u0627\u0644\u0628\u0646\u063a\u0627\u0644\u064a\u0629', 'bo': u'\u0627\u0644\u062a\u0628\u062a\u064a\u0629', 'da': u'\u0627\u0644\u062f\u0627\u0646\u0645\u0627\u0631\u0643\u064a\u0629', 'fa': u'\u0627\u0644\u0641\u0627\u0631\u0633\u064a\u0629', 'hi': u'\u0627\u0644\u0647\u0646\u062f\u064a\u0629', 'dz': u'\u0627\u0644\u0632\u0648\u0646\u062e\u0627\u064a\u0629', 'dv': u'\u0627\u0644\u0645\u0627\u0644\u062f\u064a\u0641\u064a\u0629', 'fi': u'\u0627\u0644\u0641\u0646\u0644\u0646\u062f\u064a\u0629', 'ja': u'\u0627\u0644\u064a\u0627\u0628\u0627\u0646\u064a\u0629', 'he': u'\u0627\u0644\u0639\u0628\u0631\u064a\u0629', 'tl': u'\u0627\u0644\u062a\u0627\u063a\u0627\u0644\u0648\u063a\u064a\u0629', 'sr': u'\u0627\u0644\u0635\u0631\u0628\u064a\u0629', 'sq': u'\u0627\u0644\u0627\u0644\u0628\u0627\u0646\u064a\u0629', 'mn': u'\u0627\u0644\u0645\u0646\u063a\u0648\u0644\u064a\u0629', 'ko': u'\u0627\u0644\u0643\u0648\u0631\u064a\u0629', 'km': u'\u0627\u0644\u062e\u0645\u064a\u0631\u064a\u0629', 'ur': u'\u0627\u0644\u0627\u0631\u062f\u064a\u0629', 'de': u'\u0627\u0644\u0627\u0644\u0645\u0627\u0646\u064a\u0629', 'ms': u'\u0644\u063a\u0629 \u0627\u0644\u0645\u0644\u0627\u064a\u0648', 'ug': u'\u0627\u0644\u0627\u063a\u0648\u0631\u064a\u0629', 'my': u'\u0627\u0644\u0628\u0648\u0631\u0645\u064a\u0629'} countries={'BD': u'\u0628\u0646\u063a\u0644\u0627\u062f\u064a\u0634', 'BE': u'\u0628\u0644\u062c\u064a\u0643\u0627', 'BF': u'\u0628\u0648\u0631\u0643\u064a\u0646\u0627 \u0641\u0627\u0633\u0648', 'BG': u'\u0628\u0644\u063a\u0627\u0631\u064a\u0627', 'BA': u'\u0627\u0644\u0628\u0648\u0633\u0646\u0629 \u0648\u0627\u0644\u0647\u0631\u0633\u0643', 'BB': u'\u0628\u0631\u0628\u0627\u062f\u0648\u0633', 'BN': u'\u0628\u0631\u0648\u0646\u0627\u064a', 'BO': u'\u0628\u0648\u0644\u064a\u0641\u064a\u0627', 'BH': u'\u0627\u0644\u0628\u062d\u0631\u064a\u0646', 'BI': u'\u0628\u0648\u0631\u0648\u0646\u062f\u064a', 'BJ': u'\u0628\u0646\u064a\u0646', 'BT': u'\u0628\u0648\u062a\u0627\u0646', 'JM': u'\u062c\u0627\u0645\u0627\u064a\u0643\u0627', 'BW': u'\u0628\u0648\u062a\u0633\u0648\u0627\u0646\u0627', 'WS': u'\u0633\u0627\u0645\u0648\u0627', 'BR': u'\u0627\u0644\u0628\u0631\u0627\u0632\u064a\u0644', 'BS': u'\u0627\u0644\u0628\u0647\u0627\u0645\u0627', 'BY': u'\u0631\u0648\u0633\u064a\u0627 \u0627\u0644\u0628\u064a\u0636\u0627\u0621', 'BZ': u'\u0628\u0644\u064a\u0632', 'RU': u'\u0631\u0648\u0633\u064a\u0627', 'RW': u'\u0631\u0648\u0627\u0646\u062f\u0627', 'TM': u'\u062a\u0631\u0643\u0645\u0627\u0646\u0633\u062a\u0627\u0646', 'TJ': u'\u062a\u0627\u062c\u064a\u0643\u0633\u062a\u0627\u0646', 'RO': u'\u0631\u0648\u0645\u0627\u0646\u064a\u0627', 'GW': u'\u063a\u064a\u0646\u064a\u0627 \u0628\u064a\u0633\u0627\u0648', 'GT': u'\u063a\u0648\u0627\u062a\u064a\u0645\u0627\u0644\u0627', 'GR': u'\u0627\u0644\u064a\u0648\u0646\u0627\u0646', 'GQ': u'\u063a\u064a\u0646\u064a\u0627 \u0627\u0644\u0627\u0633\u062a\u0648\u0627\u0626\u064a\u0629', 'JP': u'\u0627\u0644\u064a\u0627\u0628\u0627\u0646', 'GY': u'\u063a\u0648\u0627\u064a\u0627\u0646\u0627', 'GE': u'\u062c\u0648\u0631\u062c\u064a\u0627', 'GD': u'\u063a\u0631\u064a\u0646\u0627\u062f\u0627', 'GB': u'\u0627\u0644\u0645\u0645\u0644\u0643\u0629 \u0627\u0644\u0645\u062a\u062d\u062f\u0629', 'GA': u'\u063a\u0627\u0628\u0648\u0646', 'SV': u'\u0627\u0644\u0633\u0644\u0641\u0627\u062f\u0648\u0631', 'GN': u'\u063a\u064a\u0646\u064a\u0627', 'GM': u'\u063a\u0627\u0645\u0628\u064a\u0627', 'GH': u'\u063a\u0627\u0646\u0627', 'OM': u'\u0639\u0645\u0627\u0646', 'TN': u'\u062a\u0648\u0646\u0633', 'JO': u'\u0627\u0644\u0627\u0631\u062f\u0646', 'HR': u'\u0643\u0631\u0648\u0627\u062a\u064a\u0627', 'HT': u'\u0647\u0627\u064a\u062a\u064a', 'HU': u'\u0647\u0646\u063a\u0627\u0631\u064a\u0627', 'HN': u'\u0647\u0646\u062f\u0648\u0631\u0627\u0633', 'VE': u'\u0641\u0646\u0632\u0648\u064a\u0644\u0627', 'PW': u'\u0628\u0627\u0644\u0627\u0648', 'PT': u'\u0627\u0644\u0628\u0631\u062a\u063a\u0627\u0644', 'PY': u'\u0628\u0627\u0631\u0627\u063a\u0648\u0627\u064a', 'IQ': u'\u0627\u0644\u0639\u0631\u0627\u0642', 'PA': u'\u0628\u0646\u0645\u0627', 'PG': u'\u0628\u0627\u0628\u0648\u0627 \u063a\u064a\u0646\u064a\u0627 \u0627\u0644\u062c\u062f\u064a\u062f\u0629', 'PE': u'\u0628\u064a\u0631\u0648', 'PK': u'\u0627\u0644\u0628\u0627\u0643\u0633\u062a\u0627\u0646', 'PH': u'\u0627\u0644\u0641\u064a\u0644\u0628\u064a\u0646', 'PL': u'\u0628\u0648\u0644\u0646\u062f\u0627', 'ZM': u'\u0632\u0627\u0645\u0628\u064a\u0627', 'EH': u'\u0627\u0644\u0635\u062d\u0631\u0627\u0621 \u0627\u0644\u063a\u0631\u0628\u064a\u0629', 'EE': u'\u0627\u0633\u062a\u0648\u0646\u064a\u0627', 'EG': u'\u0645\u0635\u0631', 'ZA': u'\u062c\u0646\u0648\u0628 \u0627\u0641\u0631\u064a\u0642\u064a\u0627', 'EC': u'\u0627\u0643\u0648\u0627\u062f\u0648\u0631', 'VN': u'\u0641\u064a\u062a\u0646\u0627\u0645', 'SB': u'\u062c\u0632\u0631 \u0633\u0644\u064a\u0645\u0627\u0646', 'ET': u'\u0627\u062b\u064a\u0648\u0628\u064a\u0627', 'SO': u'\u0627\u0644\u0635\u0648\u0645\u0627\u0644', 'ZW': u'\u0632\u064a\u0645\u0628\u0627\u0628\u0648\u064a', 'ES': u'\u0627\u0633\u0628\u0627\u0646\u064a\u0627', 'ER': u'\u0627\u0631\u062a\u064a\u0631\u064a\u0627', 'MD': u'\u0645\u0648\u0644\u062f\u0648\u0641\u0627', 'MG': u'\u0645\u062f\u063a\u0634\u0642\u0631', 'MA': u'\u0627\u0644\u0645\u063a\u0631\u0628', 'MC': u'\u0645\u0648\u0646\u0627\u0643\u0648', 'UZ': u'\u0627\u0632\u0628\u0643\u0633\u062a\u0627\u0646', 'MM': u'\u0645\u064a\u0627\u0646\u0645\u0627\u0631', 'ML': u'\u0645\u0627\u0644\u064a', 'MN': u'\u0645\u0646\u063a\u0648\u0644\u064a\u0627', 'MH': u'\u062c\u0632\u0631 \u0627\u0644\u0645\u0627\u0631\u0634\u0627\u0644', 'MK': u'\u0645\u0642\u062f\u0648\u0646\u064a\u0627', 'MU': u'\u0645\u0648\u0631\u064a\u0634\u0648\u0633', 'MT': u'\u0645\u0627\u0644\u0637\u0629', 'MW': u'\u0645\u0644\u0627\u0648\u064a', 'MV': u'\u0645\u0627\u0644\u062f\u064a\u0641', 'MR': u'\u0645\u0648\u0631\u064a\u062a\u0627\u0646\u064a\u0627', 'UG': u'\u0627\u0648\u063a\u0646\u062f\u0627', 'MY': u'\u0645\u0627\u0644\u064a\u0632\u064a\u0627', 'MX': u'\u0627\u0644\u0645\u0643\u0633\u064a\u0643', 'IL': u'\u0627\u0633\u0631\u0627\u0626\u064a\u0644', 'FR': u'\u0641\u0631\u0646\u0633\u0627', 'FI': u'\u0641\u0646\u0644\u0646\u062f\u0627', 'FJ': u'\u0641\u064a\u062c\u064a', 'FM': u'\u0645\u064a\u0643\u0631\u0648\u0646\u064a\u0632\u064a\u0627', 'NI': u'\u0646\u064a\u0643\u0627\u0631\u0627\u063a\u0648\u0627', 'NL': u'\u0647\u0648\u0644\u0646\u062f\u0627', 'NO': u'\u0627\u0644\u0646\u0631\u0648\u064a\u062c', 'NA': u'\u0646\u0627\u0645\u064a\u0628\u064a\u0627', 'VU': u'\u0641\u0627\u0646\u0648\u0622\u062a\u0648', 'NE': u'\u0627\u0644\u0646\u064a\u062c\u0631', 'NG': u'\u0646\u064a\u062c\u064a\u0631\u064a\u0627', 'NZ': u'\u0632\u064a\u0644\u0646\u062f\u0627 \u0627\u0644\u062c\u062f\u064a\u062f\u0629', 'NP': u'\u0627\u0644\u0646\u064a\u0628\u0627\u0644', 'NR': u'\u0646\u0627\u0648\u0631\u0648', 'CH': u'\u0633\u0648\u064a\u0633\u0631\u0627', 'CO': u'\u0643\u0648\u0644\u0648\u0645\u0628\u064a\u0627', 'CN': u'\u0627\u0644\u0635\u064a\u0646', 'CM': u'\u0627\u0644\u0643\u0627\u0645\u064a\u0631\u0648\u0646', 'CL': u'\u062a\u0634\u064a\u0644\u064a', 'CA': u'\u0643\u0646\u062f\u0627', 'CG': u'\u0627\u0644\u0643\u0648\u0646\u063a\u0648', 'CF': u'\u062c\u0645\u0647\u0648\u0631\u064a\u0629 \u0627\u0641\u0631\u064a\u0642\u064a\u0627 \u0627\u0644\u0648\u0633\u0637\u0649', 'CZ': u'\u062c\u0645\u0647\u0648\u0631\u064a\u0629 \u0627\u0644\u062a\u0634\u064a\u0643', 'CY': u'\u0642\u0628\u0631\u0635', 'CR': u'\u0643\u0648\u0633\u062a\u0627\u0631\u064a\u0643\u0627', 'CV': u'\u0627\u0644\u0631\u0623\u0633 \u0627\u0644\u0627\u062e\u0636\u0631', 'CU': u'\u0643\u0648\u0628\u0627', 'SZ': u'\u0633\u0648\u0627\u0632\u064a\u0644\u0627\u0646\u062f', 'SY': u'\u0633\u0648\u0631\u064a\u0629', 'KG': u'\u0642\u064a\u0631\u063a\u064a\u0632\u0633\u062a\u0627\u0646', 'KE': u'\u0643\u064a\u0646\u064a\u0627', 'SR': u'\u0633\u0648\u0631\u064a\u0646\u0627\u0645', 'KI': u'\u0643\u064a\u0631\u064a\u0628\u0627\u062a\u064a', 'KH': u'\u0643\u0645\u0628\u0648\u062f\u064a\u0627', 'KN': u'\u0633\u0627\u0646\u062a \u0643\u064a\u062a\u0633 \u0648\u0646\u064a\u0641\u064a\u0633', 'KM': u'\u062c\u0632\u0631 \u0627\u0644\u0642\u0645\u0631', 'ST': u'\u0633\u0627\u0646 \u062a\u0648\u0645\u064a \u0648\u0628\u0631\u064a\u0646\u0633\u064a\u0628\u064a', 'SK': u'\u0633\u0644\u0648\u0641\u0627\u0643\u064a\u0627', 'KR': u'\u0643\u0648\u0631\u064a\u0627 \u0627\u0644\u062c\u0646\u0648\u0628\u064a\u0629', 'SI': u'\u0633\u0644\u0648\u0641\u064a\u0646\u064a\u0627', 'KP': u'\u0643\u0648\u0631\u064a\u0627 \u0627\u0644\u0634\u0645\u0627\u0644\u064a\u0629', 'KW': u'\u0627\u0644\u0643\u0648\u064a\u062a', 'SN': u'\u0627\u0644\u0633\u0646\u063a\u0627\u0644', 'SM': u'\u0633\u0627\u0646 \u0645\u0627\u0631\u064a\u0646\u0648', 'SL': u'\u0633\u064a\u0631\u0627\u0644\u064a\u0648\u0646', 'SC': u'\u0633\u064a\u0634\u0644', 'KZ': u'\u0643\u0627\u0632\u0627\u062e\u0633\u062a\u0627\u0646', 'SA': u'\u0627\u0644\u0639\u0631\u0628\u064a\u0629 \u0627\u0644\u0633\u0639\u0648\u062f\u064a\u0629', 'SG': u'\u0633\u0646\u063a\u0627\u0641\u0648\u0631\u0629', 'SE': u'\u0627\u0644\u0633\u0648\u064a\u062f', 'SD': u'\u0627\u0644\u0633\u0648\u062f\u0627\u0646', 'DO': u'\u0627\u0644\u062c\u0645\u0647\u0648\u0631\u064a\u0629 \u0627\u0644\u062f\u0648\u0645\u064a\u0646\u064a\u0643\u064a\u0629', 'DM': u'\u062f\u0648\u0645\u064a\u0646\u064a\u0643\u0627', 'DJ': u'\u062c\u064a\u0628\u0648\u062a\u064a', 'DK': u'\u0627\u0644\u062f\u0627\u0646\u0645\u0631\u0643', 'DE': u'\u0627\u0644\u0645\u0627\u0646\u064a\u0627', 'YE': u'\u0627\u0644\u064a\u0645\u0646', 'DZ': u'\u0627\u0644\u062c\u0632\u0627\u0626\u0631', 'US': u'\u0627\u0644\u0627\u0648\u0644\u0627\u064a\u0627\u062a \u0627\u0644\u0645\u062a\u062d\u062f\u0629 \u0627\u0644\u0627\u0645\u0631\u064a\u0643\u064a\u0629', 'UY': u'\u0627\u0631\u0648\u063a\u0648\u0627\u064a', 'LB': u'\u0644\u0628\u0646\u0627\u0646', 'LC': u'\u0633\u0627\u0646\u062a \u0644\u0648\u0633\u064a\u0627', 'LA': u'\u0644\u0627\u0648\u0633', 'TV': u'\u062a\u0648\u0641\u0627\u0644\u0648', 'TW': u'\u062a\u0627\u064a\u0648\u0627\u0646', 'TT': u'\u062a\u0631\u064a\u0646\u064a\u062f\u0627\u062f \u0648\u062a\u0648\u0628\u0627\u063a\u0648', 'TR': u'\u062a\u0631\u0643\u064a\u0627', 'LK': u'\u0633\u0631\u064a \u0644\u0627\u0646\u0643\u0627', 'LI': u'\u0644\u064a\u062e\u062a\u0646\u0634\u062a\u0627\u064a\u0646', 'LV': u'\u0644\u0627\u062a\u0641\u064a\u0627', 'TO': u'\u062a\u0648\u0646\u063a\u0627', 'LT': u'\u0644\u064a\u062a\u0648\u0627\u0646\u064a\u0627', 'LU': u'\u0644\u0648\u0643\u0633\u0648\u0645\u0628\u0631\u063a', 'LR': u'\u0644\u064a\u0628\u064a\u0631\u064a\u0627', 'LS': u'\u0644\u064a\u0633\u0648\u062a\u0648', 'TH': u'\u062a\u0627\u064a\u0644\u0646\u062f', 'TG': u'\u062a\u0648\u063a\u0648', 'TD': u'\u062a\u0634\u0627\u062f', 'LY': u'\u0644\u064a\u0628\u064a\u0627', 'VA': u'\u0627\u0644\u0641\u0627\u062a\u064a\u0643\u0627\u0646', 'VC': u'\u0633\u0627\u0646\u062a \u0641\u0646\u0633\u0646\u062a \u0648\u062c\u0632\u0631 \u063a\u0631\u064a\u0646\u0627\u062f\u064a\u0646', 'AE': u'\u0627\u0644\u0627\u0645\u0627\u0631\u0627\u062a \u0627\u0644\u0639\u0631\u0628\u064a\u0629 \u0627\u0644\u0645\u062a\u062d\u062f\u0629', 'AD': u'\u0627\u0646\u062f\u0648\u0631\u0627', 'AG': u'\u0627\u0646\u062a\u064a\u063a\u0648\u0627 \u0648\u0628\u0631\u0628\u0648\u062f\u0627', 'AF': u'\u0627\u0641\u063a\u0627\u0646\u0633\u062a\u0627\u0646', 'AI': u'\u0627\u0644\u0628\u0627\u0646\u064a\u0627', 'IS': u'\u0627\u064a\u0633\u0644\u0646\u062f\u0627', 'IR': u'\u0627\u064a\u0631\u0627\u0646', 'AM': u'\u0627\u0631\u0645\u064a\u0646\u064a\u0627', 'IT': u'\u0627\u064a\u0637\u0627\u0644\u064a\u0627', 'AO': u'\u0627\u0646\u063a\u0648\u0644\u0627', 'AR': u'\u0627\u0644\u0627\u0631\u062c\u0646\u062a\u064a\u0646', 'AU': u'\u0627\u0633\u062a\u0631\u0627\u0644\u064a\u0627', 'AT': u'\u0627\u0644\u0646\u0645\u0633\u0627', 'IN': u'\u0627\u0644\u0647\u0646\u062f', 'TZ': u'\u062a\u0627\u0646\u0632\u0627\u0646\u064a\u0627', 'AZ': u'\u0622\u0630\u0631\u0628\u064a\u062c\u0627\u0646', 'IE': u'\u0627\u064a\u0631\u0644\u0646\u062f\u0627', 'ID': u'\u0627\u0646\u062f\u0648\u0646\u064a\u0633\u064a\u0627', 'UA': u'\u0627\u0648\u0643\u0631\u0627\u0646\u064a\u0627', 'QA': u'\u0642\u0637\u0631', 'MZ': u'\u0645\u0648\u0632\u0645\u0628\u064a\u0642'} months=[u'\u064a\u0646\u0627\u064a\u0631', u'\u0641\u0628\u0631\u0627\u064a\u0631', u'\u0645\u0627\u0631\u0633', u'\u0623\u0628\u0631\u064a\u0644', u'\u0645\u0627\u064a\u0648', u'\u064a\u0648\u0646\u064a\u0648', u'\u064a\u0648\u0644\u064a\u0648', u'\u0623\u063a\u0633\u0637\u0633', u'\u0633\u0628\u062a\u0645\u0628\u0631', u'\u0623\u0643\u062a\u0648\u0628\u0631', u'\u0646\u0648\u0641\u0645\u0628\u0631', u'\u062f\u064a\u0633\u0645\u0628\u0631'] abbrMonths=[u'\u064a\u0646\u0627\u064a\u0631', u'\u0641\u0628\u0631\u0627\u064a\u0631', u'\u0645\u0627\u0631\u0633', u'\u0623\u0628\u0631\u064a\u0644', u'\u0645\u0627\u064a\u0648', u'\u064a\u0648\u0646\u064a\u0648', u'\u064a\u0648\u0644\u064a\u0648', u'\u0623\u063a\u0633\u0637\u0633', u'\u0633\u0628\u062a\u0645\u0628\u0631', u'\u0623\u0643\u062a\u0648\u0628\u0631', u'\u0646\u0648\u0641\u0645\u0628\u0631', u'\u062f\u064a\u0633\u0645\u0628\u0631'] days=[u'\u0627\u0644\u0627\u062b\u0646\u064a\u0646', u'\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621', u'\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621', u'\u0627\u0644\u062e\u0645\u064a\u0633', u'\u0627\u0644\u062c\u0645\u0639\u0629', u'\u0627\u0644\u0633\u0628\u062a', u'\u0627\u0644\u0623\u062d\u062f'] abbrDays=[u'\u0627\u0644\u0627\u062b\u0646\u064a\u0646', u'\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621', u'\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621', u'\u0627\u0644\u062e\u0645\u064a\u0633', u'\u0627\u0644\u062c\u0645\u0639\u0629', u'\u0627\u0644\u0633\u0628\u062a', u'\u0627\u0644\u0623\u062d\u062f'] dateFormats={'medium': '%d/%m/%Y', 'full': '%%(dayname)s, %d %%(monthname)s, %Y', 'long': '%d %%(monthname)s, %Y', 'short': '%d/%m/%Y'} numericSymbols={'group': u'\u066c', 'nativeZeroDigit': u'\u0660', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': u'\u066b', 'percentSign': u'\u066a', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'} PKA>f''turbogears/i18n/data/ar_SA.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddeA''turbogears/i18n/data/ar_SD.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd>turbogears/i18n/data/ar_SY.py# Formatting configuration for locale ar_SY languages={'el': u'\u0627\u0644\u064a\u0648\u0646\u0627\u0646\u064a\u0629', 'gu': u'\u0627\u0644\u063a\u0648\u062c\u0627\u0631\u0627\u062a\u064a\u0629', 'en': u'\u0627\u0644\u0627\u0646\u062c\u0644\u064a\u0632\u064a\u0629', 'zh': u'\u0627\u0644\u0635\u064a\u0646\u064a\u0629', 'sw': u'\u0627\u0644\u0633\u0648\u0627\u062d\u0644\u064a\u0629', 'ca': u'\u0627\u0644\u0643\u0627\u062a\u0627\u0644\u0648\u064a\u0646\u064a\u0629', 'it': u'\u0627\u0644\u0627\u064a\u0637\u0627\u0644\u064a\u0629', 'ar': u'\u0627\u0644\u0639\u0631\u0628\u064a\u0629', 'id': u'\u0627\u0644\u0627\u0646\u062f\u0648\u0646\u064a\u0633\u064a\u0629', 'es': u'\u0627\u0644\u0627\u0633\u0628\u0627\u0646\u064a\u0629', 'ru': u'\u0627\u0644\u0631\u0648\u0633\u064a\u0629', 'nl': u'\u0627\u0644\u0647\u0648\u0644\u0646\u062f\u064a\u0629', 'pt': u'\u0627\u0644\u0628\u0631\u062a\u063a\u0627\u0644\u064a\u0629', 'tr': u'\u0627\u0644\u062a\u0631\u0643\u064a\u0629', 'ne': u'\u0627\u0644\u0646\u064a\u0628\u0627\u0644\u064a\u0629', 'lt': u'\u0627\u0644\u0644\u062a\u0648\u0627\u0646\u064a\u0629', 'pa': u'\u0627\u0644\u0628\u0646\u062c\u0627\u0628\u064a\u0629', 'th': u'\u0627\u0644\u062a\u0627\u064a\u0644\u0627\u0646\u062f\u064a\u0629', 'vi': u'\u0627\u0644\u0641\u064a\u062a\u0646\u0627\u0645\u064a\u0629', 'ro': u'\u0627\u0644\u0631\u0648\u0645\u0627\u0646\u064a\u0629', 'be': u'\u0627\u0644\u0628\u064a\u0644\u0648\u0631\u0648\u0633\u064a\u0629', 'fr': u'\u0627\u0644\u0641\u0631\u0646\u0633\u064a\u0629', 'bg': u'\u0627\u0644\u0628\u0644\u063a\u0627\u0631\u064a\u0629', 'uk': u'\u0627\u0644\u0627\u0648\u0643\u0631\u0627\u0646\u064a\u0629', 'hr': u'\u0627\u0644\u0643\u0631\u0648\u0627\u062a\u064a\u0629', 'bn': u'\u0627\u0644\u0628\u0646\u063a\u0627\u0644\u064a\u0629', 'bo': u'\u0627\u0644\u062a\u0628\u062a\u064a\u0629', 'da': u'\u0627\u0644\u062f\u0627\u0646\u0645\u0627\u0631\u0643\u064a\u0629', 'fa': u'\u0627\u0644\u0641\u0627\u0631\u0633\u064a\u0629', 'hi': u'\u0627\u0644\u0647\u0646\u062f\u064a\u0629', 'dz': u'\u0627\u0644\u0632\u0648\u0646\u062e\u0627\u064a\u0629', 'dv': u'\u0627\u0644\u0645\u0627\u0644\u062f\u064a\u0641\u064a\u0629', 'fi': u'\u0627\u0644\u0641\u0646\u0644\u0646\u062f\u064a\u0629', 'ja': u'\u0627\u0644\u064a\u0627\u0628\u0627\u0646\u064a\u0629', 'he': u'\u0627\u0644\u0639\u0628\u0631\u064a\u0629', 'tl': u'\u0627\u0644\u062a\u0627\u063a\u0627\u0644\u0648\u063a\u064a\u0629', 'sr': u'\u0627\u0644\u0635\u0631\u0628\u064a\u0629', 'sq': u'\u0627\u0644\u0627\u0644\u0628\u0627\u0646\u064a\u0629', 'mn': u'\u0627\u0644\u0645\u0646\u063a\u0648\u0644\u064a\u0629', 'ko': u'\u0627\u0644\u0643\u0648\u0631\u064a\u0629', 'km': u'\u0627\u0644\u062e\u0645\u064a\u0631\u064a\u0629', 'ur': u'\u0627\u0644\u0627\u0631\u062f\u064a\u0629', 'de': u'\u0627\u0644\u0627\u0644\u0645\u0627\u0646\u064a\u0629', 'ms': u'\u0644\u063a\u0629 \u0627\u0644\u0645\u0644\u0627\u064a\u0648', 'ug': u'\u0627\u0644\u0627\u063a\u0648\u0631\u064a\u0629', 'my': u'\u0627\u0644\u0628\u0648\u0631\u0645\u064a\u0629'} countries={'BD': u'\u0628\u0646\u063a\u0644\u0627\u062f\u064a\u0634', 'BE': u'\u0628\u0644\u062c\u064a\u0643\u0627', 'BF': u'\u0628\u0648\u0631\u0643\u064a\u0646\u0627 \u0641\u0627\u0633\u0648', 'BG': u'\u0628\u0644\u063a\u0627\u0631\u064a\u0627', 'BA': u'\u0627\u0644\u0628\u0648\u0633\u0646\u0629 \u0648\u0627\u0644\u0647\u0631\u0633\u0643', 'BB': u'\u0628\u0631\u0628\u0627\u062f\u0648\u0633', 'BN': u'\u0628\u0631\u0648\u0646\u0627\u064a', 'BO': u'\u0628\u0648\u0644\u064a\u0641\u064a\u0627', 'BH': u'\u0627\u0644\u0628\u062d\u0631\u064a\u0646', 'BI': u'\u0628\u0648\u0631\u0648\u0646\u062f\u064a', 'BJ': u'\u0628\u0646\u064a\u0646', 'BT': u'\u0628\u0648\u062a\u0627\u0646', 'JM': u'\u062c\u0627\u0645\u0627\u064a\u0643\u0627', 'BW': u'\u0628\u0648\u062a\u0633\u0648\u0627\u0646\u0627', 'WS': u'\u0633\u0627\u0645\u0648\u0627', 'BR': u'\u0627\u0644\u0628\u0631\u0627\u0632\u064a\u0644', 'BS': u'\u0627\u0644\u0628\u0647\u0627\u0645\u0627', 'BY': u'\u0631\u0648\u0633\u064a\u0627 \u0627\u0644\u0628\u064a\u0636\u0627\u0621', 'BZ': u'\u0628\u0644\u064a\u0632', 'RU': u'\u0631\u0648\u0633\u064a\u0627', 'RW': u'\u0631\u0648\u0627\u0646\u062f\u0627', 'TM': u'\u062a\u0631\u0643\u0645\u0627\u0646\u0633\u062a\u0627\u0646', 'TJ': u'\u062a\u0627\u062c\u064a\u0643\u0633\u062a\u0627\u0646', 'RO': u'\u0631\u0648\u0645\u0627\u0646\u064a\u0627', 'GW': u'\u063a\u064a\u0646\u064a\u0627 \u0628\u064a\u0633\u0627\u0648', 'GT': u'\u063a\u0648\u0627\u062a\u064a\u0645\u0627\u0644\u0627', 'GR': u'\u0627\u0644\u064a\u0648\u0646\u0627\u0646', 'GQ': u'\u063a\u064a\u0646\u064a\u0627 \u0627\u0644\u0627\u0633\u062a\u0648\u0627\u0626\u064a\u0629', 'JP': u'\u0627\u0644\u064a\u0627\u0628\u0627\u0646', 'GY': u'\u063a\u0648\u0627\u064a\u0627\u0646\u0627', 'GE': u'\u062c\u0648\u0631\u062c\u064a\u0627', 'GD': u'\u063a\u0631\u064a\u0646\u0627\u062f\u0627', 'GB': u'\u0627\u0644\u0645\u0645\u0644\u0643\u0629 \u0627\u0644\u0645\u062a\u062d\u062f\u0629', 'GA': u'\u063a\u0627\u0628\u0648\u0646', 'SV': u'\u0627\u0644\u0633\u0644\u0641\u0627\u062f\u0648\u0631', 'GN': u'\u063a\u064a\u0646\u064a\u0627', 'GM': u'\u063a\u0627\u0645\u0628\u064a\u0627', 'GH': u'\u063a\u0627\u0646\u0627', 'OM': u'\u0639\u0645\u0627\u0646', 'TN': u'\u062a\u0648\u0646\u0633', 'JO': u'\u0627\u0644\u0627\u0631\u062f\u0646', 'HR': u'\u0643\u0631\u0648\u0627\u062a\u064a\u0627', 'HT': u'\u0647\u0627\u064a\u062a\u064a', 'HU': u'\u0647\u0646\u063a\u0627\u0631\u064a\u0627', 'HN': u'\u0647\u0646\u062f\u0648\u0631\u0627\u0633', 'VE': u'\u0641\u0646\u0632\u0648\u064a\u0644\u0627', 'PW': u'\u0628\u0627\u0644\u0627\u0648', 'PT': u'\u0627\u0644\u0628\u0631\u062a\u063a\u0627\u0644', 'PY': u'\u0628\u0627\u0631\u0627\u063a\u0648\u0627\u064a', 'IQ': u'\u0627\u0644\u0639\u0631\u0627\u0642', 'PA': u'\u0628\u0646\u0645\u0627', 'PG': u'\u0628\u0627\u0628\u0648\u0627 \u063a\u064a\u0646\u064a\u0627 \u0627\u0644\u062c\u062f\u064a\u062f\u0629', 'PE': u'\u0628\u064a\u0631\u0648', 'PK': u'\u0627\u0644\u0628\u0627\u0643\u0633\u062a\u0627\u0646', 'PH': u'\u0627\u0644\u0641\u064a\u0644\u0628\u064a\u0646', 'PL': u'\u0628\u0648\u0644\u0646\u062f\u0627', 'ZM': u'\u0632\u0627\u0645\u0628\u064a\u0627', 'EH': u'\u0627\u0644\u0635\u062d\u0631\u0627\u0621 \u0627\u0644\u063a\u0631\u0628\u064a\u0629', 'EE': u'\u0627\u0633\u062a\u0648\u0646\u064a\u0627', 'EG': u'\u0645\u0635\u0631', 'ZA': u'\u062c\u0646\u0648\u0628 \u0627\u0641\u0631\u064a\u0642\u064a\u0627', 'EC': u'\u0627\u0643\u0648\u0627\u062f\u0648\u0631', 'VN': u'\u0641\u064a\u062a\u0646\u0627\u0645', 'SB': u'\u062c\u0632\u0631 \u0633\u0644\u064a\u0645\u0627\u0646', 'ET': u'\u0627\u062b\u064a\u0648\u0628\u064a\u0627', 'SO': u'\u0627\u0644\u0635\u0648\u0645\u0627\u0644', 'ZW': u'\u0632\u064a\u0645\u0628\u0627\u0628\u0648\u064a', 'ES': u'\u0627\u0633\u0628\u0627\u0646\u064a\u0627', 'ER': u'\u0627\u0631\u062a\u064a\u0631\u064a\u0627', 'MD': u'\u0645\u0648\u0644\u062f\u0648\u0641\u0627', 'MG': u'\u0645\u062f\u063a\u0634\u0642\u0631', 'MA': u'\u0627\u0644\u0645\u063a\u0631\u0628', 'MC': u'\u0645\u0648\u0646\u0627\u0643\u0648', 'UZ': u'\u0627\u0632\u0628\u0643\u0633\u062a\u0627\u0646', 'MM': u'\u0645\u064a\u0627\u0646\u0645\u0627\u0631', 'ML': u'\u0645\u0627\u0644\u064a', 'MN': u'\u0645\u0646\u063a\u0648\u0644\u064a\u0627', 'MH': u'\u062c\u0632\u0631 \u0627\u0644\u0645\u0627\u0631\u0634\u0627\u0644', 'MK': u'\u0645\u0642\u062f\u0648\u0646\u064a\u0627', 'MU': u'\u0645\u0648\u0631\u064a\u0634\u0648\u0633', 'MT': u'\u0645\u0627\u0644\u0637\u0629', 'MW': u'\u0645\u0644\u0627\u0648\u064a', 'MV': u'\u0645\u0627\u0644\u062f\u064a\u0641', 'MR': u'\u0645\u0648\u0631\u064a\u062a\u0627\u0646\u064a\u0627', 'UG': u'\u0627\u0648\u063a\u0646\u062f\u0627', 'MY': u'\u0645\u0627\u0644\u064a\u0632\u064a\u0627', 'MX': u'\u0627\u0644\u0645\u0643\u0633\u064a\u0643', 'IL': u'\u0627\u0633\u0631\u0627\u0626\u064a\u0644', 'FR': u'\u0641\u0631\u0646\u0633\u0627', 'FI': u'\u0641\u0646\u0644\u0646\u062f\u0627', 'FJ': u'\u0641\u064a\u062c\u064a', 'FM': u'\u0645\u064a\u0643\u0631\u0648\u0646\u064a\u0632\u064a\u0627', 'NI': u'\u0646\u064a\u0643\u0627\u0631\u0627\u063a\u0648\u0627', 'NL': u'\u0647\u0648\u0644\u0646\u062f\u0627', 'NO': u'\u0627\u0644\u0646\u0631\u0648\u064a\u062c', 'NA': u'\u0646\u0627\u0645\u064a\u0628\u064a\u0627', 'VU': u'\u0641\u0627\u0646\u0648\u0622\u062a\u0648', 'NE': u'\u0627\u0644\u0646\u064a\u062c\u0631', 'NG': u'\u0646\u064a\u062c\u064a\u0631\u064a\u0627', 'NZ': u'\u0632\u064a\u0644\u0646\u062f\u0627 \u0627\u0644\u062c\u062f\u064a\u062f\u0629', 'NP': u'\u0627\u0644\u0646\u064a\u0628\u0627\u0644', 'NR': u'\u0646\u0627\u0648\u0631\u0648', 'CH': u'\u0633\u0648\u064a\u0633\u0631\u0627', 'CO': u'\u0643\u0648\u0644\u0648\u0645\u0628\u064a\u0627', 'CN': u'\u0627\u0644\u0635\u064a\u0646', 'CM': u'\u0627\u0644\u0643\u0627\u0645\u064a\u0631\u0648\u0646', 'CL': u'\u062a\u0634\u064a\u0644\u064a', 'CA': u'\u0643\u0646\u062f\u0627', 'CG': u'\u0627\u0644\u0643\u0648\u0646\u063a\u0648', 'CF': u'\u062c\u0645\u0647\u0648\u0631\u064a\u0629 \u0627\u0641\u0631\u064a\u0642\u064a\u0627 \u0627\u0644\u0648\u0633\u0637\u0649', 'CZ': u'\u062c\u0645\u0647\u0648\u0631\u064a\u0629 \u0627\u0644\u062a\u0634\u064a\u0643', 'CY': u'\u0642\u0628\u0631\u0635', 'CR': u'\u0643\u0648\u0633\u062a\u0627\u0631\u064a\u0643\u0627', 'CV': u'\u0627\u0644\u0631\u0623\u0633 \u0627\u0644\u0627\u062e\u0636\u0631', 'CU': u'\u0643\u0648\u0628\u0627', 'SZ': u'\u0633\u0648\u0627\u0632\u064a\u0644\u0627\u0646\u062f', 'SY': u'\u0633\u0648\u0631\u064a\u0629', 'KG': u'\u0642\u064a\u0631\u063a\u064a\u0632\u0633\u062a\u0627\u0646', 'KE': u'\u0643\u064a\u0646\u064a\u0627', 'SR': u'\u0633\u0648\u0631\u064a\u0646\u0627\u0645', 'KI': u'\u0643\u064a\u0631\u064a\u0628\u0627\u062a\u064a', 'KH': u'\u0643\u0645\u0628\u0648\u062f\u064a\u0627', 'KN': u'\u0633\u0627\u0646\u062a \u0643\u064a\u062a\u0633 \u0648\u0646\u064a\u0641\u064a\u0633', 'KM': u'\u062c\u0632\u0631 \u0627\u0644\u0642\u0645\u0631', 'ST': u'\u0633\u0627\u0646 \u062a\u0648\u0645\u064a \u0648\u0628\u0631\u064a\u0646\u0633\u064a\u0628\u064a', 'SK': u'\u0633\u0644\u0648\u0641\u0627\u0643\u064a\u0627', 'KR': u'\u0643\u0648\u0631\u064a\u0627 \u0627\u0644\u062c\u0646\u0648\u0628\u064a\u0629', 'SI': u'\u0633\u0644\u0648\u0641\u064a\u0646\u064a\u0627', 'KP': u'\u0643\u0648\u0631\u064a\u0627 \u0627\u0644\u0634\u0645\u0627\u0644\u064a\u0629', 'KW': u'\u0627\u0644\u0643\u0648\u064a\u062a', 'SN': u'\u0627\u0644\u0633\u0646\u063a\u0627\u0644', 'SM': u'\u0633\u0627\u0646 \u0645\u0627\u0631\u064a\u0646\u0648', 'SL': u'\u0633\u064a\u0631\u0627\u0644\u064a\u0648\u0646', 'SC': u'\u0633\u064a\u0634\u0644', 'KZ': u'\u0643\u0627\u0632\u0627\u062e\u0633\u062a\u0627\u0646', 'SA': u'\u0627\u0644\u0639\u0631\u0628\u064a\u0629 \u0627\u0644\u0633\u0639\u0648\u062f\u064a\u0629', 'SG': u'\u0633\u0646\u063a\u0627\u0641\u0648\u0631\u0629', 'SE': u'\u0627\u0644\u0633\u0648\u064a\u062f', 'SD': u'\u0627\u0644\u0633\u0648\u062f\u0627\u0646', 'DO': u'\u0627\u0644\u062c\u0645\u0647\u0648\u0631\u064a\u0629 \u0627\u0644\u062f\u0648\u0645\u064a\u0646\u064a\u0643\u064a\u0629', 'DM': u'\u062f\u0648\u0645\u064a\u0646\u064a\u0643\u0627', 'DJ': u'\u062c\u064a\u0628\u0648\u062a\u064a', 'DK': u'\u0627\u0644\u062f\u0627\u0646\u0645\u0631\u0643', 'DE': u'\u0627\u0644\u0645\u0627\u0646\u064a\u0627', 'YE': u'\u0627\u0644\u064a\u0645\u0646', 'DZ': u'\u0627\u0644\u062c\u0632\u0627\u0626\u0631', 'US': u'\u0627\u0644\u0627\u0648\u0644\u0627\u064a\u0627\u062a \u0627\u0644\u0645\u062a\u062d\u062f\u0629 \u0627\u0644\u0627\u0645\u0631\u064a\u0643\u064a\u0629', 'UY': u'\u0627\u0631\u0648\u063a\u0648\u0627\u064a', 'LB': u'\u0644\u0628\u0646\u0627\u0646', 'LC': u'\u0633\u0627\u0646\u062a \u0644\u0648\u0633\u064a\u0627', 'LA': u'\u0644\u0627\u0648\u0633', 'TV': u'\u062a\u0648\u0641\u0627\u0644\u0648', 'TW': u'\u062a\u0627\u064a\u0648\u0627\u0646', 'TT': u'\u062a\u0631\u064a\u0646\u064a\u062f\u0627\u062f \u0648\u062a\u0648\u0628\u0627\u063a\u0648', 'TR': u'\u062a\u0631\u0643\u064a\u0627', 'LK': u'\u0633\u0631\u064a \u0644\u0627\u0646\u0643\u0627', 'LI': u'\u0644\u064a\u062e\u062a\u0646\u0634\u062a\u0627\u064a\u0646', 'LV': u'\u0644\u0627\u062a\u0641\u064a\u0627', 'TO': u'\u062a\u0648\u0646\u063a\u0627', 'LT': u'\u0644\u064a\u062a\u0648\u0627\u0646\u064a\u0627', 'LU': u'\u0644\u0648\u0643\u0633\u0648\u0645\u0628\u0631\u063a', 'LR': u'\u0644\u064a\u0628\u064a\u0631\u064a\u0627', 'LS': u'\u0644\u064a\u0633\u0648\u062a\u0648', 'TH': u'\u062a\u0627\u064a\u0644\u0646\u062f', 'TG': u'\u062a\u0648\u063a\u0648', 'TD': u'\u062a\u0634\u0627\u062f', 'LY': u'\u0644\u064a\u0628\u064a\u0627', 'VA': u'\u0627\u0644\u0641\u0627\u062a\u064a\u0643\u0627\u0646', 'VC': u'\u0633\u0627\u0646\u062a \u0641\u0646\u0633\u0646\u062a \u0648\u062c\u0632\u0631 \u063a\u0631\u064a\u0646\u0627\u062f\u064a\u0646', 'AE': u'\u0627\u0644\u0627\u0645\u0627\u0631\u0627\u062a \u0627\u0644\u0639\u0631\u0628\u064a\u0629 \u0627\u0644\u0645\u062a\u062d\u062f\u0629', 'AD': u'\u0627\u0646\u062f\u0648\u0631\u0627', 'AG': u'\u0627\u0646\u062a\u064a\u063a\u0648\u0627 \u0648\u0628\u0631\u0628\u0648\u062f\u0627', 'AF': u'\u0627\u0641\u063a\u0627\u0646\u0633\u062a\u0627\u0646', 'AI': u'\u0627\u0644\u0628\u0627\u0646\u064a\u0627', 'IS': u'\u0627\u064a\u0633\u0644\u0646\u062f\u0627', 'IR': u'\u0627\u064a\u0631\u0627\u0646', 'AM': u'\u0627\u0631\u0645\u064a\u0646\u064a\u0627', 'IT': u'\u0627\u064a\u0637\u0627\u0644\u064a\u0627', 'AO': u'\u0627\u0646\u063a\u0648\u0644\u0627', 'AR': u'\u0627\u0644\u0627\u0631\u062c\u0646\u062a\u064a\u0646', 'AU': u'\u0627\u0633\u062a\u0631\u0627\u0644\u064a\u0627', 'AT': u'\u0627\u0644\u0646\u0645\u0633\u0627', 'IN': u'\u0627\u0644\u0647\u0646\u062f', 'TZ': u'\u062a\u0627\u0646\u0632\u0627\u0646\u064a\u0627', 'AZ': u'\u0622\u0630\u0631\u0628\u064a\u062c\u0627\u0646', 'IE': u'\u0627\u064a\u0631\u0644\u0646\u062f\u0627', 'ID': u'\u0627\u0646\u062f\u0648\u0646\u064a\u0633\u064a\u0627', 'UA': u'\u0627\u0648\u0643\u0631\u0627\u0646\u064a\u0627', 'QA': u'\u0642\u0637\u0631', 'MZ': u'\u0645\u0648\u0632\u0645\u0628\u064a\u0642'} months=[u'\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a', u'\u0634\u0628\u0627\u0637', u'\u0622\u0630\u0627\u0631', u'\u0646\u064a\u0633\u0627\u0646', u'\u0646\u0648\u0627\u0631', u'\u062d\u0632\u064a\u0631\u0627\u0646', u'\u062a\u0645\u0648\u0632', u'\u0622\u0628', u'\u0623\u064a\u0644\u0648\u0644', u'\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644', u'\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a', u'\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644'] abbrMonths=[u'\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a', u'\u0634\u0628\u0627\u0637', u'\u0622\u0630\u0627\u0631', u'\u0646\u064a\u0633\u0627\u0646', u'\u0646\u0648\u0627\u0631', u'\u062d\u0632\u064a\u0631\u0627\u0646', u'\u062a\u0645\u0648\u0632', u'\u0622\u0628', u'\u0623\u064a\u0644\u0648\u0644', u'\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644', u'\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a', u'\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644'] days=[u'\u0627\u0644\u0627\u062b\u0646\u064a\u0646', u'\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621', u'\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621', u'\u0627\u0644\u062e\u0645\u064a\u0633', u'\u0627\u0644\u062c\u0645\u0639\u0629', u'\u0627\u0644\u0633\u0628\u062a', u'\u0627\u0644\u0623\u062d\u062f'] abbrDays=[u'\u0627\u0644\u0627\u062b\u0646\u064a\u0646', u'\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621', u'\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621', u'\u0627\u0644\u062e\u0645\u064a\u0633', u'\u0627\u0644\u062c\u0645\u0639\u0629', u'\u0627\u0644\u0633\u0628\u062a', u'\u0627\u0644\u0623\u062d\u062f'] dateFormats={'medium': '%d/%m/%Y', 'full': '%%(dayname)s, %d %%(monthname)s, %Y', 'long': '%d %%(monthname)s, %Y', 'short': '%d/%m/%Y'} numericSymbols={'group': u'\u066c', 'nativeZeroDigit': u'\u0660', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': u'\u066b', 'percentSign': u'\u066a', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'} PKA>''turbogears/i18n/data/ar_SY.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd$>turbogears/i18n/data/ar_TN.py# Formatting configuration for locale ar_TN languages={'el': u'\u0627\u0644\u064a\u0648\u0646\u0627\u0646\u064a\u0629', 'gu': u'\u0627\u0644\u063a\u0648\u062c\u0627\u0631\u0627\u062a\u064a\u0629', 'en': u'\u0627\u0644\u0627\u0646\u062c\u0644\u064a\u0632\u064a\u0629', 'zh': u'\u0627\u0644\u0635\u064a\u0646\u064a\u0629', 'sw': u'\u0627\u0644\u0633\u0648\u0627\u062d\u0644\u064a\u0629', 'ca': u'\u0627\u0644\u0643\u0627\u062a\u0627\u0644\u0648\u064a\u0646\u064a\u0629', 'it': u'\u0627\u0644\u0627\u064a\u0637\u0627\u0644\u064a\u0629', 'ar': u'\u0627\u0644\u0639\u0631\u0628\u064a\u0629', 'id': u'\u0627\u0644\u0627\u0646\u062f\u0648\u0646\u064a\u0633\u064a\u0629', 'es': u'\u0627\u0644\u0627\u0633\u0628\u0627\u0646\u064a\u0629', 'ru': u'\u0627\u0644\u0631\u0648\u0633\u064a\u0629', 'nl': u'\u0627\u0644\u0647\u0648\u0644\u0646\u062f\u064a\u0629', 'pt': u'\u0627\u0644\u0628\u0631\u062a\u063a\u0627\u0644\u064a\u0629', 'tr': u'\u0627\u0644\u062a\u0631\u0643\u064a\u0629', 'ne': u'\u0627\u0644\u0646\u064a\u0628\u0627\u0644\u064a\u0629', 'lt': u'\u0627\u0644\u0644\u062a\u0648\u0627\u0646\u064a\u0629', 'pa': u'\u0627\u0644\u0628\u0646\u062c\u0627\u0628\u064a\u0629', 'th': u'\u0627\u0644\u062a\u0627\u064a\u0644\u0627\u0646\u062f\u064a\u0629', 'vi': u'\u0627\u0644\u0641\u064a\u062a\u0646\u0627\u0645\u064a\u0629', 'ro': u'\u0627\u0644\u0631\u0648\u0645\u0627\u0646\u064a\u0629', 'be': u'\u0627\u0644\u0628\u064a\u0644\u0648\u0631\u0648\u0633\u064a\u0629', 'fr': u'\u0627\u0644\u0641\u0631\u0646\u0633\u064a\u0629', 'bg': u'\u0627\u0644\u0628\u0644\u063a\u0627\u0631\u064a\u0629', 'uk': u'\u0627\u0644\u0627\u0648\u0643\u0631\u0627\u0646\u064a\u0629', 'hr': u'\u0627\u0644\u0643\u0631\u0648\u0627\u062a\u064a\u0629', 'bn': u'\u0627\u0644\u0628\u0646\u063a\u0627\u0644\u064a\u0629', 'bo': u'\u0627\u0644\u062a\u0628\u062a\u064a\u0629', 'da': u'\u0627\u0644\u062f\u0627\u0646\u0645\u0627\u0631\u0643\u064a\u0629', 'fa': u'\u0627\u0644\u0641\u0627\u0631\u0633\u064a\u0629', 'hi': u'\u0627\u0644\u0647\u0646\u062f\u064a\u0629', 'dz': u'\u0627\u0644\u0632\u0648\u0646\u062e\u0627\u064a\u0629', 'dv': u'\u0627\u0644\u0645\u0627\u0644\u062f\u064a\u0641\u064a\u0629', 'fi': u'\u0627\u0644\u0641\u0646\u0644\u0646\u062f\u064a\u0629', 'ja': u'\u0627\u0644\u064a\u0627\u0628\u0627\u0646\u064a\u0629', 'he': u'\u0627\u0644\u0639\u0628\u0631\u064a\u0629', 'tl': u'\u0627\u0644\u062a\u0627\u063a\u0627\u0644\u0648\u063a\u064a\u0629', 'sr': u'\u0627\u0644\u0635\u0631\u0628\u064a\u0629', 'sq': u'\u0627\u0644\u0627\u0644\u0628\u0627\u0646\u064a\u0629', 'mn': u'\u0627\u0644\u0645\u0646\u063a\u0648\u0644\u064a\u0629', 'ko': u'\u0627\u0644\u0643\u0648\u0631\u064a\u0629', 'km': u'\u0627\u0644\u062e\u0645\u064a\u0631\u064a\u0629', 'ur': u'\u0627\u0644\u0627\u0631\u062f\u064a\u0629', 'de': u'\u0627\u0644\u0627\u0644\u0645\u0627\u0646\u064a\u0629', 'ms': u'\u0644\u063a\u0629 \u0627\u0644\u0645\u0644\u0627\u064a\u0648', 'ug': u'\u0627\u0644\u0627\u063a\u0648\u0631\u064a\u0629', 'my': u'\u0627\u0644\u0628\u0648\u0631\u0645\u064a\u0629'} countries={'BD': u'\u0628\u0646\u063a\u0644\u0627\u062f\u064a\u0634', 'BE': u'\u0628\u0644\u062c\u064a\u0643\u0627', 'BF': u'\u0628\u0648\u0631\u0643\u064a\u0646\u0627 \u0641\u0627\u0633\u0648', 'BG': u'\u0628\u0644\u063a\u0627\u0631\u064a\u0627', 'BA': u'\u0627\u0644\u0628\u0648\u0633\u0646\u0629 \u0648\u0627\u0644\u0647\u0631\u0633\u0643', 'BB': u'\u0628\u0631\u0628\u0627\u062f\u0648\u0633', 'BN': u'\u0628\u0631\u0648\u0646\u0627\u064a', 'BO': u'\u0628\u0648\u0644\u064a\u0641\u064a\u0627', 'BH': u'\u0627\u0644\u0628\u062d\u0631\u064a\u0646', 'BI': u'\u0628\u0648\u0631\u0648\u0646\u062f\u064a', 'BJ': u'\u0628\u0646\u064a\u0646', 'BT': u'\u0628\u0648\u062a\u0627\u0646', 'JM': u'\u062c\u0627\u0645\u0627\u064a\u0643\u0627', 'BW': u'\u0628\u0648\u062a\u0633\u0648\u0627\u0646\u0627', 'WS': u'\u0633\u0627\u0645\u0648\u0627', 'BR': u'\u0627\u0644\u0628\u0631\u0627\u0632\u064a\u0644', 'BS': u'\u0627\u0644\u0628\u0647\u0627\u0645\u0627', 'BY': u'\u0631\u0648\u0633\u064a\u0627 \u0627\u0644\u0628\u064a\u0636\u0627\u0621', 'BZ': u'\u0628\u0644\u064a\u0632', 'RU': u'\u0631\u0648\u0633\u064a\u0627', 'RW': u'\u0631\u0648\u0627\u0646\u062f\u0627', 'TM': u'\u062a\u0631\u0643\u0645\u0627\u0646\u0633\u062a\u0627\u0646', 'TJ': u'\u062a\u0627\u062c\u064a\u0643\u0633\u062a\u0627\u0646', 'RO': u'\u0631\u0648\u0645\u0627\u0646\u064a\u0627', 'GW': u'\u063a\u064a\u0646\u064a\u0627 \u0628\u064a\u0633\u0627\u0648', 'GT': u'\u063a\u0648\u0627\u062a\u064a\u0645\u0627\u0644\u0627', 'GR': u'\u0627\u0644\u064a\u0648\u0646\u0627\u0646', 'GQ': u'\u063a\u064a\u0646\u064a\u0627 \u0627\u0644\u0627\u0633\u062a\u0648\u0627\u0626\u064a\u0629', 'JP': u'\u0627\u0644\u064a\u0627\u0628\u0627\u0646', 'GY': u'\u063a\u0648\u0627\u064a\u0627\u0646\u0627', 'GE': u'\u062c\u0648\u0631\u062c\u064a\u0627', 'GD': u'\u063a\u0631\u064a\u0646\u0627\u062f\u0627', 'GB': u'\u0627\u0644\u0645\u0645\u0644\u0643\u0629 \u0627\u0644\u0645\u062a\u062d\u062f\u0629', 'GA': u'\u063a\u0627\u0628\u0648\u0646', 'SV': u'\u0627\u0644\u0633\u0644\u0641\u0627\u062f\u0648\u0631', 'GN': u'\u063a\u064a\u0646\u064a\u0627', 'GM': u'\u063a\u0627\u0645\u0628\u064a\u0627', 'GH': u'\u063a\u0627\u0646\u0627', 'OM': u'\u0639\u0645\u0627\u0646', 'TN': u'\u062a\u0648\u0646\u0633', 'JO': u'\u0627\u0644\u0627\u0631\u062f\u0646', 'HR': u'\u0643\u0631\u0648\u0627\u062a\u064a\u0627', 'HT': u'\u0647\u0627\u064a\u062a\u064a', 'HU': u'\u0647\u0646\u063a\u0627\u0631\u064a\u0627', 'HN': u'\u0647\u0646\u062f\u0648\u0631\u0627\u0633', 'VE': u'\u0641\u0646\u0632\u0648\u064a\u0644\u0627', 'PW': u'\u0628\u0627\u0644\u0627\u0648', 'PT': u'\u0627\u0644\u0628\u0631\u062a\u063a\u0627\u0644', 'PY': u'\u0628\u0627\u0631\u0627\u063a\u0648\u0627\u064a', 'IQ': u'\u0627\u0644\u0639\u0631\u0627\u0642', 'PA': u'\u0628\u0646\u0645\u0627', 'PG': u'\u0628\u0627\u0628\u0648\u0627 \u063a\u064a\u0646\u064a\u0627 \u0627\u0644\u062c\u062f\u064a\u062f\u0629', 'PE': u'\u0628\u064a\u0631\u0648', 'PK': u'\u0627\u0644\u0628\u0627\u0643\u0633\u062a\u0627\u0646', 'PH': u'\u0627\u0644\u0641\u064a\u0644\u0628\u064a\u0646', 'PL': u'\u0628\u0648\u0644\u0646\u062f\u0627', 'ZM': u'\u0632\u0627\u0645\u0628\u064a\u0627', 'EH': u'\u0627\u0644\u0635\u062d\u0631\u0627\u0621 \u0627\u0644\u063a\u0631\u0628\u064a\u0629', 'EE': u'\u0627\u0633\u062a\u0648\u0646\u064a\u0627', 'EG': u'\u0645\u0635\u0631', 'ZA': u'\u062c\u0646\u0648\u0628 \u0627\u0641\u0631\u064a\u0642\u064a\u0627', 'EC': u'\u0627\u0643\u0648\u0627\u062f\u0648\u0631', 'VN': u'\u0641\u064a\u062a\u0646\u0627\u0645', 'SB': u'\u062c\u0632\u0631 \u0633\u0644\u064a\u0645\u0627\u0646', 'ET': u'\u0627\u062b\u064a\u0648\u0628\u064a\u0627', 'SO': u'\u0627\u0644\u0635\u0648\u0645\u0627\u0644', 'ZW': u'\u0632\u064a\u0645\u0628\u0627\u0628\u0648\u064a', 'ES': u'\u0627\u0633\u0628\u0627\u0646\u064a\u0627', 'ER': u'\u0627\u0631\u062a\u064a\u0631\u064a\u0627', 'MD': u'\u0645\u0648\u0644\u062f\u0648\u0641\u0627', 'MG': u'\u0645\u062f\u063a\u0634\u0642\u0631', 'MA': u'\u0627\u0644\u0645\u063a\u0631\u0628', 'MC': u'\u0645\u0648\u0646\u0627\u0643\u0648', 'UZ': u'\u0627\u0632\u0628\u0643\u0633\u062a\u0627\u0646', 'MM': u'\u0645\u064a\u0627\u0646\u0645\u0627\u0631', 'ML': u'\u0645\u0627\u0644\u064a', 'MN': u'\u0645\u0646\u063a\u0648\u0644\u064a\u0627', 'MH': u'\u062c\u0632\u0631 \u0627\u0644\u0645\u0627\u0631\u0634\u0627\u0644', 'MK': u'\u0645\u0642\u062f\u0648\u0646\u064a\u0627', 'MU': u'\u0645\u0648\u0631\u064a\u0634\u0648\u0633', 'MT': u'\u0645\u0627\u0644\u0637\u0629', 'MW': u'\u0645\u0644\u0627\u0648\u064a', 'MV': u'\u0645\u0627\u0644\u062f\u064a\u0641', 'MR': u'\u0645\u0648\u0631\u064a\u062a\u0627\u0646\u064a\u0627', 'UG': u'\u0627\u0648\u063a\u0646\u062f\u0627', 'MY': u'\u0645\u0627\u0644\u064a\u0632\u064a\u0627', 'MX': u'\u0627\u0644\u0645\u0643\u0633\u064a\u0643', 'IL': u'\u0627\u0633\u0631\u0627\u0626\u064a\u0644', 'FR': u'\u0641\u0631\u0646\u0633\u0627', 'FI': u'\u0641\u0646\u0644\u0646\u062f\u0627', 'FJ': u'\u0641\u064a\u062c\u064a', 'FM': u'\u0645\u064a\u0643\u0631\u0648\u0646\u064a\u0632\u064a\u0627', 'NI': u'\u0646\u064a\u0643\u0627\u0631\u0627\u063a\u0648\u0627', 'NL': u'\u0647\u0648\u0644\u0646\u062f\u0627', 'NO': u'\u0627\u0644\u0646\u0631\u0648\u064a\u062c', 'NA': u'\u0646\u0627\u0645\u064a\u0628\u064a\u0627', 'VU': u'\u0641\u0627\u0646\u0648\u0622\u062a\u0648', 'NE': u'\u0627\u0644\u0646\u064a\u062c\u0631', 'NG': u'\u0646\u064a\u062c\u064a\u0631\u064a\u0627', 'NZ': u'\u0632\u064a\u0644\u0646\u062f\u0627 \u0627\u0644\u062c\u062f\u064a\u062f\u0629', 'NP': u'\u0627\u0644\u0646\u064a\u0628\u0627\u0644', 'NR': u'\u0646\u0627\u0648\u0631\u0648', 'CH': u'\u0633\u0648\u064a\u0633\u0631\u0627', 'CO': u'\u0643\u0648\u0644\u0648\u0645\u0628\u064a\u0627', 'CN': u'\u0627\u0644\u0635\u064a\u0646', 'CM': u'\u0627\u0644\u0643\u0627\u0645\u064a\u0631\u0648\u0646', 'CL': u'\u062a\u0634\u064a\u0644\u064a', 'CA': u'\u0643\u0646\u062f\u0627', 'CG': u'\u0627\u0644\u0643\u0648\u0646\u063a\u0648', 'CF': u'\u062c\u0645\u0647\u0648\u0631\u064a\u0629 \u0627\u0641\u0631\u064a\u0642\u064a\u0627 \u0627\u0644\u0648\u0633\u0637\u0649', 'CZ': u'\u062c\u0645\u0647\u0648\u0631\u064a\u0629 \u0627\u0644\u062a\u0634\u064a\u0643', 'CY': u'\u0642\u0628\u0631\u0635', 'CR': u'\u0643\u0648\u0633\u062a\u0627\u0631\u064a\u0643\u0627', 'CV': u'\u0627\u0644\u0631\u0623\u0633 \u0627\u0644\u0627\u062e\u0636\u0631', 'CU': u'\u0643\u0648\u0628\u0627', 'SZ': u'\u0633\u0648\u0627\u0632\u064a\u0644\u0627\u0646\u062f', 'SY': u'\u0633\u0648\u0631\u064a\u0629', 'KG': u'\u0642\u064a\u0631\u063a\u064a\u0632\u0633\u062a\u0627\u0646', 'KE': u'\u0643\u064a\u0646\u064a\u0627', 'SR': u'\u0633\u0648\u0631\u064a\u0646\u0627\u0645', 'KI': u'\u0643\u064a\u0631\u064a\u0628\u0627\u062a\u064a', 'KH': u'\u0643\u0645\u0628\u0648\u062f\u064a\u0627', 'KN': u'\u0633\u0627\u0646\u062a \u0643\u064a\u062a\u0633 \u0648\u0646\u064a\u0641\u064a\u0633', 'KM': u'\u062c\u0632\u0631 \u0627\u0644\u0642\u0645\u0631', 'ST': u'\u0633\u0627\u0646 \u062a\u0648\u0645\u064a \u0648\u0628\u0631\u064a\u0646\u0633\u064a\u0628\u064a', 'SK': u'\u0633\u0644\u0648\u0641\u0627\u0643\u064a\u0627', 'KR': u'\u0643\u0648\u0631\u064a\u0627 \u0627\u0644\u062c\u0646\u0648\u0628\u064a\u0629', 'SI': u'\u0633\u0644\u0648\u0641\u064a\u0646\u064a\u0627', 'KP': u'\u0643\u0648\u0631\u064a\u0627 \u0627\u0644\u0634\u0645\u0627\u0644\u064a\u0629', 'KW': u'\u0627\u0644\u0643\u0648\u064a\u062a', 'SN': u'\u0627\u0644\u0633\u0646\u063a\u0627\u0644', 'SM': u'\u0633\u0627\u0646 \u0645\u0627\u0631\u064a\u0646\u0648', 'SL': u'\u0633\u064a\u0631\u0627\u0644\u064a\u0648\u0646', 'SC': u'\u0633\u064a\u0634\u0644', 'KZ': u'\u0643\u0627\u0632\u0627\u062e\u0633\u062a\u0627\u0646', 'SA': u'\u0627\u0644\u0639\u0631\u0628\u064a\u0629 \u0627\u0644\u0633\u0639\u0648\u062f\u064a\u0629', 'SG': u'\u0633\u0646\u063a\u0627\u0641\u0648\u0631\u0629', 'SE': u'\u0627\u0644\u0633\u0648\u064a\u062f', 'SD': u'\u0627\u0644\u0633\u0648\u062f\u0627\u0646', 'DO': u'\u0627\u0644\u062c\u0645\u0647\u0648\u0631\u064a\u0629 \u0627\u0644\u062f\u0648\u0645\u064a\u0646\u064a\u0643\u064a\u0629', 'DM': u'\u062f\u0648\u0645\u064a\u0646\u064a\u0643\u0627', 'DJ': u'\u062c\u064a\u0628\u0648\u062a\u064a', 'DK': u'\u0627\u0644\u062f\u0627\u0646\u0645\u0631\u0643', 'DE': u'\u0627\u0644\u0645\u0627\u0646\u064a\u0627', 'YE': u'\u0627\u0644\u064a\u0645\u0646', 'DZ': u'\u0627\u0644\u062c\u0632\u0627\u0626\u0631', 'US': u'\u0627\u0644\u0627\u0648\u0644\u0627\u064a\u0627\u062a \u0627\u0644\u0645\u062a\u062d\u062f\u0629 \u0627\u0644\u0627\u0645\u0631\u064a\u0643\u064a\u0629', 'UY': u'\u0627\u0631\u0648\u063a\u0648\u0627\u064a', 'LB': u'\u0644\u0628\u0646\u0627\u0646', 'LC': u'\u0633\u0627\u0646\u062a \u0644\u0648\u0633\u064a\u0627', 'LA': u'\u0644\u0627\u0648\u0633', 'TV': u'\u062a\u0648\u0641\u0627\u0644\u0648', 'TW': u'\u062a\u0627\u064a\u0648\u0627\u0646', 'TT': u'\u062a\u0631\u064a\u0646\u064a\u062f\u0627\u062f \u0648\u062a\u0648\u0628\u0627\u063a\u0648', 'TR': u'\u062a\u0631\u0643\u064a\u0627', 'LK': u'\u0633\u0631\u064a \u0644\u0627\u0646\u0643\u0627', 'LI': u'\u0644\u064a\u062e\u062a\u0646\u0634\u062a\u0627\u064a\u0646', 'LV': u'\u0644\u0627\u062a\u0641\u064a\u0627', 'TO': u'\u062a\u0648\u0646\u063a\u0627', 'LT': u'\u0644\u064a\u062a\u0648\u0627\u0646\u064a\u0627', 'LU': u'\u0644\u0648\u0643\u0633\u0648\u0645\u0628\u0631\u063a', 'LR': u'\u0644\u064a\u0628\u064a\u0631\u064a\u0627', 'LS': u'\u0644\u064a\u0633\u0648\u062a\u0648', 'TH': u'\u062a\u0627\u064a\u0644\u0646\u062f', 'TG': u'\u062a\u0648\u063a\u0648', 'TD': u'\u062a\u0634\u0627\u062f', 'LY': u'\u0644\u064a\u0628\u064a\u0627', 'VA': u'\u0627\u0644\u0641\u0627\u062a\u064a\u0643\u0627\u0646', 'VC': u'\u0633\u0627\u0646\u062a \u0641\u0646\u0633\u0646\u062a \u0648\u062c\u0632\u0631 \u063a\u0631\u064a\u0646\u0627\u062f\u064a\u0646', 'AE': u'\u0627\u0644\u0627\u0645\u0627\u0631\u0627\u062a \u0627\u0644\u0639\u0631\u0628\u064a\u0629 \u0627\u0644\u0645\u062a\u062d\u062f\u0629', 'AD': u'\u0627\u0646\u062f\u0648\u0631\u0627', 'AG': u'\u0627\u0646\u062a\u064a\u063a\u0648\u0627 \u0648\u0628\u0631\u0628\u0648\u062f\u0627', 'AF': u'\u0627\u0641\u063a\u0627\u0646\u0633\u062a\u0627\u0646', 'AI': u'\u0627\u0644\u0628\u0627\u0646\u064a\u0627', 'IS': u'\u0627\u064a\u0633\u0644\u0646\u062f\u0627', 'IR': u'\u0627\u064a\u0631\u0627\u0646', 'AM': u'\u0627\u0631\u0645\u064a\u0646\u064a\u0627', 'IT': u'\u0627\u064a\u0637\u0627\u0644\u064a\u0627', 'AO': u'\u0627\u0646\u063a\u0648\u0644\u0627', 'AR': u'\u0627\u0644\u0627\u0631\u062c\u0646\u062a\u064a\u0646', 'AU': u'\u0627\u0633\u062a\u0631\u0627\u0644\u064a\u0627', 'AT': u'\u0627\u0644\u0646\u0645\u0633\u0627', 'IN': u'\u0627\u0644\u0647\u0646\u062f', 'TZ': u'\u062a\u0627\u0646\u0632\u0627\u0646\u064a\u0627', 'AZ': u'\u0622\u0630\u0631\u0628\u064a\u062c\u0627\u0646', 'IE': u'\u0627\u064a\u0631\u0644\u0646\u062f\u0627', 'ID': u'\u0627\u0646\u062f\u0648\u0646\u064a\u0633\u064a\u0627', 'UA': u'\u0627\u0648\u0643\u0631\u0627\u0646\u064a\u0627', 'QA': u'\u0642\u0637\u0631', 'MZ': u'\u0645\u0648\u0632\u0645\u0628\u064a\u0642'} months=[u'\u064a\u0646\u0627\u064a\u0631', u'\u0641\u0628\u0631\u0627\u064a\u0631', u'\u0645\u0627\u0631\u0633', u'\u0623\u0628\u0631\u064a\u0644', u'\u0645\u0627\u064a\u0648', u'\u064a\u0648\u0646\u064a\u0648', u'\u064a\u0648\u0644\u064a\u0648', u'\u0623\u063a\u0633\u0637\u0633', u'\u0633\u0628\u062a\u0645\u0628\u0631', u'\u0623\u0643\u062a\u0648\u0628\u0631', u'\u0646\u0648\u0641\u0645\u0628\u0631', u'\u062f\u064a\u0633\u0645\u0628\u0631'] abbrMonths=[u'\u064a\u0646\u0627\u064a\u0631', u'\u0641\u0628\u0631\u0627\u064a\u0631', u'\u0645\u0627\u0631\u0633', u'\u0623\u0628\u0631\u064a\u0644', u'\u0645\u0627\u064a\u0648', u'\u064a\u0648\u0646\u064a\u0648', u'\u064a\u0648\u0644\u064a\u0648', u'\u0623\u063a\u0633\u0637\u0633', u'\u0633\u0628\u062a\u0645\u0628\u0631', u'\u0623\u0643\u062a\u0648\u0628\u0631', u'\u0646\u0648\u0641\u0645\u0628\u0631', u'\u062f\u064a\u0633\u0645\u0628\u0631'] days=[u'\u0627\u0644\u0627\u062b\u0646\u064a\u0646', u'\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621', u'\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621', u'\u0627\u0644\u062e\u0645\u064a\u0633', u'\u0627\u0644\u062c\u0645\u0639\u0629', u'\u0627\u0644\u0633\u0628\u062a', u'\u0627\u0644\u0623\u062d\u062f'] abbrDays=[u'\u0627\u0644\u0627\u062b\u0646\u064a\u0646', u'\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621', u'\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621', u'\u0627\u0644\u062e\u0645\u064a\u0633', u'\u0627\u0644\u062c\u0645\u0639\u0629', u'\u0627\u0644\u0633\u0628\u062a', u'\u0627\u0644\u0623\u062d\u062f'] dateFormats={'medium': '%d/%m/%Y', 'full': '%%(dayname)s, %d %%(monthname)s, %Y', 'long': '%d %%(monthname)s, %Y', 'short': '%d/%m/%Y'} numericSymbols={'group': u'\u066c', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': u'\u066b', 'percentSign': u'\u066a', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'} PKA>Tʁ''turbogears/i18n/data/ar_TN.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd*>turbogears/i18n/data/ar_YE.py# Formatting configuration for locale ar_YE languages={'el': u'\u0627\u0644\u064a\u0648\u0646\u0627\u0646\u064a\u0629', 'gu': u'\u0627\u0644\u063a\u0648\u062c\u0627\u0631\u0627\u062a\u064a\u0629', 'en': u'\u0627\u0644\u0627\u0646\u062c\u0644\u064a\u0632\u064a\u0629', 'zh': u'\u0627\u0644\u0635\u064a\u0646\u064a\u0629', 'sw': u'\u0627\u0644\u0633\u0648\u0627\u062d\u0644\u064a\u0629', 'ca': u'\u0627\u0644\u0643\u0627\u062a\u0627\u0644\u0648\u064a\u0646\u064a\u0629', 'it': u'\u0627\u0644\u0627\u064a\u0637\u0627\u0644\u064a\u0629', 'ar': u'\u0627\u0644\u0639\u0631\u0628\u064a\u0629', 'id': u'\u0627\u0644\u0627\u0646\u062f\u0648\u0646\u064a\u0633\u064a\u0629', 'es': u'\u0627\u0644\u0627\u0633\u0628\u0627\u0646\u064a\u0629', 'ru': u'\u0627\u0644\u0631\u0648\u0633\u064a\u0629', 'nl': u'\u0627\u0644\u0647\u0648\u0644\u0646\u062f\u064a\u0629', 'pt': u'\u0627\u0644\u0628\u0631\u062a\u063a\u0627\u0644\u064a\u0629', 'tr': u'\u0627\u0644\u062a\u0631\u0643\u064a\u0629', 'ne': u'\u0627\u0644\u0646\u064a\u0628\u0627\u0644\u064a\u0629', 'lt': u'\u0627\u0644\u0644\u062a\u0648\u0627\u0646\u064a\u0629', 'pa': u'\u0627\u0644\u0628\u0646\u062c\u0627\u0628\u064a\u0629', 'th': u'\u0627\u0644\u062a\u0627\u064a\u0644\u0627\u0646\u062f\u064a\u0629', 'vi': u'\u0627\u0644\u0641\u064a\u062a\u0646\u0627\u0645\u064a\u0629', 'ro': u'\u0627\u0644\u0631\u0648\u0645\u0627\u0646\u064a\u0629', 'be': u'\u0627\u0644\u0628\u064a\u0644\u0648\u0631\u0648\u0633\u064a\u0629', 'fr': u'\u0627\u0644\u0641\u0631\u0646\u0633\u064a\u0629', 'bg': u'\u0627\u0644\u0628\u0644\u063a\u0627\u0631\u064a\u0629', 'uk': u'\u0627\u0644\u0627\u0648\u0643\u0631\u0627\u0646\u064a\u0629', 'hr': u'\u0627\u0644\u0643\u0631\u0648\u0627\u062a\u064a\u0629', 'bn': u'\u0627\u0644\u0628\u0646\u063a\u0627\u0644\u064a\u0629', 'bo': u'\u0627\u0644\u062a\u0628\u062a\u064a\u0629', 'da': u'\u0627\u0644\u062f\u0627\u0646\u0645\u0627\u0631\u0643\u064a\u0629', 'fa': u'\u0627\u0644\u0641\u0627\u0631\u0633\u064a\u0629', 'hi': u'\u0627\u0644\u0647\u0646\u062f\u064a\u0629', 'dz': u'\u0627\u0644\u0632\u0648\u0646\u062e\u0627\u064a\u0629', 'dv': u'\u0627\u0644\u0645\u0627\u0644\u062f\u064a\u0641\u064a\u0629', 'fi': u'\u0627\u0644\u0641\u0646\u0644\u0646\u062f\u064a\u0629', 'ja': u'\u0627\u0644\u064a\u0627\u0628\u0627\u0646\u064a\u0629', 'he': u'\u0627\u0644\u0639\u0628\u0631\u064a\u0629', 'tl': u'\u0627\u0644\u062a\u0627\u063a\u0627\u0644\u0648\u063a\u064a\u0629', 'sr': u'\u0627\u0644\u0635\u0631\u0628\u064a\u0629', 'sq': u'\u0627\u0644\u0627\u0644\u0628\u0627\u0646\u064a\u0629', 'mn': u'\u0627\u0644\u0645\u0646\u063a\u0648\u0644\u064a\u0629', 'ko': u'\u0627\u0644\u0643\u0648\u0631\u064a\u0629', 'km': u'\u0627\u0644\u062e\u0645\u064a\u0631\u064a\u0629', 'ur': u'\u0627\u0644\u0627\u0631\u062f\u064a\u0629', 'de': u'\u0627\u0644\u0627\u0644\u0645\u0627\u0646\u064a\u0629', 'ms': u'\u0644\u063a\u0629 \u0627\u0644\u0645\u0644\u0627\u064a\u0648', 'ug': u'\u0627\u0644\u0627\u063a\u0648\u0631\u064a\u0629', 'my': u'\u0627\u0644\u0628\u0648\u0631\u0645\u064a\u0629'} countries={'BD': u'\u0628\u0646\u063a\u0644\u0627\u062f\u064a\u0634', 'BE': u'\u0628\u0644\u062c\u064a\u0643\u0627', 'BF': u'\u0628\u0648\u0631\u0643\u064a\u0646\u0627 \u0641\u0627\u0633\u0648', 'BG': u'\u0628\u0644\u063a\u0627\u0631\u064a\u0627', 'BA': u'\u0627\u0644\u0628\u0648\u0633\u0646\u0629 \u0648\u0627\u0644\u0647\u0631\u0633\u0643', 'BB': u'\u0628\u0631\u0628\u0627\u062f\u0648\u0633', 'BN': u'\u0628\u0631\u0648\u0646\u0627\u064a', 'BO': u'\u0628\u0648\u0644\u064a\u0641\u064a\u0627', 'BH': u'\u0627\u0644\u0628\u062d\u0631\u064a\u0646', 'BI': u'\u0628\u0648\u0631\u0648\u0646\u062f\u064a', 'BJ': u'\u0628\u0646\u064a\u0646', 'BT': u'\u0628\u0648\u062a\u0627\u0646', 'JM': u'\u062c\u0627\u0645\u0627\u064a\u0643\u0627', 'BW': u'\u0628\u0648\u062a\u0633\u0648\u0627\u0646\u0627', 'WS': u'\u0633\u0627\u0645\u0648\u0627', 'BR': u'\u0627\u0644\u0628\u0631\u0627\u0632\u064a\u0644', 'BS': u'\u0627\u0644\u0628\u0647\u0627\u0645\u0627', 'BY': u'\u0631\u0648\u0633\u064a\u0627 \u0627\u0644\u0628\u064a\u0636\u0627\u0621', 'BZ': u'\u0628\u0644\u064a\u0632', 'RU': u'\u0631\u0648\u0633\u064a\u0627', 'RW': u'\u0631\u0648\u0627\u0646\u062f\u0627', 'TM': u'\u062a\u0631\u0643\u0645\u0627\u0646\u0633\u062a\u0627\u0646', 'TJ': u'\u062a\u0627\u062c\u064a\u0643\u0633\u062a\u0627\u0646', 'RO': u'\u0631\u0648\u0645\u0627\u0646\u064a\u0627', 'GW': u'\u063a\u064a\u0646\u064a\u0627 \u0628\u064a\u0633\u0627\u0648', 'GT': u'\u063a\u0648\u0627\u062a\u064a\u0645\u0627\u0644\u0627', 'GR': u'\u0627\u0644\u064a\u0648\u0646\u0627\u0646', 'GQ': u'\u063a\u064a\u0646\u064a\u0627 \u0627\u0644\u0627\u0633\u062a\u0648\u0627\u0626\u064a\u0629', 'JP': u'\u0627\u0644\u064a\u0627\u0628\u0627\u0646', 'GY': u'\u063a\u0648\u0627\u064a\u0627\u0646\u0627', 'GE': u'\u062c\u0648\u0631\u062c\u064a\u0627', 'GD': u'\u063a\u0631\u064a\u0646\u0627\u062f\u0627', 'GB': u'\u0627\u0644\u0645\u0645\u0644\u0643\u0629 \u0627\u0644\u0645\u062a\u062d\u062f\u0629', 'GA': u'\u063a\u0627\u0628\u0648\u0646', 'SV': u'\u0627\u0644\u0633\u0644\u0641\u0627\u062f\u0648\u0631', 'GN': u'\u063a\u064a\u0646\u064a\u0627', 'GM': u'\u063a\u0627\u0645\u0628\u064a\u0627', 'GH': u'\u063a\u0627\u0646\u0627', 'OM': u'\u0639\u0645\u0627\u0646', 'TN': u'\u062a\u0648\u0646\u0633', 'JO': u'\u0627\u0644\u0627\u0631\u062f\u0646', 'HR': u'\u0643\u0631\u0648\u0627\u062a\u064a\u0627', 'HT': u'\u0647\u0627\u064a\u062a\u064a', 'HU': u'\u0647\u0646\u063a\u0627\u0631\u064a\u0627', 'HN': u'\u0647\u0646\u062f\u0648\u0631\u0627\u0633', 'VE': u'\u0641\u0646\u0632\u0648\u064a\u0644\u0627', 'PW': u'\u0628\u0627\u0644\u0627\u0648', 'PT': u'\u0627\u0644\u0628\u0631\u062a\u063a\u0627\u0644', 'PY': u'\u0628\u0627\u0631\u0627\u063a\u0648\u0627\u064a', 'IQ': u'\u0627\u0644\u0639\u0631\u0627\u0642', 'PA': u'\u0628\u0646\u0645\u0627', 'PG': u'\u0628\u0627\u0628\u0648\u0627 \u063a\u064a\u0646\u064a\u0627 \u0627\u0644\u062c\u062f\u064a\u062f\u0629', 'PE': u'\u0628\u064a\u0631\u0648', 'PK': u'\u0627\u0644\u0628\u0627\u0643\u0633\u062a\u0627\u0646', 'PH': u'\u0627\u0644\u0641\u064a\u0644\u0628\u064a\u0646', 'PL': u'\u0628\u0648\u0644\u0646\u062f\u0627', 'ZM': u'\u0632\u0627\u0645\u0628\u064a\u0627', 'EH': u'\u0627\u0644\u0635\u062d\u0631\u0627\u0621 \u0627\u0644\u063a\u0631\u0628\u064a\u0629', 'EE': u'\u0627\u0633\u062a\u0648\u0646\u064a\u0627', 'EG': u'\u0645\u0635\u0631', 'ZA': u'\u062c\u0646\u0648\u0628 \u0627\u0641\u0631\u064a\u0642\u064a\u0627', 'EC': u'\u0627\u0643\u0648\u0627\u062f\u0648\u0631', 'VN': u'\u0641\u064a\u062a\u0646\u0627\u0645', 'SB': u'\u062c\u0632\u0631 \u0633\u0644\u064a\u0645\u0627\u0646', 'ET': u'\u0627\u062b\u064a\u0648\u0628\u064a\u0627', 'SO': u'\u0627\u0644\u0635\u0648\u0645\u0627\u0644', 'ZW': u'\u0632\u064a\u0645\u0628\u0627\u0628\u0648\u064a', 'ES': u'\u0627\u0633\u0628\u0627\u0646\u064a\u0627', 'ER': u'\u0627\u0631\u062a\u064a\u0631\u064a\u0627', 'MD': u'\u0645\u0648\u0644\u062f\u0648\u0641\u0627', 'MG': u'\u0645\u062f\u063a\u0634\u0642\u0631', 'MA': u'\u0627\u0644\u0645\u063a\u0631\u0628', 'MC': u'\u0645\u0648\u0646\u0627\u0643\u0648', 'UZ': u'\u0627\u0632\u0628\u0643\u0633\u062a\u0627\u0646', 'MM': u'\u0645\u064a\u0627\u0646\u0645\u0627\u0631', 'ML': u'\u0645\u0627\u0644\u064a', 'MN': u'\u0645\u0646\u063a\u0648\u0644\u064a\u0627', 'MH': u'\u062c\u0632\u0631 \u0627\u0644\u0645\u0627\u0631\u0634\u0627\u0644', 'MK': u'\u0645\u0642\u062f\u0648\u0646\u064a\u0627', 'MU': u'\u0645\u0648\u0631\u064a\u0634\u0648\u0633', 'MT': u'\u0645\u0627\u0644\u0637\u0629', 'MW': u'\u0645\u0644\u0627\u0648\u064a', 'MV': u'\u0645\u0627\u0644\u062f\u064a\u0641', 'MR': u'\u0645\u0648\u0631\u064a\u062a\u0627\u0646\u064a\u0627', 'UG': u'\u0627\u0648\u063a\u0646\u062f\u0627', 'MY': u'\u0645\u0627\u0644\u064a\u0632\u064a\u0627', 'MX': u'\u0627\u0644\u0645\u0643\u0633\u064a\u0643', 'IL': u'\u0627\u0633\u0631\u0627\u0626\u064a\u0644', 'FR': u'\u0641\u0631\u0646\u0633\u0627', 'FI': u'\u0641\u0646\u0644\u0646\u062f\u0627', 'FJ': u'\u0641\u064a\u062c\u064a', 'FM': u'\u0645\u064a\u0643\u0631\u0648\u0646\u064a\u0632\u064a\u0627', 'NI': u'\u0646\u064a\u0643\u0627\u0631\u0627\u063a\u0648\u0627', 'NL': u'\u0647\u0648\u0644\u0646\u062f\u0627', 'NO': u'\u0627\u0644\u0646\u0631\u0648\u064a\u062c', 'NA': u'\u0646\u0627\u0645\u064a\u0628\u064a\u0627', 'VU': u'\u0641\u0627\u0646\u0648\u0622\u062a\u0648', 'NE': u'\u0627\u0644\u0646\u064a\u062c\u0631', 'NG': u'\u0646\u064a\u062c\u064a\u0631\u064a\u0627', 'NZ': u'\u0632\u064a\u0644\u0646\u062f\u0627 \u0627\u0644\u062c\u062f\u064a\u062f\u0629', 'NP': u'\u0627\u0644\u0646\u064a\u0628\u0627\u0644', 'NR': u'\u0646\u0627\u0648\u0631\u0648', 'CH': u'\u0633\u0648\u064a\u0633\u0631\u0627', 'CO': u'\u0643\u0648\u0644\u0648\u0645\u0628\u064a\u0627', 'CN': u'\u0627\u0644\u0635\u064a\u0646', 'CM': u'\u0627\u0644\u0643\u0627\u0645\u064a\u0631\u0648\u0646', 'CL': u'\u062a\u0634\u064a\u0644\u064a', 'CA': u'\u0643\u0646\u062f\u0627', 'CG': u'\u0627\u0644\u0643\u0648\u0646\u063a\u0648', 'CF': u'\u062c\u0645\u0647\u0648\u0631\u064a\u0629 \u0627\u0641\u0631\u064a\u0642\u064a\u0627 \u0627\u0644\u0648\u0633\u0637\u0649', 'CZ': u'\u062c\u0645\u0647\u0648\u0631\u064a\u0629 \u0627\u0644\u062a\u0634\u064a\u0643', 'CY': u'\u0642\u0628\u0631\u0635', 'CR': u'\u0643\u0648\u0633\u062a\u0627\u0631\u064a\u0643\u0627', 'CV': u'\u0627\u0644\u0631\u0623\u0633 \u0627\u0644\u0627\u062e\u0636\u0631', 'CU': u'\u0643\u0648\u0628\u0627', 'SZ': u'\u0633\u0648\u0627\u0632\u064a\u0644\u0627\u0646\u062f', 'SY': u'\u0633\u0648\u0631\u064a\u0629', 'KG': u'\u0642\u064a\u0631\u063a\u064a\u0632\u0633\u062a\u0627\u0646', 'KE': u'\u0643\u064a\u0646\u064a\u0627', 'SR': u'\u0633\u0648\u0631\u064a\u0646\u0627\u0645', 'KI': u'\u0643\u064a\u0631\u064a\u0628\u0627\u062a\u064a', 'KH': u'\u0643\u0645\u0628\u0648\u062f\u064a\u0627', 'KN': u'\u0633\u0627\u0646\u062a \u0643\u064a\u062a\u0633 \u0648\u0646\u064a\u0641\u064a\u0633', 'KM': u'\u062c\u0632\u0631 \u0627\u0644\u0642\u0645\u0631', 'ST': u'\u0633\u0627\u0646 \u062a\u0648\u0645\u064a \u0648\u0628\u0631\u064a\u0646\u0633\u064a\u0628\u064a', 'SK': u'\u0633\u0644\u0648\u0641\u0627\u0643\u064a\u0627', 'KR': u'\u0643\u0648\u0631\u064a\u0627 \u0627\u0644\u062c\u0646\u0648\u0628\u064a\u0629', 'SI': u'\u0633\u0644\u0648\u0641\u064a\u0646\u064a\u0627', 'KP': u'\u0643\u0648\u0631\u064a\u0627 \u0627\u0644\u0634\u0645\u0627\u0644\u064a\u0629', 'KW': u'\u0627\u0644\u0643\u0648\u064a\u062a', 'SN': u'\u0627\u0644\u0633\u0646\u063a\u0627\u0644', 'SM': u'\u0633\u0627\u0646 \u0645\u0627\u0631\u064a\u0646\u0648', 'SL': u'\u0633\u064a\u0631\u0627\u0644\u064a\u0648\u0646', 'SC': u'\u0633\u064a\u0634\u0644', 'KZ': u'\u0643\u0627\u0632\u0627\u062e\u0633\u062a\u0627\u0646', 'SA': u'\u0627\u0644\u0639\u0631\u0628\u064a\u0629 \u0627\u0644\u0633\u0639\u0648\u062f\u064a\u0629', 'SG': u'\u0633\u0646\u063a\u0627\u0641\u0648\u0631\u0629', 'SE': u'\u0627\u0644\u0633\u0648\u064a\u062f', 'SD': u'\u0627\u0644\u0633\u0648\u062f\u0627\u0646', 'DO': u'\u0627\u0644\u062c\u0645\u0647\u0648\u0631\u064a\u0629 \u0627\u0644\u062f\u0648\u0645\u064a\u0646\u064a\u0643\u064a\u0629', 'DM': u'\u062f\u0648\u0645\u064a\u0646\u064a\u0643\u0627', 'DJ': u'\u062c\u064a\u0628\u0648\u062a\u064a', 'DK': u'\u0627\u0644\u062f\u0627\u0646\u0645\u0631\u0643', 'DE': u'\u0627\u0644\u0645\u0627\u0646\u064a\u0627', 'YE': u'\u0627\u0644\u064a\u0645\u0646', 'DZ': u'\u0627\u0644\u062c\u0632\u0627\u0626\u0631', 'US': u'\u0627\u0644\u0627\u0648\u0644\u0627\u064a\u0627\u062a \u0627\u0644\u0645\u062a\u062d\u062f\u0629 \u0627\u0644\u0627\u0645\u0631\u064a\u0643\u064a\u0629', 'UY': u'\u0627\u0631\u0648\u063a\u0648\u0627\u064a', 'LB': u'\u0644\u0628\u0646\u0627\u0646', 'LC': u'\u0633\u0627\u0646\u062a \u0644\u0648\u0633\u064a\u0627', 'LA': u'\u0644\u0627\u0648\u0633', 'TV': u'\u062a\u0648\u0641\u0627\u0644\u0648', 'TW': u'\u062a\u0627\u064a\u0648\u0627\u0646', 'TT': u'\u062a\u0631\u064a\u0646\u064a\u062f\u0627\u062f \u0648\u062a\u0648\u0628\u0627\u063a\u0648', 'TR': u'\u062a\u0631\u0643\u064a\u0627', 'LK': u'\u0633\u0631\u064a \u0644\u0627\u0646\u0643\u0627', 'LI': u'\u0644\u064a\u062e\u062a\u0646\u0634\u062a\u0627\u064a\u0646', 'LV': u'\u0644\u0627\u062a\u0641\u064a\u0627', 'TO': u'\u062a\u0648\u0646\u063a\u0627', 'LT': u'\u0644\u064a\u062a\u0648\u0627\u0646\u064a\u0627', 'LU': u'\u0644\u0648\u0643\u0633\u0648\u0645\u0628\u0631\u063a', 'LR': u'\u0644\u064a\u0628\u064a\u0631\u064a\u0627', 'LS': u'\u0644\u064a\u0633\u0648\u062a\u0648', 'TH': u'\u062a\u0627\u064a\u0644\u0646\u062f', 'TG': u'\u062a\u0648\u063a\u0648', 'TD': u'\u062a\u0634\u0627\u062f', 'LY': u'\u0644\u064a\u0628\u064a\u0627', 'VA': u'\u0627\u0644\u0641\u0627\u062a\u064a\u0643\u0627\u0646', 'VC': u'\u0633\u0627\u0646\u062a \u0641\u0646\u0633\u0646\u062a \u0648\u062c\u0632\u0631 \u063a\u0631\u064a\u0646\u0627\u062f\u064a\u0646', 'AE': u'\u0627\u0644\u0627\u0645\u0627\u0631\u0627\u062a \u0627\u0644\u0639\u0631\u0628\u064a\u0629 \u0627\u0644\u0645\u062a\u062d\u062f\u0629', 'AD': u'\u0627\u0646\u062f\u0648\u0631\u0627', 'AG': u'\u0627\u0646\u062a\u064a\u063a\u0648\u0627 \u0648\u0628\u0631\u0628\u0648\u062f\u0627', 'AF': u'\u0627\u0641\u063a\u0627\u0646\u0633\u062a\u0627\u0646', 'AI': u'\u0627\u0644\u0628\u0627\u0646\u064a\u0627', 'IS': u'\u0627\u064a\u0633\u0644\u0646\u062f\u0627', 'IR': u'\u0627\u064a\u0631\u0627\u0646', 'AM': u'\u0627\u0631\u0645\u064a\u0646\u064a\u0627', 'IT': u'\u0627\u064a\u0637\u0627\u0644\u064a\u0627', 'AO': u'\u0627\u0646\u063a\u0648\u0644\u0627', 'AR': u'\u0627\u0644\u0627\u0631\u062c\u0646\u062a\u064a\u0646', 'AU': u'\u0627\u0633\u062a\u0631\u0627\u0644\u064a\u0627', 'AT': u'\u0627\u0644\u0646\u0645\u0633\u0627', 'IN': u'\u0627\u0644\u0647\u0646\u062f', 'TZ': u'\u062a\u0627\u0646\u0632\u0627\u0646\u064a\u0627', 'AZ': u'\u0622\u0630\u0631\u0628\u064a\u062c\u0627\u0646', 'IE': u'\u0627\u064a\u0631\u0644\u0646\u062f\u0627', 'ID': u'\u0627\u0646\u062f\u0648\u0646\u064a\u0633\u064a\u0627', 'UA': u'\u0627\u0648\u0643\u0631\u0627\u0646\u064a\u0627', 'QA': u'\u0642\u0637\u0631', 'MZ': u'\u0645\u0648\u0632\u0645\u0628\u064a\u0642'} months=[u'\u064a\u0646\u0627\u064a\u0631', u'\u0641\u0628\u0631\u0627\u064a\u0631', u'\u0645\u0627\u0631\u0633', u'\u0623\u0628\u0631\u064a\u0644', u'\u0645\u0627\u064a\u0648', u'\u064a\u0648\u0646\u064a\u0648', u'\u064a\u0648\u0644\u064a\u0648', u'\u0623\u063a\u0633\u0637\u0633', u'\u0633\u0628\u062a\u0645\u0628\u0631', u'\u0623\u0643\u062a\u0648\u0628\u0631', u'\u0646\u0648\u0641\u0645\u0628\u0631', u'\u062f\u064a\u0633\u0645\u0628\u0631'] abbrMonths=[u'\u064a\u0646\u0627\u064a\u0631', u'\u0641\u0628\u0631\u0627\u064a\u0631', u'\u0645\u0627\u0631\u0633', u'\u0623\u0628\u0631\u064a\u0644', u'\u0645\u0627\u064a\u0648', u'\u064a\u0648\u0646\u064a\u0648', u'\u064a\u0648\u0644\u064a\u0648', u'\u0623\u063a\u0633\u0637\u0633', u'\u0633\u0628\u062a\u0645\u0628\u0631', u'\u0623\u0643\u062a\u0648\u0628\u0631', u'\u0646\u0648\u0641\u0645\u0628\u0631', u'\u062f\u064a\u0633\u0645\u0628\u0631'] days=[u'\u0627\u0644\u0627\u062b\u0646\u064a\u0646', u'\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621', u'\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621', u'\u0627\u0644\u062e\u0645\u064a\u0633', u'\u0627\u0644\u062c\u0645\u0639\u0629', u'\u0627\u0644\u0633\u0628\u062a', u'\u0627\u0644\u0623\u062d\u062f'] abbrDays=[u'\u0627\u0644\u0627\u062b\u0646\u064a\u0646', u'\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621', u'\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621', u'\u0627\u0644\u062e\u0645\u064a\u0633', u'\u0627\u0644\u062c\u0645\u0639\u0629', u'\u0627\u0644\u0633\u0628\u062a', u'\u0627\u0644\u0623\u062d\u062f'] dateFormats={'medium': '%d/%m/%Y', 'full': '%%(dayname)s, %d %%(monthname)s, %Y', 'long': '%d %%(monthname)s, %Y', 'short': '%d/%m/%Y'} numericSymbols={'group': u'\u066c', 'nativeZeroDigit': u'\u0660', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': u'\u066b', 'percentSign': u'\u066a', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'} PKA>n''turbogears/i18n/data/ar_YE.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd촉zzturbogears/i18n/data/be.pyc; ȸHIc @sHhdd<d?d@<dAdB<dCdD<dEdF<dGdHe~=}}turbogears/i18n/data/be_BY.pyc; ȸHIc @sHhdd<d?d@<dAdB<dCdD<dEdF<dGdH11turbogears/i18n/data/bg.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<ddd?<d@dA<dBdCx11turbogears/i18n/data/bg_BG.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<ddd?<d@dA<dBdC)mturbogears/i18n/data/bn.pyc; ȸHIc @sHhddS(?sbnuবাংলাsINu ভারতuজানুয়ারীuফেব্রুয়ারীuমার্চuএপ্রিলuমেu জুনuজুলাইuআগস্টuসেপ্টেম্বরuঅক্টোবরuনভেম্বরuডিসেম্বরuসোমবারuমঙ্গলবারuবুধবারu!বৃহষ্পতিবারuশুক্রবারuশনিবারuরবিবারu সোমuমঙ্গলu বুধuবৃহস্পতিuশুক্রu শনিu রবিsmediums%Y %%(abbrmonthname)s %d sfulls#%%(dayname)s, %Y %%(monthname)s %d slongs%Y %%(monthname)s %d sshorts%y/%m/%dsgroups,snativeZeroDigits0s exponentialsEsperMilleu‰snanu�sdecimals.s percentSigns%slists;s patternDigits#splusSigns+sinfinityu∞s minusSigns-N(s languagess countriessmonthss abbrMonthssdayssabbrDayss dateFormatssnumericSymbols(sabbrDayssnumericSymbolss countriessmonthssdayss abbrMonthss languagess dateFormats((s0build\bdist.win32\egg\turbogears\i18n\data\bn.pys?s***PKK9:ffturbogears/i18n/data/bn_IN.py# Formatting configuration for locale bn_IN languages={'bn': u'\u09ac\u09be\u0982\u09b2\u09be'} countries={'IN': u'\u09ad\u09be\u09b0\u09a4'} months=[u'\u099c\u09be\u09a8\u09c1\u09df\u09be\u09b0\u09c0', u'\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09df\u09be\u09b0\u09c0', u'\u09ae\u09be\u09b0\u09cd\u099a', u'\u098f\u09aa\u09cd\u09b0\u09bf\u09b2', u'\u09ae\u09c7', u'\u099c\u09c1\u09a8', u'\u099c\u09c1\u09b2\u09be\u0987', u'\u0986\u0997\u09b8\u09cd\u099f', u'\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0', u'\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0', u'\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0', u'\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0'] abbrMonths=[u'\u099c\u09be\u09a8\u09c1\u09df\u09be\u09b0\u09c0', u'\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09df\u09be\u09b0\u09c0', u'\u09ae\u09be\u09b0\u09cd\u099a', u'\u098f\u09aa\u09cd\u09b0\u09bf\u09b2', u'\u09ae\u09c7', u'\u099c\u09c1\u09a8', u'\u099c\u09c1\u09b2\u09be\u0987', u'\u0986\u0997\u09b8\u09cd\u099f', u'\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0', u'\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0', u'\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0', u'\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0'] days=[u'\u09b8\u09cb\u09ae\u09ac\u09be\u09b0', u'\u09ae\u0999\u09cd\u0997\u09b2\u09ac\u09be\u09b0', u'\u09ac\u09c1\u09a7\u09ac\u09be\u09b0', u'\u09ac\u09c3\u09b9\u09b7\u09cd\u09aa\u09a4\u09bf\u09ac\u09be\u09b0', u'\u09b6\u09c1\u0995\u09cd\u09b0\u09ac\u09be\u09b0', u'\u09b6\u09a8\u09bf\u09ac\u09be\u09b0', u'\u09b0\u09ac\u09bf\u09ac\u09be\u09b0'] abbrDays=[u'\u09b8\u09cb\u09ae', u'\u09ae\u0999\u09cd\u0997\u09b2', u'\u09ac\u09c1\u09a7', u'\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf', u'\u09b6\u09c1\u0995\u09cd\u09b0', u'\u09b6\u09a8\u09bf', u'\u09b0\u09ac\u09bf'] dateFormats={'medium': '%d-%m-%Y', 'full': '%%(dayname)s %d %%(monthname)s %Y', 'long': '%d %%(monthname)s %Y', 'short': '%d-%m-%y'} numericSymbols={'group': ',', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': '.', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'} PKA>K֮turbogears/i18n/data/bn_IN.pyc; ȸHIc @sHhddS(?sbnuবাংলাsINu ভারতuজানুয়ারীuফেব্রুয়ারীuমার্চuএপ্রিলuমেu জুনuজুলাইuআগস্টuসেপ্টেম্বরuঅক্টোবরuনভেম্বরuডিসেম্বরuসোমবারuমঙ্গলবারuবুধবারu!বৃহষ্পতিবারuশুক্রবারuশনিবারuরবিবারu সোমuমঙ্গলu বুধuবৃহস্পতিuশুক্রu শনিu রবিsmediums%d-%m-%Ysfulls!%%(dayname)s %d %%(monthname)s %Yslongs%d %%(monthname)s %Ysshorts%d-%m-%ysgroups,snativeZeroDigits0s exponentialsEsperMilleu‰snanu�sdecimals.s percentSigns%slists;s patternDigits#splusSigns+sinfinityu∞s minusSigns-N(s languagess countriessmonthss abbrMonthssdayssabbrDayss dateFormatssnumericSymbols(sabbrDayssnumericSymbolss countriessmonthssdayss abbrMonthss languagess dateFormats((s3build\bdist.win32\egg\turbogears\i18n\data\bn_IN.pys?s***PKK9Drturbogears/i18n/data/ca.py# Formatting configuration for locale ca languages={'gu': 'gujarati', 'gd': u'escoc\xe8s', 'ga': u'irland\xe8s', 'gn': u'guaran\xed', 'gl': 'gallec', 'la': u'llat\xed', 'ln': 'lingala', 'lo': u'laosi\xe0', 'tt': u't\xe0tar', 'tr': 'turc', 'ts': 'tsonga', 'lv': u'let\xf3', 'to': 'tonga', 'lt': u'litu\xe0', 'tk': 'turcman', 'th': 'thai', 'ti': 'tigrinya', 'tg': 'tadjik', 'te': 'telugu', 'ta': u't\xe0mil', 'yi': 'jiddish', 'yo': 'ioruba', 'de': 'alemany', 'da': u'dan\xe8s', 'dz': u'bhutan\xe8s', 'st': 'sotho', 'qu': u'qu\xe8txua', 'el': 'grec', 'eo': 'esperanto', 'en': u'angl\xe8s', 'zh': u'xin\xe9s', 'za': 'zhuang', 'uk': u'ucra\xefn\xe8s', 'eu': 'basc', 'et': u'estoni\xe0', 'es': 'espanyol', 'ru': 'rus', 'rw': 'kinyarwanda', 'rm': u'retorom\xe0nic', 'rn': 'kirundi', 'ro': u'roman\xe8s', 'bn': u'bengal\xed', 'be': u'bielor\xfas', 'bg': u'b\xfalgar', 'ba': 'baixkir', 'wo': u'w\xf2lof', 'jv': u'javan\xe8s', 'bo': u'tibet\xe0', 'bh': 'bihari', 'bi': 'bislama', 'br': u'bret\xf3', 'ja': u'japon\xe8s', 'om': 'oromo (afan)', 'oc': u'occit\xe0', 'tw': 'twi', 'or': 'oriya', 'xh': 'xosa', 'co': 'cors', 'ca': u'catal\xe0', 'cy': u'gal\xb7l\xe8s', 'cs': 'txec', 'ps': 'paixto', 'pt': u'portugu\xe8s', 'tl': u'tag\xe0log', 'pa': 'panjabi', 'vi': 'vietnamita', 'pl': u'polon\xe8s', 'hy': 'armeni', 'hr': 'croat', 'iu': 'inuktitut', 'hu': u'hongar\xe8s', 'hi': 'hindi', 'ha': 'hausa', 'he': 'hebreu', 'mg': 'malgaix', 'uz': 'uzbek', 'ml': 'malaialam', 'mo': 'moldau', 'mn': 'mongol', 'mi': 'maori', 'ik': 'inupiak', 'mk': 'macedoni', 'ur': u'urd\xfa', 'mt': u'malt\xe8s', 'ms': 'malai', 'mr': 'marathi', 'ug': 'uigur', 'my': u'birm\xe0', 'aa': u'\xe0far', 'ab': 'abkhaz', 'ss': 'siswati', 'af': 'afrikaans', 'tn': 'tswana', 'sw': 'swahili', 'is': u'island\xe8s', 'am': u'amh\xe0ric', 'it': u'itali\xe0', 'sv': 'suec', 'ia': 'interlingua', 'as': u'assam\xe8s', 'ar': u'\xe2rab', 'su': u'sundan\xe8s', 'zu': 'zulu', 'ay': 'aimara', 'az': u'\xe0zeri', 'ie': 'interlingue', 'id': 'indonesi', 'sk': 'eslovac', 'nl': u'neerland\xe8s', 'no': 'noruec', 'na': u'nauru\xe0', 'ne': u'nepal\xe8s', 'vo': 'volapuk', 'fr': u'franc\xe8s', 'sm': u'samo\xe0', 'fy': u'fris\xf3', 'fa': 'persa', 'fi': u'fin\xe8s', 'fj': u'fiji\xe0', 'sa': u's\xe0nscrit', 'fo': u'fero\xe8s', 'ka': u'georgi\xe0', 'kk': 'kazakh', 'sr': 'serbi', 'sq': u'alban\xe8s', 'ko': u'core\xe0', 'kn': 'kannada', 'km': u'cambodj\xe0', 'kl': u'greenland\xe8s', 'ks': 'caixmiri', 'si': u'sinhal\xe8s', 'sh': 'serbo-croat', 'so': 'somali', 'sn': 'shona', 'ku': 'kurd', 'sl': u'eslov\xe8', 'ky': u'kirgu\xeds', 'sg': 'sango', 'sd': 'sindhi'} countries={'BD': 'Bangla Desh', 'BE': u'B\xe8lgica', 'BF': 'Burkina Faso', 'BG': u'Bulg\xe0ria', 'BA': u'B\xf2snia i Hercegovina', 'BB': 'Barbados', 'BM': 'Bermudes', 'BN': 'Brunei', 'BO': u'Bol\xedvia', 'BH': 'Bahrain', 'BI': 'Burundi', 'BJ': 'Benin', 'BT': 'Bhutan', 'JM': 'Jamaica', 'BW': 'Botswana', 'BR': 'Brasil', 'BS': 'Bahames', 'BY': u'Bielor\xfassia', 'BZ': 'Belize', 'RU': u'R\xfassia', 'RW': 'Rwanda', 'TL': 'Timor', 'TM': 'Turkmenistan', 'TJ': 'Tadjikistan', 'RO': 'Romania', 'TK': 'Tokelau', 'GW': 'Guinea Bissau', 'GT': 'Guatemala', 'GR': u'Gr\xe8cia', 'GQ': 'Guinea Equatorial', 'GP': 'Guadeloupe', 'JP': u'Jap\xf3', 'GY': 'Guyana', 'GF': 'Guaiana Francesa', 'GE': u'Ge\xf2rgia', 'GB': 'Regne Unit', 'GA': 'Gabon', 'GN': 'Guinea', 'GM': u'G\xe0mbia', 'GH': 'Ghana', 'OM': 'Oman', 'TN': u'Tun\xedsia', 'JO': u'Jord\xe0nia', 'SP': u'S\xe8rbia', 'HR': u'Cro\xe0cia', 'HT': u'Hait\xed', 'HU': 'Hongria', 'HK': 'Hong Kong', 'HN': 'Hondures', 'VE': u'Vene\xe7uela', 'PR': 'Puerto Rico', 'PT': 'Portugal', 'PY': 'Paraguai', 'IQ': 'Iraq', 'PA': u'Panam\xe0', 'PF': u'Polin\xe8sia Francesa', 'PG': 'Papua Nova Guinea', 'PE': u'Per\xfa', 'PK': 'Pakistan', 'PH': 'Filipines', 'PL': u'Pol\xf2nia', 'ZM': u'Z\xe0mbia', 'EH': u'S\xe0hara Occidental', 'EE': u'Est\xf2nia', 'EG': 'Egipte', 'ZA': u'Sud-\xe0frica', 'EC': 'Equador', 'IT': u'It\xe0lia', 'VN': 'Vietnam', 'ET': u'Eti\xf2pia', 'SO': u'Som\xe0lia', 'ZW': 'Zimbabwe', 'ES': 'Espanya', 'ER': 'Eritrea', 'MD': u'Mold\xe0via', 'MG': 'Madagascar', 'MA': 'Marroc', 'MC': u'M\xf2naco', 'UZ': 'Uzbekistan', 'MM': 'Myanmar', 'ML': 'Mali', 'MN': u'Mong\xf2lia', 'MK': u'Maced\xf2nia', 'MU': 'Maurici', 'MT': 'Malta', 'MQ': 'Martinica', 'MS': 'Montserrat', 'MR': u'Maurit\xe0nia', 'UG': 'Uganda', 'MY': u'Mal\xe0isia', 'MX': u'M\xe8xic', 'IL': 'Israel', 'FR': u'Fran\xe7a', 'FI': u'Finl\xe0ndia', 'FJ': 'Fiji', 'FM': u'Micron\xe8sia', 'NI': 'Nicaragua', 'NL': u'Pa\xefsos Baixos', 'NO': 'Noruega', 'NA': u'Nam\xedbia', 'VU': 'Vanuatu', 'NC': u'Nova Caled\xf2nia', 'NE': u'N\xedger', 'NG': u'Nig\xe8ria', 'NZ': 'Nova Zelanda', 'NP': 'Nepal', 'NU': 'Niue', 'CI': "Costa d'Ivori", 'CH': 'Switzerland', 'CO': u'Col\xf2mbia', 'CN': 'Xina', 'CM': 'Camerun', 'CL': 'Xile', 'CA': u'Canad\xe0', 'CG': 'Congo', 'CF': u'Rep\xfablica Centrafricana', 'CZ': u'Rep\xfablica Txeca', 'CY': 'Xipre', 'CR': 'Costa Rica', 'CV': 'Cap Verd', 'CU': 'Cuba', 'SZ': u'Swazil\xe0ndia', 'SY': u'S\xedria', 'KG': 'Kirgizistan', 'KE': 'Kenya', 'SR': 'Surinam', 'KI': 'Kiribati', 'KH': 'Cambodja', 'SV': 'El Salvador', 'KM': 'Comores', 'SK': u'Eslov\xe0quia', 'KR': 'Corea del Sud', 'SI': u'Eslov\xe8nia', 'KP': 'Corea del Nord', 'KW': 'Kuwait', 'SN': 'Senegal', 'SL': 'Sierra Leone', 'SC': 'Seychelles', 'KZ': 'Kazakhstan', 'SA': u'Ar\xe0bia Saud\xed', 'SG': 'Singapur', 'SE': u'Su\xe8cia', 'SD': 'Sudan', 'DO': u'Rep\xfablica Dominicana', 'DM': 'Dominica', 'DJ': 'Djibouti', 'DK': 'Dinamarca', 'VG': u'Illes Verges Brit\xe0niques', 'DE': 'Alemanya', 'YE': 'Iemen', 'DZ': u'Alg\xe8ria', 'US': 'Estats Units', 'UY': 'Uruguai', 'YU': u'Iugosl\xe0via', 'YT': 'Mayotte', 'LB': u'L\xedban', 'LA': 'Laos', 'TW': 'Taiwan', 'TT': 'Trinitat i Tobago', 'TR': 'Turquia', 'LK': 'Sri Lanka', 'LI': 'Liechtenstein', 'LV': u'Let\xf2nia', 'TO': 'Tonga', 'LT': u'Litu\xe0nia', 'LU': 'Luxemburg', 'LR': u'Lib\xe8ria', 'LS': 'Lesotho', 'TH': u'Tail\xe0ndia', 'TF': 'Territoris Meridionals Francesos', 'TG': 'Togo', 'TD': 'Txad', 'LY': u'L\xedbia', 'VA': u'Vatic\xe0', 'AE': u'Uni\xf3 dels Emirats \xc0rabs', 'AD': 'Andorra', 'AF': 'Afganistan', 'AI': 'Anguilla', 'VI': 'Illes Verges dels USA', 'IS': u'Isl\xe0ndia', 'IR': 'Iran', 'AM': u'Arm\xe8nia', 'AL': u'Alb\xe0nia', 'AO': 'Angola', 'AN': 'Antilles Holandeses', 'AR': 'Argentina', 'AU': u'Austr\xe0lia', 'AT': u'\xc2ustria', 'AW': 'Aruba', 'IN': u'\xcdndia', 'TZ': u'Tanz\xe0nia', 'AZ': 'Azerbaidjan', 'IE': 'Irlanda', 'ID': u'Indon\xe8sia', 'UA': u'Ucra\xefna', 'QA': 'Qatar', 'MZ': u'Mo\xe7ambic'} months=['gener', 'febrer', u'mar\xe7', 'abril', 'maig', 'juny', 'juliol', 'agost', 'setembre', 'octubre', 'novembre', 'desembre'] abbrMonths=['gen.', 'feb.', u'mar\xe7', 'abr.', 'maig', 'juny', 'jul.', 'ag.', 'set.', 'oct.', 'nov.', 'des.'] days=['dilluns', 'dimarts', 'dimecres', 'dijous', 'divendres', 'dissabte', 'diumenge'] abbrDays=['dl.', 'dt.', 'dc.', 'dj.', 'dv.', 'ds.', 'dg.'] dateFormats={'medium': '%d/%m/%Y', 'full': '%%(dayname)s %d %%(monthname)s %Y', 'long': '%d %%(monthname)s %Y', 'short': '%d/%m/%y'} numericSymbols={'group': '.', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': ',', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'} PKA>ab8++turbogears/i18n/data/ca.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddT++turbogears/i18n/data/ca_ES.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd4I44turbogears/i18n/data/cs.pyc; ȸHIc @shdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDd:<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dda(44turbogears/i18n/data/cs_CZ.pyc; ȸHIc @shdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDd:<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddЁd))turbogears/i18n/data/da.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdwd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMd#<dNdO<dPdQ<dRdS<dTdU<dVdW0&))turbogears/i18n/data/da_DK.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdwd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMd#<dNdO<dPdQ<dRdS<dTdU<dVdW"mf44turbogears/i18n/data/de.pyc; ȸHIc @shdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPd<<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdEXK44turbogears/i18n/data/de_AT.pyc; ȸHIc @shdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPd<<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE(<44turbogears/i18n/data/de_BE.pyc; ȸHIc @shdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPd<<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE[turbogears/i18n/data/de_CH.pyc; ȸHIc @shdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<ddd?d@dAg ZdBdCdDdEd:dFdGdHdIdJdKdLg ZdMdNdOdPdQdRdSgZdTdUdVdWdXdYdZgZhd[d\<d]d^<d_d`<dadbaʭ44turbogears/i18n/data/de_DE.pyc; ȸHIc @shdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPd<<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdEJo44turbogears/i18n/data/de_LU.pyc; ȸHIc @shdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPd<<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE833turbogears/i18n/data/el.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdCd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!d?d@gZdAdBdCdDdEdFdGgZhdHdI<dJdK<dLdM<dNdOTk33turbogears/i18n/data/el_GR.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdCd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!d?d@gZdAdBdCdDdEdFdGgZhdHdI<dJdK<dLdM<dNdOLZZturbogears/i18n/data/en.pyc; ȸHIc @s#hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd~***PKK9@u4::turbogears/i18n/data/en_AU.py# Formatting configuration for locale en_AU languages={'gv': 'Manx', 'gu': 'Gujarati', 'rom': 'Romany', 'alg': 'Algonquian Languages', 'ale': 'Aleut', 'sco': 'Scots', 'mni': 'Manipuri', 'gd': 'Scottish Gaelic', 'ga': 'Irish', 'mno': 'Manobo Languages', 'osa': 'Osage', 'gn': 'Guarani', 'gl': 'Gallegan', 'mwr': 'Marwari', 'ty': 'Tahitian', 'tw': 'Twi', 'tt': 'Tatar', 'tr': 'Turkish', 'ts': 'Tsonga', 'tn': 'Tswana', 'to': 'Tonga (Tonga Islands)', 'aus': 'Australian Languages', 'av': 'Avaric', 'tk': 'Turkmen', 'th': 'Thai', 'roa': 'Romance (Other)', 'tg': 'Tajik', 'te': 'Telugu', 'uga': 'Ugaritic', 'ta': 'Tamil', 'fat': 'Fanti', 'fan': 'Fang', 'wo': 'Wolof', 'rm': 'Rhaeto-Romance', 'din': 'Dinka', 'bla': 'Siksika', 'cmc': 'Chamic Languages', 'ml': 'Malayalam', 'zh': 'Chinese', 'tem': 'Timne', 'za': 'Zhuang', 'cau': 'Caucasian (Other)', 'zu': 'Zulu', 'ter': 'Tereno', 'tet': 'Tetum', 'mnc': 'Manchu', 'kut': 'Kutenai', 'suk': 'Sukuma', 'kum': 'Kumyk', 'sus': 'Susu', 'new': 'Newari', 'sux': 'Sumerian', 'den': 'Slave', 'men': 'Mende', 'mul': 'Multiple Languages', 'lez': 'Lezghian', 'root': 'Root', 'eka': 'Ekajuk', 'akk': 'Akkadian', 'dra': 'Dravidian (Other)', 'jrb': 'Judeo-Arabic', 'sgn': 'Sign Languages', 'sga': 'Irish, Old (to 900)', 'apa': 'Apache Languages', 'bra': 'Braj', 'chb': 'Chibcha', 'chg': 'Chagatai', 'chk': 'Chuukese', 'chm': 'Mari', 'chn': 'Chinook Jargon', 'cho': 'Choctaw', 'chp': 'Chipewyan', 'chr': 'Cherokee', 'chy': 'Cheyenne', 'ti': 'Tigrinya', 'vot': 'Votic', 'mg': 'Malagasy', 'iba': 'Iban', 'mo': 'Moldavian', 'mn': 'Mongolian', 'mi': 'Maori', 'mh': 'Marshallese', 'mk': 'Macedonian', 'mt': 'Maltese', 'cai': 'Central American Indian (Other)', 'del': 'Delaware', 'ms': 'Malay', 'mr': 'Marathi', 'my': 'Burmese', 'cad': 'Caddo', 'tai': 'Tai (Other)', 'afh': 'Afrihili', 'sit': 'Sino-Tibetan (Other)', 'enm': 'English, Middle (1100-1500)', 'csb': 'Kashubian', 'nyn': 'Nyankole', 'nyo': 'Nyoro', 'nym': 'Nyamwezi', 'sio': 'Siouan Languages', 'map': 'Austronesian', 'mas': 'Masai', 'lah': 'Lahnda', 'lad': 'Ladino', 'fy': 'Frisian', 'snk': 'Soninke', 'fa': 'Persian', 'mad': 'Madurese', 'mag': 'Magahi', 'mai': 'Maithili', 'fi': 'Finnish', 'fj': 'Fijian', 'man': 'Mandingo', 'egy': 'Egyptian (Ancient)', 'znd': 'Zande', 'ss': 'Swati', 'sr': 'Serbian', 'sq': 'Albanian', 'sw': 'Swahili', 'sv': 'Swedish', 'su': 'Sundanese', 'st': 'Sotho, Southern', 'sk': 'Slovak', 'si': 'Sinhalese', 'sh': 'Serbo-Croatian', 'so': 'Somali', 'sn': 'Shona', 'sm': 'Samoan', 'sl': 'Slovenian', 'sc': 'Sardinian', 'sa': 'Sanskrit', 'sg': 'Sango', 'se': 'Northern Sami', 'sd': 'Sindhi', 'zen': 'Zenaga', 'kbd': 'Kabardian', 'afa': 'Afro-Asiatic (Other)', 'lg': 'Ganda', 'lb': 'Luxembourgish', 'fiu': 'Finno - Ugrian (Other)', 'ln': 'Lingala', 'lo': 'Lao', 'li': 'Limburgish', 'byn': 'Blin', 'lt': 'Lithuanian', 'lu': 'Luba-Katanga', 'yi': 'Yiddish', 'non': 'Norse, Old', 'ceb': 'Cebuano', 'yo': 'Yoruba', 'nog': 'Nogai', 'bat': 'Baltic (Other)', 'dak': 'Dakota', 'dar': 'Dargwa', 'day': 'Dayak', 'ssa': 'Nilo-Saharam (Other)', 'kpe': 'Kpelle', 'el': 'Greek', 'eo': 'Esperanto', 'en': 'English', 'lam': 'Lamba', 'ee': 'Ewe', 'mdf': 'Moksha', 'fr': 'French', 'mdr': 'Mandar', 'et': 'Estonian', 'es': 'Spanish', 'ru': 'Russian', 'gon': 'Gondi', 'goh': 'German, Old High (ca.750-1050)', 'sms': 'Skolt Sami', 'smn': 'Inari Sami', 'smj': 'Lule Sami', 'smi': 'Sami languages (Other)', 'got': 'Gothic', 'rn': 'Rundi', 'ro': 'Romanian', 'dsb': 'Lower Sorbian', 'sma': 'Southern Sami', 'gor': 'Gorontalo', 'ast': 'Asturian', 'wal': 'Walamo', 'crh': 'Crimean Turkish; Crimean Tatar', 'ath': 'Athapascan Languages', 'gez': 'Geez', 'xh': 'Xhosa', 'ff': 'Fulah', 'mak': 'Makasar', 'zap': 'Zapotec', 'kok': 'Konkani', 'kos': 'Kosraean', 'fo': 'Faroese', 'tog': 'Tonga (Nyasa)', 'hup': 'Hupa', 'udm': 'Udmurt', 'bej': 'Beja', 'bem': 'Bemba', 'tsi': 'Tsimshian', 'ber': 'Berber', 'nzi': 'Nzima', 'sai': 'South American Indian (Other)', 'ang': 'English, Old (ca.450-1100)', 'pra': 'Prakrit Languages', 'bho': 'Bhojpuri', 'sal': 'Salishan languages', 'pro': u'Proven\xe7al, Old (to 1500)', 'raj': 'Rajasthani', 'sad': 'Sandawe', 'rar': 'Rarotongan', 'rap': 'Rapanui', 'sas': 'Sasak', 'car': 'Carib', 'min': 'Minangkabau', 'mic': 'Micmac', 'efi': 'Efik', 'arn': 'Araucanian', 'ypk': 'Yupik Languages', 'mis': 'Miscellaneous Languages', 'kac': 'Kachin', 'kab': 'Kabyle', 'kaa': 'Kara-Kalpak', 'kam': 'Kamba', 'kar': 'Karen', 'kaw': 'Kawi', 'tyv': 'Tuvinian', 'awa': 'Awadhi', 'ka': 'Georgian', 'doi': 'Dogri', 'kg': 'Kongo', 'kk': 'Kazakh', 'kj': 'Kuanyama', 'ki': 'Kikuyu', 'ko': 'Korean', 'kn': 'Kannada', 'km': 'Khmer', 'kl': 'Kalaallisut', 'ks': 'Kashmiri', 'kr': 'Kanuri', 'kw': 'Cornish', 'kv': 'Komi', 'ku': 'Kurdish', 'ky': 'Kirghiz', 'tkl': 'Tokelau', 'bua': 'Buriat', 'mga': 'Irish, Middle (900-1200)', 'hit': 'Hittite', 'dyu': 'Dyula', 'de': 'German', 'da': 'Danish', 'dz': 'Dzongkha', 'ira': 'Iranian', 'dv': 'Divehi', 'hil': 'Hiligaynon', 'him': 'Himachali', 'gem': 'Germanic (Other)', 'crp': 'Creoles and Pidgins (Other)', 'qu': 'Quechua', 'bas': 'Basa', 'gba': 'Gbaya', 'bad': 'Banda', 'ban': 'Balinese', 'bal': 'Baluchi', 'bam': 'Bambara', 'shn': 'Shan', 'bai': 'Bamileke Languages', 'arp': 'Arapaho', 'art': 'Artificial (Other)', 'arw': 'Arawak', 'arc': 'Aramaic', 'sem': 'Semitic (Other)', 'sel': 'Selkup', 'nub': 'Nubian Languages', 'btk': 'Batak', 'lus': 'Lushai', 'mus': 'Creek', 'lua': 'Luba-Lulua', 'iro': 'Iroquoian languages', 'lui': 'Luiseno', 'mun': 'Munda Languages', 'lun': 'Lunda', 'luo': 'Luo', 'wa': 'Walloon', 'tup': 'Tupi languages', 'jv': 'Javanese', 'tut': 'Altaic (Other)', 'tum': 'Tumbuka', 'ja': 'Japanese', 'cop': 'Coptic', 'ilo': 'Iloko', 'la': 'Latin', 'gwi': "Gwich'in", 'und': 'Undetermined', 'tli': 'Tlingit', 'ch': 'Chamorro', 'co': 'Corsican', 'ca': 'Catalan', 'ce': 'Chechen', 'pon': 'Pohnpeian', 'cy': 'Welsh', 'sah': 'Yakut', 'cs': 'Czech', 'cr': 'Cree', 'bnt': 'Bantu', 'cv': 'Chuvash', 'cu': 'Church Slavic', 'lv': 'Latvian', 'dum': 'Dutch, Middle (ca. 1050-1350)', 'pt': 'Portuguese', 'dua': 'Duala', 'fro': 'French, Old (842-ca.1400)', 'yap': 'Yapese', 'frm': 'French, Middle (ca.1400-1600)', 'tiv': 'Tiv', 'yao': 'Yao', 'pa': 'Punjabi', 'xal': 'Kalmyk', 'pi': 'Pali', 'pl': 'Polish', 'gay': 'Gayo', 'oto': 'Otomian Languages', 'ota': 'Turkish, Ottoman (1500-1928)', 'hmn': 'Hmong', 'an': 'Aragonese', 'gaa': 'Ga', 'fur': 'Friulian', 'khi': 'Khoisan (Other)', 'sla': 'Slavic (Other)', 've': 'Venda', 'vi': 'Vietnamese', 'is': 'Icelandic', 'kho': 'Khotanese', 'iu': 'Inuktitut', 'it': 'Italian', 'vo': u'Volap\xfck', 'ii': 'Sichuan Yi', 'ik': 'Inupiaq', 'io': 'Ido', 'ine': 'Indo-European (Other)', 'ia': 'Interlingua', 'jpr': 'Judeo-Persian', 'ie': 'Interlingue', 'id': 'Indonesian', 'ig': 'Igbo', 'pap': 'Papiamento', 'ewo': 'Ewondo', 'pau': 'Palauan', 'paa': 'Papuan (Other)', 'pag': 'Pangasinan', 'sat': 'Santali', 'pal': 'Pahlavi', 'pam': 'Pampanga', 'phi': 'Philippine (Other)', 'cel': 'Celtic (Other)', 'phn': 'Phoenician', 'nic': 'Niger - Kordofanian (Other)', 'nia': 'Nias', 'dgr': 'Dogrib', 'syr': 'Syriac', 'niu': 'Niuean', 'jbo': 'Lojban', 'nah': 'Nahuatl', 'sam': 'Samaritan Aramaic', 'hai': 'Haida', 'gmh': 'German, Middle High (ca.1050-1500)', 'cus': 'Cushitic (Other)', 'wen': 'Sorbian Languages', 'ady': 'Adyghe', 'elx': 'Elamite', 'ada': 'Adangme', 'haw': 'Hawaiian', 'bin': 'Bini', 'bik': 'Bikol', 'mos': 'Mossi', 'moh': 'Mohawk', 'tl': 'Tagalog', 'tvl': 'Tuvalu', 'ijo': 'Ijo', 'kmb': 'Kimbundu', 'peo': 'Persian Old (ca.600-400 B.C.)', 'umb': 'Umbundu', 'tmh': 'Tamashek', 'fon': 'Fon', 'hsb': 'Upper Sorbian', 'be': 'Belarusian', 'bg': 'Bulgarian', 'ba': 'Bashkir', 'ps': 'Pashto (Pushto)', 'bm': 'Bambara', 'bn': 'Bengali', 'bo': 'Tibetan', 'bh': 'Bihari', 'bi': 'Bislama', 'br': 'Breton', 'bs': 'Bosnian', 'om': 'Oromo', 'oj': 'Ojibwa', 'ace': 'Achinese', 'ach': 'Acoli', 'oc': u'Occitan (post 1500); Proven\xe7al', 'kru': 'Kurukh', 'srr': 'Serer', 'kro': 'Kru', 'krc': 'Karachay-Balkar', 'nds': 'Low German; Low Saxon', 'os': 'Ossetic', 'or': 'Oriya', 'sog': 'Sogdien', 'nso': 'Sotho, Northern', 'son': 'Songhai', 'vai': 'Vai', 'wak': 'Wakashan Languages', 'lol': 'Mongo', 'mkh': 'Mon-Khmer (Other)', 'loz': 'Lozi', 'gil': 'Gilbertese', 'was': 'Washo', 'war': 'Waray', 'hz': 'Herero', 'hy': 'Armenian', 'sid': 'Sidamo', 'hr': 'Croatian', 'ht': 'Haitian', 'hu': 'Hungarian', 'hi': 'Hindi', 'ho': 'Hiri Motu', 'ha': 'Hausa', 'bug': 'Buginese', 'he': 'Hebrew', 'uz': 'Uzbek', 'ur': 'Urdu', 'uk': 'Ukrainian', 'ug': 'Uighur', 'aa': 'Afar', 'ab': 'Abkhazian', 'ae': 'Avestan', 'af': 'Afrikaans', 'ak': 'Akan', 'am': 'Amharic', 'myv': 'Erzya', 'eu': 'Basque', 'as': 'Assamese', 'ar': 'Arabic', 'inh': 'Ingush', 'tpi': 'Tok Pisin', 'myn': 'Mayan', 'ay': 'Aymara', 'kha': 'Khasi', 'az': 'Azerbaijani', 'inc': 'Indic (Other)', 'nl': 'Dutch', 'nn': 'Norwegian Nynorsk', 'no': 'Norwegian', 'na': 'Nauru', 'nb': u'Norwegian Bokm\xe5l', 'nai': 'North American Indian (Other)', 'nd': 'Ndebele, North', 'ne': 'Nepali', 'ng': 'Ndonga', 'ny': 'Nyanja; Chichewa; Chewa', 'nap': 'Neapolitan', 'grb': 'Gerbo', 'grc': 'Greek, Ancient (to 1453)', 'nr': 'Ndebele, South', 'tig': 'Tigre', 'nv': 'Navajo', 'zun': 'Zuni', 'rw': 'Kinyarwanda', 'cpe': 'Creoles and Pidgins, English-based (Other)', 'cpf': 'Creoles and Pidgins, French-based (Other)', 'cpp': 'Creoles and pidgins, Portuguese-based (Other)'} countries={'BD': 'Bangladesh', 'BE': 'Belgium', 'BF': 'Burkina Faso', 'BG': 'Bulgaria', 'BA': 'Bosnia and Herzegovina', 'BB': 'Barbados', 'WF': 'Wallis and Futuna', 'BM': 'Bermuda', 'BN': 'Brunei', 'BO': 'Bolivia', 'BH': 'Bahrain', 'BI': 'Burundi', 'BJ': 'Benin', 'BT': 'Bhutan', 'JM': 'Jamaica', 'BV': 'Bouvet Island', 'BW': 'Botswana', 'WS': 'Samoa', 'BR': 'Brazil', 'BS': 'Bahamas', 'BY': 'Belarus', 'BZ': 'Belize', 'RU': 'Russia', 'RW': 'Rwanda', 'TL': 'Timor-Leste', 'RE': u'R\xe9union', 'TM': 'Turkmenistan', 'TJ': 'Tajikistan', 'RO': 'Romania', 'TK': 'Tokelau', 'GW': 'Guinea-Bissau', 'GU': 'Guam', 'GT': 'Guatemala', 'GS': 'South Georgia and South Sandwich Islands', 'GR': 'Greece', 'GQ': 'Equatorial Guinea', 'GP': 'Guadeloupe', 'JP': 'Japan', 'GY': 'Guyana', 'GF': 'French Guiana', 'GE': 'Georgia', 'GD': 'Grenada', 'GB': 'United Kingdom', 'GA': 'Gabon', 'SV': 'El Salvador', 'GN': 'Guinea', 'GM': 'Gambia', 'GL': 'Greenland', 'GI': 'Gibraltar', 'GH': 'Ghana', 'OM': 'Oman', 'TN': 'Tunisia', 'JO': 'Jordan', 'SP': 'Serbia', 'HR': 'Croatia', 'HT': 'Haiti', 'HU': 'Hungary', 'HK': 'Hong Kong S.A.R., China', 'HN': 'Honduras', 'HM': 'Heard Island and McDonald Islands', 'VE': 'Venezuela', 'PR': 'Puerto Rico', 'PS': 'Palestinian Territory', 'PW': 'Palau', 'PT': 'Portugal', 'SJ': 'Svalbard and Jan Mayen', 'PY': 'Paraguay', 'IQ': 'Iraq', 'PA': 'Panama', 'PF': 'French Polynesia', 'PG': 'Papua New Guinea', 'PE': 'Peru', 'PK': 'Pakistan', 'PH': 'Philippines', 'PN': 'Pitcairn', 'PL': 'Poland', 'PM': 'Saint Pierre and Miquelon', 'ZM': 'Zambia', 'EH': 'Western Sahara', 'EE': 'Estonia', 'EG': 'Egypt', 'ZA': 'South Africa', 'EC': 'Ecuador', 'IT': 'Italy', 'VN': 'Vietnam', 'SB': 'Solomon Islands', 'ET': 'Ethiopia', 'SO': 'Somalia', 'ZW': 'Zimbabwe', 'SA': 'Saudi Arabia', 'ES': 'Spain', 'ER': 'Eritrea', 'MD': 'Moldova', 'MG': 'Madagascar', 'MA': 'Morocco', 'MC': 'Monaco', 'UZ': 'Uzbekistan', 'MM': 'Myanmar', 'ML': 'Mali', 'MO': 'Macao S.A.R. China', 'MN': 'Mongolia', 'MH': 'Marshall Islands', 'MK': 'Macedonia', 'MU': 'Mauritius', 'MT': 'Malta', 'MW': 'Malawi', 'MV': 'Maldives', 'MQ': 'Martinique', 'MP': 'Northern Mariana Islands', 'MS': 'Montserrat', 'MR': 'Mauritania', 'UG': 'Uganda', 'MY': 'Malaysia', 'MX': 'Mexico', 'IL': 'Israel', 'FR': 'France', 'IO': 'British Indian Ocean Territory', 'SH': 'Saint Helena', 'FI': 'Finland', 'FJ': 'Fiji', 'FK': 'Falkland Islands', 'FM': 'Micronesia', 'FO': 'Faroe Islands', 'NI': 'Nicaragua', 'NL': 'Netherlands', 'NO': 'Norway', 'NA': 'Namibia', 'VU': 'Vanuatu', 'NC': 'New Caledonia', 'NE': 'Niger', 'NF': 'Norfolk Island', 'NG': 'Nigeria', 'NZ': 'New Zealand', 'NP': 'Nepal', 'NR': 'Nauru', 'NU': 'Niue', 'CK': 'Cook Islands', 'CI': u"C\xf4te d'Ivoire", 'CH': 'Switzerland', 'CO': 'Colombia', 'CN': 'China', 'CM': 'Cameroon', 'CL': 'Chile', 'CC': 'Cocos Islands', 'CA': 'Canada', 'CG': 'Congo', 'CF': 'Central African Republic', 'CD': 'Democratic Republic of the Congo', 'CZ': 'Czech Republic', 'CY': 'Cyprus', 'CX': 'Christmas Island', 'CR': 'Costa Rica', 'CV': 'Cape Verde', 'CU': 'Cuba', 'SZ': 'Swaziland', 'SY': 'Syria', 'KG': 'Kyrgyzstan', 'KE': 'Kenya', 'SR': 'Suriname', 'KI': 'Kiribati', 'KH': 'Cambodia', 'KN': 'Saint Kitts and Nevis', 'KM': 'Comoros', 'ST': 'Sao Tome and Principe', 'SK': 'Slovakia', 'KR': 'South Korea', 'SI': 'Slovenia', 'KP': 'North Korea', 'KW': 'Kuwait', 'SN': 'Senegal', 'SM': 'San Marino', 'SL': 'Sierra Leone', 'SC': 'Seychelles', 'KZ': 'Kazakhstan', 'KY': 'Cayman Islands', 'SG': 'Singapore', 'SE': 'Sweden', 'SD': 'Sudan', 'DO': 'Dominican Republic', 'DM': 'Dominica', 'DJ': 'Djibouti', 'DK': 'Denmark', 'VG': 'British Virgin Islands', 'DE': 'Germany', 'YE': 'Yemen', 'DZ': 'Algeria', 'US': 'United States', 'UY': 'Uruguay', 'YU': 'Yugoslavia', 'YT': 'Mayotte', 'UM': 'United States Minor Outlying Islands', 'LB': 'Lebanon', 'LC': 'Saint Lucia', 'LA': 'Laos', 'TV': 'Tuvalu', 'TW': 'Taiwan', 'TT': 'Trinidad and Tobago', 'TR': 'Turkey', 'LK': 'Sri Lanka', 'LI': 'Liechtenstein', 'LV': 'Latvia', 'TO': 'Tonga', 'LT': 'Lithuania', 'LU': 'Luxembourg', 'LR': 'Liberia', 'LS': 'Lesotho', 'TH': 'Thailand', 'TF': 'French Southern Territories', 'TG': 'Togo', 'TD': 'Chad', 'TC': 'Turks and Caicos Islands', 'LY': 'Libya', 'VA': 'Vatican', 'VC': 'Saint Vincent and the Grenadines', 'AE': 'United Arab Emirates', 'AD': 'Andorra', 'AG': 'Antigua and Barbuda', 'AF': 'Afghanistan', 'AI': 'Anguilla', 'VI': 'U.S. Virgin Islands', 'IS': 'Iceland', 'IR': 'Iran', 'AM': 'Armenia', 'AL': 'Albania', 'AO': 'Angola', 'AN': 'Netherlands Antilles', 'AQ': 'Antarctica', 'AS': 'American Samoa', 'AR': 'Argentina', 'AU': 'Australia', 'AT': 'Austria', 'AW': 'Aruba', 'IN': 'India', 'TZ': 'Tanzania', 'AZ': 'Azerbaijan', 'IE': 'Ireland', 'ID': 'Indonesia', 'UA': 'Ukraine', 'QA': 'Qatar', 'MZ': 'Mozambique'} months=['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] abbrMonths=['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] days=['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'] abbrDays=['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] dateFormats={'medium': '%d/%m/%Y', 'full': '%%(dayname)s, %d %%(monthname)s %Y', 'long': '%d %%(monthname)s %Y', 'short': '%d/%m/%y'} numericSymbols={'group': ',', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': '.', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'} PKA>q41ZZturbogears/i18n/data/en_AU.pyc; ȸHIc @s#hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd~***PKK9bC:C:turbogears/i18n/data/en_BE.py# Formatting configuration for locale en_BE languages={'gv': 'Manx', 'gu': 'Gujarati', 'rom': 'Romany', 'alg': 'Algonquian Languages', 'ale': 'Aleut', 'sco': 'Scots', 'mni': 'Manipuri', 'gd': 'Scottish Gaelic', 'ga': 'Irish', 'mno': 'Manobo Languages', 'osa': 'Osage', 'gn': 'Guarani', 'gl': 'Gallegan', 'mwr': 'Marwari', 'ty': 'Tahitian', 'tw': 'Twi', 'tt': 'Tatar', 'tr': 'Turkish', 'ts': 'Tsonga', 'tn': 'Tswana', 'to': 'Tonga (Tonga Islands)', 'aus': 'Australian Languages', 'av': 'Avaric', 'tk': 'Turkmen', 'th': 'Thai', 'roa': 'Romance (Other)', 'tg': 'Tajik', 'te': 'Telugu', 'uga': 'Ugaritic', 'ta': 'Tamil', 'fat': 'Fanti', 'fan': 'Fang', 'wo': 'Wolof', 'rm': 'Rhaeto-Romance', 'din': 'Dinka', 'bla': 'Siksika', 'cmc': 'Chamic Languages', 'ml': 'Malayalam', 'zh': 'Chinese', 'tem': 'Timne', 'za': 'Zhuang', 'cau': 'Caucasian (Other)', 'zu': 'Zulu', 'ter': 'Tereno', 'tet': 'Tetum', 'mnc': 'Manchu', 'kut': 'Kutenai', 'suk': 'Sukuma', 'kum': 'Kumyk', 'sus': 'Susu', 'new': 'Newari', 'sux': 'Sumerian', 'den': 'Slave', 'men': 'Mende', 'mul': 'Multiple Languages', 'lez': 'Lezghian', 'root': 'Root', 'eka': 'Ekajuk', 'akk': 'Akkadian', 'dra': 'Dravidian (Other)', 'jrb': 'Judeo-Arabic', 'sgn': 'Sign Languages', 'sga': 'Irish, Old (to 900)', 'apa': 'Apache Languages', 'bra': 'Braj', 'chb': 'Chibcha', 'chg': 'Chagatai', 'chk': 'Chuukese', 'chm': 'Mari', 'chn': 'Chinook Jargon', 'cho': 'Choctaw', 'chp': 'Chipewyan', 'chr': 'Cherokee', 'chy': 'Cheyenne', 'ti': 'Tigrinya', 'vot': 'Votic', 'mg': 'Malagasy', 'iba': 'Iban', 'mo': 'Moldavian', 'mn': 'Mongolian', 'mi': 'Maori', 'mh': 'Marshallese', 'mk': 'Macedonian', 'mt': 'Maltese', 'cai': 'Central American Indian (Other)', 'del': 'Delaware', 'ms': 'Malay', 'mr': 'Marathi', 'my': 'Burmese', 'cad': 'Caddo', 'tai': 'Tai (Other)', 'afh': 'Afrihili', 'sit': 'Sino-Tibetan (Other)', 'enm': 'English, Middle (1100-1500)', 'csb': 'Kashubian', 'nyn': 'Nyankole', 'nyo': 'Nyoro', 'nym': 'Nyamwezi', 'sio': 'Siouan Languages', 'map': 'Austronesian', 'mas': 'Masai', 'lah': 'Lahnda', 'lad': 'Ladino', 'fy': 'Frisian', 'snk': 'Soninke', 'fa': 'Persian', 'mad': 'Madurese', 'mag': 'Magahi', 'mai': 'Maithili', 'fi': 'Finnish', 'fj': 'Fijian', 'man': 'Mandingo', 'egy': 'Egyptian (Ancient)', 'znd': 'Zande', 'ss': 'Swati', 'sr': 'Serbian', 'sq': 'Albanian', 'sw': 'Swahili', 'sv': 'Swedish', 'su': 'Sundanese', 'st': 'Sotho, Southern', 'sk': 'Slovak', 'si': 'Sinhalese', 'sh': 'Serbo-Croatian', 'so': 'Somali', 'sn': 'Shona', 'sm': 'Samoan', 'sl': 'Slovenian', 'sc': 'Sardinian', 'sa': 'Sanskrit', 'sg': 'Sango', 'se': 'Northern Sami', 'sd': 'Sindhi', 'zen': 'Zenaga', 'kbd': 'Kabardian', 'afa': 'Afro-Asiatic (Other)', 'lg': 'Ganda', 'lb': 'Luxembourgish', 'fiu': 'Finno - Ugrian (Other)', 'ln': 'Lingala', 'lo': 'Lao', 'li': 'Limburgish', 'byn': 'Blin', 'lt': 'Lithuanian', 'lu': 'Luba-Katanga', 'yi': 'Yiddish', 'non': 'Norse, Old', 'ceb': 'Cebuano', 'yo': 'Yoruba', 'nog': 'Nogai', 'bat': 'Baltic (Other)', 'dak': 'Dakota', 'dar': 'Dargwa', 'day': 'Dayak', 'ssa': 'Nilo-Saharam (Other)', 'kpe': 'Kpelle', 'el': 'Greek', 'eo': 'Esperanto', 'en': 'English', 'lam': 'Lamba', 'ee': 'Ewe', 'mdf': 'Moksha', 'fr': 'French', 'mdr': 'Mandar', 'et': 'Estonian', 'es': 'Spanish', 'ru': 'Russian', 'gon': 'Gondi', 'goh': 'German, Old High (ca.750-1050)', 'sms': 'Skolt Sami', 'smn': 'Inari Sami', 'smj': 'Lule Sami', 'smi': 'Sami languages (Other)', 'got': 'Gothic', 'rn': 'Rundi', 'ro': 'Romanian', 'dsb': 'Lower Sorbian', 'sma': 'Southern Sami', 'gor': 'Gorontalo', 'ast': 'Asturian', 'wal': 'Walamo', 'crh': 'Crimean Turkish; Crimean Tatar', 'ath': 'Athapascan Languages', 'gez': 'Geez', 'xh': 'Xhosa', 'ff': 'Fulah', 'mak': 'Makasar', 'zap': 'Zapotec', 'kok': 'Konkani', 'kos': 'Kosraean', 'fo': 'Faroese', 'tog': 'Tonga (Nyasa)', 'hup': 'Hupa', 'udm': 'Udmurt', 'bej': 'Beja', 'bem': 'Bemba', 'tsi': 'Tsimshian', 'ber': 'Berber', 'nzi': 'Nzima', 'sai': 'South American Indian (Other)', 'ang': 'English, Old (ca.450-1100)', 'pra': 'Prakrit Languages', 'bho': 'Bhojpuri', 'sal': 'Salishan languages', 'pro': u'Proven\xe7al, Old (to 1500)', 'raj': 'Rajasthani', 'sad': 'Sandawe', 'rar': 'Rarotongan', 'rap': 'Rapanui', 'sas': 'Sasak', 'car': 'Carib', 'min': 'Minangkabau', 'mic': 'Micmac', 'efi': 'Efik', 'arn': 'Araucanian', 'ypk': 'Yupik Languages', 'mis': 'Miscellaneous Languages', 'kac': 'Kachin', 'kab': 'Kabyle', 'kaa': 'Kara-Kalpak', 'kam': 'Kamba', 'kar': 'Karen', 'kaw': 'Kawi', 'tyv': 'Tuvinian', 'awa': 'Awadhi', 'ka': 'Georgian', 'doi': 'Dogri', 'kg': 'Kongo', 'kk': 'Kazakh', 'kj': 'Kuanyama', 'ki': 'Kikuyu', 'ko': 'Korean', 'kn': 'Kannada', 'km': 'Khmer', 'kl': 'Kalaallisut', 'ks': 'Kashmiri', 'kr': 'Kanuri', 'kw': 'Cornish', 'kv': 'Komi', 'ku': 'Kurdish', 'ky': 'Kirghiz', 'tkl': 'Tokelau', 'bua': 'Buriat', 'mga': 'Irish, Middle (900-1200)', 'hit': 'Hittite', 'dyu': 'Dyula', 'de': 'German', 'da': 'Danish', 'dz': 'Dzongkha', 'ira': 'Iranian', 'dv': 'Divehi', 'hil': 'Hiligaynon', 'him': 'Himachali', 'gem': 'Germanic (Other)', 'crp': 'Creoles and Pidgins (Other)', 'qu': 'Quechua', 'bas': 'Basa', 'gba': 'Gbaya', 'bad': 'Banda', 'ban': 'Balinese', 'bal': 'Baluchi', 'bam': 'Bambara', 'shn': 'Shan', 'bai': 'Bamileke Languages', 'arp': 'Arapaho', 'art': 'Artificial (Other)', 'arw': 'Arawak', 'arc': 'Aramaic', 'sem': 'Semitic (Other)', 'sel': 'Selkup', 'nub': 'Nubian Languages', 'btk': 'Batak', 'lus': 'Lushai', 'mus': 'Creek', 'lua': 'Luba-Lulua', 'iro': 'Iroquoian languages', 'lui': 'Luiseno', 'mun': 'Munda Languages', 'lun': 'Lunda', 'luo': 'Luo', 'wa': 'Walloon', 'tup': 'Tupi languages', 'jv': 'Javanese', 'tut': 'Altaic (Other)', 'tum': 'Tumbuka', 'ja': 'Japanese', 'cop': 'Coptic', 'ilo': 'Iloko', 'la': 'Latin', 'gwi': "Gwich'in", 'und': 'Undetermined', 'tli': 'Tlingit', 'ch': 'Chamorro', 'co': 'Corsican', 'ca': 'Catalan', 'ce': 'Chechen', 'pon': 'Pohnpeian', 'cy': 'Welsh', 'sah': 'Yakut', 'cs': 'Czech', 'cr': 'Cree', 'bnt': 'Bantu', 'cv': 'Chuvash', 'cu': 'Church Slavic', 'lv': 'Latvian', 'dum': 'Dutch, Middle (ca. 1050-1350)', 'pt': 'Portuguese', 'dua': 'Duala', 'fro': 'French, Old (842-ca.1400)', 'yap': 'Yapese', 'frm': 'French, Middle (ca.1400-1600)', 'tiv': 'Tiv', 'yao': 'Yao', 'pa': 'Punjabi', 'xal': 'Kalmyk', 'pi': 'Pali', 'pl': 'Polish', 'gay': 'Gayo', 'oto': 'Otomian Languages', 'ota': 'Turkish, Ottoman (1500-1928)', 'hmn': 'Hmong', 'an': 'Aragonese', 'gaa': 'Ga', 'fur': 'Friulian', 'khi': 'Khoisan (Other)', 'sla': 'Slavic (Other)', 've': 'Venda', 'vi': 'Vietnamese', 'is': 'Icelandic', 'kho': 'Khotanese', 'iu': 'Inuktitut', 'it': 'Italian', 'vo': u'Volap\xfck', 'ii': 'Sichuan Yi', 'ik': 'Inupiaq', 'io': 'Ido', 'ine': 'Indo-European (Other)', 'ia': 'Interlingua', 'jpr': 'Judeo-Persian', 'ie': 'Interlingue', 'id': 'Indonesian', 'ig': 'Igbo', 'pap': 'Papiamento', 'ewo': 'Ewondo', 'pau': 'Palauan', 'paa': 'Papuan (Other)', 'pag': 'Pangasinan', 'sat': 'Santali', 'pal': 'Pahlavi', 'pam': 'Pampanga', 'phi': 'Philippine (Other)', 'cel': 'Celtic (Other)', 'phn': 'Phoenician', 'nic': 'Niger - Kordofanian (Other)', 'nia': 'Nias', 'dgr': 'Dogrib', 'syr': 'Syriac', 'niu': 'Niuean', 'jbo': 'Lojban', 'nah': 'Nahuatl', 'sam': 'Samaritan Aramaic', 'hai': 'Haida', 'gmh': 'German, Middle High (ca.1050-1500)', 'cus': 'Cushitic (Other)', 'wen': 'Sorbian Languages', 'ady': 'Adyghe', 'elx': 'Elamite', 'ada': 'Adangme', 'haw': 'Hawaiian', 'bin': 'Bini', 'bik': 'Bikol', 'mos': 'Mossi', 'moh': 'Mohawk', 'tl': 'Tagalog', 'tvl': 'Tuvalu', 'ijo': 'Ijo', 'kmb': 'Kimbundu', 'peo': 'Persian Old (ca.600-400 B.C.)', 'umb': 'Umbundu', 'tmh': 'Tamashek', 'fon': 'Fon', 'hsb': 'Upper Sorbian', 'be': 'Belarusian', 'bg': 'Bulgarian', 'ba': 'Bashkir', 'ps': 'Pashto (Pushto)', 'bm': 'Bambara', 'bn': 'Bengali', 'bo': 'Tibetan', 'bh': 'Bihari', 'bi': 'Bislama', 'br': 'Breton', 'bs': 'Bosnian', 'om': 'Oromo', 'oj': 'Ojibwa', 'ace': 'Achinese', 'ach': 'Acoli', 'oc': u'Occitan (post 1500); Proven\xe7al', 'kru': 'Kurukh', 'srr': 'Serer', 'kro': 'Kru', 'krc': 'Karachay-Balkar', 'nds': 'Low German; Low Saxon', 'os': 'Ossetic', 'or': 'Oriya', 'sog': 'Sogdien', 'nso': 'Sotho, Northern', 'son': 'Songhai', 'vai': 'Vai', 'wak': 'Wakashan Languages', 'lol': 'Mongo', 'mkh': 'Mon-Khmer (Other)', 'loz': 'Lozi', 'gil': 'Gilbertese', 'was': 'Washo', 'war': 'Waray', 'hz': 'Herero', 'hy': 'Armenian', 'sid': 'Sidamo', 'hr': 'Croatian', 'ht': 'Haitian', 'hu': 'Hungarian', 'hi': 'Hindi', 'ho': 'Hiri Motu', 'ha': 'Hausa', 'bug': 'Buginese', 'he': 'Hebrew', 'uz': 'Uzbek', 'ur': 'Urdu', 'uk': 'Ukrainian', 'ug': 'Uighur', 'aa': 'Afar', 'ab': 'Abkhazian', 'ae': 'Avestan', 'af': 'Afrikaans', 'ak': 'Akan', 'am': 'Amharic', 'myv': 'Erzya', 'eu': 'Basque', 'as': 'Assamese', 'ar': 'Arabic', 'inh': 'Ingush', 'tpi': 'Tok Pisin', 'myn': 'Mayan', 'ay': 'Aymara', 'kha': 'Khasi', 'az': 'Azerbaijani', 'inc': 'Indic (Other)', 'nl': 'Dutch', 'nn': 'Norwegian Nynorsk', 'no': 'Norwegian', 'na': 'Nauru', 'nb': u'Norwegian Bokm\xe5l', 'nai': 'North American Indian (Other)', 'nd': 'Ndebele, North', 'ne': 'Nepali', 'ng': 'Ndonga', 'ny': 'Nyanja; Chichewa; Chewa', 'nap': 'Neapolitan', 'grb': 'Gerbo', 'grc': 'Greek, Ancient (to 1453)', 'nr': 'Ndebele, South', 'tig': 'Tigre', 'nv': 'Navajo', 'zun': 'Zuni', 'rw': 'Kinyarwanda', 'cpe': 'Creoles and Pidgins, English-based (Other)', 'cpf': 'Creoles and Pidgins, French-based (Other)', 'cpp': 'Creoles and pidgins, Portuguese-based (Other)'} countries={'BD': 'Bangladesh', 'BE': 'Belgium', 'BF': 'Burkina Faso', 'BG': 'Bulgaria', 'BA': 'Bosnia and Herzegovina', 'BB': 'Barbados', 'WF': 'Wallis and Futuna', 'BM': 'Bermuda', 'BN': 'Brunei', 'BO': 'Bolivia', 'BH': 'Bahrain', 'BI': 'Burundi', 'BJ': 'Benin', 'BT': 'Bhutan', 'JM': 'Jamaica', 'BV': 'Bouvet Island', 'BW': 'Botswana', 'WS': 'Samoa', 'BR': 'Brazil', 'BS': 'Bahamas', 'BY': 'Belarus', 'BZ': 'Belize', 'RU': 'Russia', 'RW': 'Rwanda', 'TL': 'Timor-Leste', 'RE': u'R\xe9union', 'TM': 'Turkmenistan', 'TJ': 'Tajikistan', 'RO': 'Romania', 'TK': 'Tokelau', 'GW': 'Guinea-Bissau', 'GU': 'Guam', 'GT': 'Guatemala', 'GS': 'South Georgia and South Sandwich Islands', 'GR': 'Greece', 'GQ': 'Equatorial Guinea', 'GP': 'Guadeloupe', 'JP': 'Japan', 'GY': 'Guyana', 'GF': 'French Guiana', 'GE': 'Georgia', 'GD': 'Grenada', 'GB': 'United Kingdom', 'GA': 'Gabon', 'SV': 'El Salvador', 'GN': 'Guinea', 'GM': 'Gambia', 'GL': 'Greenland', 'GI': 'Gibraltar', 'GH': 'Ghana', 'OM': 'Oman', 'TN': 'Tunisia', 'JO': 'Jordan', 'SP': 'Serbia', 'HR': 'Croatia', 'HT': 'Haiti', 'HU': 'Hungary', 'HK': 'Hong Kong S.A.R., China', 'HN': 'Honduras', 'HM': 'Heard Island and McDonald Islands', 'VE': 'Venezuela', 'PR': 'Puerto Rico', 'PS': 'Palestinian Territory', 'PW': 'Palau', 'PT': 'Portugal', 'SJ': 'Svalbard and Jan Mayen', 'PY': 'Paraguay', 'IQ': 'Iraq', 'PA': 'Panama', 'PF': 'French Polynesia', 'PG': 'Papua New Guinea', 'PE': 'Peru', 'PK': 'Pakistan', 'PH': 'Philippines', 'PN': 'Pitcairn', 'PL': 'Poland', 'PM': 'Saint Pierre and Miquelon', 'ZM': 'Zambia', 'EH': 'Western Sahara', 'EE': 'Estonia', 'EG': 'Egypt', 'ZA': 'South Africa', 'EC': 'Ecuador', 'IT': 'Italy', 'VN': 'Vietnam', 'SB': 'Solomon Islands', 'ET': 'Ethiopia', 'SO': 'Somalia', 'ZW': 'Zimbabwe', 'SA': 'Saudi Arabia', 'ES': 'Spain', 'ER': 'Eritrea', 'MD': 'Moldova', 'MG': 'Madagascar', 'MA': 'Morocco', 'MC': 'Monaco', 'UZ': 'Uzbekistan', 'MM': 'Myanmar', 'ML': 'Mali', 'MO': 'Macao S.A.R. China', 'MN': 'Mongolia', 'MH': 'Marshall Islands', 'MK': 'Macedonia', 'MU': 'Mauritius', 'MT': 'Malta', 'MW': 'Malawi', 'MV': 'Maldives', 'MQ': 'Martinique', 'MP': 'Northern Mariana Islands', 'MS': 'Montserrat', 'MR': 'Mauritania', 'UG': 'Uganda', 'MY': 'Malaysia', 'MX': 'Mexico', 'IL': 'Israel', 'FR': 'France', 'IO': 'British Indian Ocean Territory', 'SH': 'Saint Helena', 'FI': 'Finland', 'FJ': 'Fiji', 'FK': 'Falkland Islands', 'FM': 'Micronesia', 'FO': 'Faroe Islands', 'NI': 'Nicaragua', 'NL': 'Netherlands', 'NO': 'Norway', 'NA': 'Namibia', 'VU': 'Vanuatu', 'NC': 'New Caledonia', 'NE': 'Niger', 'NF': 'Norfolk Island', 'NG': 'Nigeria', 'NZ': 'New Zealand', 'NP': 'Nepal', 'NR': 'Nauru', 'NU': 'Niue', 'CK': 'Cook Islands', 'CI': u"C\xf4te d'Ivoire", 'CH': 'Switzerland', 'CO': 'Colombia', 'CN': 'China', 'CM': 'Cameroon', 'CL': 'Chile', 'CC': 'Cocos Islands', 'CA': 'Canada', 'CG': 'Congo', 'CF': 'Central African Republic', 'CD': 'Democratic Republic of the Congo', 'CZ': 'Czech Republic', 'CY': 'Cyprus', 'CX': 'Christmas Island', 'CR': 'Costa Rica', 'CV': 'Cape Verde', 'CU': 'Cuba', 'SZ': 'Swaziland', 'SY': 'Syria', 'KG': 'Kyrgyzstan', 'KE': 'Kenya', 'SR': 'Suriname', 'KI': 'Kiribati', 'KH': 'Cambodia', 'KN': 'Saint Kitts and Nevis', 'KM': 'Comoros', 'ST': 'Sao Tome and Principe', 'SK': 'Slovakia', 'KR': 'South Korea', 'SI': 'Slovenia', 'KP': 'North Korea', 'KW': 'Kuwait', 'SN': 'Senegal', 'SM': 'San Marino', 'SL': 'Sierra Leone', 'SC': 'Seychelles', 'KZ': 'Kazakhstan', 'KY': 'Cayman Islands', 'SG': 'Singapore', 'SE': 'Sweden', 'SD': 'Sudan', 'DO': 'Dominican Republic', 'DM': 'Dominica', 'DJ': 'Djibouti', 'DK': 'Denmark', 'VG': 'British Virgin Islands', 'DE': 'Germany', 'YE': 'Yemen', 'DZ': 'Algeria', 'US': 'United States', 'UY': 'Uruguay', 'YU': 'Yugoslavia', 'YT': 'Mayotte', 'UM': 'United States Minor Outlying Islands', 'LB': 'Lebanon', 'LC': 'Saint Lucia', 'LA': 'Laos', 'TV': 'Tuvalu', 'TW': 'Taiwan', 'TT': 'Trinidad and Tobago', 'TR': 'Turkey', 'LK': 'Sri Lanka', 'LI': 'Liechtenstein', 'LV': 'Latvia', 'TO': 'Tonga', 'LT': 'Lithuania', 'LU': 'Luxembourg', 'LR': 'Liberia', 'LS': 'Lesotho', 'TH': 'Thailand', 'TF': 'French Southern Territories', 'TG': 'Togo', 'TD': 'Chad', 'TC': 'Turks and Caicos Islands', 'LY': 'Libya', 'VA': 'Vatican', 'VC': 'Saint Vincent and the Grenadines', 'AE': 'United Arab Emirates', 'AD': 'Andorra', 'AG': 'Antigua and Barbuda', 'AF': 'Afghanistan', 'AI': 'Anguilla', 'VI': 'U.S. Virgin Islands', 'IS': 'Iceland', 'IR': 'Iran', 'AM': 'Armenia', 'AL': 'Albania', 'AO': 'Angola', 'AN': 'Netherlands Antilles', 'AQ': 'Antarctica', 'AS': 'American Samoa', 'AR': 'Argentina', 'AU': 'Australia', 'AT': 'Austria', 'AW': 'Aruba', 'IN': 'India', 'TZ': 'Tanzania', 'AZ': 'Azerbaijan', 'IE': 'Ireland', 'ID': 'Indonesia', 'UA': 'Ukraine', 'QA': 'Qatar', 'MZ': 'Mozambique'} months=['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] abbrMonths=['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] days=['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'] abbrDays=['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] dateFormats={'medium': '%d %%(abbrmonthname)s %Y', 'full': '%%(dayname)s %d %%(monthname)s %Y', 'long': '%%{abbrdayname}sE %d %%(abbrmonthname)s %Y', 'short': '%d/%m/%y'} numericSymbols={'group': '.', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': ',', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'} PKA>wZZturbogears/i18n/data/en_BE.pyc; ȸHIc @s#hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd~***PKK9-:-:turbogears/i18n/data/en_BW.py# Formatting configuration for locale en_BW languages={'gv': 'Manx', 'gu': 'Gujarati', 'rom': 'Romany', 'alg': 'Algonquian Languages', 'ale': 'Aleut', 'sco': 'Scots', 'mni': 'Manipuri', 'gd': 'Scottish Gaelic', 'ga': 'Irish', 'mno': 'Manobo Languages', 'osa': 'Osage', 'gn': 'Guarani', 'gl': 'Gallegan', 'mwr': 'Marwari', 'ty': 'Tahitian', 'tw': 'Twi', 'tt': 'Tatar', 'tr': 'Turkish', 'ts': 'Tsonga', 'tn': 'Tswana', 'to': 'Tonga (Tonga Islands)', 'aus': 'Australian Languages', 'av': 'Avaric', 'tk': 'Turkmen', 'th': 'Thai', 'roa': 'Romance (Other)', 'tg': 'Tajik', 'te': 'Telugu', 'uga': 'Ugaritic', 'ta': 'Tamil', 'fat': 'Fanti', 'fan': 'Fang', 'wo': 'Wolof', 'rm': 'Rhaeto-Romance', 'din': 'Dinka', 'bla': 'Siksika', 'cmc': 'Chamic Languages', 'ml': 'Malayalam', 'zh': 'Chinese', 'tem': 'Timne', 'za': 'Zhuang', 'cau': 'Caucasian (Other)', 'zu': 'Zulu', 'ter': 'Tereno', 'tet': 'Tetum', 'mnc': 'Manchu', 'kut': 'Kutenai', 'suk': 'Sukuma', 'kum': 'Kumyk', 'sus': 'Susu', 'new': 'Newari', 'sux': 'Sumerian', 'den': 'Slave', 'men': 'Mende', 'mul': 'Multiple Languages', 'lez': 'Lezghian', 'root': 'Root', 'eka': 'Ekajuk', 'akk': 'Akkadian', 'dra': 'Dravidian (Other)', 'jrb': 'Judeo-Arabic', 'sgn': 'Sign Languages', 'sga': 'Irish, Old (to 900)', 'apa': 'Apache Languages', 'bra': 'Braj', 'chb': 'Chibcha', 'chg': 'Chagatai', 'chk': 'Chuukese', 'chm': 'Mari', 'chn': 'Chinook Jargon', 'cho': 'Choctaw', 'chp': 'Chipewyan', 'chr': 'Cherokee', 'chy': 'Cheyenne', 'ti': 'Tigrinya', 'vot': 'Votic', 'mg': 'Malagasy', 'iba': 'Iban', 'mo': 'Moldavian', 'mn': 'Mongolian', 'mi': 'Maori', 'mh': 'Marshallese', 'mk': 'Macedonian', 'mt': 'Maltese', 'cai': 'Central American Indian (Other)', 'del': 'Delaware', 'ms': 'Malay', 'mr': 'Marathi', 'my': 'Burmese', 'cad': 'Caddo', 'tai': 'Tai (Other)', 'afh': 'Afrihili', 'sit': 'Sino-Tibetan (Other)', 'enm': 'English, Middle (1100-1500)', 'csb': 'Kashubian', 'nyn': 'Nyankole', 'nyo': 'Nyoro', 'nym': 'Nyamwezi', 'sio': 'Siouan Languages', 'map': 'Austronesian', 'mas': 'Masai', 'lah': 'Lahnda', 'lad': 'Ladino', 'fy': 'Frisian', 'snk': 'Soninke', 'fa': 'Persian', 'mad': 'Madurese', 'mag': 'Magahi', 'mai': 'Maithili', 'fi': 'Finnish', 'fj': 'Fijian', 'man': 'Mandingo', 'egy': 'Egyptian (Ancient)', 'znd': 'Zande', 'ss': 'Swati', 'sr': 'Serbian', 'sq': 'Albanian', 'sw': 'Swahili', 'sv': 'Swedish', 'su': 'Sundanese', 'st': 'Sotho, Southern', 'sk': 'Slovak', 'si': 'Sinhalese', 'sh': 'Serbo-Croatian', 'so': 'Somali', 'sn': 'Shona', 'sm': 'Samoan', 'sl': 'Slovenian', 'sc': 'Sardinian', 'sa': 'Sanskrit', 'sg': 'Sango', 'se': 'Northern Sami', 'sd': 'Sindhi', 'zen': 'Zenaga', 'kbd': 'Kabardian', 'afa': 'Afro-Asiatic (Other)', 'lg': 'Ganda', 'lb': 'Luxembourgish', 'fiu': 'Finno - Ugrian (Other)', 'ln': 'Lingala', 'lo': 'Lao', 'li': 'Limburgish', 'byn': 'Blin', 'lt': 'Lithuanian', 'lu': 'Luba-Katanga', 'yi': 'Yiddish', 'non': 'Norse, Old', 'ceb': 'Cebuano', 'yo': 'Yoruba', 'nog': 'Nogai', 'bat': 'Baltic (Other)', 'dak': 'Dakota', 'dar': 'Dargwa', 'day': 'Dayak', 'ssa': 'Nilo-Saharam (Other)', 'kpe': 'Kpelle', 'el': 'Greek', 'eo': 'Esperanto', 'en': 'English', 'lam': 'Lamba', 'ee': 'Ewe', 'mdf': 'Moksha', 'fr': 'French', 'mdr': 'Mandar', 'et': 'Estonian', 'es': 'Spanish', 'ru': 'Russian', 'gon': 'Gondi', 'goh': 'German, Old High (ca.750-1050)', 'sms': 'Skolt Sami', 'smn': 'Inari Sami', 'smj': 'Lule Sami', 'smi': 'Sami languages (Other)', 'got': 'Gothic', 'rn': 'Rundi', 'ro': 'Romanian', 'dsb': 'Lower Sorbian', 'sma': 'Southern Sami', 'gor': 'Gorontalo', 'ast': 'Asturian', 'wal': 'Walamo', 'crh': 'Crimean Turkish; Crimean Tatar', 'ath': 'Athapascan Languages', 'gez': 'Geez', 'xh': 'Xhosa', 'ff': 'Fulah', 'mak': 'Makasar', 'zap': 'Zapotec', 'kok': 'Konkani', 'kos': 'Kosraean', 'fo': 'Faroese', 'tog': 'Tonga (Nyasa)', 'hup': 'Hupa', 'udm': 'Udmurt', 'bej': 'Beja', 'bem': 'Bemba', 'tsi': 'Tsimshian', 'ber': 'Berber', 'nzi': 'Nzima', 'sai': 'South American Indian (Other)', 'ang': 'English, Old (ca.450-1100)', 'pra': 'Prakrit Languages', 'bho': 'Bhojpuri', 'sal': 'Salishan languages', 'pro': u'Proven\xe7al, Old (to 1500)', 'raj': 'Rajasthani', 'sad': 'Sandawe', 'rar': 'Rarotongan', 'rap': 'Rapanui', 'sas': 'Sasak', 'car': 'Carib', 'min': 'Minangkabau', 'mic': 'Micmac', 'efi': 'Efik', 'arn': 'Araucanian', 'ypk': 'Yupik Languages', 'mis': 'Miscellaneous Languages', 'kac': 'Kachin', 'kab': 'Kabyle', 'kaa': 'Kara-Kalpak', 'kam': 'Kamba', 'kar': 'Karen', 'kaw': 'Kawi', 'tyv': 'Tuvinian', 'awa': 'Awadhi', 'ka': 'Georgian', 'doi': 'Dogri', 'kg': 'Kongo', 'kk': 'Kazakh', 'kj': 'Kuanyama', 'ki': 'Kikuyu', 'ko': 'Korean', 'kn': 'Kannada', 'km': 'Khmer', 'kl': 'Kalaallisut', 'ks': 'Kashmiri', 'kr': 'Kanuri', 'kw': 'Cornish', 'kv': 'Komi', 'ku': 'Kurdish', 'ky': 'Kirghiz', 'tkl': 'Tokelau', 'bua': 'Buriat', 'mga': 'Irish, Middle (900-1200)', 'hit': 'Hittite', 'dyu': 'Dyula', 'de': 'German', 'da': 'Danish', 'dz': 'Dzongkha', 'ira': 'Iranian', 'dv': 'Divehi', 'hil': 'Hiligaynon', 'him': 'Himachali', 'gem': 'Germanic (Other)', 'crp': 'Creoles and Pidgins (Other)', 'qu': 'Quechua', 'bas': 'Basa', 'gba': 'Gbaya', 'bad': 'Banda', 'ban': 'Balinese', 'bal': 'Baluchi', 'bam': 'Bambara', 'shn': 'Shan', 'bai': 'Bamileke Languages', 'arp': 'Arapaho', 'art': 'Artificial (Other)', 'arw': 'Arawak', 'arc': 'Aramaic', 'sem': 'Semitic (Other)', 'sel': 'Selkup', 'nub': 'Nubian Languages', 'btk': 'Batak', 'lus': 'Lushai', 'mus': 'Creek', 'lua': 'Luba-Lulua', 'iro': 'Iroquoian languages', 'lui': 'Luiseno', 'mun': 'Munda Languages', 'lun': 'Lunda', 'luo': 'Luo', 'wa': 'Walloon', 'tup': 'Tupi languages', 'jv': 'Javanese', 'tut': 'Altaic (Other)', 'tum': 'Tumbuka', 'ja': 'Japanese', 'cop': 'Coptic', 'ilo': 'Iloko', 'la': 'Latin', 'gwi': "Gwich'in", 'und': 'Undetermined', 'tli': 'Tlingit', 'ch': 'Chamorro', 'co': 'Corsican', 'ca': 'Catalan', 'ce': 'Chechen', 'pon': 'Pohnpeian', 'cy': 'Welsh', 'sah': 'Yakut', 'cs': 'Czech', 'cr': 'Cree', 'bnt': 'Bantu', 'cv': 'Chuvash', 'cu': 'Church Slavic', 'lv': 'Latvian', 'dum': 'Dutch, Middle (ca. 1050-1350)', 'pt': 'Portuguese', 'dua': 'Duala', 'fro': 'French, Old (842-ca.1400)', 'yap': 'Yapese', 'frm': 'French, Middle (ca.1400-1600)', 'tiv': 'Tiv', 'yao': 'Yao', 'pa': 'Punjabi', 'xal': 'Kalmyk', 'pi': 'Pali', 'pl': 'Polish', 'gay': 'Gayo', 'oto': 'Otomian Languages', 'ota': 'Turkish, Ottoman (1500-1928)', 'hmn': 'Hmong', 'an': 'Aragonese', 'gaa': 'Ga', 'fur': 'Friulian', 'khi': 'Khoisan (Other)', 'sla': 'Slavic (Other)', 've': 'Venda', 'vi': 'Vietnamese', 'is': 'Icelandic', 'kho': 'Khotanese', 'iu': 'Inuktitut', 'it': 'Italian', 'vo': u'Volap\xfck', 'ii': 'Sichuan Yi', 'ik': 'Inupiaq', 'io': 'Ido', 'ine': 'Indo-European (Other)', 'ia': 'Interlingua', 'jpr': 'Judeo-Persian', 'ie': 'Interlingue', 'id': 'Indonesian', 'ig': 'Igbo', 'pap': 'Papiamento', 'ewo': 'Ewondo', 'pau': 'Palauan', 'paa': 'Papuan (Other)', 'pag': 'Pangasinan', 'sat': 'Santali', 'pal': 'Pahlavi', 'pam': 'Pampanga', 'phi': 'Philippine (Other)', 'cel': 'Celtic (Other)', 'phn': 'Phoenician', 'nic': 'Niger - Kordofanian (Other)', 'nia': 'Nias', 'dgr': 'Dogrib', 'syr': 'Syriac', 'niu': 'Niuean', 'jbo': 'Lojban', 'nah': 'Nahuatl', 'sam': 'Samaritan Aramaic', 'hai': 'Haida', 'gmh': 'German, Middle High (ca.1050-1500)', 'cus': 'Cushitic (Other)', 'wen': 'Sorbian Languages', 'ady': 'Adyghe', 'elx': 'Elamite', 'ada': 'Adangme', 'haw': 'Hawaiian', 'bin': 'Bini', 'bik': 'Bikol', 'mos': 'Mossi', 'moh': 'Mohawk', 'tl': 'Tagalog', 'tvl': 'Tuvalu', 'ijo': 'Ijo', 'kmb': 'Kimbundu', 'peo': 'Persian Old (ca.600-400 B.C.)', 'umb': 'Umbundu', 'tmh': 'Tamashek', 'fon': 'Fon', 'hsb': 'Upper Sorbian', 'be': 'Belarusian', 'bg': 'Bulgarian', 'ba': 'Bashkir', 'ps': 'Pashto (Pushto)', 'bm': 'Bambara', 'bn': 'Bengali', 'bo': 'Tibetan', 'bh': 'Bihari', 'bi': 'Bislama', 'br': 'Breton', 'bs': 'Bosnian', 'om': 'Oromo', 'oj': 'Ojibwa', 'ace': 'Achinese', 'ach': 'Acoli', 'oc': u'Occitan (post 1500); Proven\xe7al', 'kru': 'Kurukh', 'srr': 'Serer', 'kro': 'Kru', 'krc': 'Karachay-Balkar', 'nds': 'Low German; Low Saxon', 'os': 'Ossetic', 'or': 'Oriya', 'sog': 'Sogdien', 'nso': 'Sotho, Northern', 'son': 'Songhai', 'vai': 'Vai', 'wak': 'Wakashan Languages', 'lol': 'Mongo', 'mkh': 'Mon-Khmer (Other)', 'loz': 'Lozi', 'gil': 'Gilbertese', 'was': 'Washo', 'war': 'Waray', 'hz': 'Herero', 'hy': 'Armenian', 'sid': 'Sidamo', 'hr': 'Croatian', 'ht': 'Haitian', 'hu': 'Hungarian', 'hi': 'Hindi', 'ho': 'Hiri Motu', 'ha': 'Hausa', 'bug': 'Buginese', 'he': 'Hebrew', 'uz': 'Uzbek', 'ur': 'Urdu', 'uk': 'Ukrainian', 'ug': 'Uighur', 'aa': 'Afar', 'ab': 'Abkhazian', 'ae': 'Avestan', 'af': 'Afrikaans', 'ak': 'Akan', 'am': 'Amharic', 'myv': 'Erzya', 'eu': 'Basque', 'as': 'Assamese', 'ar': 'Arabic', 'inh': 'Ingush', 'tpi': 'Tok Pisin', 'myn': 'Mayan', 'ay': 'Aymara', 'kha': 'Khasi', 'az': 'Azerbaijani', 'inc': 'Indic (Other)', 'nl': 'Dutch', 'nn': 'Norwegian Nynorsk', 'no': 'Norwegian', 'na': 'Nauru', 'nb': u'Norwegian Bokm\xe5l', 'nai': 'North American Indian (Other)', 'nd': 'Ndebele, North', 'ne': 'Nepali', 'ng': 'Ndonga', 'ny': 'Nyanja; Chichewa; Chewa', 'nap': 'Neapolitan', 'grb': 'Gerbo', 'grc': 'Greek, Ancient (to 1453)', 'nr': 'Ndebele, South', 'tig': 'Tigre', 'nv': 'Navajo', 'zun': 'Zuni', 'rw': 'Kinyarwanda', 'cpe': 'Creoles and Pidgins, English-based (Other)', 'cpf': 'Creoles and Pidgins, French-based (Other)', 'cpp': 'Creoles and pidgins, Portuguese-based (Other)'} countries={'BD': 'Bangladesh', 'BE': 'Belgium', 'BF': 'Burkina Faso', 'BG': 'Bulgaria', 'BA': 'Bosnia and Herzegovina', 'BB': 'Barbados', 'WF': 'Wallis and Futuna', 'BM': 'Bermuda', 'BN': 'Brunei', 'BO': 'Bolivia', 'BH': 'Bahrain', 'BI': 'Burundi', 'BJ': 'Benin', 'BT': 'Bhutan', 'JM': 'Jamaica', 'BV': 'Bouvet Island', 'BW': 'Botswana', 'WS': 'Samoa', 'BR': 'Brazil', 'BS': 'Bahamas', 'BY': 'Belarus', 'BZ': 'Belize', 'RU': 'Russia', 'RW': 'Rwanda', 'TL': 'Timor-Leste', 'RE': u'R\xe9union', 'TM': 'Turkmenistan', 'TJ': 'Tajikistan', 'RO': 'Romania', 'TK': 'Tokelau', 'GW': 'Guinea-Bissau', 'GU': 'Guam', 'GT': 'Guatemala', 'GS': 'South Georgia and South Sandwich Islands', 'GR': 'Greece', 'GQ': 'Equatorial Guinea', 'GP': 'Guadeloupe', 'JP': 'Japan', 'GY': 'Guyana', 'GF': 'French Guiana', 'GE': 'Georgia', 'GD': 'Grenada', 'GB': 'United Kingdom', 'GA': 'Gabon', 'SV': 'El Salvador', 'GN': 'Guinea', 'GM': 'Gambia', 'GL': 'Greenland', 'GI': 'Gibraltar', 'GH': 'Ghana', 'OM': 'Oman', 'TN': 'Tunisia', 'JO': 'Jordan', 'SP': 'Serbia', 'HR': 'Croatia', 'HT': 'Haiti', 'HU': 'Hungary', 'HK': 'Hong Kong S.A.R., China', 'HN': 'Honduras', 'HM': 'Heard Island and McDonald Islands', 'VE': 'Venezuela', 'PR': 'Puerto Rico', 'PS': 'Palestinian Territory', 'PW': 'Palau', 'PT': 'Portugal', 'SJ': 'Svalbard and Jan Mayen', 'PY': 'Paraguay', 'IQ': 'Iraq', 'PA': 'Panama', 'PF': 'French Polynesia', 'PG': 'Papua New Guinea', 'PE': 'Peru', 'PK': 'Pakistan', 'PH': 'Philippines', 'PN': 'Pitcairn', 'PL': 'Poland', 'PM': 'Saint Pierre and Miquelon', 'ZM': 'Zambia', 'EH': 'Western Sahara', 'EE': 'Estonia', 'EG': 'Egypt', 'ZA': 'South Africa', 'EC': 'Ecuador', 'IT': 'Italy', 'VN': 'Vietnam', 'SB': 'Solomon Islands', 'ET': 'Ethiopia', 'SO': 'Somalia', 'ZW': 'Zimbabwe', 'SA': 'Saudi Arabia', 'ES': 'Spain', 'ER': 'Eritrea', 'MD': 'Moldova', 'MG': 'Madagascar', 'MA': 'Morocco', 'MC': 'Monaco', 'UZ': 'Uzbekistan', 'MM': 'Myanmar', 'ML': 'Mali', 'MO': 'Macao S.A.R. China', 'MN': 'Mongolia', 'MH': 'Marshall Islands', 'MK': 'Macedonia', 'MU': 'Mauritius', 'MT': 'Malta', 'MW': 'Malawi', 'MV': 'Maldives', 'MQ': 'Martinique', 'MP': 'Northern Mariana Islands', 'MS': 'Montserrat', 'MR': 'Mauritania', 'UG': 'Uganda', 'MY': 'Malaysia', 'MX': 'Mexico', 'IL': 'Israel', 'FR': 'France', 'IO': 'British Indian Ocean Territory', 'SH': 'Saint Helena', 'FI': 'Finland', 'FJ': 'Fiji', 'FK': 'Falkland Islands', 'FM': 'Micronesia', 'FO': 'Faroe Islands', 'NI': 'Nicaragua', 'NL': 'Netherlands', 'NO': 'Norway', 'NA': 'Namibia', 'VU': 'Vanuatu', 'NC': 'New Caledonia', 'NE': 'Niger', 'NF': 'Norfolk Island', 'NG': 'Nigeria', 'NZ': 'New Zealand', 'NP': 'Nepal', 'NR': 'Nauru', 'NU': 'Niue', 'CK': 'Cook Islands', 'CI': u"C\xf4te d'Ivoire", 'CH': 'Switzerland', 'CO': 'Colombia', 'CN': 'China', 'CM': 'Cameroon', 'CL': 'Chile', 'CC': 'Cocos Islands', 'CA': 'Canada', 'CG': 'Congo', 'CF': 'Central African Republic', 'CD': 'Democratic Republic of the Congo', 'CZ': 'Czech Republic', 'CY': 'Cyprus', 'CX': 'Christmas Island', 'CR': 'Costa Rica', 'CV': 'Cape Verde', 'CU': 'Cuba', 'SZ': 'Swaziland', 'SY': 'Syria', 'KG': 'Kyrgyzstan', 'KE': 'Kenya', 'SR': 'Suriname', 'KI': 'Kiribati', 'KH': 'Cambodia', 'KN': 'Saint Kitts and Nevis', 'KM': 'Comoros', 'ST': 'Sao Tome and Principe', 'SK': 'Slovakia', 'KR': 'South Korea', 'SI': 'Slovenia', 'KP': 'North Korea', 'KW': 'Kuwait', 'SN': 'Senegal', 'SM': 'San Marino', 'SL': 'Sierra Leone', 'SC': 'Seychelles', 'KZ': 'Kazakhstan', 'KY': 'Cayman Islands', 'SG': 'Singapore', 'SE': 'Sweden', 'SD': 'Sudan', 'DO': 'Dominican Republic', 'DM': 'Dominica', 'DJ': 'Djibouti', 'DK': 'Denmark', 'VG': 'British Virgin Islands', 'DE': 'Germany', 'YE': 'Yemen', 'DZ': 'Algeria', 'US': 'United States', 'UY': 'Uruguay', 'YU': 'Yugoslavia', 'YT': 'Mayotte', 'UM': 'United States Minor Outlying Islands', 'LB': 'Lebanon', 'LC': 'Saint Lucia', 'LA': 'Laos', 'TV': 'Tuvalu', 'TW': 'Taiwan', 'TT': 'Trinidad and Tobago', 'TR': 'Turkey', 'LK': 'Sri Lanka', 'LI': 'Liechtenstein', 'LV': 'Latvia', 'TO': 'Tonga', 'LT': 'Lithuania', 'LU': 'Luxembourg', 'LR': 'Liberia', 'LS': 'Lesotho', 'TH': 'Thailand', 'TF': 'French Southern Territories', 'TG': 'Togo', 'TD': 'Chad', 'TC': 'Turks and Caicos Islands', 'LY': 'Libya', 'VA': 'Vatican', 'VC': 'Saint Vincent and the Grenadines', 'AE': 'United Arab Emirates', 'AD': 'Andorra', 'AG': 'Antigua and Barbuda', 'AF': 'Afghanistan', 'AI': 'Anguilla', 'VI': 'U.S. Virgin Islands', 'IS': 'Iceland', 'IR': 'Iran', 'AM': 'Armenia', 'AL': 'Albania', 'AO': 'Angola', 'AN': 'Netherlands Antilles', 'AQ': 'Antarctica', 'AS': 'American Samoa', 'AR': 'Argentina', 'AU': 'Australia', 'AT': 'Austria', 'AW': 'Aruba', 'IN': 'India', 'TZ': 'Tanzania', 'AZ': 'Azerbaijan', 'IE': 'Ireland', 'ID': 'Indonesia', 'UA': 'Ukraine', 'QA': 'Qatar', 'MZ': 'Mozambique'} months=['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] abbrMonths=['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] days=['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'] abbrDays=['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] dateFormats={'medium': '%%(abbrmonthname)s %d,%y', 'full': '%%(dayname)s %d %%(monthname)s %Y', 'long': '%d %%(monthname)s %Y', 'short': '%d/%m/%y'} numericSymbols={'group': ',', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': '.', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'} PKA>#aYZZturbogears/i18n/data/en_BW.pyc; ȸHIc @s#hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd~***PKK9pck0:0:turbogears/i18n/data/en_CA.py# Formatting configuration for locale en_CA languages={'gv': 'Manx', 'gu': 'Gujarati', 'rom': 'Romany', 'alg': 'Algonquian Languages', 'ale': 'Aleut', 'sco': 'Scots', 'mni': 'Manipuri', 'gd': 'Scottish Gaelic', 'ga': 'Irish', 'mno': 'Manobo Languages', 'osa': 'Osage', 'gn': 'Guarani', 'gl': 'Gallegan', 'mwr': 'Marwari', 'ty': 'Tahitian', 'tw': 'Twi', 'tt': 'Tatar', 'tr': 'Turkish', 'ts': 'Tsonga', 'tn': 'Tswana', 'to': 'Tonga (Tonga Islands)', 'aus': 'Australian Languages', 'av': 'Avaric', 'tk': 'Turkmen', 'th': 'Thai', 'roa': 'Romance (Other)', 'tg': 'Tajik', 'te': 'Telugu', 'uga': 'Ugaritic', 'ta': 'Tamil', 'fat': 'Fanti', 'fan': 'Fang', 'wo': 'Wolof', 'rm': 'Rhaeto-Romance', 'din': 'Dinka', 'bla': 'Siksika', 'cmc': 'Chamic Languages', 'ml': 'Malayalam', 'zh': 'Chinese', 'tem': 'Timne', 'za': 'Zhuang', 'cau': 'Caucasian (Other)', 'zu': 'Zulu', 'ter': 'Tereno', 'tet': 'Tetum', 'mnc': 'Manchu', 'kut': 'Kutenai', 'suk': 'Sukuma', 'kum': 'Kumyk', 'sus': 'Susu', 'new': 'Newari', 'sux': 'Sumerian', 'den': 'Slave', 'men': 'Mende', 'mul': 'Multiple Languages', 'lez': 'Lezghian', 'root': 'Root', 'eka': 'Ekajuk', 'akk': 'Akkadian', 'dra': 'Dravidian (Other)', 'jrb': 'Judeo-Arabic', 'sgn': 'Sign Languages', 'sga': 'Irish, Old (to 900)', 'apa': 'Apache Languages', 'bra': 'Braj', 'chb': 'Chibcha', 'chg': 'Chagatai', 'chk': 'Chuukese', 'chm': 'Mari', 'chn': 'Chinook Jargon', 'cho': 'Choctaw', 'chp': 'Chipewyan', 'chr': 'Cherokee', 'chy': 'Cheyenne', 'ti': 'Tigrinya', 'vot': 'Votic', 'mg': 'Malagasy', 'iba': 'Iban', 'mo': 'Moldavian', 'mn': 'Mongolian', 'mi': 'Maori', 'mh': 'Marshallese', 'mk': 'Macedonian', 'mt': 'Maltese', 'cai': 'Central American Indian (Other)', 'del': 'Delaware', 'ms': 'Malay', 'mr': 'Marathi', 'my': 'Burmese', 'cad': 'Caddo', 'tai': 'Tai (Other)', 'afh': 'Afrihili', 'sit': 'Sino-Tibetan (Other)', 'enm': 'English, Middle (1100-1500)', 'csb': 'Kashubian', 'nyn': 'Nyankole', 'nyo': 'Nyoro', 'nym': 'Nyamwezi', 'sio': 'Siouan Languages', 'map': 'Austronesian', 'mas': 'Masai', 'lah': 'Lahnda', 'lad': 'Ladino', 'fy': 'Frisian', 'snk': 'Soninke', 'fa': 'Persian', 'mad': 'Madurese', 'mag': 'Magahi', 'mai': 'Maithili', 'fi': 'Finnish', 'fj': 'Fijian', 'man': 'Mandingo', 'egy': 'Egyptian (Ancient)', 'znd': 'Zande', 'ss': 'Swati', 'sr': 'Serbian', 'sq': 'Albanian', 'sw': 'Swahili', 'sv': 'Swedish', 'su': 'Sundanese', 'st': 'Sotho, Southern', 'sk': 'Slovak', 'si': 'Sinhalese', 'sh': 'Serbo-Croatian', 'so': 'Somali', 'sn': 'Shona', 'sm': 'Samoan', 'sl': 'Slovenian', 'sc': 'Sardinian', 'sa': 'Sanskrit', 'sg': 'Sango', 'se': 'Northern Sami', 'sd': 'Sindhi', 'zen': 'Zenaga', 'kbd': 'Kabardian', 'afa': 'Afro-Asiatic (Other)', 'lg': 'Ganda', 'lb': 'Luxembourgish', 'fiu': 'Finno - Ugrian (Other)', 'ln': 'Lingala', 'lo': 'Lao', 'li': 'Limburgish', 'byn': 'Blin', 'lt': 'Lithuanian', 'lu': 'Luba-Katanga', 'yi': 'Yiddish', 'non': 'Norse, Old', 'ceb': 'Cebuano', 'yo': 'Yoruba', 'nog': 'Nogai', 'bat': 'Baltic (Other)', 'dak': 'Dakota', 'dar': 'Dargwa', 'day': 'Dayak', 'ssa': 'Nilo-Saharam (Other)', 'kpe': 'Kpelle', 'el': 'Greek', 'eo': 'Esperanto', 'en': 'English', 'lam': 'Lamba', 'ee': 'Ewe', 'mdf': 'Moksha', 'fr': 'French', 'mdr': 'Mandar', 'et': 'Estonian', 'es': 'Spanish', 'ru': 'Russian', 'gon': 'Gondi', 'goh': 'German, Old High (ca.750-1050)', 'sms': 'Skolt Sami', 'smn': 'Inari Sami', 'smj': 'Lule Sami', 'smi': 'Sami languages (Other)', 'got': 'Gothic', 'rn': 'Rundi', 'ro': 'Romanian', 'dsb': 'Lower Sorbian', 'sma': 'Southern Sami', 'gor': 'Gorontalo', 'ast': 'Asturian', 'wal': 'Walamo', 'crh': 'Crimean Turkish; Crimean Tatar', 'ath': 'Athapascan Languages', 'gez': 'Geez', 'xh': 'Xhosa', 'ff': 'Fulah', 'mak': 'Makasar', 'zap': 'Zapotec', 'kok': 'Konkani', 'kos': 'Kosraean', 'fo': 'Faroese', 'tog': 'Tonga (Nyasa)', 'hup': 'Hupa', 'udm': 'Udmurt', 'bej': 'Beja', 'bem': 'Bemba', 'tsi': 'Tsimshian', 'ber': 'Berber', 'nzi': 'Nzima', 'sai': 'South American Indian (Other)', 'ang': 'English, Old (ca.450-1100)', 'pra': 'Prakrit Languages', 'bho': 'Bhojpuri', 'sal': 'Salishan languages', 'pro': u'Proven\xe7al, Old (to 1500)', 'raj': 'Rajasthani', 'sad': 'Sandawe', 'rar': 'Rarotongan', 'rap': 'Rapanui', 'sas': 'Sasak', 'car': 'Carib', 'min': 'Minangkabau', 'mic': 'Micmac', 'efi': 'Efik', 'arn': 'Araucanian', 'ypk': 'Yupik Languages', 'mis': 'Miscellaneous Languages', 'kac': 'Kachin', 'kab': 'Kabyle', 'kaa': 'Kara-Kalpak', 'kam': 'Kamba', 'kar': 'Karen', 'kaw': 'Kawi', 'tyv': 'Tuvinian', 'awa': 'Awadhi', 'ka': 'Georgian', 'doi': 'Dogri', 'kg': 'Kongo', 'kk': 'Kazakh', 'kj': 'Kuanyama', 'ki': 'Kikuyu', 'ko': 'Korean', 'kn': 'Kannada', 'km': 'Khmer', 'kl': 'Kalaallisut', 'ks': 'Kashmiri', 'kr': 'Kanuri', 'kw': 'Cornish', 'kv': 'Komi', 'ku': 'Kurdish', 'ky': 'Kirghiz', 'tkl': 'Tokelau', 'bua': 'Buriat', 'mga': 'Irish, Middle (900-1200)', 'hit': 'Hittite', 'dyu': 'Dyula', 'de': 'German', 'da': 'Danish', 'dz': 'Dzongkha', 'ira': 'Iranian', 'dv': 'Divehi', 'hil': 'Hiligaynon', 'him': 'Himachali', 'gem': 'Germanic (Other)', 'crp': 'Creoles and Pidgins (Other)', 'qu': 'Quechua', 'bas': 'Basa', 'gba': 'Gbaya', 'bad': 'Banda', 'ban': 'Balinese', 'bal': 'Baluchi', 'bam': 'Bambara', 'shn': 'Shan', 'bai': 'Bamileke Languages', 'arp': 'Arapaho', 'art': 'Artificial (Other)', 'arw': 'Arawak', 'arc': 'Aramaic', 'sem': 'Semitic (Other)', 'sel': 'Selkup', 'nub': 'Nubian Languages', 'btk': 'Batak', 'lus': 'Lushai', 'mus': 'Creek', 'lua': 'Luba-Lulua', 'iro': 'Iroquoian languages', 'lui': 'Luiseno', 'mun': 'Munda Languages', 'lun': 'Lunda', 'luo': 'Luo', 'wa': 'Walloon', 'tup': 'Tupi languages', 'jv': 'Javanese', 'tut': 'Altaic (Other)', 'tum': 'Tumbuka', 'ja': 'Japanese', 'cop': 'Coptic', 'ilo': 'Iloko', 'la': 'Latin', 'gwi': "Gwich'in", 'und': 'Undetermined', 'tli': 'Tlingit', 'ch': 'Chamorro', 'co': 'Corsican', 'ca': 'Catalan', 'ce': 'Chechen', 'pon': 'Pohnpeian', 'cy': 'Welsh', 'sah': 'Yakut', 'cs': 'Czech', 'cr': 'Cree', 'bnt': 'Bantu', 'cv': 'Chuvash', 'cu': 'Church Slavic', 'lv': 'Latvian', 'dum': 'Dutch, Middle (ca. 1050-1350)', 'pt': 'Portuguese', 'dua': 'Duala', 'fro': 'French, Old (842-ca.1400)', 'yap': 'Yapese', 'frm': 'French, Middle (ca.1400-1600)', 'tiv': 'Tiv', 'yao': 'Yao', 'pa': 'Punjabi', 'xal': 'Kalmyk', 'pi': 'Pali', 'pl': 'Polish', 'gay': 'Gayo', 'oto': 'Otomian Languages', 'ota': 'Turkish, Ottoman (1500-1928)', 'hmn': 'Hmong', 'an': 'Aragonese', 'gaa': 'Ga', 'fur': 'Friulian', 'khi': 'Khoisan (Other)', 'sla': 'Slavic (Other)', 've': 'Venda', 'vi': 'Vietnamese', 'is': 'Icelandic', 'kho': 'Khotanese', 'iu': 'Inuktitut', 'it': 'Italian', 'vo': u'Volap\xfck', 'ii': 'Sichuan Yi', 'ik': 'Inupiaq', 'io': 'Ido', 'ine': 'Indo-European (Other)', 'ia': 'Interlingua', 'jpr': 'Judeo-Persian', 'ie': 'Interlingue', 'id': 'Indonesian', 'ig': 'Igbo', 'pap': 'Papiamento', 'ewo': 'Ewondo', 'pau': 'Palauan', 'paa': 'Papuan (Other)', 'pag': 'Pangasinan', 'sat': 'Santali', 'pal': 'Pahlavi', 'pam': 'Pampanga', 'phi': 'Philippine (Other)', 'cel': 'Celtic (Other)', 'phn': 'Phoenician', 'nic': 'Niger - Kordofanian (Other)', 'nia': 'Nias', 'dgr': 'Dogrib', 'syr': 'Syriac', 'niu': 'Niuean', 'jbo': 'Lojban', 'nah': 'Nahuatl', 'sam': 'Samaritan Aramaic', 'hai': 'Haida', 'gmh': 'German, Middle High (ca.1050-1500)', 'cus': 'Cushitic (Other)', 'wen': 'Sorbian Languages', 'ady': 'Adyghe', 'elx': 'Elamite', 'ada': 'Adangme', 'haw': 'Hawaiian', 'bin': 'Bini', 'bik': 'Bikol', 'mos': 'Mossi', 'moh': 'Mohawk', 'tl': 'Tagalog', 'tvl': 'Tuvalu', 'ijo': 'Ijo', 'kmb': 'Kimbundu', 'peo': 'Persian Old (ca.600-400 B.C.)', 'umb': 'Umbundu', 'tmh': 'Tamashek', 'fon': 'Fon', 'hsb': 'Upper Sorbian', 'be': 'Belarusian', 'bg': 'Bulgarian', 'ba': 'Bashkir', 'ps': 'Pashto (Pushto)', 'bm': 'Bambara', 'bn': 'Bengali', 'bo': 'Tibetan', 'bh': 'Bihari', 'bi': 'Bislama', 'br': 'Breton', 'bs': 'Bosnian', 'om': 'Oromo', 'oj': 'Ojibwa', 'ace': 'Achinese', 'ach': 'Acoli', 'oc': u'Occitan (post 1500); Proven\xe7al', 'kru': 'Kurukh', 'srr': 'Serer', 'kro': 'Kru', 'krc': 'Karachay-Balkar', 'nds': 'Low German; Low Saxon', 'os': 'Ossetic', 'or': 'Oriya', 'sog': 'Sogdien', 'nso': 'Sotho, Northern', 'son': 'Songhai', 'vai': 'Vai', 'wak': 'Wakashan Languages', 'lol': 'Mongo', 'mkh': 'Mon-Khmer (Other)', 'loz': 'Lozi', 'gil': 'Gilbertese', 'was': 'Washo', 'war': 'Waray', 'hz': 'Herero', 'hy': 'Armenian', 'sid': 'Sidamo', 'hr': 'Croatian', 'ht': 'Haitian', 'hu': 'Hungarian', 'hi': 'Hindi', 'ho': 'Hiri Motu', 'ha': 'Hausa', 'bug': 'Buginese', 'he': 'Hebrew', 'uz': 'Uzbek', 'ur': 'Urdu', 'uk': 'Ukrainian', 'ug': 'Uighur', 'aa': 'Afar', 'ab': 'Abkhazian', 'ae': 'Avestan', 'af': 'Afrikaans', 'ak': 'Akan', 'am': 'Amharic', 'myv': 'Erzya', 'eu': 'Basque', 'as': 'Assamese', 'ar': 'Arabic', 'inh': 'Ingush', 'tpi': 'Tok Pisin', 'myn': 'Mayan', 'ay': 'Aymara', 'kha': 'Khasi', 'az': 'Azerbaijani', 'inc': 'Indic (Other)', 'nl': 'Dutch', 'nn': 'Norwegian Nynorsk', 'no': 'Norwegian', 'na': 'Nauru', 'nb': u'Norwegian Bokm\xe5l', 'nai': 'North American Indian (Other)', 'nd': 'Ndebele, North', 'ne': 'Nepali', 'ng': 'Ndonga', 'ny': 'Nyanja; Chichewa; Chewa', 'nap': 'Neapolitan', 'grb': 'Gerbo', 'grc': 'Greek, Ancient (to 1453)', 'nr': 'Ndebele, South', 'tig': 'Tigre', 'nv': 'Navajo', 'zun': 'Zuni', 'rw': 'Kinyarwanda', 'cpe': 'Creoles and Pidgins, English-based (Other)', 'cpf': 'Creoles and Pidgins, French-based (Other)', 'cpp': 'Creoles and pidgins, Portuguese-based (Other)'} countries={'BD': 'Bangladesh', 'BE': 'Belgium', 'BF': 'Burkina Faso', 'BG': 'Bulgaria', 'BA': 'Bosnia and Herzegovina', 'BB': 'Barbados', 'WF': 'Wallis and Futuna', 'BM': 'Bermuda', 'BN': 'Brunei', 'BO': 'Bolivia', 'BH': 'Bahrain', 'BI': 'Burundi', 'BJ': 'Benin', 'BT': 'Bhutan', 'JM': 'Jamaica', 'BV': 'Bouvet Island', 'BW': 'Botswana', 'WS': 'Samoa', 'BR': 'Brazil', 'BS': 'Bahamas', 'BY': 'Belarus', 'BZ': 'Belize', 'RU': 'Russia', 'RW': 'Rwanda', 'TL': 'Timor-Leste', 'RE': u'R\xe9union', 'TM': 'Turkmenistan', 'TJ': 'Tajikistan', 'RO': 'Romania', 'TK': 'Tokelau', 'GW': 'Guinea-Bissau', 'GU': 'Guam', 'GT': 'Guatemala', 'GS': 'South Georgia and South Sandwich Islands', 'GR': 'Greece', 'GQ': 'Equatorial Guinea', 'GP': 'Guadeloupe', 'JP': 'Japan', 'GY': 'Guyana', 'GF': 'French Guiana', 'GE': 'Georgia', 'GD': 'Grenada', 'GB': 'United Kingdom', 'GA': 'Gabon', 'SV': 'El Salvador', 'GN': 'Guinea', 'GM': 'Gambia', 'GL': 'Greenland', 'GI': 'Gibraltar', 'GH': 'Ghana', 'OM': 'Oman', 'TN': 'Tunisia', 'JO': 'Jordan', 'SP': 'Serbia', 'HR': 'Croatia', 'HT': 'Haiti', 'HU': 'Hungary', 'HK': 'Hong Kong S.A.R., China', 'HN': 'Honduras', 'HM': 'Heard Island and McDonald Islands', 'VE': 'Venezuela', 'PR': 'Puerto Rico', 'PS': 'Palestinian Territory', 'PW': 'Palau', 'PT': 'Portugal', 'SJ': 'Svalbard and Jan Mayen', 'PY': 'Paraguay', 'IQ': 'Iraq', 'PA': 'Panama', 'PF': 'French Polynesia', 'PG': 'Papua New Guinea', 'PE': 'Peru', 'PK': 'Pakistan', 'PH': 'Philippines', 'PN': 'Pitcairn', 'PL': 'Poland', 'PM': 'Saint Pierre and Miquelon', 'ZM': 'Zambia', 'EH': 'Western Sahara', 'EE': 'Estonia', 'EG': 'Egypt', 'ZA': 'South Africa', 'EC': 'Ecuador', 'IT': 'Italy', 'VN': 'Vietnam', 'SB': 'Solomon Islands', 'ET': 'Ethiopia', 'SO': 'Somalia', 'ZW': 'Zimbabwe', 'SA': 'Saudi Arabia', 'ES': 'Spain', 'ER': 'Eritrea', 'MD': 'Moldova', 'MG': 'Madagascar', 'MA': 'Morocco', 'MC': 'Monaco', 'UZ': 'Uzbekistan', 'MM': 'Myanmar', 'ML': 'Mali', 'MO': 'Macao S.A.R. China', 'MN': 'Mongolia', 'MH': 'Marshall Islands', 'MK': 'Macedonia', 'MU': 'Mauritius', 'MT': 'Malta', 'MW': 'Malawi', 'MV': 'Maldives', 'MQ': 'Martinique', 'MP': 'Northern Mariana Islands', 'MS': 'Montserrat', 'MR': 'Mauritania', 'UG': 'Uganda', 'MY': 'Malaysia', 'MX': 'Mexico', 'IL': 'Israel', 'FR': 'France', 'IO': 'British Indian Ocean Territory', 'SH': 'Saint Helena', 'FI': 'Finland', 'FJ': 'Fiji', 'FK': 'Falkland Islands', 'FM': 'Micronesia', 'FO': 'Faroe Islands', 'NI': 'Nicaragua', 'NL': 'Netherlands', 'NO': 'Norway', 'NA': 'Namibia', 'VU': 'Vanuatu', 'NC': 'New Caledonia', 'NE': 'Niger', 'NF': 'Norfolk Island', 'NG': 'Nigeria', 'NZ': 'New Zealand', 'NP': 'Nepal', 'NR': 'Nauru', 'NU': 'Niue', 'CK': 'Cook Islands', 'CI': u"C\xf4te d'Ivoire", 'CH': 'Switzerland', 'CO': 'Colombia', 'CN': 'China', 'CM': 'Cameroon', 'CL': 'Chile', 'CC': 'Cocos Islands', 'CA': 'Canada', 'CG': 'Congo', 'CF': 'Central African Republic', 'CD': 'Democratic Republic of the Congo', 'CZ': 'Czech Republic', 'CY': 'Cyprus', 'CX': 'Christmas Island', 'CR': 'Costa Rica', 'CV': 'Cape Verde', 'CU': 'Cuba', 'SZ': 'Swaziland', 'SY': 'Syria', 'KG': 'Kyrgyzstan', 'KE': 'Kenya', 'SR': 'Suriname', 'KI': 'Kiribati', 'KH': 'Cambodia', 'KN': 'Saint Kitts and Nevis', 'KM': 'Comoros', 'ST': 'Sao Tome and Principe', 'SK': 'Slovakia', 'KR': 'South Korea', 'SI': 'Slovenia', 'KP': 'North Korea', 'KW': 'Kuwait', 'SN': 'Senegal', 'SM': 'San Marino', 'SL': 'Sierra Leone', 'SC': 'Seychelles', 'KZ': 'Kazakhstan', 'KY': 'Cayman Islands', 'SG': 'Singapore', 'SE': 'Sweden', 'SD': 'Sudan', 'DO': 'Dominican Republic', 'DM': 'Dominica', 'DJ': 'Djibouti', 'DK': 'Denmark', 'VG': 'British Virgin Islands', 'DE': 'Germany', 'YE': 'Yemen', 'DZ': 'Algeria', 'US': 'United States', 'UY': 'Uruguay', 'YU': 'Yugoslavia', 'YT': 'Mayotte', 'UM': 'United States Minor Outlying Islands', 'LB': 'Lebanon', 'LC': 'Saint Lucia', 'LA': 'Laos', 'TV': 'Tuvalu', 'TW': 'Taiwan', 'TT': 'Trinidad and Tobago', 'TR': 'Turkey', 'LK': 'Sri Lanka', 'LI': 'Liechtenstein', 'LV': 'Latvia', 'TO': 'Tonga', 'LT': 'Lithuania', 'LU': 'Luxembourg', 'LR': 'Liberia', 'LS': 'Lesotho', 'TH': 'Thailand', 'TF': 'French Southern Territories', 'TG': 'Togo', 'TD': 'Chad', 'TC': 'Turks and Caicos Islands', 'LY': 'Libya', 'VA': 'Vatican', 'VC': 'Saint Vincent and the Grenadines', 'AE': 'United Arab Emirates', 'AD': 'Andorra', 'AG': 'Antigua and Barbuda', 'AF': 'Afghanistan', 'AI': 'Anguilla', 'VI': 'U.S. Virgin Islands', 'IS': 'Iceland', 'IR': 'Iran', 'AM': 'Armenia', 'AL': 'Albania', 'AO': 'Angola', 'AN': 'Netherlands Antilles', 'AQ': 'Antarctica', 'AS': 'American Samoa', 'AR': 'Argentina', 'AU': 'Australia', 'AT': 'Austria', 'AW': 'Aruba', 'IN': 'India', 'TZ': 'Tanzania', 'AZ': 'Azerbaijan', 'IE': 'Ireland', 'ID': 'Indonesia', 'UA': 'Ukraine', 'QA': 'Qatar', 'MZ': 'Mozambique'} months=['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] abbrMonths=['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] days=['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'] abbrDays=['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] dateFormats={'medium': '%d-%%(abbrmonthname)s-%y', 'full': '%%(dayname)s, %%(monthname)s %d, %Y', 'long': '%%(monthname)s %d, %Y', 'short': '%d/%m/%y'} numericSymbols={'group': ',', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': '.', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'} PKA>HrZZturbogears/i18n/data/en_CA.pyc; ȸHIc @s#hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd~***PKK9r&.:.:turbogears/i18n/data/en_GB.py# Formatting configuration for locale en_GB languages={'gv': 'Manx', 'gu': 'Gujarati', 'rom': 'Romany', 'alg': 'Algonquian Languages', 'ale': 'Aleut', 'sco': 'Scots', 'mni': 'Manipuri', 'gd': 'Scottish Gaelic', 'ga': 'Irish', 'mno': 'Manobo Languages', 'osa': 'Osage', 'gn': 'Guarani', 'gl': 'Gallegan', 'mwr': 'Marwari', 'ty': 'Tahitian', 'tw': 'Twi', 'tt': 'Tatar', 'tr': 'Turkish', 'ts': 'Tsonga', 'tn': 'Tswana', 'to': 'Tonga (Tonga Islands)', 'aus': 'Australian Languages', 'av': 'Avaric', 'tk': 'Turkmen', 'th': 'Thai', 'roa': 'Romance (Other)', 'tg': 'Tajik', 'te': 'Telugu', 'uga': 'Ugaritic', 'ta': 'Tamil', 'fat': 'Fanti', 'fan': 'Fang', 'wo': 'Wolof', 'rm': 'Rhaeto-Romance', 'din': 'Dinka', 'bla': 'Siksika', 'cmc': 'Chamic Languages', 'ml': 'Malayalam', 'zh': 'Chinese', 'tem': 'Timne', 'za': 'Zhuang', 'cau': 'Caucasian (Other)', 'zu': 'Zulu', 'ter': 'Tereno', 'tet': 'Tetum', 'mnc': 'Manchu', 'kut': 'Kutenai', 'suk': 'Sukuma', 'kum': 'Kumyk', 'sus': 'Susu', 'new': 'Newari', 'sux': 'Sumerian', 'den': 'Slave', 'men': 'Mende', 'mul': 'Multiple Languages', 'lez': 'Lezghian', 'root': 'Root', 'eka': 'Ekajuk', 'akk': 'Akkadian', 'dra': 'Dravidian (Other)', 'jrb': 'Judeo-Arabic', 'sgn': 'Sign Languages', 'sga': 'Irish, Old (to 900)', 'apa': 'Apache Languages', 'bra': 'Braj', 'chb': 'Chibcha', 'chg': 'Chagatai', 'chk': 'Chuukese', 'chm': 'Mari', 'chn': 'Chinook Jargon', 'cho': 'Choctaw', 'chp': 'Chipewyan', 'chr': 'Cherokee', 'chy': 'Cheyenne', 'ti': 'Tigrinya', 'vot': 'Votic', 'mg': 'Malagasy', 'iba': 'Iban', 'mo': 'Moldavian', 'mn': 'Mongolian', 'mi': 'Maori', 'mh': 'Marshallese', 'mk': 'Macedonian', 'mt': 'Maltese', 'cai': 'Central American Indian (Other)', 'del': 'Delaware', 'ms': 'Malay', 'mr': 'Marathi', 'my': 'Burmese', 'cad': 'Caddo', 'tai': 'Tai (Other)', 'afh': 'Afrihili', 'sit': 'Sino-Tibetan (Other)', 'enm': 'English, Middle (1100-1500)', 'csb': 'Kashubian', 'nyn': 'Nyankole', 'nyo': 'Nyoro', 'nym': 'Nyamwezi', 'sio': 'Siouan Languages', 'map': 'Austronesian', 'mas': 'Masai', 'lah': 'Lahnda', 'lad': 'Ladino', 'fy': 'Frisian', 'snk': 'Soninke', 'fa': 'Persian', 'mad': 'Madurese', 'mag': 'Magahi', 'mai': 'Maithili', 'fi': 'Finnish', 'fj': 'Fijian', 'man': 'Mandingo', 'egy': 'Egyptian (Ancient)', 'znd': 'Zande', 'ss': 'Swati', 'sr': 'Serbian', 'sq': 'Albanian', 'sw': 'Swahili', 'sv': 'Swedish', 'su': 'Sundanese', 'st': 'Sotho, Southern', 'sk': 'Slovak', 'si': 'Sinhalese', 'sh': 'Serbo-Croatian', 'so': 'Somali', 'sn': 'Shona', 'sm': 'Samoan', 'sl': 'Slovenian', 'sc': 'Sardinian', 'sa': 'Sanskrit', 'sg': 'Sango', 'se': 'Northern Sami', 'sd': 'Sindhi', 'zen': 'Zenaga', 'kbd': 'Kabardian', 'afa': 'Afro-Asiatic (Other)', 'lg': 'Ganda', 'lb': 'Luxembourgish', 'fiu': 'Finno - Ugrian (Other)', 'ln': 'Lingala', 'lo': 'Lao', 'li': 'Limburgish', 'byn': 'Blin', 'lt': 'Lithuanian', 'lu': 'Luba-Katanga', 'yi': 'Yiddish', 'non': 'Norse, Old', 'ceb': 'Cebuano', 'yo': 'Yoruba', 'nog': 'Nogai', 'bat': 'Baltic (Other)', 'dak': 'Dakota', 'dar': 'Dargwa', 'day': 'Dayak', 'ssa': 'Nilo-Saharam (Other)', 'kpe': 'Kpelle', 'el': 'Greek', 'eo': 'Esperanto', 'en': 'English', 'lam': 'Lamba', 'ee': 'Ewe', 'mdf': 'Moksha', 'fr': 'French', 'mdr': 'Mandar', 'et': 'Estonian', 'es': 'Spanish', 'ru': 'Russian', 'gon': 'Gondi', 'goh': 'German, Old High (ca.750-1050)', 'sms': 'Skolt Sami', 'smn': 'Inari Sami', 'smj': 'Lule Sami', 'smi': 'Sami languages (Other)', 'got': 'Gothic', 'rn': 'Rundi', 'ro': 'Romanian', 'dsb': 'Lower Sorbian', 'sma': 'Southern Sami', 'gor': 'Gorontalo', 'ast': 'Asturian', 'wal': 'Walamo', 'crh': 'Crimean Turkish; Crimean Tatar', 'ath': 'Athapascan Languages', 'gez': 'Geez', 'xh': 'Xhosa', 'ff': 'Fulah', 'mak': 'Makasar', 'zap': 'Zapotec', 'kok': 'Konkani', 'kos': 'Kosraean', 'fo': 'Faroese', 'tog': 'Tonga (Nyasa)', 'hup': 'Hupa', 'udm': 'Udmurt', 'bej': 'Beja', 'bem': 'Bemba', 'tsi': 'Tsimshian', 'ber': 'Berber', 'nzi': 'Nzima', 'sai': 'South American Indian (Other)', 'ang': 'English, Old (ca.450-1100)', 'pra': 'Prakrit Languages', 'bho': 'Bhojpuri', 'sal': 'Salishan languages', 'pro': u'Proven\xe7al, Old (to 1500)', 'raj': 'Rajasthani', 'sad': 'Sandawe', 'rar': 'Rarotongan', 'rap': 'Rapanui', 'sas': 'Sasak', 'car': 'Carib', 'min': 'Minangkabau', 'mic': 'Micmac', 'efi': 'Efik', 'arn': 'Araucanian', 'ypk': 'Yupik Languages', 'mis': 'Miscellaneous Languages', 'kac': 'Kachin', 'kab': 'Kabyle', 'kaa': 'Kara-Kalpak', 'kam': 'Kamba', 'kar': 'Karen', 'kaw': 'Kawi', 'tyv': 'Tuvinian', 'awa': 'Awadhi', 'ka': 'Georgian', 'doi': 'Dogri', 'kg': 'Kongo', 'kk': 'Kazakh', 'kj': 'Kuanyama', 'ki': 'Kikuyu', 'ko': 'Korean', 'kn': 'Kannada', 'km': 'Khmer', 'kl': 'Kalaallisut', 'ks': 'Kashmiri', 'kr': 'Kanuri', 'kw': 'Cornish', 'kv': 'Komi', 'ku': 'Kurdish', 'ky': 'Kirghiz', 'tkl': 'Tokelau', 'bua': 'Buriat', 'mga': 'Irish, Middle (900-1200)', 'hit': 'Hittite', 'dyu': 'Dyula', 'de': 'German', 'da': 'Danish', 'dz': 'Dzongkha', 'ira': 'Iranian', 'dv': 'Divehi', 'hil': 'Hiligaynon', 'him': 'Himachali', 'gem': 'Germanic (Other)', 'crp': 'Creoles and Pidgins (Other)', 'qu': 'Quechua', 'bas': 'Basa', 'gba': 'Gbaya', 'bad': 'Banda', 'ban': 'Balinese', 'bal': 'Baluchi', 'bam': 'Bambara', 'shn': 'Shan', 'bai': 'Bamileke Languages', 'arp': 'Arapaho', 'art': 'Artificial (Other)', 'arw': 'Arawak', 'arc': 'Aramaic', 'sem': 'Semitic (Other)', 'sel': 'Selkup', 'nub': 'Nubian Languages', 'btk': 'Batak', 'lus': 'Lushai', 'mus': 'Creek', 'lua': 'Luba-Lulua', 'iro': 'Iroquoian languages', 'lui': 'Luiseno', 'mun': 'Munda Languages', 'lun': 'Lunda', 'luo': 'Luo', 'wa': 'Walloon', 'tup': 'Tupi languages', 'jv': 'Javanese', 'tut': 'Altaic (Other)', 'tum': 'Tumbuka', 'ja': 'Japanese', 'cop': 'Coptic', 'ilo': 'Iloko', 'la': 'Latin', 'gwi': "Gwich'in", 'und': 'Undetermined', 'tli': 'Tlingit', 'ch': 'Chamorro', 'co': 'Corsican', 'ca': 'Catalan', 'ce': 'Chechen', 'pon': 'Pohnpeian', 'cy': 'Welsh', 'sah': 'Yakut', 'cs': 'Czech', 'cr': 'Cree', 'bnt': 'Bantu', 'cv': 'Chuvash', 'cu': 'Church Slavic', 'lv': 'Latvian', 'dum': 'Dutch, Middle (ca. 1050-1350)', 'pt': 'Portuguese', 'dua': 'Duala', 'fro': 'French, Old (842-ca.1400)', 'yap': 'Yapese', 'frm': 'French, Middle (ca.1400-1600)', 'tiv': 'Tiv', 'yao': 'Yao', 'pa': 'Punjabi', 'xal': 'Kalmyk', 'pi': 'Pali', 'pl': 'Polish', 'gay': 'Gayo', 'oto': 'Otomian Languages', 'ota': 'Turkish, Ottoman (1500-1928)', 'hmn': 'Hmong', 'an': 'Aragonese', 'gaa': 'Ga', 'fur': 'Friulian', 'khi': 'Khoisan (Other)', 'sla': 'Slavic (Other)', 've': 'Venda', 'vi': 'Vietnamese', 'is': 'Icelandic', 'kho': 'Khotanese', 'iu': 'Inuktitut', 'it': 'Italian', 'vo': u'Volap\xfck', 'ii': 'Sichuan Yi', 'ik': 'Inupiaq', 'io': 'Ido', 'ine': 'Indo-European (Other)', 'ia': 'Interlingua', 'jpr': 'Judeo-Persian', 'ie': 'Interlingue', 'id': 'Indonesian', 'ig': 'Igbo', 'pap': 'Papiamento', 'ewo': 'Ewondo', 'pau': 'Palauan', 'paa': 'Papuan (Other)', 'pag': 'Pangasinan', 'sat': 'Santali', 'pal': 'Pahlavi', 'pam': 'Pampanga', 'phi': 'Philippine (Other)', 'cel': 'Celtic (Other)', 'phn': 'Phoenician', 'nic': 'Niger - Kordofanian (Other)', 'nia': 'Nias', 'dgr': 'Dogrib', 'syr': 'Syriac', 'niu': 'Niuean', 'jbo': 'Lojban', 'nah': 'Nahuatl', 'sam': 'Samaritan Aramaic', 'hai': 'Haida', 'gmh': 'German, Middle High (ca.1050-1500)', 'cus': 'Cushitic (Other)', 'wen': 'Sorbian Languages', 'ady': 'Adyghe', 'elx': 'Elamite', 'ada': 'Adangme', 'haw': 'Hawaiian', 'bin': 'Bini', 'bik': 'Bikol', 'mos': 'Mossi', 'moh': 'Mohawk', 'tl': 'Tagalog', 'tvl': 'Tuvalu', 'ijo': 'Ijo', 'kmb': 'Kimbundu', 'peo': 'Persian Old (ca.600-400 B.C.)', 'umb': 'Umbundu', 'tmh': 'Tamashek', 'fon': 'Fon', 'hsb': 'Upper Sorbian', 'be': 'Belarusian', 'bg': 'Bulgarian', 'ba': 'Bashkir', 'ps': 'Pashto (Pushto)', 'bm': 'Bambara', 'bn': 'Bengali', 'bo': 'Tibetan', 'bh': 'Bihari', 'bi': 'Bislama', 'br': 'Breton', 'bs': 'Bosnian', 'om': 'Oromo', 'oj': 'Ojibwa', 'ace': 'Achinese', 'ach': 'Acoli', 'oc': u'Occitan (post 1500); Proven\xe7al', 'kru': 'Kurukh', 'srr': 'Serer', 'kro': 'Kru', 'krc': 'Karachay-Balkar', 'nds': 'Low German; Low Saxon', 'os': 'Ossetic', 'or': 'Oriya', 'sog': 'Sogdien', 'nso': 'Sotho, Northern', 'son': 'Songhai', 'vai': 'Vai', 'wak': 'Wakashan Languages', 'lol': 'Mongo', 'mkh': 'Mon-Khmer (Other)', 'loz': 'Lozi', 'gil': 'Gilbertese', 'was': 'Washo', 'war': 'Waray', 'hz': 'Herero', 'hy': 'Armenian', 'sid': 'Sidamo', 'hr': 'Croatian', 'ht': 'Haitian', 'hu': 'Hungarian', 'hi': 'Hindi', 'ho': 'Hiri Motu', 'ha': 'Hausa', 'bug': 'Buginese', 'he': 'Hebrew', 'uz': 'Uzbek', 'ur': 'Urdu', 'uk': 'Ukrainian', 'ug': 'Uighur', 'aa': 'Afar', 'ab': 'Abkhazian', 'ae': 'Avestan', 'af': 'Afrikaans', 'ak': 'Akan', 'am': 'Amharic', 'myv': 'Erzya', 'eu': 'Basque', 'as': 'Assamese', 'ar': 'Arabic', 'inh': 'Ingush', 'tpi': 'Tok Pisin', 'myn': 'Mayan', 'ay': 'Aymara', 'kha': 'Khasi', 'az': 'Azerbaijani', 'inc': 'Indic (Other)', 'nl': 'Dutch', 'nn': 'Norwegian Nynorsk', 'no': 'Norwegian', 'na': 'Nauru', 'nb': u'Norwegian Bokm\xe5l', 'nai': 'North American Indian (Other)', 'nd': 'Ndebele, North', 'ne': 'Nepali', 'ng': 'Ndonga', 'ny': 'Nyanja; Chichewa; Chewa', 'nap': 'Neapolitan', 'grb': 'Gerbo', 'grc': 'Greek, Ancient (to 1453)', 'nr': 'Ndebele, South', 'tig': 'Tigre', 'nv': 'Navajo', 'zun': 'Zuni', 'rw': 'Kinyarwanda', 'cpe': 'Creoles and Pidgins, English-based (Other)', 'cpf': 'Creoles and Pidgins, French-based (Other)', 'cpp': 'Creoles and pidgins, Portuguese-based (Other)'} countries={'BD': 'Bangladesh', 'BE': 'Belgium', 'BF': 'Burkina Faso', 'BG': 'Bulgaria', 'BA': 'Bosnia and Herzegovina', 'BB': 'Barbados', 'WF': 'Wallis and Futuna', 'BM': 'Bermuda', 'BN': 'Brunei', 'BO': 'Bolivia', 'BH': 'Bahrain', 'BI': 'Burundi', 'BJ': 'Benin', 'BT': 'Bhutan', 'JM': 'Jamaica', 'BV': 'Bouvet Island', 'BW': 'Botswana', 'WS': 'Samoa', 'BR': 'Brazil', 'BS': 'Bahamas', 'BY': 'Belarus', 'BZ': 'Belize', 'RU': 'Russia', 'RW': 'Rwanda', 'TL': 'Timor-Leste', 'RE': u'R\xe9union', 'TM': 'Turkmenistan', 'TJ': 'Tajikistan', 'RO': 'Romania', 'TK': 'Tokelau', 'GW': 'Guinea-Bissau', 'GU': 'Guam', 'GT': 'Guatemala', 'GS': 'South Georgia and South Sandwich Islands', 'GR': 'Greece', 'GQ': 'Equatorial Guinea', 'GP': 'Guadeloupe', 'JP': 'Japan', 'GY': 'Guyana', 'GF': 'French Guiana', 'GE': 'Georgia', 'GD': 'Grenada', 'GB': 'United Kingdom', 'GA': 'Gabon', 'SV': 'El Salvador', 'GN': 'Guinea', 'GM': 'Gambia', 'GL': 'Greenland', 'GI': 'Gibraltar', 'GH': 'Ghana', 'OM': 'Oman', 'TN': 'Tunisia', 'JO': 'Jordan', 'SP': 'Serbia', 'HR': 'Croatia', 'HT': 'Haiti', 'HU': 'Hungary', 'HK': 'Hong Kong S.A.R., China', 'HN': 'Honduras', 'HM': 'Heard Island and McDonald Islands', 'VE': 'Venezuela', 'PR': 'Puerto Rico', 'PS': 'Palestinian Territory', 'PW': 'Palau', 'PT': 'Portugal', 'SJ': 'Svalbard and Jan Mayen', 'PY': 'Paraguay', 'IQ': 'Iraq', 'PA': 'Panama', 'PF': 'French Polynesia', 'PG': 'Papua New Guinea', 'PE': 'Peru', 'PK': 'Pakistan', 'PH': 'Philippines', 'PN': 'Pitcairn', 'PL': 'Poland', 'PM': 'Saint Pierre and Miquelon', 'ZM': 'Zambia', 'EH': 'Western Sahara', 'EE': 'Estonia', 'EG': 'Egypt', 'ZA': 'South Africa', 'EC': 'Ecuador', 'IT': 'Italy', 'VN': 'Vietnam', 'SB': 'Solomon Islands', 'ET': 'Ethiopia', 'SO': 'Somalia', 'ZW': 'Zimbabwe', 'SA': 'Saudi Arabia', 'ES': 'Spain', 'ER': 'Eritrea', 'MD': 'Moldova', 'MG': 'Madagascar', 'MA': 'Morocco', 'MC': 'Monaco', 'UZ': 'Uzbekistan', 'MM': 'Myanmar', 'ML': 'Mali', 'MO': 'Macao S.A.R. China', 'MN': 'Mongolia', 'MH': 'Marshall Islands', 'MK': 'Macedonia', 'MU': 'Mauritius', 'MT': 'Malta', 'MW': 'Malawi', 'MV': 'Maldives', 'MQ': 'Martinique', 'MP': 'Northern Mariana Islands', 'MS': 'Montserrat', 'MR': 'Mauritania', 'UG': 'Uganda', 'MY': 'Malaysia', 'MX': 'Mexico', 'IL': 'Israel', 'FR': 'France', 'IO': 'British Indian Ocean Territory', 'SH': 'Saint Helena', 'FI': 'Finland', 'FJ': 'Fiji', 'FK': 'Falkland Islands', 'FM': 'Micronesia', 'FO': 'Faroe Islands', 'NI': 'Nicaragua', 'NL': 'Netherlands', 'NO': 'Norway', 'NA': 'Namibia', 'VU': 'Vanuatu', 'NC': 'New Caledonia', 'NE': 'Niger', 'NF': 'Norfolk Island', 'NG': 'Nigeria', 'NZ': 'New Zealand', 'NP': 'Nepal', 'NR': 'Nauru', 'NU': 'Niue', 'CK': 'Cook Islands', 'CI': u"C\xf4te d'Ivoire", 'CH': 'Switzerland', 'CO': 'Colombia', 'CN': 'China', 'CM': 'Cameroon', 'CL': 'Chile', 'CC': 'Cocos Islands', 'CA': 'Canada', 'CG': 'Congo', 'CF': 'Central African Republic', 'CD': 'Democratic Republic of the Congo', 'CZ': 'Czech Republic', 'CY': 'Cyprus', 'CX': 'Christmas Island', 'CR': 'Costa Rica', 'CV': 'Cape Verde', 'CU': 'Cuba', 'SZ': 'Swaziland', 'SY': 'Syria', 'KG': 'Kyrgyzstan', 'KE': 'Kenya', 'SR': 'Suriname', 'KI': 'Kiribati', 'KH': 'Cambodia', 'KN': 'Saint Kitts and Nevis', 'KM': 'Comoros', 'ST': 'Sao Tome and Principe', 'SK': 'Slovakia', 'KR': 'South Korea', 'SI': 'Slovenia', 'KP': 'North Korea', 'KW': 'Kuwait', 'SN': 'Senegal', 'SM': 'San Marino', 'SL': 'Sierra Leone', 'SC': 'Seychelles', 'KZ': 'Kazakhstan', 'KY': 'Cayman Islands', 'SG': 'Singapore', 'SE': 'Sweden', 'SD': 'Sudan', 'DO': 'Dominican Republic', 'DM': 'Dominica', 'DJ': 'Djibouti', 'DK': 'Denmark', 'VG': 'British Virgin Islands', 'DE': 'Germany', 'YE': 'Yemen', 'DZ': 'Algeria', 'US': 'United States', 'UY': 'Uruguay', 'YU': 'Yugoslavia', 'YT': 'Mayotte', 'UM': 'United States Minor Outlying Islands', 'LB': 'Lebanon', 'LC': 'Saint Lucia', 'LA': 'Laos', 'TV': 'Tuvalu', 'TW': 'Taiwan', 'TT': 'Trinidad and Tobago', 'TR': 'Turkey', 'LK': 'Sri Lanka', 'LI': 'Liechtenstein', 'LV': 'Latvia', 'TO': 'Tonga', 'LT': 'Lithuania', 'LU': 'Luxembourg', 'LR': 'Liberia', 'LS': 'Lesotho', 'TH': 'Thailand', 'TF': 'French Southern Territories', 'TG': 'Togo', 'TD': 'Chad', 'TC': 'Turks and Caicos Islands', 'LY': 'Libya', 'VA': 'Vatican', 'VC': 'Saint Vincent and the Grenadines', 'AE': 'United Arab Emirates', 'AD': 'Andorra', 'AG': 'Antigua and Barbuda', 'AF': 'Afghanistan', 'AI': 'Anguilla', 'VI': 'U.S. Virgin Islands', 'IS': 'Iceland', 'IR': 'Iran', 'AM': 'Armenia', 'AL': 'Albania', 'AO': 'Angola', 'AN': 'Netherlands Antilles', 'AQ': 'Antarctica', 'AS': 'American Samoa', 'AR': 'Argentina', 'AU': 'Australia', 'AT': 'Austria', 'AW': 'Aruba', 'IN': 'India', 'TZ': 'Tanzania', 'AZ': 'Azerbaijan', 'IE': 'Ireland', 'ID': 'Indonesia', 'UA': 'Ukraine', 'QA': 'Qatar', 'MZ': 'Mozambique'} months=['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] abbrMonths=['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] days=['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'] abbrDays=['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] dateFormats={'medium': '%d %%(abbrmonthname)s %Y', 'full': '%%(dayname)s, %d %%(monthname)s %Y', 'long': '%d %%(monthname)s %Y', 'short': '%d/%m/%Y'} numericSymbols={'group': ',', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': '.', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'} PKA>p2ZZturbogears/i18n/data/en_GB.pyc; ȸHIc @s#hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd~***PKK9`2.:.:turbogears/i18n/data/en_HK.py# Formatting configuration for locale en_HK languages={'gv': 'Manx', 'gu': 'Gujarati', 'rom': 'Romany', 'alg': 'Algonquian Languages', 'ale': 'Aleut', 'sco': 'Scots', 'mni': 'Manipuri', 'gd': 'Scottish Gaelic', 'ga': 'Irish', 'mno': 'Manobo Languages', 'osa': 'Osage', 'gn': 'Guarani', 'gl': 'Gallegan', 'mwr': 'Marwari', 'ty': 'Tahitian', 'tw': 'Twi', 'tt': 'Tatar', 'tr': 'Turkish', 'ts': 'Tsonga', 'tn': 'Tswana', 'to': 'Tonga (Tonga Islands)', 'aus': 'Australian Languages', 'av': 'Avaric', 'tk': 'Turkmen', 'th': 'Thai', 'roa': 'Romance (Other)', 'tg': 'Tajik', 'te': 'Telugu', 'uga': 'Ugaritic', 'ta': 'Tamil', 'fat': 'Fanti', 'fan': 'Fang', 'wo': 'Wolof', 'rm': 'Rhaeto-Romance', 'din': 'Dinka', 'bla': 'Siksika', 'cmc': 'Chamic Languages', 'ml': 'Malayalam', 'zh': 'Chinese', 'tem': 'Timne', 'za': 'Zhuang', 'cau': 'Caucasian (Other)', 'zu': 'Zulu', 'ter': 'Tereno', 'tet': 'Tetum', 'mnc': 'Manchu', 'kut': 'Kutenai', 'suk': 'Sukuma', 'kum': 'Kumyk', 'sus': 'Susu', 'new': 'Newari', 'sux': 'Sumerian', 'den': 'Slave', 'men': 'Mende', 'mul': 'Multiple Languages', 'lez': 'Lezghian', 'root': 'Root', 'eka': 'Ekajuk', 'akk': 'Akkadian', 'dra': 'Dravidian (Other)', 'jrb': 'Judeo-Arabic', 'sgn': 'Sign Languages', 'sga': 'Irish, Old (to 900)', 'apa': 'Apache Languages', 'bra': 'Braj', 'chb': 'Chibcha', 'chg': 'Chagatai', 'chk': 'Chuukese', 'chm': 'Mari', 'chn': 'Chinook Jargon', 'cho': 'Choctaw', 'chp': 'Chipewyan', 'chr': 'Cherokee', 'chy': 'Cheyenne', 'ti': 'Tigrinya', 'vot': 'Votic', 'mg': 'Malagasy', 'iba': 'Iban', 'mo': 'Moldavian', 'mn': 'Mongolian', 'mi': 'Maori', 'mh': 'Marshallese', 'mk': 'Macedonian', 'mt': 'Maltese', 'cai': 'Central American Indian (Other)', 'del': 'Delaware', 'ms': 'Malay', 'mr': 'Marathi', 'my': 'Burmese', 'cad': 'Caddo', 'tai': 'Tai (Other)', 'afh': 'Afrihili', 'sit': 'Sino-Tibetan (Other)', 'enm': 'English, Middle (1100-1500)', 'csb': 'Kashubian', 'nyn': 'Nyankole', 'nyo': 'Nyoro', 'nym': 'Nyamwezi', 'sio': 'Siouan Languages', 'map': 'Austronesian', 'mas': 'Masai', 'lah': 'Lahnda', 'lad': 'Ladino', 'fy': 'Frisian', 'snk': 'Soninke', 'fa': 'Persian', 'mad': 'Madurese', 'mag': 'Magahi', 'mai': 'Maithili', 'fi': 'Finnish', 'fj': 'Fijian', 'man': 'Mandingo', 'egy': 'Egyptian (Ancient)', 'znd': 'Zande', 'ss': 'Swati', 'sr': 'Serbian', 'sq': 'Albanian', 'sw': 'Swahili', 'sv': 'Swedish', 'su': 'Sundanese', 'st': 'Sotho, Southern', 'sk': 'Slovak', 'si': 'Sinhalese', 'sh': 'Serbo-Croatian', 'so': 'Somali', 'sn': 'Shona', 'sm': 'Samoan', 'sl': 'Slovenian', 'sc': 'Sardinian', 'sa': 'Sanskrit', 'sg': 'Sango', 'se': 'Northern Sami', 'sd': 'Sindhi', 'zen': 'Zenaga', 'kbd': 'Kabardian', 'afa': 'Afro-Asiatic (Other)', 'lg': 'Ganda', 'lb': 'Luxembourgish', 'fiu': 'Finno - Ugrian (Other)', 'ln': 'Lingala', 'lo': 'Lao', 'li': 'Limburgish', 'byn': 'Blin', 'lt': 'Lithuanian', 'lu': 'Luba-Katanga', 'yi': 'Yiddish', 'non': 'Norse, Old', 'ceb': 'Cebuano', 'yo': 'Yoruba', 'nog': 'Nogai', 'bat': 'Baltic (Other)', 'dak': 'Dakota', 'dar': 'Dargwa', 'day': 'Dayak', 'ssa': 'Nilo-Saharam (Other)', 'kpe': 'Kpelle', 'el': 'Greek', 'eo': 'Esperanto', 'en': 'English', 'lam': 'Lamba', 'ee': 'Ewe', 'mdf': 'Moksha', 'fr': 'French', 'mdr': 'Mandar', 'et': 'Estonian', 'es': 'Spanish', 'ru': 'Russian', 'gon': 'Gondi', 'goh': 'German, Old High (ca.750-1050)', 'sms': 'Skolt Sami', 'smn': 'Inari Sami', 'smj': 'Lule Sami', 'smi': 'Sami languages (Other)', 'got': 'Gothic', 'rn': 'Rundi', 'ro': 'Romanian', 'dsb': 'Lower Sorbian', 'sma': 'Southern Sami', 'gor': 'Gorontalo', 'ast': 'Asturian', 'wal': 'Walamo', 'crh': 'Crimean Turkish; Crimean Tatar', 'ath': 'Athapascan Languages', 'gez': 'Geez', 'xh': 'Xhosa', 'ff': 'Fulah', 'mak': 'Makasar', 'zap': 'Zapotec', 'kok': 'Konkani', 'kos': 'Kosraean', 'fo': 'Faroese', 'tog': 'Tonga (Nyasa)', 'hup': 'Hupa', 'udm': 'Udmurt', 'bej': 'Beja', 'bem': 'Bemba', 'tsi': 'Tsimshian', 'ber': 'Berber', 'nzi': 'Nzima', 'sai': 'South American Indian (Other)', 'ang': 'English, Old (ca.450-1100)', 'pra': 'Prakrit Languages', 'bho': 'Bhojpuri', 'sal': 'Salishan languages', 'pro': u'Proven\xe7al, Old (to 1500)', 'raj': 'Rajasthani', 'sad': 'Sandawe', 'rar': 'Rarotongan', 'rap': 'Rapanui', 'sas': 'Sasak', 'car': 'Carib', 'min': 'Minangkabau', 'mic': 'Micmac', 'efi': 'Efik', 'arn': 'Araucanian', 'ypk': 'Yupik Languages', 'mis': 'Miscellaneous Languages', 'kac': 'Kachin', 'kab': 'Kabyle', 'kaa': 'Kara-Kalpak', 'kam': 'Kamba', 'kar': 'Karen', 'kaw': 'Kawi', 'tyv': 'Tuvinian', 'awa': 'Awadhi', 'ka': 'Georgian', 'doi': 'Dogri', 'kg': 'Kongo', 'kk': 'Kazakh', 'kj': 'Kuanyama', 'ki': 'Kikuyu', 'ko': 'Korean', 'kn': 'Kannada', 'km': 'Khmer', 'kl': 'Kalaallisut', 'ks': 'Kashmiri', 'kr': 'Kanuri', 'kw': 'Cornish', 'kv': 'Komi', 'ku': 'Kurdish', 'ky': 'Kirghiz', 'tkl': 'Tokelau', 'bua': 'Buriat', 'mga': 'Irish, Middle (900-1200)', 'hit': 'Hittite', 'dyu': 'Dyula', 'de': 'German', 'da': 'Danish', 'dz': 'Dzongkha', 'ira': 'Iranian', 'dv': 'Divehi', 'hil': 'Hiligaynon', 'him': 'Himachali', 'gem': 'Germanic (Other)', 'crp': 'Creoles and Pidgins (Other)', 'qu': 'Quechua', 'bas': 'Basa', 'gba': 'Gbaya', 'bad': 'Banda', 'ban': 'Balinese', 'bal': 'Baluchi', 'bam': 'Bambara', 'shn': 'Shan', 'bai': 'Bamileke Languages', 'arp': 'Arapaho', 'art': 'Artificial (Other)', 'arw': 'Arawak', 'arc': 'Aramaic', 'sem': 'Semitic (Other)', 'sel': 'Selkup', 'nub': 'Nubian Languages', 'btk': 'Batak', 'lus': 'Lushai', 'mus': 'Creek', 'lua': 'Luba-Lulua', 'iro': 'Iroquoian languages', 'lui': 'Luiseno', 'mun': 'Munda Languages', 'lun': 'Lunda', 'luo': 'Luo', 'wa': 'Walloon', 'tup': 'Tupi languages', 'jv': 'Javanese', 'tut': 'Altaic (Other)', 'tum': 'Tumbuka', 'ja': 'Japanese', 'cop': 'Coptic', 'ilo': 'Iloko', 'la': 'Latin', 'gwi': "Gwich'in", 'und': 'Undetermined', 'tli': 'Tlingit', 'ch': 'Chamorro', 'co': 'Corsican', 'ca': 'Catalan', 'ce': 'Chechen', 'pon': 'Pohnpeian', 'cy': 'Welsh', 'sah': 'Yakut', 'cs': 'Czech', 'cr': 'Cree', 'bnt': 'Bantu', 'cv': 'Chuvash', 'cu': 'Church Slavic', 'lv': 'Latvian', 'dum': 'Dutch, Middle (ca. 1050-1350)', 'pt': 'Portuguese', 'dua': 'Duala', 'fro': 'French, Old (842-ca.1400)', 'yap': 'Yapese', 'frm': 'French, Middle (ca.1400-1600)', 'tiv': 'Tiv', 'yao': 'Yao', 'pa': 'Punjabi', 'xal': 'Kalmyk', 'pi': 'Pali', 'pl': 'Polish', 'gay': 'Gayo', 'oto': 'Otomian Languages', 'ota': 'Turkish, Ottoman (1500-1928)', 'hmn': 'Hmong', 'an': 'Aragonese', 'gaa': 'Ga', 'fur': 'Friulian', 'khi': 'Khoisan (Other)', 'sla': 'Slavic (Other)', 've': 'Venda', 'vi': 'Vietnamese', 'is': 'Icelandic', 'kho': 'Khotanese', 'iu': 'Inuktitut', 'it': 'Italian', 'vo': u'Volap\xfck', 'ii': 'Sichuan Yi', 'ik': 'Inupiaq', 'io': 'Ido', 'ine': 'Indo-European (Other)', 'ia': 'Interlingua', 'jpr': 'Judeo-Persian', 'ie': 'Interlingue', 'id': 'Indonesian', 'ig': 'Igbo', 'pap': 'Papiamento', 'ewo': 'Ewondo', 'pau': 'Palauan', 'paa': 'Papuan (Other)', 'pag': 'Pangasinan', 'sat': 'Santali', 'pal': 'Pahlavi', 'pam': 'Pampanga', 'phi': 'Philippine (Other)', 'cel': 'Celtic (Other)', 'phn': 'Phoenician', 'nic': 'Niger - Kordofanian (Other)', 'nia': 'Nias', 'dgr': 'Dogrib', 'syr': 'Syriac', 'niu': 'Niuean', 'jbo': 'Lojban', 'nah': 'Nahuatl', 'sam': 'Samaritan Aramaic', 'hai': 'Haida', 'gmh': 'German, Middle High (ca.1050-1500)', 'cus': 'Cushitic (Other)', 'wen': 'Sorbian Languages', 'ady': 'Adyghe', 'elx': 'Elamite', 'ada': 'Adangme', 'haw': 'Hawaiian', 'bin': 'Bini', 'bik': 'Bikol', 'mos': 'Mossi', 'moh': 'Mohawk', 'tl': 'Tagalog', 'tvl': 'Tuvalu', 'ijo': 'Ijo', 'kmb': 'Kimbundu', 'peo': 'Persian Old (ca.600-400 B.C.)', 'umb': 'Umbundu', 'tmh': 'Tamashek', 'fon': 'Fon', 'hsb': 'Upper Sorbian', 'be': 'Belarusian', 'bg': 'Bulgarian', 'ba': 'Bashkir', 'ps': 'Pashto (Pushto)', 'bm': 'Bambara', 'bn': 'Bengali', 'bo': 'Tibetan', 'bh': 'Bihari', 'bi': 'Bislama', 'br': 'Breton', 'bs': 'Bosnian', 'om': 'Oromo', 'oj': 'Ojibwa', 'ace': 'Achinese', 'ach': 'Acoli', 'oc': u'Occitan (post 1500); Proven\xe7al', 'kru': 'Kurukh', 'srr': 'Serer', 'kro': 'Kru', 'krc': 'Karachay-Balkar', 'nds': 'Low German; Low Saxon', 'os': 'Ossetic', 'or': 'Oriya', 'sog': 'Sogdien', 'nso': 'Sotho, Northern', 'son': 'Songhai', 'vai': 'Vai', 'wak': 'Wakashan Languages', 'lol': 'Mongo', 'mkh': 'Mon-Khmer (Other)', 'loz': 'Lozi', 'gil': 'Gilbertese', 'was': 'Washo', 'war': 'Waray', 'hz': 'Herero', 'hy': 'Armenian', 'sid': 'Sidamo', 'hr': 'Croatian', 'ht': 'Haitian', 'hu': 'Hungarian', 'hi': 'Hindi', 'ho': 'Hiri Motu', 'ha': 'Hausa', 'bug': 'Buginese', 'he': 'Hebrew', 'uz': 'Uzbek', 'ur': 'Urdu', 'uk': 'Ukrainian', 'ug': 'Uighur', 'aa': 'Afar', 'ab': 'Abkhazian', 'ae': 'Avestan', 'af': 'Afrikaans', 'ak': 'Akan', 'am': 'Amharic', 'myv': 'Erzya', 'eu': 'Basque', 'as': 'Assamese', 'ar': 'Arabic', 'inh': 'Ingush', 'tpi': 'Tok Pisin', 'myn': 'Mayan', 'ay': 'Aymara', 'kha': 'Khasi', 'az': 'Azerbaijani', 'inc': 'Indic (Other)', 'nl': 'Dutch', 'nn': 'Norwegian Nynorsk', 'no': 'Norwegian', 'na': 'Nauru', 'nb': u'Norwegian Bokm\xe5l', 'nai': 'North American Indian (Other)', 'nd': 'Ndebele, North', 'ne': 'Nepali', 'ng': 'Ndonga', 'ny': 'Nyanja; Chichewa; Chewa', 'nap': 'Neapolitan', 'grb': 'Gerbo', 'grc': 'Greek, Ancient (to 1453)', 'nr': 'Ndebele, South', 'tig': 'Tigre', 'nv': 'Navajo', 'zun': 'Zuni', 'rw': 'Kinyarwanda', 'cpe': 'Creoles and Pidgins, English-based (Other)', 'cpf': 'Creoles and Pidgins, French-based (Other)', 'cpp': 'Creoles and pidgins, Portuguese-based (Other)'} countries={'BD': 'Bangladesh', 'BE': 'Belgium', 'BF': 'Burkina Faso', 'BG': 'Bulgaria', 'BA': 'Bosnia and Herzegovina', 'BB': 'Barbados', 'WF': 'Wallis and Futuna', 'BM': 'Bermuda', 'BN': 'Brunei', 'BO': 'Bolivia', 'BH': 'Bahrain', 'BI': 'Burundi', 'BJ': 'Benin', 'BT': 'Bhutan', 'JM': 'Jamaica', 'BV': 'Bouvet Island', 'BW': 'Botswana', 'WS': 'Samoa', 'BR': 'Brazil', 'BS': 'Bahamas', 'BY': 'Belarus', 'BZ': 'Belize', 'RU': 'Russia', 'RW': 'Rwanda', 'TL': 'Timor-Leste', 'RE': u'R\xe9union', 'TM': 'Turkmenistan', 'TJ': 'Tajikistan', 'RO': 'Romania', 'TK': 'Tokelau', 'GW': 'Guinea-Bissau', 'GU': 'Guam', 'GT': 'Guatemala', 'GS': 'South Georgia and South Sandwich Islands', 'GR': 'Greece', 'GQ': 'Equatorial Guinea', 'GP': 'Guadeloupe', 'JP': 'Japan', 'GY': 'Guyana', 'GF': 'French Guiana', 'GE': 'Georgia', 'GD': 'Grenada', 'GB': 'United Kingdom', 'GA': 'Gabon', 'SV': 'El Salvador', 'GN': 'Guinea', 'GM': 'Gambia', 'GL': 'Greenland', 'GI': 'Gibraltar', 'GH': 'Ghana', 'OM': 'Oman', 'TN': 'Tunisia', 'JO': 'Jordan', 'SP': 'Serbia', 'HR': 'Croatia', 'HT': 'Haiti', 'HU': 'Hungary', 'HK': 'Hong Kong S.A.R., China', 'HN': 'Honduras', 'HM': 'Heard Island and McDonald Islands', 'VE': 'Venezuela', 'PR': 'Puerto Rico', 'PS': 'Palestinian Territory', 'PW': 'Palau', 'PT': 'Portugal', 'SJ': 'Svalbard and Jan Mayen', 'PY': 'Paraguay', 'IQ': 'Iraq', 'PA': 'Panama', 'PF': 'French Polynesia', 'PG': 'Papua New Guinea', 'PE': 'Peru', 'PK': 'Pakistan', 'PH': 'Philippines', 'PN': 'Pitcairn', 'PL': 'Poland', 'PM': 'Saint Pierre and Miquelon', 'ZM': 'Zambia', 'EH': 'Western Sahara', 'EE': 'Estonia', 'EG': 'Egypt', 'ZA': 'South Africa', 'EC': 'Ecuador', 'IT': 'Italy', 'VN': 'Vietnam', 'SB': 'Solomon Islands', 'ET': 'Ethiopia', 'SO': 'Somalia', 'ZW': 'Zimbabwe', 'SA': 'Saudi Arabia', 'ES': 'Spain', 'ER': 'Eritrea', 'MD': 'Moldova', 'MG': 'Madagascar', 'MA': 'Morocco', 'MC': 'Monaco', 'UZ': 'Uzbekistan', 'MM': 'Myanmar', 'ML': 'Mali', 'MO': 'Macao S.A.R. China', 'MN': 'Mongolia', 'MH': 'Marshall Islands', 'MK': 'Macedonia', 'MU': 'Mauritius', 'MT': 'Malta', 'MW': 'Malawi', 'MV': 'Maldives', 'MQ': 'Martinique', 'MP': 'Northern Mariana Islands', 'MS': 'Montserrat', 'MR': 'Mauritania', 'UG': 'Uganda', 'MY': 'Malaysia', 'MX': 'Mexico', 'IL': 'Israel', 'FR': 'France', 'IO': 'British Indian Ocean Territory', 'SH': 'Saint Helena', 'FI': 'Finland', 'FJ': 'Fiji', 'FK': 'Falkland Islands', 'FM': 'Micronesia', 'FO': 'Faroe Islands', 'NI': 'Nicaragua', 'NL': 'Netherlands', 'NO': 'Norway', 'NA': 'Namibia', 'VU': 'Vanuatu', 'NC': 'New Caledonia', 'NE': 'Niger', 'NF': 'Norfolk Island', 'NG': 'Nigeria', 'NZ': 'New Zealand', 'NP': 'Nepal', 'NR': 'Nauru', 'NU': 'Niue', 'CK': 'Cook Islands', 'CI': u"C\xf4te d'Ivoire", 'CH': 'Switzerland', 'CO': 'Colombia', 'CN': 'China', 'CM': 'Cameroon', 'CL': 'Chile', 'CC': 'Cocos Islands', 'CA': 'Canada', 'CG': 'Congo', 'CF': 'Central African Republic', 'CD': 'Democratic Republic of the Congo', 'CZ': 'Czech Republic', 'CY': 'Cyprus', 'CX': 'Christmas Island', 'CR': 'Costa Rica', 'CV': 'Cape Verde', 'CU': 'Cuba', 'SZ': 'Swaziland', 'SY': 'Syria', 'KG': 'Kyrgyzstan', 'KE': 'Kenya', 'SR': 'Suriname', 'KI': 'Kiribati', 'KH': 'Cambodia', 'KN': 'Saint Kitts and Nevis', 'KM': 'Comoros', 'ST': 'Sao Tome and Principe', 'SK': 'Slovakia', 'KR': 'South Korea', 'SI': 'Slovenia', 'KP': 'North Korea', 'KW': 'Kuwait', 'SN': 'Senegal', 'SM': 'San Marino', 'SL': 'Sierra Leone', 'SC': 'Seychelles', 'KZ': 'Kazakhstan', 'KY': 'Cayman Islands', 'SG': 'Singapore', 'SE': 'Sweden', 'SD': 'Sudan', 'DO': 'Dominican Republic', 'DM': 'Dominica', 'DJ': 'Djibouti', 'DK': 'Denmark', 'VG': 'British Virgin Islands', 'DE': 'Germany', 'YE': 'Yemen', 'DZ': 'Algeria', 'US': 'United States', 'UY': 'Uruguay', 'YU': 'Yugoslavia', 'YT': 'Mayotte', 'UM': 'United States Minor Outlying Islands', 'LB': 'Lebanon', 'LC': 'Saint Lucia', 'LA': 'Laos', 'TV': 'Tuvalu', 'TW': 'Taiwan', 'TT': 'Trinidad and Tobago', 'TR': 'Turkey', 'LK': 'Sri Lanka', 'LI': 'Liechtenstein', 'LV': 'Latvia', 'TO': 'Tonga', 'LT': 'Lithuania', 'LU': 'Luxembourg', 'LR': 'Liberia', 'LS': 'Lesotho', 'TH': 'Thailand', 'TF': 'French Southern Territories', 'TG': 'Togo', 'TD': 'Chad', 'TC': 'Turks and Caicos Islands', 'LY': 'Libya', 'VA': 'Vatican', 'VC': 'Saint Vincent and the Grenadines', 'AE': 'United Arab Emirates', 'AD': 'Andorra', 'AG': 'Antigua and Barbuda', 'AF': 'Afghanistan', 'AI': 'Anguilla', 'VI': 'U.S. Virgin Islands', 'IS': 'Iceland', 'IR': 'Iran', 'AM': 'Armenia', 'AL': 'Albania', 'AO': 'Angola', 'AN': 'Netherlands Antilles', 'AQ': 'Antarctica', 'AS': 'American Samoa', 'AR': 'Argentina', 'AU': 'Australia', 'AT': 'Austria', 'AW': 'Aruba', 'IN': 'India', 'TZ': 'Tanzania', 'AZ': 'Azerbaijan', 'IE': 'Ireland', 'ID': 'Indonesia', 'UA': 'Ukraine', 'QA': 'Qatar', 'MZ': 'Mozambique'} months=['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] abbrMonths=['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] days=['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'] abbrDays=['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] dateFormats={'medium': '%d %%(abbrmonthname)s %Y', 'full': '%%(dayname)s, %d %%(monthname)s %Y', 'long': '%d %%(monthname)s %Y', 'short': '%d/%m/%Y'} numericSymbols={'group': ',', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': '.', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'} PKA>l{ZZturbogears/i18n/data/en_HK.pyc; ȸHIc @s#hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd~***PKK9.4B-:-:turbogears/i18n/data/en_IE.py# Formatting configuration for locale en_IE languages={'gv': 'Manx', 'gu': 'Gujarati', 'rom': 'Romany', 'alg': 'Algonquian Languages', 'ale': 'Aleut', 'sco': 'Scots', 'mni': 'Manipuri', 'gd': 'Scottish Gaelic', 'ga': 'Irish', 'mno': 'Manobo Languages', 'osa': 'Osage', 'gn': 'Guarani', 'gl': 'Gallegan', 'mwr': 'Marwari', 'ty': 'Tahitian', 'tw': 'Twi', 'tt': 'Tatar', 'tr': 'Turkish', 'ts': 'Tsonga', 'tn': 'Tswana', 'to': 'Tonga (Tonga Islands)', 'aus': 'Australian Languages', 'av': 'Avaric', 'tk': 'Turkmen', 'th': 'Thai', 'roa': 'Romance (Other)', 'tg': 'Tajik', 'te': 'Telugu', 'uga': 'Ugaritic', 'ta': 'Tamil', 'fat': 'Fanti', 'fan': 'Fang', 'wo': 'Wolof', 'rm': 'Rhaeto-Romance', 'din': 'Dinka', 'bla': 'Siksika', 'cmc': 'Chamic Languages', 'ml': 'Malayalam', 'zh': 'Chinese', 'tem': 'Timne', 'za': 'Zhuang', 'cau': 'Caucasian (Other)', 'zu': 'Zulu', 'ter': 'Tereno', 'tet': 'Tetum', 'mnc': 'Manchu', 'kut': 'Kutenai', 'suk': 'Sukuma', 'kum': 'Kumyk', 'sus': 'Susu', 'new': 'Newari', 'sux': 'Sumerian', 'den': 'Slave', 'men': 'Mende', 'mul': 'Multiple Languages', 'lez': 'Lezghian', 'root': 'Root', 'eka': 'Ekajuk', 'akk': 'Akkadian', 'dra': 'Dravidian (Other)', 'jrb': 'Judeo-Arabic', 'sgn': 'Sign Languages', 'sga': 'Irish, Old (to 900)', 'apa': 'Apache Languages', 'bra': 'Braj', 'chb': 'Chibcha', 'chg': 'Chagatai', 'chk': 'Chuukese', 'chm': 'Mari', 'chn': 'Chinook Jargon', 'cho': 'Choctaw', 'chp': 'Chipewyan', 'chr': 'Cherokee', 'chy': 'Cheyenne', 'ti': 'Tigrinya', 'vot': 'Votic', 'mg': 'Malagasy', 'iba': 'Iban', 'mo': 'Moldavian', 'mn': 'Mongolian', 'mi': 'Maori', 'mh': 'Marshallese', 'mk': 'Macedonian', 'mt': 'Maltese', 'cai': 'Central American Indian (Other)', 'del': 'Delaware', 'ms': 'Malay', 'mr': 'Marathi', 'my': 'Burmese', 'cad': 'Caddo', 'tai': 'Tai (Other)', 'afh': 'Afrihili', 'sit': 'Sino-Tibetan (Other)', 'enm': 'English, Middle (1100-1500)', 'csb': 'Kashubian', 'nyn': 'Nyankole', 'nyo': 'Nyoro', 'nym': 'Nyamwezi', 'sio': 'Siouan Languages', 'map': 'Austronesian', 'mas': 'Masai', 'lah': 'Lahnda', 'lad': 'Ladino', 'fy': 'Frisian', 'snk': 'Soninke', 'fa': 'Persian', 'mad': 'Madurese', 'mag': 'Magahi', 'mai': 'Maithili', 'fi': 'Finnish', 'fj': 'Fijian', 'man': 'Mandingo', 'egy': 'Egyptian (Ancient)', 'znd': 'Zande', 'ss': 'Swati', 'sr': 'Serbian', 'sq': 'Albanian', 'sw': 'Swahili', 'sv': 'Swedish', 'su': 'Sundanese', 'st': 'Sotho, Southern', 'sk': 'Slovak', 'si': 'Sinhalese', 'sh': 'Serbo-Croatian', 'so': 'Somali', 'sn': 'Shona', 'sm': 'Samoan', 'sl': 'Slovenian', 'sc': 'Sardinian', 'sa': 'Sanskrit', 'sg': 'Sango', 'se': 'Northern Sami', 'sd': 'Sindhi', 'zen': 'Zenaga', 'kbd': 'Kabardian', 'afa': 'Afro-Asiatic (Other)', 'lg': 'Ganda', 'lb': 'Luxembourgish', 'fiu': 'Finno - Ugrian (Other)', 'ln': 'Lingala', 'lo': 'Lao', 'li': 'Limburgish', 'byn': 'Blin', 'lt': 'Lithuanian', 'lu': 'Luba-Katanga', 'yi': 'Yiddish', 'non': 'Norse, Old', 'ceb': 'Cebuano', 'yo': 'Yoruba', 'nog': 'Nogai', 'bat': 'Baltic (Other)', 'dak': 'Dakota', 'dar': 'Dargwa', 'day': 'Dayak', 'ssa': 'Nilo-Saharam (Other)', 'kpe': 'Kpelle', 'el': 'Greek', 'eo': 'Esperanto', 'en': 'English', 'lam': 'Lamba', 'ee': 'Ewe', 'mdf': 'Moksha', 'fr': 'French', 'mdr': 'Mandar', 'et': 'Estonian', 'es': 'Spanish', 'ru': 'Russian', 'gon': 'Gondi', 'goh': 'German, Old High (ca.750-1050)', 'sms': 'Skolt Sami', 'smn': 'Inari Sami', 'smj': 'Lule Sami', 'smi': 'Sami languages (Other)', 'got': 'Gothic', 'rn': 'Rundi', 'ro': 'Romanian', 'dsb': 'Lower Sorbian', 'sma': 'Southern Sami', 'gor': 'Gorontalo', 'ast': 'Asturian', 'wal': 'Walamo', 'crh': 'Crimean Turkish; Crimean Tatar', 'ath': 'Athapascan Languages', 'gez': 'Geez', 'xh': 'Xhosa', 'ff': 'Fulah', 'mak': 'Makasar', 'zap': 'Zapotec', 'kok': 'Konkani', 'kos': 'Kosraean', 'fo': 'Faroese', 'tog': 'Tonga (Nyasa)', 'hup': 'Hupa', 'udm': 'Udmurt', 'bej': 'Beja', 'bem': 'Bemba', 'tsi': 'Tsimshian', 'ber': 'Berber', 'nzi': 'Nzima', 'sai': 'South American Indian (Other)', 'ang': 'English, Old (ca.450-1100)', 'pra': 'Prakrit Languages', 'bho': 'Bhojpuri', 'sal': 'Salishan languages', 'pro': u'Proven\xe7al, Old (to 1500)', 'raj': 'Rajasthani', 'sad': 'Sandawe', 'rar': 'Rarotongan', 'rap': 'Rapanui', 'sas': 'Sasak', 'car': 'Carib', 'min': 'Minangkabau', 'mic': 'Micmac', 'efi': 'Efik', 'arn': 'Araucanian', 'ypk': 'Yupik Languages', 'mis': 'Miscellaneous Languages', 'kac': 'Kachin', 'kab': 'Kabyle', 'kaa': 'Kara-Kalpak', 'kam': 'Kamba', 'kar': 'Karen', 'kaw': 'Kawi', 'tyv': 'Tuvinian', 'awa': 'Awadhi', 'ka': 'Georgian', 'doi': 'Dogri', 'kg': 'Kongo', 'kk': 'Kazakh', 'kj': 'Kuanyama', 'ki': 'Kikuyu', 'ko': 'Korean', 'kn': 'Kannada', 'km': 'Khmer', 'kl': 'Kalaallisut', 'ks': 'Kashmiri', 'kr': 'Kanuri', 'kw': 'Cornish', 'kv': 'Komi', 'ku': 'Kurdish', 'ky': 'Kirghiz', 'tkl': 'Tokelau', 'bua': 'Buriat', 'mga': 'Irish, Middle (900-1200)', 'hit': 'Hittite', 'dyu': 'Dyula', 'de': 'German', 'da': 'Danish', 'dz': 'Dzongkha', 'ira': 'Iranian', 'dv': 'Divehi', 'hil': 'Hiligaynon', 'him': 'Himachali', 'gem': 'Germanic (Other)', 'crp': 'Creoles and Pidgins (Other)', 'qu': 'Quechua', 'bas': 'Basa', 'gba': 'Gbaya', 'bad': 'Banda', 'ban': 'Balinese', 'bal': 'Baluchi', 'bam': 'Bambara', 'shn': 'Shan', 'bai': 'Bamileke Languages', 'arp': 'Arapaho', 'art': 'Artificial (Other)', 'arw': 'Arawak', 'arc': 'Aramaic', 'sem': 'Semitic (Other)', 'sel': 'Selkup', 'nub': 'Nubian Languages', 'btk': 'Batak', 'lus': 'Lushai', 'mus': 'Creek', 'lua': 'Luba-Lulua', 'iro': 'Iroquoian languages', 'lui': 'Luiseno', 'mun': 'Munda Languages', 'lun': 'Lunda', 'luo': 'Luo', 'wa': 'Walloon', 'tup': 'Tupi languages', 'jv': 'Javanese', 'tut': 'Altaic (Other)', 'tum': 'Tumbuka', 'ja': 'Japanese', 'cop': 'Coptic', 'ilo': 'Iloko', 'la': 'Latin', 'gwi': "Gwich'in", 'und': 'Undetermined', 'tli': 'Tlingit', 'ch': 'Chamorro', 'co': 'Corsican', 'ca': 'Catalan', 'ce': 'Chechen', 'pon': 'Pohnpeian', 'cy': 'Welsh', 'sah': 'Yakut', 'cs': 'Czech', 'cr': 'Cree', 'bnt': 'Bantu', 'cv': 'Chuvash', 'cu': 'Church Slavic', 'lv': 'Latvian', 'dum': 'Dutch, Middle (ca. 1050-1350)', 'pt': 'Portuguese', 'dua': 'Duala', 'fro': 'French, Old (842-ca.1400)', 'yap': 'Yapese', 'frm': 'French, Middle (ca.1400-1600)', 'tiv': 'Tiv', 'yao': 'Yao', 'pa': 'Punjabi', 'xal': 'Kalmyk', 'pi': 'Pali', 'pl': 'Polish', 'gay': 'Gayo', 'oto': 'Otomian Languages', 'ota': 'Turkish, Ottoman (1500-1928)', 'hmn': 'Hmong', 'an': 'Aragonese', 'gaa': 'Ga', 'fur': 'Friulian', 'khi': 'Khoisan (Other)', 'sla': 'Slavic (Other)', 've': 'Venda', 'vi': 'Vietnamese', 'is': 'Icelandic', 'kho': 'Khotanese', 'iu': 'Inuktitut', 'it': 'Italian', 'vo': u'Volap\xfck', 'ii': 'Sichuan Yi', 'ik': 'Inupiaq', 'io': 'Ido', 'ine': 'Indo-European (Other)', 'ia': 'Interlingua', 'jpr': 'Judeo-Persian', 'ie': 'Interlingue', 'id': 'Indonesian', 'ig': 'Igbo', 'pap': 'Papiamento', 'ewo': 'Ewondo', 'pau': 'Palauan', 'paa': 'Papuan (Other)', 'pag': 'Pangasinan', 'sat': 'Santali', 'pal': 'Pahlavi', 'pam': 'Pampanga', 'phi': 'Philippine (Other)', 'cel': 'Celtic (Other)', 'phn': 'Phoenician', 'nic': 'Niger - Kordofanian (Other)', 'nia': 'Nias', 'dgr': 'Dogrib', 'syr': 'Syriac', 'niu': 'Niuean', 'jbo': 'Lojban', 'nah': 'Nahuatl', 'sam': 'Samaritan Aramaic', 'hai': 'Haida', 'gmh': 'German, Middle High (ca.1050-1500)', 'cus': 'Cushitic (Other)', 'wen': 'Sorbian Languages', 'ady': 'Adyghe', 'elx': 'Elamite', 'ada': 'Adangme', 'haw': 'Hawaiian', 'bin': 'Bini', 'bik': 'Bikol', 'mos': 'Mossi', 'moh': 'Mohawk', 'tl': 'Tagalog', 'tvl': 'Tuvalu', 'ijo': 'Ijo', 'kmb': 'Kimbundu', 'peo': 'Persian Old (ca.600-400 B.C.)', 'umb': 'Umbundu', 'tmh': 'Tamashek', 'fon': 'Fon', 'hsb': 'Upper Sorbian', 'be': 'Belarusian', 'bg': 'Bulgarian', 'ba': 'Bashkir', 'ps': 'Pashto (Pushto)', 'bm': 'Bambara', 'bn': 'Bengali', 'bo': 'Tibetan', 'bh': 'Bihari', 'bi': 'Bislama', 'br': 'Breton', 'bs': 'Bosnian', 'om': 'Oromo', 'oj': 'Ojibwa', 'ace': 'Achinese', 'ach': 'Acoli', 'oc': u'Occitan (post 1500); Proven\xe7al', 'kru': 'Kurukh', 'srr': 'Serer', 'kro': 'Kru', 'krc': 'Karachay-Balkar', 'nds': 'Low German; Low Saxon', 'os': 'Ossetic', 'or': 'Oriya', 'sog': 'Sogdien', 'nso': 'Sotho, Northern', 'son': 'Songhai', 'vai': 'Vai', 'wak': 'Wakashan Languages', 'lol': 'Mongo', 'mkh': 'Mon-Khmer (Other)', 'loz': 'Lozi', 'gil': 'Gilbertese', 'was': 'Washo', 'war': 'Waray', 'hz': 'Herero', 'hy': 'Armenian', 'sid': 'Sidamo', 'hr': 'Croatian', 'ht': 'Haitian', 'hu': 'Hungarian', 'hi': 'Hindi', 'ho': 'Hiri Motu', 'ha': 'Hausa', 'bug': 'Buginese', 'he': 'Hebrew', 'uz': 'Uzbek', 'ur': 'Urdu', 'uk': 'Ukrainian', 'ug': 'Uighur', 'aa': 'Afar', 'ab': 'Abkhazian', 'ae': 'Avestan', 'af': 'Afrikaans', 'ak': 'Akan', 'am': 'Amharic', 'myv': 'Erzya', 'eu': 'Basque', 'as': 'Assamese', 'ar': 'Arabic', 'inh': 'Ingush', 'tpi': 'Tok Pisin', 'myn': 'Mayan', 'ay': 'Aymara', 'kha': 'Khasi', 'az': 'Azerbaijani', 'inc': 'Indic (Other)', 'nl': 'Dutch', 'nn': 'Norwegian Nynorsk', 'no': 'Norwegian', 'na': 'Nauru', 'nb': u'Norwegian Bokm\xe5l', 'nai': 'North American Indian (Other)', 'nd': 'Ndebele, North', 'ne': 'Nepali', 'ng': 'Ndonga', 'ny': 'Nyanja; Chichewa; Chewa', 'nap': 'Neapolitan', 'grb': 'Gerbo', 'grc': 'Greek, Ancient (to 1453)', 'nr': 'Ndebele, South', 'tig': 'Tigre', 'nv': 'Navajo', 'zun': 'Zuni', 'rw': 'Kinyarwanda', 'cpe': 'Creoles and Pidgins, English-based (Other)', 'cpf': 'Creoles and Pidgins, French-based (Other)', 'cpp': 'Creoles and pidgins, Portuguese-based (Other)'} countries={'BD': 'Bangladesh', 'BE': 'Belgium', 'BF': 'Burkina Faso', 'BG': 'Bulgaria', 'BA': 'Bosnia and Herzegovina', 'BB': 'Barbados', 'WF': 'Wallis and Futuna', 'BM': 'Bermuda', 'BN': 'Brunei', 'BO': 'Bolivia', 'BH': 'Bahrain', 'BI': 'Burundi', 'BJ': 'Benin', 'BT': 'Bhutan', 'JM': 'Jamaica', 'BV': 'Bouvet Island', 'BW': 'Botswana', 'WS': 'Samoa', 'BR': 'Brazil', 'BS': 'Bahamas', 'BY': 'Belarus', 'BZ': 'Belize', 'RU': 'Russia', 'RW': 'Rwanda', 'TL': 'Timor-Leste', 'RE': u'R\xe9union', 'TM': 'Turkmenistan', 'TJ': 'Tajikistan', 'RO': 'Romania', 'TK': 'Tokelau', 'GW': 'Guinea-Bissau', 'GU': 'Guam', 'GT': 'Guatemala', 'GS': 'South Georgia and South Sandwich Islands', 'GR': 'Greece', 'GQ': 'Equatorial Guinea', 'GP': 'Guadeloupe', 'JP': 'Japan', 'GY': 'Guyana', 'GF': 'French Guiana', 'GE': 'Georgia', 'GD': 'Grenada', 'GB': 'United Kingdom', 'GA': 'Gabon', 'SV': 'El Salvador', 'GN': 'Guinea', 'GM': 'Gambia', 'GL': 'Greenland', 'GI': 'Gibraltar', 'GH': 'Ghana', 'OM': 'Oman', 'TN': 'Tunisia', 'JO': 'Jordan', 'SP': 'Serbia', 'HR': 'Croatia', 'HT': 'Haiti', 'HU': 'Hungary', 'HK': 'Hong Kong S.A.R., China', 'HN': 'Honduras', 'HM': 'Heard Island and McDonald Islands', 'VE': 'Venezuela', 'PR': 'Puerto Rico', 'PS': 'Palestinian Territory', 'PW': 'Palau', 'PT': 'Portugal', 'SJ': 'Svalbard and Jan Mayen', 'PY': 'Paraguay', 'IQ': 'Iraq', 'PA': 'Panama', 'PF': 'French Polynesia', 'PG': 'Papua New Guinea', 'PE': 'Peru', 'PK': 'Pakistan', 'PH': 'Philippines', 'PN': 'Pitcairn', 'PL': 'Poland', 'PM': 'Saint Pierre and Miquelon', 'ZM': 'Zambia', 'EH': 'Western Sahara', 'EE': 'Estonia', 'EG': 'Egypt', 'ZA': 'South Africa', 'EC': 'Ecuador', 'IT': 'Italy', 'VN': 'Vietnam', 'SB': 'Solomon Islands', 'ET': 'Ethiopia', 'SO': 'Somalia', 'ZW': 'Zimbabwe', 'SA': 'Saudi Arabia', 'ES': 'Spain', 'ER': 'Eritrea', 'MD': 'Moldova', 'MG': 'Madagascar', 'MA': 'Morocco', 'MC': 'Monaco', 'UZ': 'Uzbekistan', 'MM': 'Myanmar', 'ML': 'Mali', 'MO': 'Macao S.A.R. China', 'MN': 'Mongolia', 'MH': 'Marshall Islands', 'MK': 'Macedonia', 'MU': 'Mauritius', 'MT': 'Malta', 'MW': 'Malawi', 'MV': 'Maldives', 'MQ': 'Martinique', 'MP': 'Northern Mariana Islands', 'MS': 'Montserrat', 'MR': 'Mauritania', 'UG': 'Uganda', 'MY': 'Malaysia', 'MX': 'Mexico', 'IL': 'Israel', 'FR': 'France', 'IO': 'British Indian Ocean Territory', 'SH': 'Saint Helena', 'FI': 'Finland', 'FJ': 'Fiji', 'FK': 'Falkland Islands', 'FM': 'Micronesia', 'FO': 'Faroe Islands', 'NI': 'Nicaragua', 'NL': 'Netherlands', 'NO': 'Norway', 'NA': 'Namibia', 'VU': 'Vanuatu', 'NC': 'New Caledonia', 'NE': 'Niger', 'NF': 'Norfolk Island', 'NG': 'Nigeria', 'NZ': 'New Zealand', 'NP': 'Nepal', 'NR': 'Nauru', 'NU': 'Niue', 'CK': 'Cook Islands', 'CI': u"C\xf4te d'Ivoire", 'CH': 'Switzerland', 'CO': 'Colombia', 'CN': 'China', 'CM': 'Cameroon', 'CL': 'Chile', 'CC': 'Cocos Islands', 'CA': 'Canada', 'CG': 'Congo', 'CF': 'Central African Republic', 'CD': 'Democratic Republic of the Congo', 'CZ': 'Czech Republic', 'CY': 'Cyprus', 'CX': 'Christmas Island', 'CR': 'Costa Rica', 'CV': 'Cape Verde', 'CU': 'Cuba', 'SZ': 'Swaziland', 'SY': 'Syria', 'KG': 'Kyrgyzstan', 'KE': 'Kenya', 'SR': 'Suriname', 'KI': 'Kiribati', 'KH': 'Cambodia', 'KN': 'Saint Kitts and Nevis', 'KM': 'Comoros', 'ST': 'Sao Tome and Principe', 'SK': 'Slovakia', 'KR': 'South Korea', 'SI': 'Slovenia', 'KP': 'North Korea', 'KW': 'Kuwait', 'SN': 'Senegal', 'SM': 'San Marino', 'SL': 'Sierra Leone', 'SC': 'Seychelles', 'KZ': 'Kazakhstan', 'KY': 'Cayman Islands', 'SG': 'Singapore', 'SE': 'Sweden', 'SD': 'Sudan', 'DO': 'Dominican Republic', 'DM': 'Dominica', 'DJ': 'Djibouti', 'DK': 'Denmark', 'VG': 'British Virgin Islands', 'DE': 'Germany', 'YE': 'Yemen', 'DZ': 'Algeria', 'US': 'United States', 'UY': 'Uruguay', 'YU': 'Yugoslavia', 'YT': 'Mayotte', 'UM': 'United States Minor Outlying Islands', 'LB': 'Lebanon', 'LC': 'Saint Lucia', 'LA': 'Laos', 'TV': 'Tuvalu', 'TW': 'Taiwan', 'TT': 'Trinidad and Tobago', 'TR': 'Turkey', 'LK': 'Sri Lanka', 'LI': 'Liechtenstein', 'LV': 'Latvia', 'TO': 'Tonga', 'LT': 'Lithuania', 'LU': 'Luxembourg', 'LR': 'Liberia', 'LS': 'Lesotho', 'TH': 'Thailand', 'TF': 'French Southern Territories', 'TG': 'Togo', 'TD': 'Chad', 'TC': 'Turks and Caicos Islands', 'LY': 'Libya', 'VA': 'Vatican', 'VC': 'Saint Vincent and the Grenadines', 'AE': 'United Arab Emirates', 'AD': 'Andorra', 'AG': 'Antigua and Barbuda', 'AF': 'Afghanistan', 'AI': 'Anguilla', 'VI': 'U.S. Virgin Islands', 'IS': 'Iceland', 'IR': 'Iran', 'AM': 'Armenia', 'AL': 'Albania', 'AO': 'Angola', 'AN': 'Netherlands Antilles', 'AQ': 'Antarctica', 'AS': 'American Samoa', 'AR': 'Argentina', 'AU': 'Australia', 'AT': 'Austria', 'AW': 'Aruba', 'IN': 'India', 'TZ': 'Tanzania', 'AZ': 'Azerbaijan', 'IE': 'Ireland', 'ID': 'Indonesia', 'UA': 'Ukraine', 'QA': 'Qatar', 'MZ': 'Mozambique'} months=['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] abbrMonths=['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] days=['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'] abbrDays=['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] dateFormats={'medium': '%d %%(abbrmonthname)s %Y', 'full': '%%(dayname)s %d %%(monthname)s %Y', 'long': '%d %%(monthname)s %Y', 'short': '%d/%m/%Y'} numericSymbols={'group': ',', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': '.', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'} PKA>lZZturbogears/i18n/data/en_IE.pyc; ȸHIc @s#hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd~***PKK9$-:-:turbogears/i18n/data/en_IN.py# Formatting configuration for locale en_IN languages={'gv': 'Manx', 'gu': 'Gujarati', 'rom': 'Romany', 'alg': 'Algonquian Languages', 'ale': 'Aleut', 'sco': 'Scots', 'mni': 'Manipuri', 'gd': 'Scottish Gaelic', 'ga': 'Irish', 'mno': 'Manobo Languages', 'osa': 'Osage', 'gn': 'Guarani', 'gl': 'Gallegan', 'mwr': 'Marwari', 'ty': 'Tahitian', 'tw': 'Twi', 'tt': 'Tatar', 'tr': 'Turkish', 'ts': 'Tsonga', 'tn': 'Tswana', 'to': 'Tonga (Tonga Islands)', 'aus': 'Australian Languages', 'av': 'Avaric', 'tk': 'Turkmen', 'th': 'Thai', 'roa': 'Romance (Other)', 'tg': 'Tajik', 'te': 'Telugu', 'uga': 'Ugaritic', 'ta': 'Tamil', 'fat': 'Fanti', 'fan': 'Fang', 'wo': 'Wolof', 'rm': 'Rhaeto-Romance', 'din': 'Dinka', 'bla': 'Siksika', 'cmc': 'Chamic Languages', 'ml': 'Malayalam', 'zh': 'Chinese', 'tem': 'Timne', 'za': 'Zhuang', 'cau': 'Caucasian (Other)', 'zu': 'Zulu', 'ter': 'Tereno', 'tet': 'Tetum', 'mnc': 'Manchu', 'kut': 'Kutenai', 'suk': 'Sukuma', 'kum': 'Kumyk', 'sus': 'Susu', 'new': 'Newari', 'sux': 'Sumerian', 'den': 'Slave', 'men': 'Mende', 'mul': 'Multiple Languages', 'lez': 'Lezghian', 'root': 'Root', 'eka': 'Ekajuk', 'akk': 'Akkadian', 'dra': 'Dravidian (Other)', 'jrb': 'Judeo-Arabic', 'sgn': 'Sign Languages', 'sga': 'Irish, Old (to 900)', 'apa': 'Apache Languages', 'bra': 'Braj', 'chb': 'Chibcha', 'chg': 'Chagatai', 'chk': 'Chuukese', 'chm': 'Mari', 'chn': 'Chinook Jargon', 'cho': 'Choctaw', 'chp': 'Chipewyan', 'chr': 'Cherokee', 'chy': 'Cheyenne', 'ti': 'Tigrinya', 'vot': 'Votic', 'mg': 'Malagasy', 'iba': 'Iban', 'mo': 'Moldavian', 'mn': 'Mongolian', 'mi': 'Maori', 'mh': 'Marshallese', 'mk': 'Macedonian', 'mt': 'Maltese', 'cai': 'Central American Indian (Other)', 'del': 'Delaware', 'ms': 'Malay', 'mr': 'Marathi', 'my': 'Burmese', 'cad': 'Caddo', 'tai': 'Tai (Other)', 'afh': 'Afrihili', 'sit': 'Sino-Tibetan (Other)', 'enm': 'English, Middle (1100-1500)', 'csb': 'Kashubian', 'nyn': 'Nyankole', 'nyo': 'Nyoro', 'nym': 'Nyamwezi', 'sio': 'Siouan Languages', 'map': 'Austronesian', 'mas': 'Masai', 'lah': 'Lahnda', 'lad': 'Ladino', 'fy': 'Frisian', 'snk': 'Soninke', 'fa': 'Persian', 'mad': 'Madurese', 'mag': 'Magahi', 'mai': 'Maithili', 'fi': 'Finnish', 'fj': 'Fijian', 'man': 'Mandingo', 'egy': 'Egyptian (Ancient)', 'znd': 'Zande', 'ss': 'Swati', 'sr': 'Serbian', 'sq': 'Albanian', 'sw': 'Swahili', 'sv': 'Swedish', 'su': 'Sundanese', 'st': 'Sotho, Southern', 'sk': 'Slovak', 'si': 'Sinhalese', 'sh': 'Serbo-Croatian', 'so': 'Somali', 'sn': 'Shona', 'sm': 'Samoan', 'sl': 'Slovenian', 'sc': 'Sardinian', 'sa': 'Sanskrit', 'sg': 'Sango', 'se': 'Northern Sami', 'sd': 'Sindhi', 'zen': 'Zenaga', 'kbd': 'Kabardian', 'afa': 'Afro-Asiatic (Other)', 'lg': 'Ganda', 'lb': 'Luxembourgish', 'fiu': 'Finno - Ugrian (Other)', 'ln': 'Lingala', 'lo': 'Lao', 'li': 'Limburgish', 'byn': 'Blin', 'lt': 'Lithuanian', 'lu': 'Luba-Katanga', 'yi': 'Yiddish', 'non': 'Norse, Old', 'ceb': 'Cebuano', 'yo': 'Yoruba', 'nog': 'Nogai', 'bat': 'Baltic (Other)', 'dak': 'Dakota', 'dar': 'Dargwa', 'day': 'Dayak', 'ssa': 'Nilo-Saharam (Other)', 'kpe': 'Kpelle', 'el': 'Greek', 'eo': 'Esperanto', 'en': 'English', 'lam': 'Lamba', 'ee': 'Ewe', 'mdf': 'Moksha', 'fr': 'French', 'mdr': 'Mandar', 'et': 'Estonian', 'es': 'Spanish', 'ru': 'Russian', 'gon': 'Gondi', 'goh': 'German, Old High (ca.750-1050)', 'sms': 'Skolt Sami', 'smn': 'Inari Sami', 'smj': 'Lule Sami', 'smi': 'Sami languages (Other)', 'got': 'Gothic', 'rn': 'Rundi', 'ro': 'Romanian', 'dsb': 'Lower Sorbian', 'sma': 'Southern Sami', 'gor': 'Gorontalo', 'ast': 'Asturian', 'wal': 'Walamo', 'crh': 'Crimean Turkish; Crimean Tatar', 'ath': 'Athapascan Languages', 'gez': 'Geez', 'xh': 'Xhosa', 'ff': 'Fulah', 'mak': 'Makasar', 'zap': 'Zapotec', 'kok': 'Konkani', 'kos': 'Kosraean', 'fo': 'Faroese', 'tog': 'Tonga (Nyasa)', 'hup': 'Hupa', 'udm': 'Udmurt', 'bej': 'Beja', 'bem': 'Bemba', 'tsi': 'Tsimshian', 'ber': 'Berber', 'nzi': 'Nzima', 'sai': 'South American Indian (Other)', 'ang': 'English, Old (ca.450-1100)', 'pra': 'Prakrit Languages', 'bho': 'Bhojpuri', 'sal': 'Salishan languages', 'pro': u'Proven\xe7al, Old (to 1500)', 'raj': 'Rajasthani', 'sad': 'Sandawe', 'rar': 'Rarotongan', 'rap': 'Rapanui', 'sas': 'Sasak', 'car': 'Carib', 'min': 'Minangkabau', 'mic': 'Micmac', 'efi': 'Efik', 'arn': 'Araucanian', 'ypk': 'Yupik Languages', 'mis': 'Miscellaneous Languages', 'kac': 'Kachin', 'kab': 'Kabyle', 'kaa': 'Kara-Kalpak', 'kam': 'Kamba', 'kar': 'Karen', 'kaw': 'Kawi', 'tyv': 'Tuvinian', 'awa': 'Awadhi', 'ka': 'Georgian', 'doi': 'Dogri', 'kg': 'Kongo', 'kk': 'Kazakh', 'kj': 'Kuanyama', 'ki': 'Kikuyu', 'ko': 'Korean', 'kn': 'Kannada', 'km': 'Khmer', 'kl': 'Kalaallisut', 'ks': 'Kashmiri', 'kr': 'Kanuri', 'kw': 'Cornish', 'kv': 'Komi', 'ku': 'Kurdish', 'ky': 'Kirghiz', 'tkl': 'Tokelau', 'bua': 'Buriat', 'mga': 'Irish, Middle (900-1200)', 'hit': 'Hittite', 'dyu': 'Dyula', 'de': 'German', 'da': 'Danish', 'dz': 'Dzongkha', 'ira': 'Iranian', 'dv': 'Divehi', 'hil': 'Hiligaynon', 'him': 'Himachali', 'gem': 'Germanic (Other)', 'crp': 'Creoles and Pidgins (Other)', 'qu': 'Quechua', 'bas': 'Basa', 'gba': 'Gbaya', 'bad': 'Banda', 'ban': 'Balinese', 'bal': 'Baluchi', 'bam': 'Bambara', 'shn': 'Shan', 'bai': 'Bamileke Languages', 'arp': 'Arapaho', 'art': 'Artificial (Other)', 'arw': 'Arawak', 'arc': 'Aramaic', 'sem': 'Semitic (Other)', 'sel': 'Selkup', 'nub': 'Nubian Languages', 'btk': 'Batak', 'lus': 'Lushai', 'mus': 'Creek', 'lua': 'Luba-Lulua', 'iro': 'Iroquoian languages', 'lui': 'Luiseno', 'mun': 'Munda Languages', 'lun': 'Lunda', 'luo': 'Luo', 'wa': 'Walloon', 'tup': 'Tupi languages', 'jv': 'Javanese', 'tut': 'Altaic (Other)', 'tum': 'Tumbuka', 'ja': 'Japanese', 'cop': 'Coptic', 'ilo': 'Iloko', 'la': 'Latin', 'gwi': "Gwich'in", 'und': 'Undetermined', 'tli': 'Tlingit', 'ch': 'Chamorro', 'co': 'Corsican', 'ca': 'Catalan', 'ce': 'Chechen', 'pon': 'Pohnpeian', 'cy': 'Welsh', 'sah': 'Yakut', 'cs': 'Czech', 'cr': 'Cree', 'bnt': 'Bantu', 'cv': 'Chuvash', 'cu': 'Church Slavic', 'lv': 'Latvian', 'dum': 'Dutch, Middle (ca. 1050-1350)', 'pt': 'Portuguese', 'dua': 'Duala', 'fro': 'French, Old (842-ca.1400)', 'yap': 'Yapese', 'frm': 'French, Middle (ca.1400-1600)', 'tiv': 'Tiv', 'yao': 'Yao', 'pa': 'Punjabi', 'xal': 'Kalmyk', 'pi': 'Pali', 'pl': 'Polish', 'gay': 'Gayo', 'oto': 'Otomian Languages', 'ota': 'Turkish, Ottoman (1500-1928)', 'hmn': 'Hmong', 'an': 'Aragonese', 'gaa': 'Ga', 'fur': 'Friulian', 'khi': 'Khoisan (Other)', 'sla': 'Slavic (Other)', 've': 'Venda', 'vi': 'Vietnamese', 'is': 'Icelandic', 'kho': 'Khotanese', 'iu': 'Inuktitut', 'it': 'Italian', 'vo': u'Volap\xfck', 'ii': 'Sichuan Yi', 'ik': 'Inupiaq', 'io': 'Ido', 'ine': 'Indo-European (Other)', 'ia': 'Interlingua', 'jpr': 'Judeo-Persian', 'ie': 'Interlingue', 'id': 'Indonesian', 'ig': 'Igbo', 'pap': 'Papiamento', 'ewo': 'Ewondo', 'pau': 'Palauan', 'paa': 'Papuan (Other)', 'pag': 'Pangasinan', 'sat': 'Santali', 'pal': 'Pahlavi', 'pam': 'Pampanga', 'phi': 'Philippine (Other)', 'cel': 'Celtic (Other)', 'phn': 'Phoenician', 'nic': 'Niger - Kordofanian (Other)', 'nia': 'Nias', 'dgr': 'Dogrib', 'syr': 'Syriac', 'niu': 'Niuean', 'jbo': 'Lojban', 'nah': 'Nahuatl', 'sam': 'Samaritan Aramaic', 'hai': 'Haida', 'gmh': 'German, Middle High (ca.1050-1500)', 'cus': 'Cushitic (Other)', 'wen': 'Sorbian Languages', 'ady': 'Adyghe', 'elx': 'Elamite', 'ada': 'Adangme', 'haw': 'Hawaiian', 'bin': 'Bini', 'bik': 'Bikol', 'mos': 'Mossi', 'moh': 'Mohawk', 'tl': 'Tagalog', 'tvl': 'Tuvalu', 'ijo': 'Ijo', 'kmb': 'Kimbundu', 'peo': 'Persian Old (ca.600-400 B.C.)', 'umb': 'Umbundu', 'tmh': 'Tamashek', 'fon': 'Fon', 'hsb': 'Upper Sorbian', 'be': 'Belarusian', 'bg': 'Bulgarian', 'ba': 'Bashkir', 'ps': 'Pashto (Pushto)', 'bm': 'Bambara', 'bn': 'Bengali', 'bo': 'Tibetan', 'bh': 'Bihari', 'bi': 'Bislama', 'br': 'Breton', 'bs': 'Bosnian', 'om': 'Oromo', 'oj': 'Ojibwa', 'ace': 'Achinese', 'ach': 'Acoli', 'oc': u'Occitan (post 1500); Proven\xe7al', 'kru': 'Kurukh', 'srr': 'Serer', 'kro': 'Kru', 'krc': 'Karachay-Balkar', 'nds': 'Low German; Low Saxon', 'os': 'Ossetic', 'or': 'Oriya', 'sog': 'Sogdien', 'nso': 'Sotho, Northern', 'son': 'Songhai', 'vai': 'Vai', 'wak': 'Wakashan Languages', 'lol': 'Mongo', 'mkh': 'Mon-Khmer (Other)', 'loz': 'Lozi', 'gil': 'Gilbertese', 'was': 'Washo', 'war': 'Waray', 'hz': 'Herero', 'hy': 'Armenian', 'sid': 'Sidamo', 'hr': 'Croatian', 'ht': 'Haitian', 'hu': 'Hungarian', 'hi': 'Hindi', 'ho': 'Hiri Motu', 'ha': 'Hausa', 'bug': 'Buginese', 'he': 'Hebrew', 'uz': 'Uzbek', 'ur': 'Urdu', 'uk': 'Ukrainian', 'ug': 'Uighur', 'aa': 'Afar', 'ab': 'Abkhazian', 'ae': 'Avestan', 'af': 'Afrikaans', 'ak': 'Akan', 'am': 'Amharic', 'myv': 'Erzya', 'eu': 'Basque', 'as': 'Assamese', 'ar': 'Arabic', 'inh': 'Ingush', 'tpi': 'Tok Pisin', 'myn': 'Mayan', 'ay': 'Aymara', 'kha': 'Khasi', 'az': 'Azerbaijani', 'inc': 'Indic (Other)', 'nl': 'Dutch', 'nn': 'Norwegian Nynorsk', 'no': 'Norwegian', 'na': 'Nauru', 'nb': u'Norwegian Bokm\xe5l', 'nai': 'North American Indian (Other)', 'nd': 'Ndebele, North', 'ne': 'Nepali', 'ng': 'Ndonga', 'ny': 'Nyanja; Chichewa; Chewa', 'nap': 'Neapolitan', 'grb': 'Gerbo', 'grc': 'Greek, Ancient (to 1453)', 'nr': 'Ndebele, South', 'tig': 'Tigre', 'nv': 'Navajo', 'zun': 'Zuni', 'rw': 'Kinyarwanda', 'cpe': 'Creoles and Pidgins, English-based (Other)', 'cpf': 'Creoles and Pidgins, French-based (Other)', 'cpp': 'Creoles and pidgins, Portuguese-based (Other)'} countries={'BD': 'Bangladesh', 'BE': 'Belgium', 'BF': 'Burkina Faso', 'BG': 'Bulgaria', 'BA': 'Bosnia and Herzegovina', 'BB': 'Barbados', 'WF': 'Wallis and Futuna', 'BM': 'Bermuda', 'BN': 'Brunei', 'BO': 'Bolivia', 'BH': 'Bahrain', 'BI': 'Burundi', 'BJ': 'Benin', 'BT': 'Bhutan', 'JM': 'Jamaica', 'BV': 'Bouvet Island', 'BW': 'Botswana', 'WS': 'Samoa', 'BR': 'Brazil', 'BS': 'Bahamas', 'BY': 'Belarus', 'BZ': 'Belize', 'RU': 'Russia', 'RW': 'Rwanda', 'TL': 'Timor-Leste', 'RE': u'R\xe9union', 'TM': 'Turkmenistan', 'TJ': 'Tajikistan', 'RO': 'Romania', 'TK': 'Tokelau', 'GW': 'Guinea-Bissau', 'GU': 'Guam', 'GT': 'Guatemala', 'GS': 'South Georgia and South Sandwich Islands', 'GR': 'Greece', 'GQ': 'Equatorial Guinea', 'GP': 'Guadeloupe', 'JP': 'Japan', 'GY': 'Guyana', 'GF': 'French Guiana', 'GE': 'Georgia', 'GD': 'Grenada', 'GB': 'United Kingdom', 'GA': 'Gabon', 'SV': 'El Salvador', 'GN': 'Guinea', 'GM': 'Gambia', 'GL': 'Greenland', 'GI': 'Gibraltar', 'GH': 'Ghana', 'OM': 'Oman', 'TN': 'Tunisia', 'JO': 'Jordan', 'SP': 'Serbia', 'HR': 'Croatia', 'HT': 'Haiti', 'HU': 'Hungary', 'HK': 'Hong Kong S.A.R., China', 'HN': 'Honduras', 'HM': 'Heard Island and McDonald Islands', 'VE': 'Venezuela', 'PR': 'Puerto Rico', 'PS': 'Palestinian Territory', 'PW': 'Palau', 'PT': 'Portugal', 'SJ': 'Svalbard and Jan Mayen', 'PY': 'Paraguay', 'IQ': 'Iraq', 'PA': 'Panama', 'PF': 'French Polynesia', 'PG': 'Papua New Guinea', 'PE': 'Peru', 'PK': 'Pakistan', 'PH': 'Philippines', 'PN': 'Pitcairn', 'PL': 'Poland', 'PM': 'Saint Pierre and Miquelon', 'ZM': 'Zambia', 'EH': 'Western Sahara', 'EE': 'Estonia', 'EG': 'Egypt', 'ZA': 'South Africa', 'EC': 'Ecuador', 'IT': 'Italy', 'VN': 'Vietnam', 'SB': 'Solomon Islands', 'ET': 'Ethiopia', 'SO': 'Somalia', 'ZW': 'Zimbabwe', 'SA': 'Saudi Arabia', 'ES': 'Spain', 'ER': 'Eritrea', 'MD': 'Moldova', 'MG': 'Madagascar', 'MA': 'Morocco', 'MC': 'Monaco', 'UZ': 'Uzbekistan', 'MM': 'Myanmar', 'ML': 'Mali', 'MO': 'Macao S.A.R. China', 'MN': 'Mongolia', 'MH': 'Marshall Islands', 'MK': 'Macedonia', 'MU': 'Mauritius', 'MT': 'Malta', 'MW': 'Malawi', 'MV': 'Maldives', 'MQ': 'Martinique', 'MP': 'Northern Mariana Islands', 'MS': 'Montserrat', 'MR': 'Mauritania', 'UG': 'Uganda', 'MY': 'Malaysia', 'MX': 'Mexico', 'IL': 'Israel', 'FR': 'France', 'IO': 'British Indian Ocean Territory', 'SH': 'Saint Helena', 'FI': 'Finland', 'FJ': 'Fiji', 'FK': 'Falkland Islands', 'FM': 'Micronesia', 'FO': 'Faroe Islands', 'NI': 'Nicaragua', 'NL': 'Netherlands', 'NO': 'Norway', 'NA': 'Namibia', 'VU': 'Vanuatu', 'NC': 'New Caledonia', 'NE': 'Niger', 'NF': 'Norfolk Island', 'NG': 'Nigeria', 'NZ': 'New Zealand', 'NP': 'Nepal', 'NR': 'Nauru', 'NU': 'Niue', 'CK': 'Cook Islands', 'CI': u"C\xf4te d'Ivoire", 'CH': 'Switzerland', 'CO': 'Colombia', 'CN': 'China', 'CM': 'Cameroon', 'CL': 'Chile', 'CC': 'Cocos Islands', 'CA': 'Canada', 'CG': 'Congo', 'CF': 'Central African Republic', 'CD': 'Democratic Republic of the Congo', 'CZ': 'Czech Republic', 'CY': 'Cyprus', 'CX': 'Christmas Island', 'CR': 'Costa Rica', 'CV': 'Cape Verde', 'CU': 'Cuba', 'SZ': 'Swaziland', 'SY': 'Syria', 'KG': 'Kyrgyzstan', 'KE': 'Kenya', 'SR': 'Suriname', 'KI': 'Kiribati', 'KH': 'Cambodia', 'KN': 'Saint Kitts and Nevis', 'KM': 'Comoros', 'ST': 'Sao Tome and Principe', 'SK': 'Slovakia', 'KR': 'South Korea', 'SI': 'Slovenia', 'KP': 'North Korea', 'KW': 'Kuwait', 'SN': 'Senegal', 'SM': 'San Marino', 'SL': 'Sierra Leone', 'SC': 'Seychelles', 'KZ': 'Kazakhstan', 'KY': 'Cayman Islands', 'SG': 'Singapore', 'SE': 'Sweden', 'SD': 'Sudan', 'DO': 'Dominican Republic', 'DM': 'Dominica', 'DJ': 'Djibouti', 'DK': 'Denmark', 'VG': 'British Virgin Islands', 'DE': 'Germany', 'YE': 'Yemen', 'DZ': 'Algeria', 'US': 'United States', 'UY': 'Uruguay', 'YU': 'Yugoslavia', 'YT': 'Mayotte', 'UM': 'United States Minor Outlying Islands', 'LB': 'Lebanon', 'LC': 'Saint Lucia', 'LA': 'Laos', 'TV': 'Tuvalu', 'TW': 'Taiwan', 'TT': 'Trinidad and Tobago', 'TR': 'Turkey', 'LK': 'Sri Lanka', 'LI': 'Liechtenstein', 'LV': 'Latvia', 'TO': 'Tonga', 'LT': 'Lithuania', 'LU': 'Luxembourg', 'LR': 'Liberia', 'LS': 'Lesotho', 'TH': 'Thailand', 'TF': 'French Southern Territories', 'TG': 'Togo', 'TD': 'Chad', 'TC': 'Turks and Caicos Islands', 'LY': 'Libya', 'VA': 'Vatican', 'VC': 'Saint Vincent and the Grenadines', 'AE': 'United Arab Emirates', 'AD': 'Andorra', 'AG': 'Antigua and Barbuda', 'AF': 'Afghanistan', 'AI': 'Anguilla', 'VI': 'U.S. Virgin Islands', 'IS': 'Iceland', 'IR': 'Iran', 'AM': 'Armenia', 'AL': 'Albania', 'AO': 'Angola', 'AN': 'Netherlands Antilles', 'AQ': 'Antarctica', 'AS': 'American Samoa', 'AR': 'Argentina', 'AU': 'Australia', 'AT': 'Austria', 'AW': 'Aruba', 'IN': 'India', 'TZ': 'Tanzania', 'AZ': 'Azerbaijan', 'IE': 'Ireland', 'ID': 'Indonesia', 'UA': 'Ukraine', 'QA': 'Qatar', 'MZ': 'Mozambique'} months=['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] abbrMonths=['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] days=['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'] abbrDays=['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] dateFormats={'medium': '%d-%%(abbrmonthname)s-%y', 'full': '%%(dayname)s %d %%(monthname)s %Y', 'long': '%d %%(monthname)s %Y', 'short': '%d/%m/%y'} numericSymbols={'group': ',', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': '.', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'} PKA>ΫM1ZZturbogears/i18n/data/en_IN.pyc; ȸHIc @s#hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd~***PKK9 Ho : :turbogears/i18n/data/en_MT.py# Formatting configuration for locale en_MT languages={'gv': 'Manx', 'gu': 'Gujarati', 'rom': 'Romany', 'alg': 'Algonquian Languages', 'ale': 'Aleut', 'sco': 'Scots', 'mni': 'Manipuri', 'gd': 'Scottish Gaelic', 'ga': 'Irish', 'mno': 'Manobo Languages', 'osa': 'Osage', 'gn': 'Guarani', 'gl': 'Gallegan', 'mwr': 'Marwari', 'ty': 'Tahitian', 'tw': 'Twi', 'tt': 'Tatar', 'tr': 'Turkish', 'ts': 'Tsonga', 'tn': 'Tswana', 'to': 'Tonga (Tonga Islands)', 'aus': 'Australian Languages', 'av': 'Avaric', 'tk': 'Turkmen', 'th': 'Thai', 'roa': 'Romance (Other)', 'tg': 'Tajik', 'te': 'Telugu', 'uga': 'Ugaritic', 'ta': 'Tamil', 'fat': 'Fanti', 'fan': 'Fang', 'wo': 'Wolof', 'rm': 'Rhaeto-Romance', 'din': 'Dinka', 'bla': 'Siksika', 'cmc': 'Chamic Languages', 'ml': 'Malayalam', 'zh': 'Chinese', 'tem': 'Timne', 'za': 'Zhuang', 'cau': 'Caucasian (Other)', 'zu': 'Zulu', 'ter': 'Tereno', 'tet': 'Tetum', 'mnc': 'Manchu', 'kut': 'Kutenai', 'suk': 'Sukuma', 'kum': 'Kumyk', 'sus': 'Susu', 'new': 'Newari', 'sux': 'Sumerian', 'den': 'Slave', 'men': 'Mende', 'mul': 'Multiple Languages', 'lez': 'Lezghian', 'root': 'Root', 'eka': 'Ekajuk', 'akk': 'Akkadian', 'dra': 'Dravidian (Other)', 'jrb': 'Judeo-Arabic', 'sgn': 'Sign Languages', 'sga': 'Irish, Old (to 900)', 'apa': 'Apache Languages', 'bra': 'Braj', 'chb': 'Chibcha', 'chg': 'Chagatai', 'chk': 'Chuukese', 'chm': 'Mari', 'chn': 'Chinook Jargon', 'cho': 'Choctaw', 'chp': 'Chipewyan', 'chr': 'Cherokee', 'chy': 'Cheyenne', 'ti': 'Tigrinya', 'vot': 'Votic', 'mg': 'Malagasy', 'iba': 'Iban', 'mo': 'Moldavian', 'mn': 'Mongolian', 'mi': 'Maori', 'mh': 'Marshallese', 'mk': 'Macedonian', 'mt': 'Maltese', 'cai': 'Central American Indian (Other)', 'del': 'Delaware', 'ms': 'Malay', 'mr': 'Marathi', 'my': 'Burmese', 'cad': 'Caddo', 'tai': 'Tai (Other)', 'afh': 'Afrihili', 'sit': 'Sino-Tibetan (Other)', 'enm': 'English, Middle (1100-1500)', 'csb': 'Kashubian', 'nyn': 'Nyankole', 'nyo': 'Nyoro', 'nym': 'Nyamwezi', 'sio': 'Siouan Languages', 'map': 'Austronesian', 'mas': 'Masai', 'lah': 'Lahnda', 'lad': 'Ladino', 'fy': 'Frisian', 'snk': 'Soninke', 'fa': 'Persian', 'mad': 'Madurese', 'mag': 'Magahi', 'mai': 'Maithili', 'fi': 'Finnish', 'fj': 'Fijian', 'man': 'Mandingo', 'egy': 'Egyptian (Ancient)', 'znd': 'Zande', 'ss': 'Swati', 'sr': 'Serbian', 'sq': 'Albanian', 'sw': 'Swahili', 'sv': 'Swedish', 'su': 'Sundanese', 'st': 'Sotho, Southern', 'sk': 'Slovak', 'si': 'Sinhalese', 'sh': 'Serbo-Croatian', 'so': 'Somali', 'sn': 'Shona', 'sm': 'Samoan', 'sl': 'Slovenian', 'sc': 'Sardinian', 'sa': 'Sanskrit', 'sg': 'Sango', 'se': 'Northern Sami', 'sd': 'Sindhi', 'zen': 'Zenaga', 'kbd': 'Kabardian', 'afa': 'Afro-Asiatic (Other)', 'lg': 'Ganda', 'lb': 'Luxembourgish', 'fiu': 'Finno - Ugrian (Other)', 'ln': 'Lingala', 'lo': 'Lao', 'li': 'Limburgish', 'byn': 'Blin', 'lt': 'Lithuanian', 'lu': 'Luba-Katanga', 'yi': 'Yiddish', 'non': 'Norse, Old', 'ceb': 'Cebuano', 'yo': 'Yoruba', 'nog': 'Nogai', 'bat': 'Baltic (Other)', 'dak': 'Dakota', 'dar': 'Dargwa', 'day': 'Dayak', 'ssa': 'Nilo-Saharam (Other)', 'kpe': 'Kpelle', 'el': 'Greek', 'eo': 'Esperanto', 'en': 'English', 'lam': 'Lamba', 'ee': 'Ewe', 'mdf': 'Moksha', 'fr': 'French', 'mdr': 'Mandar', 'et': 'Estonian', 'es': 'Spanish', 'ru': 'Russian', 'gon': 'Gondi', 'goh': 'German, Old High (ca.750-1050)', 'sms': 'Skolt Sami', 'smn': 'Inari Sami', 'smj': 'Lule Sami', 'smi': 'Sami languages (Other)', 'got': 'Gothic', 'rn': 'Rundi', 'ro': 'Romanian', 'dsb': 'Lower Sorbian', 'sma': 'Southern Sami', 'gor': 'Gorontalo', 'ast': 'Asturian', 'wal': 'Walamo', 'crh': 'Crimean Turkish; Crimean Tatar', 'ath': 'Athapascan Languages', 'gez': 'Geez', 'xh': 'Xhosa', 'ff': 'Fulah', 'mak': 'Makasar', 'zap': 'Zapotec', 'kok': 'Konkani', 'kos': 'Kosraean', 'fo': 'Faroese', 'tog': 'Tonga (Nyasa)', 'hup': 'Hupa', 'udm': 'Udmurt', 'bej': 'Beja', 'bem': 'Bemba', 'tsi': 'Tsimshian', 'ber': 'Berber', 'nzi': 'Nzima', 'sai': 'South American Indian (Other)', 'ang': 'English, Old (ca.450-1100)', 'pra': 'Prakrit Languages', 'bho': 'Bhojpuri', 'sal': 'Salishan languages', 'pro': u'Proven\xe7al, Old (to 1500)', 'raj': 'Rajasthani', 'sad': 'Sandawe', 'rar': 'Rarotongan', 'rap': 'Rapanui', 'sas': 'Sasak', 'car': 'Carib', 'min': 'Minangkabau', 'mic': 'Micmac', 'efi': 'Efik', 'arn': 'Araucanian', 'ypk': 'Yupik Languages', 'mis': 'Miscellaneous Languages', 'kac': 'Kachin', 'kab': 'Kabyle', 'kaa': 'Kara-Kalpak', 'kam': 'Kamba', 'kar': 'Karen', 'kaw': 'Kawi', 'tyv': 'Tuvinian', 'awa': 'Awadhi', 'ka': 'Georgian', 'doi': 'Dogri', 'kg': 'Kongo', 'kk': 'Kazakh', 'kj': 'Kuanyama', 'ki': 'Kikuyu', 'ko': 'Korean', 'kn': 'Kannada', 'km': 'Khmer', 'kl': 'Kalaallisut', 'ks': 'Kashmiri', 'kr': 'Kanuri', 'kw': 'Cornish', 'kv': 'Komi', 'ku': 'Kurdish', 'ky': 'Kirghiz', 'tkl': 'Tokelau', 'bua': 'Buriat', 'mga': 'Irish, Middle (900-1200)', 'hit': 'Hittite', 'dyu': 'Dyula', 'de': 'German', 'da': 'Danish', 'dz': 'Dzongkha', 'ira': 'Iranian', 'dv': 'Divehi', 'hil': 'Hiligaynon', 'him': 'Himachali', 'gem': 'Germanic (Other)', 'crp': 'Creoles and Pidgins (Other)', 'qu': 'Quechua', 'bas': 'Basa', 'gba': 'Gbaya', 'bad': 'Banda', 'ban': 'Balinese', 'bal': 'Baluchi', 'bam': 'Bambara', 'shn': 'Shan', 'bai': 'Bamileke Languages', 'arp': 'Arapaho', 'art': 'Artificial (Other)', 'arw': 'Arawak', 'arc': 'Aramaic', 'sem': 'Semitic (Other)', 'sel': 'Selkup', 'nub': 'Nubian Languages', 'btk': 'Batak', 'lus': 'Lushai', 'mus': 'Creek', 'lua': 'Luba-Lulua', 'iro': 'Iroquoian languages', 'lui': 'Luiseno', 'mun': 'Munda Languages', 'lun': 'Lunda', 'luo': 'Luo', 'wa': 'Walloon', 'tup': 'Tupi languages', 'jv': 'Javanese', 'tut': 'Altaic (Other)', 'tum': 'Tumbuka', 'ja': 'Japanese', 'cop': 'Coptic', 'ilo': 'Iloko', 'la': 'Latin', 'gwi': "Gwich'in", 'und': 'Undetermined', 'tli': 'Tlingit', 'ch': 'Chamorro', 'co': 'Corsican', 'ca': 'Catalan', 'ce': 'Chechen', 'pon': 'Pohnpeian', 'cy': 'Welsh', 'sah': 'Yakut', 'cs': 'Czech', 'cr': 'Cree', 'bnt': 'Bantu', 'cv': 'Chuvash', 'cu': 'Church Slavic', 'lv': 'Latvian', 'dum': 'Dutch, Middle (ca. 1050-1350)', 'pt': 'Portuguese', 'dua': 'Duala', 'fro': 'French, Old (842-ca.1400)', 'yap': 'Yapese', 'frm': 'French, Middle (ca.1400-1600)', 'tiv': 'Tiv', 'yao': 'Yao', 'pa': 'Punjabi', 'xal': 'Kalmyk', 'pi': 'Pali', 'pl': 'Polish', 'gay': 'Gayo', 'oto': 'Otomian Languages', 'ota': 'Turkish, Ottoman (1500-1928)', 'hmn': 'Hmong', 'an': 'Aragonese', 'gaa': 'Ga', 'fur': 'Friulian', 'khi': 'Khoisan (Other)', 'sla': 'Slavic (Other)', 've': 'Venda', 'vi': 'Vietnamese', 'is': 'Icelandic', 'kho': 'Khotanese', 'iu': 'Inuktitut', 'it': 'Italian', 'vo': u'Volap\xfck', 'ii': 'Sichuan Yi', 'ik': 'Inupiaq', 'io': 'Ido', 'ine': 'Indo-European (Other)', 'ia': 'Interlingua', 'jpr': 'Judeo-Persian', 'ie': 'Interlingue', 'id': 'Indonesian', 'ig': 'Igbo', 'pap': 'Papiamento', 'ewo': 'Ewondo', 'pau': 'Palauan', 'paa': 'Papuan (Other)', 'pag': 'Pangasinan', 'sat': 'Santali', 'pal': 'Pahlavi', 'pam': 'Pampanga', 'phi': 'Philippine (Other)', 'cel': 'Celtic (Other)', 'phn': 'Phoenician', 'nic': 'Niger - Kordofanian (Other)', 'nia': 'Nias', 'dgr': 'Dogrib', 'syr': 'Syriac', 'niu': 'Niuean', 'jbo': 'Lojban', 'nah': 'Nahuatl', 'sam': 'Samaritan Aramaic', 'hai': 'Haida', 'gmh': 'German, Middle High (ca.1050-1500)', 'cus': 'Cushitic (Other)', 'wen': 'Sorbian Languages', 'ady': 'Adyghe', 'elx': 'Elamite', 'ada': 'Adangme', 'haw': 'Hawaiian', 'bin': 'Bini', 'bik': 'Bikol', 'mos': 'Mossi', 'moh': 'Mohawk', 'tl': 'Tagalog', 'tvl': 'Tuvalu', 'ijo': 'Ijo', 'kmb': 'Kimbundu', 'peo': 'Persian Old (ca.600-400 B.C.)', 'umb': 'Umbundu', 'tmh': 'Tamashek', 'fon': 'Fon', 'hsb': 'Upper Sorbian', 'be': 'Belarusian', 'bg': 'Bulgarian', 'ba': 'Bashkir', 'ps': 'Pashto (Pushto)', 'bm': 'Bambara', 'bn': 'Bengali', 'bo': 'Tibetan', 'bh': 'Bihari', 'bi': 'Bislama', 'br': 'Breton', 'bs': 'Bosnian', 'om': 'Oromo', 'oj': 'Ojibwa', 'ace': 'Achinese', 'ach': 'Acoli', 'oc': u'Occitan (post 1500); Proven\xe7al', 'kru': 'Kurukh', 'srr': 'Serer', 'kro': 'Kru', 'krc': 'Karachay-Balkar', 'nds': 'Low German; Low Saxon', 'os': 'Ossetic', 'or': 'Oriya', 'sog': 'Sogdien', 'nso': 'Sotho, Northern', 'son': 'Songhai', 'vai': 'Vai', 'wak': 'Wakashan Languages', 'lol': 'Mongo', 'mkh': 'Mon-Khmer (Other)', 'loz': 'Lozi', 'gil': 'Gilbertese', 'was': 'Washo', 'war': 'Waray', 'hz': 'Herero', 'hy': 'Armenian', 'sid': 'Sidamo', 'hr': 'Croatian', 'ht': 'Haitian', 'hu': 'Hungarian', 'hi': 'Hindi', 'ho': 'Hiri Motu', 'ha': 'Hausa', 'bug': 'Buginese', 'he': 'Hebrew', 'uz': 'Uzbek', 'ur': 'Urdu', 'uk': 'Ukrainian', 'ug': 'Uighur', 'aa': 'Afar', 'ab': 'Abkhazian', 'ae': 'Avestan', 'af': 'Afrikaans', 'ak': 'Akan', 'am': 'Amharic', 'myv': 'Erzya', 'eu': 'Basque', 'as': 'Assamese', 'ar': 'Arabic', 'inh': 'Ingush', 'tpi': 'Tok Pisin', 'myn': 'Mayan', 'ay': 'Aymara', 'kha': 'Khasi', 'az': 'Azerbaijani', 'inc': 'Indic (Other)', 'nl': 'Dutch', 'nn': 'Norwegian Nynorsk', 'no': 'Norwegian', 'na': 'Nauru', 'nb': u'Norwegian Bokm\xe5l', 'nai': 'North American Indian (Other)', 'nd': 'Ndebele, North', 'ne': 'Nepali', 'ng': 'Ndonga', 'ny': 'Nyanja; Chichewa; Chewa', 'nap': 'Neapolitan', 'grb': 'Gerbo', 'grc': 'Greek, Ancient (to 1453)', 'nr': 'Ndebele, South', 'tig': 'Tigre', 'nv': 'Navajo', 'zun': 'Zuni', 'rw': 'Kinyarwanda', 'cpe': 'Creoles and Pidgins, English-based (Other)', 'cpf': 'Creoles and Pidgins, French-based (Other)', 'cpp': 'Creoles and pidgins, Portuguese-based (Other)'} countries={'BD': 'Bangladesh', 'BE': 'Belgium', 'BF': 'Burkina Faso', 'BG': 'Bulgaria', 'BA': 'Bosnia and Herzegovina', 'BB': 'Barbados', 'WF': 'Wallis and Futuna', 'BM': 'Bermuda', 'BN': 'Brunei', 'BO': 'Bolivia', 'BH': 'Bahrain', 'BI': 'Burundi', 'BJ': 'Benin', 'BT': 'Bhutan', 'JM': 'Jamaica', 'BV': 'Bouvet Island', 'BW': 'Botswana', 'WS': 'Samoa', 'BR': 'Brazil', 'BS': 'Bahamas', 'BY': 'Belarus', 'BZ': 'Belize', 'RU': 'Russia', 'RW': 'Rwanda', 'TL': 'Timor-Leste', 'RE': u'R\xe9union', 'TM': 'Turkmenistan', 'TJ': 'Tajikistan', 'RO': 'Romania', 'TK': 'Tokelau', 'GW': 'Guinea-Bissau', 'GU': 'Guam', 'GT': 'Guatemala', 'GS': 'South Georgia and South Sandwich Islands', 'GR': 'Greece', 'GQ': 'Equatorial Guinea', 'GP': 'Guadeloupe', 'JP': 'Japan', 'GY': 'Guyana', 'GF': 'French Guiana', 'GE': 'Georgia', 'GD': 'Grenada', 'GB': 'United Kingdom', 'GA': 'Gabon', 'SV': 'El Salvador', 'GN': 'Guinea', 'GM': 'Gambia', 'GL': 'Greenland', 'GI': 'Gibraltar', 'GH': 'Ghana', 'OM': 'Oman', 'TN': 'Tunisia', 'JO': 'Jordan', 'SP': 'Serbia', 'HR': 'Croatia', 'HT': 'Haiti', 'HU': 'Hungary', 'HK': 'Hong Kong S.A.R., China', 'HN': 'Honduras', 'HM': 'Heard Island and McDonald Islands', 'VE': 'Venezuela', 'PR': 'Puerto Rico', 'PS': 'Palestinian Territory', 'PW': 'Palau', 'PT': 'Portugal', 'SJ': 'Svalbard and Jan Mayen', 'PY': 'Paraguay', 'IQ': 'Iraq', 'PA': 'Panama', 'PF': 'French Polynesia', 'PG': 'Papua New Guinea', 'PE': 'Peru', 'PK': 'Pakistan', 'PH': 'Philippines', 'PN': 'Pitcairn', 'PL': 'Poland', 'PM': 'Saint Pierre and Miquelon', 'ZM': 'Zambia', 'EH': 'Western Sahara', 'EE': 'Estonia', 'EG': 'Egypt', 'ZA': 'South Africa', 'EC': 'Ecuador', 'IT': 'Italy', 'VN': 'Vietnam', 'SB': 'Solomon Islands', 'ET': 'Ethiopia', 'SO': 'Somalia', 'ZW': 'Zimbabwe', 'SA': 'Saudi Arabia', 'ES': 'Spain', 'ER': 'Eritrea', 'MD': 'Moldova', 'MG': 'Madagascar', 'MA': 'Morocco', 'MC': 'Monaco', 'UZ': 'Uzbekistan', 'MM': 'Myanmar', 'ML': 'Mali', 'MO': 'Macao S.A.R. China', 'MN': 'Mongolia', 'MH': 'Marshall Islands', 'MK': 'Macedonia', 'MU': 'Mauritius', 'MT': 'Malta', 'MW': 'Malawi', 'MV': 'Maldives', 'MQ': 'Martinique', 'MP': 'Northern Mariana Islands', 'MS': 'Montserrat', 'MR': 'Mauritania', 'UG': 'Uganda', 'MY': 'Malaysia', 'MX': 'Mexico', 'IL': 'Israel', 'FR': 'France', 'IO': 'British Indian Ocean Territory', 'SH': 'Saint Helena', 'FI': 'Finland', 'FJ': 'Fiji', 'FK': 'Falkland Islands', 'FM': 'Micronesia', 'FO': 'Faroe Islands', 'NI': 'Nicaragua', 'NL': 'Netherlands', 'NO': 'Norway', 'NA': 'Namibia', 'VU': 'Vanuatu', 'NC': 'New Caledonia', 'NE': 'Niger', 'NF': 'Norfolk Island', 'NG': 'Nigeria', 'NZ': 'New Zealand', 'NP': 'Nepal', 'NR': 'Nauru', 'NU': 'Niue', 'CK': 'Cook Islands', 'CI': u"C\xf4te d'Ivoire", 'CH': 'Switzerland', 'CO': 'Colombia', 'CN': 'China', 'CM': 'Cameroon', 'CL': 'Chile', 'CC': 'Cocos Islands', 'CA': 'Canada', 'CG': 'Congo', 'CF': 'Central African Republic', 'CD': 'Democratic Republic of the Congo', 'CZ': 'Czech Republic', 'CY': 'Cyprus', 'CX': 'Christmas Island', 'CR': 'Costa Rica', 'CV': 'Cape Verde', 'CU': 'Cuba', 'SZ': 'Swaziland', 'SY': 'Syria', 'KG': 'Kyrgyzstan', 'KE': 'Kenya', 'SR': 'Suriname', 'KI': 'Kiribati', 'KH': 'Cambodia', 'KN': 'Saint Kitts and Nevis', 'KM': 'Comoros', 'ST': 'Sao Tome and Principe', 'SK': 'Slovakia', 'KR': 'South Korea', 'SI': 'Slovenia', 'KP': 'North Korea', 'KW': 'Kuwait', 'SN': 'Senegal', 'SM': 'San Marino', 'SL': 'Sierra Leone', 'SC': 'Seychelles', 'KZ': 'Kazakhstan', 'KY': 'Cayman Islands', 'SG': 'Singapore', 'SE': 'Sweden', 'SD': 'Sudan', 'DO': 'Dominican Republic', 'DM': 'Dominica', 'DJ': 'Djibouti', 'DK': 'Denmark', 'VG': 'British Virgin Islands', 'DE': 'Germany', 'YE': 'Yemen', 'DZ': 'Algeria', 'US': 'United States', 'UY': 'Uruguay', 'YU': 'Yugoslavia', 'YT': 'Mayotte', 'UM': 'United States Minor Outlying Islands', 'LB': 'Lebanon', 'LC': 'Saint Lucia', 'LA': 'Laos', 'TV': 'Tuvalu', 'TW': 'Taiwan', 'TT': 'Trinidad and Tobago', 'TR': 'Turkey', 'LK': 'Sri Lanka', 'LI': 'Liechtenstein', 'LV': 'Latvia', 'TO': 'Tonga', 'LT': 'Lithuania', 'LU': 'Luxembourg', 'LR': 'Liberia', 'LS': 'Lesotho', 'TH': 'Thailand', 'TF': 'French Southern Territories', 'TG': 'Togo', 'TD': 'Chad', 'TC': 'Turks and Caicos Islands', 'LY': 'Libya', 'VA': 'Vatican', 'VC': 'Saint Vincent and the Grenadines', 'AE': 'United Arab Emirates', 'AD': 'Andorra', 'AG': 'Antigua and Barbuda', 'AF': 'Afghanistan', 'AI': 'Anguilla', 'VI': 'U.S. Virgin Islands', 'IS': 'Iceland', 'IR': 'Iran', 'AM': 'Armenia', 'AL': 'Albania', 'AO': 'Angola', 'AN': 'Netherlands Antilles', 'AQ': 'Antarctica', 'AS': 'American Samoa', 'AR': 'Argentina', 'AU': 'Australia', 'AT': 'Austria', 'AW': 'Aruba', 'IN': 'India', 'TZ': 'Tanzania', 'AZ': 'Azerbaijan', 'IE': 'Ireland', 'ID': 'Indonesia', 'UA': 'Ukraine', 'QA': 'Qatar', 'MZ': 'Mozambique'} months=['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] abbrMonths=['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] days=['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'] abbrDays=['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] dateFormats={'medium': '%d-%%(abbrmonthname)s-%Y', 'full': '%d %%(monthname)s %Y', 'long': '%d %%(monthname)s %Y', 'short': '%d/%m/%y'} numericSymbols={'group': ',', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': '.', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'} PKA>!ZZturbogears/i18n/data/en_MT.pyc; ȸHIc @s#hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd~***PKK93,ޙ::turbogears/i18n/data/en_NZ.py# Formatting configuration for locale en_NZ languages={'gv': 'Manx', 'gu': 'Gujarati', 'rom': 'Romany', 'alg': 'Algonquian Languages', 'ale': 'Aleut', 'sco': 'Scots', 'mni': 'Manipuri', 'gd': 'Scottish Gaelic', 'ga': 'Irish', 'mno': 'Manobo Languages', 'osa': 'Osage', 'gn': 'Guarani', 'gl': 'Gallegan', 'mwr': 'Marwari', 'ty': 'Tahitian', 'tw': 'Twi', 'tt': 'Tatar', 'tr': 'Turkish', 'ts': 'Tsonga', 'tn': 'Tswana', 'to': 'Tonga (Tonga Islands)', 'aus': 'Australian Languages', 'av': 'Avaric', 'tk': 'Turkmen', 'th': 'Thai', 'roa': 'Romance (Other)', 'tg': 'Tajik', 'te': 'Telugu', 'uga': 'Ugaritic', 'ta': 'Tamil', 'fat': 'Fanti', 'fan': 'Fang', 'wo': 'Wolof', 'rm': 'Rhaeto-Romance', 'din': 'Dinka', 'bla': 'Siksika', 'cmc': 'Chamic Languages', 'ml': 'Malayalam', 'zh': 'Chinese', 'tem': 'Timne', 'za': 'Zhuang', 'cau': 'Caucasian (Other)', 'zu': 'Zulu', 'ter': 'Tereno', 'tet': 'Tetum', 'mnc': 'Manchu', 'kut': 'Kutenai', 'suk': 'Sukuma', 'kum': 'Kumyk', 'sus': 'Susu', 'new': 'Newari', 'sux': 'Sumerian', 'den': 'Slave', 'men': 'Mende', 'mul': 'Multiple Languages', 'lez': 'Lezghian', 'root': 'Root', 'eka': 'Ekajuk', 'akk': 'Akkadian', 'dra': 'Dravidian (Other)', 'jrb': 'Judeo-Arabic', 'sgn': 'Sign Languages', 'sga': 'Irish, Old (to 900)', 'apa': 'Apache Languages', 'bra': 'Braj', 'chb': 'Chibcha', 'chg': 'Chagatai', 'chk': 'Chuukese', 'chm': 'Mari', 'chn': 'Chinook Jargon', 'cho': 'Choctaw', 'chp': 'Chipewyan', 'chr': 'Cherokee', 'chy': 'Cheyenne', 'ti': 'Tigrinya', 'vot': 'Votic', 'mg': 'Malagasy', 'iba': 'Iban', 'mo': 'Moldavian', 'mn': 'Mongolian', 'mi': 'Maori', 'mh': 'Marshallese', 'mk': 'Macedonian', 'mt': 'Maltese', 'cai': 'Central American Indian (Other)', 'del': 'Delaware', 'ms': 'Malay', 'mr': 'Marathi', 'my': 'Burmese', 'cad': 'Caddo', 'tai': 'Tai (Other)', 'afh': 'Afrihili', 'sit': 'Sino-Tibetan (Other)', 'enm': 'English, Middle (1100-1500)', 'csb': 'Kashubian', 'nyn': 'Nyankole', 'nyo': 'Nyoro', 'nym': 'Nyamwezi', 'sio': 'Siouan Languages', 'map': 'Austronesian', 'mas': 'Masai', 'lah': 'Lahnda', 'lad': 'Ladino', 'fy': 'Frisian', 'snk': 'Soninke', 'fa': 'Persian', 'mad': 'Madurese', 'mag': 'Magahi', 'mai': 'Maithili', 'fi': 'Finnish', 'fj': 'Fijian', 'man': 'Mandingo', 'egy': 'Egyptian (Ancient)', 'znd': 'Zande', 'ss': 'Swati', 'sr': 'Serbian', 'sq': 'Albanian', 'sw': 'Swahili', 'sv': 'Swedish', 'su': 'Sundanese', 'st': 'Sotho, Southern', 'sk': 'Slovak', 'si': 'Sinhalese', 'sh': 'Serbo-Croatian', 'so': 'Somali', 'sn': 'Shona', 'sm': 'Samoan', 'sl': 'Slovenian', 'sc': 'Sardinian', 'sa': 'Sanskrit', 'sg': 'Sango', 'se': 'Northern Sami', 'sd': 'Sindhi', 'zen': 'Zenaga', 'kbd': 'Kabardian', 'afa': 'Afro-Asiatic (Other)', 'lg': 'Ganda', 'lb': 'Luxembourgish', 'fiu': 'Finno - Ugrian (Other)', 'ln': 'Lingala', 'lo': 'Lao', 'li': 'Limburgish', 'byn': 'Blin', 'lt': 'Lithuanian', 'lu': 'Luba-Katanga', 'yi': 'Yiddish', 'non': 'Norse, Old', 'ceb': 'Cebuano', 'yo': 'Yoruba', 'nog': 'Nogai', 'bat': 'Baltic (Other)', 'dak': 'Dakota', 'dar': 'Dargwa', 'day': 'Dayak', 'ssa': 'Nilo-Saharam (Other)', 'kpe': 'Kpelle', 'el': 'Greek', 'eo': 'Esperanto', 'en': 'English', 'lam': 'Lamba', 'ee': 'Ewe', 'mdf': 'Moksha', 'fr': 'French', 'mdr': 'Mandar', 'et': 'Estonian', 'es': 'Spanish', 'ru': 'Russian', 'gon': 'Gondi', 'goh': 'German, Old High (ca.750-1050)', 'sms': 'Skolt Sami', 'smn': 'Inari Sami', 'smj': 'Lule Sami', 'smi': 'Sami languages (Other)', 'got': 'Gothic', 'rn': 'Rundi', 'ro': 'Romanian', 'dsb': 'Lower Sorbian', 'sma': 'Southern Sami', 'gor': 'Gorontalo', 'ast': 'Asturian', 'wal': 'Walamo', 'crh': 'Crimean Turkish; Crimean Tatar', 'ath': 'Athapascan Languages', 'gez': 'Geez', 'xh': 'Xhosa', 'ff': 'Fulah', 'mak': 'Makasar', 'zap': 'Zapotec', 'kok': 'Konkani', 'kos': 'Kosraean', 'fo': 'Faroese', 'tog': 'Tonga (Nyasa)', 'hup': 'Hupa', 'udm': 'Udmurt', 'bej': 'Beja', 'bem': 'Bemba', 'tsi': 'Tsimshian', 'ber': 'Berber', 'nzi': 'Nzima', 'sai': 'South American Indian (Other)', 'ang': 'English, Old (ca.450-1100)', 'pra': 'Prakrit Languages', 'bho': 'Bhojpuri', 'sal': 'Salishan languages', 'pro': u'Proven\xe7al, Old (to 1500)', 'raj': 'Rajasthani', 'sad': 'Sandawe', 'rar': 'Rarotongan', 'rap': 'Rapanui', 'sas': 'Sasak', 'car': 'Carib', 'min': 'Minangkabau', 'mic': 'Micmac', 'efi': 'Efik', 'arn': 'Araucanian', 'ypk': 'Yupik Languages', 'mis': 'Miscellaneous Languages', 'kac': 'Kachin', 'kab': 'Kabyle', 'kaa': 'Kara-Kalpak', 'kam': 'Kamba', 'kar': 'Karen', 'kaw': 'Kawi', 'tyv': 'Tuvinian', 'awa': 'Awadhi', 'ka': 'Georgian', 'doi': 'Dogri', 'kg': 'Kongo', 'kk': 'Kazakh', 'kj': 'Kuanyama', 'ki': 'Kikuyu', 'ko': 'Korean', 'kn': 'Kannada', 'km': 'Khmer', 'kl': 'Kalaallisut', 'ks': 'Kashmiri', 'kr': 'Kanuri', 'kw': 'Cornish', 'kv': 'Komi', 'ku': 'Kurdish', 'ky': 'Kirghiz', 'tkl': 'Tokelau', 'bua': 'Buriat', 'mga': 'Irish, Middle (900-1200)', 'hit': 'Hittite', 'dyu': 'Dyula', 'de': 'German', 'da': 'Danish', 'dz': 'Dzongkha', 'ira': 'Iranian', 'dv': 'Divehi', 'hil': 'Hiligaynon', 'him': 'Himachali', 'gem': 'Germanic (Other)', 'crp': 'Creoles and Pidgins (Other)', 'qu': 'Quechua', 'bas': 'Basa', 'gba': 'Gbaya', 'bad': 'Banda', 'ban': 'Balinese', 'bal': 'Baluchi', 'bam': 'Bambara', 'shn': 'Shan', 'bai': 'Bamileke Languages', 'arp': 'Arapaho', 'art': 'Artificial (Other)', 'arw': 'Arawak', 'arc': 'Aramaic', 'sem': 'Semitic (Other)', 'sel': 'Selkup', 'nub': 'Nubian Languages', 'btk': 'Batak', 'lus': 'Lushai', 'mus': 'Creek', 'lua': 'Luba-Lulua', 'iro': 'Iroquoian languages', 'lui': 'Luiseno', 'mun': 'Munda Languages', 'lun': 'Lunda', 'luo': 'Luo', 'wa': 'Walloon', 'tup': 'Tupi languages', 'jv': 'Javanese', 'tut': 'Altaic (Other)', 'tum': 'Tumbuka', 'ja': 'Japanese', 'cop': 'Coptic', 'ilo': 'Iloko', 'la': 'Latin', 'gwi': "Gwich'in", 'und': 'Undetermined', 'tli': 'Tlingit', 'ch': 'Chamorro', 'co': 'Corsican', 'ca': 'Catalan', 'ce': 'Chechen', 'pon': 'Pohnpeian', 'cy': 'Welsh', 'sah': 'Yakut', 'cs': 'Czech', 'cr': 'Cree', 'bnt': 'Bantu', 'cv': 'Chuvash', 'cu': 'Church Slavic', 'lv': 'Latvian', 'dum': 'Dutch, Middle (ca. 1050-1350)', 'pt': 'Portuguese', 'dua': 'Duala', 'fro': 'French, Old (842-ca.1400)', 'yap': 'Yapese', 'frm': 'French, Middle (ca.1400-1600)', 'tiv': 'Tiv', 'yao': 'Yao', 'pa': 'Punjabi', 'xal': 'Kalmyk', 'pi': 'Pali', 'pl': 'Polish', 'gay': 'Gayo', 'oto': 'Otomian Languages', 'ota': 'Turkish, Ottoman (1500-1928)', 'hmn': 'Hmong', 'an': 'Aragonese', 'gaa': 'Ga', 'fur': 'Friulian', 'khi': 'Khoisan (Other)', 'sla': 'Slavic (Other)', 've': 'Venda', 'vi': 'Vietnamese', 'is': 'Icelandic', 'kho': 'Khotanese', 'iu': 'Inuktitut', 'it': 'Italian', 'vo': u'Volap\xfck', 'ii': 'Sichuan Yi', 'ik': 'Inupiaq', 'io': 'Ido', 'ine': 'Indo-European (Other)', 'ia': 'Interlingua', 'jpr': 'Judeo-Persian', 'ie': 'Interlingue', 'id': 'Indonesian', 'ig': 'Igbo', 'pap': 'Papiamento', 'ewo': 'Ewondo', 'pau': 'Palauan', 'paa': 'Papuan (Other)', 'pag': 'Pangasinan', 'sat': 'Santali', 'pal': 'Pahlavi', 'pam': 'Pampanga', 'phi': 'Philippine (Other)', 'cel': 'Celtic (Other)', 'phn': 'Phoenician', 'nic': 'Niger - Kordofanian (Other)', 'nia': 'Nias', 'dgr': 'Dogrib', 'syr': 'Syriac', 'niu': 'Niuean', 'jbo': 'Lojban', 'nah': 'Nahuatl', 'sam': 'Samaritan Aramaic', 'hai': 'Haida', 'gmh': 'German, Middle High (ca.1050-1500)', 'cus': 'Cushitic (Other)', 'wen': 'Sorbian Languages', 'ady': 'Adyghe', 'elx': 'Elamite', 'ada': 'Adangme', 'haw': 'Hawaiian', 'bin': 'Bini', 'bik': 'Bikol', 'mos': 'Mossi', 'moh': 'Mohawk', 'tl': 'Tagalog', 'tvl': 'Tuvalu', 'ijo': 'Ijo', 'kmb': 'Kimbundu', 'peo': 'Persian Old (ca.600-400 B.C.)', 'umb': 'Umbundu', 'tmh': 'Tamashek', 'fon': 'Fon', 'hsb': 'Upper Sorbian', 'be': 'Belarusian', 'bg': 'Bulgarian', 'ba': 'Bashkir', 'ps': 'Pashto (Pushto)', 'bm': 'Bambara', 'bn': 'Bengali', 'bo': 'Tibetan', 'bh': 'Bihari', 'bi': 'Bislama', 'br': 'Breton', 'bs': 'Bosnian', 'om': 'Oromo', 'oj': 'Ojibwa', 'ace': 'Achinese', 'ach': 'Acoli', 'oc': u'Occitan (post 1500); Proven\xe7al', 'kru': 'Kurukh', 'srr': 'Serer', 'kro': 'Kru', 'krc': 'Karachay-Balkar', 'nds': 'Low German; Low Saxon', 'os': 'Ossetic', 'or': 'Oriya', 'sog': 'Sogdien', 'nso': 'Sotho, Northern', 'son': 'Songhai', 'vai': 'Vai', 'wak': 'Wakashan Languages', 'lol': 'Mongo', 'mkh': 'Mon-Khmer (Other)', 'loz': 'Lozi', 'gil': 'Gilbertese', 'was': 'Washo', 'war': 'Waray', 'hz': 'Herero', 'hy': 'Armenian', 'sid': 'Sidamo', 'hr': 'Croatian', 'ht': 'Haitian', 'hu': 'Hungarian', 'hi': 'Hindi', 'ho': 'Hiri Motu', 'ha': 'Hausa', 'bug': 'Buginese', 'he': 'Hebrew', 'uz': 'Uzbek', 'ur': 'Urdu', 'uk': 'Ukrainian', 'ug': 'Uighur', 'aa': 'Afar', 'ab': 'Abkhazian', 'ae': 'Avestan', 'af': 'Afrikaans', 'ak': 'Akan', 'am': 'Amharic', 'myv': 'Erzya', 'eu': 'Basque', 'as': 'Assamese', 'ar': 'Arabic', 'inh': 'Ingush', 'tpi': 'Tok Pisin', 'myn': 'Mayan', 'ay': 'Aymara', 'kha': 'Khasi', 'az': 'Azerbaijani', 'inc': 'Indic (Other)', 'nl': 'Dutch', 'nn': 'Norwegian Nynorsk', 'no': 'Norwegian', 'na': 'Nauru', 'nb': u'Norwegian Bokm\xe5l', 'nai': 'North American Indian (Other)', 'nd': 'Ndebele, North', 'ne': 'Nepali', 'ng': 'Ndonga', 'ny': 'Nyanja; Chichewa; Chewa', 'nap': 'Neapolitan', 'grb': 'Gerbo', 'grc': 'Greek, Ancient (to 1453)', 'nr': 'Ndebele, South', 'tig': 'Tigre', 'nv': 'Navajo', 'zun': 'Zuni', 'rw': 'Kinyarwanda', 'cpe': 'Creoles and Pidgins, English-based (Other)', 'cpf': 'Creoles and Pidgins, French-based (Other)', 'cpp': 'Creoles and pidgins, Portuguese-based (Other)'} countries={'BD': 'Bangladesh', 'BE': 'Belgium', 'BF': 'Burkina Faso', 'BG': 'Bulgaria', 'BA': 'Bosnia and Herzegovina', 'BB': 'Barbados', 'WF': 'Wallis and Futuna', 'BM': 'Bermuda', 'BN': 'Brunei', 'BO': 'Bolivia', 'BH': 'Bahrain', 'BI': 'Burundi', 'BJ': 'Benin', 'BT': 'Bhutan', 'JM': 'Jamaica', 'BV': 'Bouvet Island', 'BW': 'Botswana', 'WS': 'Samoa', 'BR': 'Brazil', 'BS': 'Bahamas', 'BY': 'Belarus', 'BZ': 'Belize', 'RU': 'Russia', 'RW': 'Rwanda', 'TL': 'Timor-Leste', 'RE': u'R\xe9union', 'TM': 'Turkmenistan', 'TJ': 'Tajikistan', 'RO': 'Romania', 'TK': 'Tokelau', 'GW': 'Guinea-Bissau', 'GU': 'Guam', 'GT': 'Guatemala', 'GS': 'South Georgia and South Sandwich Islands', 'GR': 'Greece', 'GQ': 'Equatorial Guinea', 'GP': 'Guadeloupe', 'JP': 'Japan', 'GY': 'Guyana', 'GF': 'French Guiana', 'GE': 'Georgia', 'GD': 'Grenada', 'GB': 'United Kingdom', 'GA': 'Gabon', 'SV': 'El Salvador', 'GN': 'Guinea', 'GM': 'Gambia', 'GL': 'Greenland', 'GI': 'Gibraltar', 'GH': 'Ghana', 'OM': 'Oman', 'TN': 'Tunisia', 'JO': 'Jordan', 'SP': 'Serbia', 'HR': 'Croatia', 'HT': 'Haiti', 'HU': 'Hungary', 'HK': 'Hong Kong S.A.R., China', 'HN': 'Honduras', 'HM': 'Heard Island and McDonald Islands', 'VE': 'Venezuela', 'PR': 'Puerto Rico', 'PS': 'Palestinian Territory', 'PW': 'Palau', 'PT': 'Portugal', 'SJ': 'Svalbard and Jan Mayen', 'PY': 'Paraguay', 'IQ': 'Iraq', 'PA': 'Panama', 'PF': 'French Polynesia', 'PG': 'Papua New Guinea', 'PE': 'Peru', 'PK': 'Pakistan', 'PH': 'Philippines', 'PN': 'Pitcairn', 'PL': 'Poland', 'PM': 'Saint Pierre and Miquelon', 'ZM': 'Zambia', 'EH': 'Western Sahara', 'EE': 'Estonia', 'EG': 'Egypt', 'ZA': 'South Africa', 'EC': 'Ecuador', 'IT': 'Italy', 'VN': 'Vietnam', 'SB': 'Solomon Islands', 'ET': 'Ethiopia', 'SO': 'Somalia', 'ZW': 'Zimbabwe', 'SA': 'Saudi Arabia', 'ES': 'Spain', 'ER': 'Eritrea', 'MD': 'Moldova', 'MG': 'Madagascar', 'MA': 'Morocco', 'MC': 'Monaco', 'UZ': 'Uzbekistan', 'MM': 'Myanmar', 'ML': 'Mali', 'MO': 'Macao S.A.R. China', 'MN': 'Mongolia', 'MH': 'Marshall Islands', 'MK': 'Macedonia', 'MU': 'Mauritius', 'MT': 'Malta', 'MW': 'Malawi', 'MV': 'Maldives', 'MQ': 'Martinique', 'MP': 'Northern Mariana Islands', 'MS': 'Montserrat', 'MR': 'Mauritania', 'UG': 'Uganda', 'MY': 'Malaysia', 'MX': 'Mexico', 'IL': 'Israel', 'FR': 'France', 'IO': 'British Indian Ocean Territory', 'SH': 'Saint Helena', 'FI': 'Finland', 'FJ': 'Fiji', 'FK': 'Falkland Islands', 'FM': 'Micronesia', 'FO': 'Faroe Islands', 'NI': 'Nicaragua', 'NL': 'Netherlands', 'NO': 'Norway', 'NA': 'Namibia', 'VU': 'Vanuatu', 'NC': 'New Caledonia', 'NE': 'Niger', 'NF': 'Norfolk Island', 'NG': 'Nigeria', 'NZ': 'New Zealand', 'NP': 'Nepal', 'NR': 'Nauru', 'NU': 'Niue', 'CK': 'Cook Islands', 'CI': u"C\xf4te d'Ivoire", 'CH': 'Switzerland', 'CO': 'Colombia', 'CN': 'China', 'CM': 'Cameroon', 'CL': 'Chile', 'CC': 'Cocos Islands', 'CA': 'Canada', 'CG': 'Congo', 'CF': 'Central African Republic', 'CD': 'Democratic Republic of the Congo', 'CZ': 'Czech Republic', 'CY': 'Cyprus', 'CX': 'Christmas Island', 'CR': 'Costa Rica', 'CV': 'Cape Verde', 'CU': 'Cuba', 'SZ': 'Swaziland', 'SY': 'Syria', 'KG': 'Kyrgyzstan', 'KE': 'Kenya', 'SR': 'Suriname', 'KI': 'Kiribati', 'KH': 'Cambodia', 'KN': 'Saint Kitts and Nevis', 'KM': 'Comoros', 'ST': 'Sao Tome and Principe', 'SK': 'Slovakia', 'KR': 'South Korea', 'SI': 'Slovenia', 'KP': 'North Korea', 'KW': 'Kuwait', 'SN': 'Senegal', 'SM': 'San Marino', 'SL': 'Sierra Leone', 'SC': 'Seychelles', 'KZ': 'Kazakhstan', 'KY': 'Cayman Islands', 'SG': 'Singapore', 'SE': 'Sweden', 'SD': 'Sudan', 'DO': 'Dominican Republic', 'DM': 'Dominica', 'DJ': 'Djibouti', 'DK': 'Denmark', 'VG': 'British Virgin Islands', 'DE': 'Germany', 'YE': 'Yemen', 'DZ': 'Algeria', 'US': 'United States', 'UY': 'Uruguay', 'YU': 'Yugoslavia', 'YT': 'Mayotte', 'UM': 'United States Minor Outlying Islands', 'LB': 'Lebanon', 'LC': 'Saint Lucia', 'LA': 'Laos', 'TV': 'Tuvalu', 'TW': 'Taiwan', 'TT': 'Trinidad and Tobago', 'TR': 'Turkey', 'LK': 'Sri Lanka', 'LI': 'Liechtenstein', 'LV': 'Latvia', 'TO': 'Tonga', 'LT': 'Lithuania', 'LU': 'Luxembourg', 'LR': 'Liberia', 'LS': 'Lesotho', 'TH': 'Thailand', 'TF': 'French Southern Territories', 'TG': 'Togo', 'TD': 'Chad', 'TC': 'Turks and Caicos Islands', 'LY': 'Libya', 'VA': 'Vatican', 'VC': 'Saint Vincent and the Grenadines', 'AE': 'United Arab Emirates', 'AD': 'Andorra', 'AG': 'Antigua and Barbuda', 'AF': 'Afghanistan', 'AI': 'Anguilla', 'VI': 'U.S. Virgin Islands', 'IS': 'Iceland', 'IR': 'Iran', 'AM': 'Armenia', 'AL': 'Albania', 'AO': 'Angola', 'AN': 'Netherlands Antilles', 'AQ': 'Antarctica', 'AS': 'American Samoa', 'AR': 'Argentina', 'AU': 'Australia', 'AT': 'Austria', 'AW': 'Aruba', 'IN': 'India', 'TZ': 'Tanzania', 'AZ': 'Azerbaijan', 'IE': 'Ireland', 'ID': 'Indonesia', 'UA': 'Ukraine', 'QA': 'Qatar', 'MZ': 'Mozambique'} months=['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] abbrMonths=['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] days=['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'] abbrDays=['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] dateFormats={'medium': '%d/%m/%Y', 'full': '%%(dayname)s, %d %%(monthname)s %Y', 'long': '%d %%(monthname)s %Y', 'short': '%d/%m/%y'} numericSymbols={'group': ',', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': '.', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'} PKA>JZZturbogears/i18n/data/en_NZ.pyc; ȸHIc @s#hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd~***PKK93Zf!:!:turbogears/i18n/data/en_PH.py# Formatting configuration for locale en_PH languages={'gv': 'Manx', 'gu': 'Gujarati', 'rom': 'Romany', 'alg': 'Algonquian Languages', 'ale': 'Aleut', 'sco': 'Scots', 'mni': 'Manipuri', 'gd': 'Scottish Gaelic', 'ga': 'Irish', 'mno': 'Manobo Languages', 'osa': 'Osage', 'gn': 'Guarani', 'gl': 'Gallegan', 'mwr': 'Marwari', 'ty': 'Tahitian', 'tw': 'Twi', 'tt': 'Tatar', 'tr': 'Turkish', 'ts': 'Tsonga', 'tn': 'Tswana', 'to': 'Tonga (Tonga Islands)', 'aus': 'Australian Languages', 'av': 'Avaric', 'tk': 'Turkmen', 'th': 'Thai', 'roa': 'Romance (Other)', 'tg': 'Tajik', 'te': 'Telugu', 'uga': 'Ugaritic', 'ta': 'Tamil', 'fat': 'Fanti', 'fan': 'Fang', 'wo': 'Wolof', 'rm': 'Rhaeto-Romance', 'din': 'Dinka', 'bla': 'Siksika', 'cmc': 'Chamic Languages', 'ml': 'Malayalam', 'zh': 'Chinese', 'tem': 'Timne', 'za': 'Zhuang', 'cau': 'Caucasian (Other)', 'zu': 'Zulu', 'ter': 'Tereno', 'tet': 'Tetum', 'mnc': 'Manchu', 'kut': 'Kutenai', 'suk': 'Sukuma', 'kum': 'Kumyk', 'sus': 'Susu', 'new': 'Newari', 'sux': 'Sumerian', 'den': 'Slave', 'men': 'Mende', 'mul': 'Multiple Languages', 'lez': 'Lezghian', 'root': 'Root', 'eka': 'Ekajuk', 'akk': 'Akkadian', 'dra': 'Dravidian (Other)', 'jrb': 'Judeo-Arabic', 'sgn': 'Sign Languages', 'sga': 'Irish, Old (to 900)', 'apa': 'Apache Languages', 'bra': 'Braj', 'chb': 'Chibcha', 'chg': 'Chagatai', 'chk': 'Chuukese', 'chm': 'Mari', 'chn': 'Chinook Jargon', 'cho': 'Choctaw', 'chp': 'Chipewyan', 'chr': 'Cherokee', 'chy': 'Cheyenne', 'ti': 'Tigrinya', 'vot': 'Votic', 'mg': 'Malagasy', 'iba': 'Iban', 'mo': 'Moldavian', 'mn': 'Mongolian', 'mi': 'Maori', 'mh': 'Marshallese', 'mk': 'Macedonian', 'mt': 'Maltese', 'cai': 'Central American Indian (Other)', 'del': 'Delaware', 'ms': 'Malay', 'mr': 'Marathi', 'my': 'Burmese', 'cad': 'Caddo', 'tai': 'Tai (Other)', 'afh': 'Afrihili', 'sit': 'Sino-Tibetan (Other)', 'enm': 'English, Middle (1100-1500)', 'csb': 'Kashubian', 'nyn': 'Nyankole', 'nyo': 'Nyoro', 'nym': 'Nyamwezi', 'sio': 'Siouan Languages', 'map': 'Austronesian', 'mas': 'Masai', 'lah': 'Lahnda', 'lad': 'Ladino', 'fy': 'Frisian', 'snk': 'Soninke', 'fa': 'Persian', 'mad': 'Madurese', 'mag': 'Magahi', 'mai': 'Maithili', 'fi': 'Finnish', 'fj': 'Fijian', 'man': 'Mandingo', 'egy': 'Egyptian (Ancient)', 'znd': 'Zande', 'ss': 'Swati', 'sr': 'Serbian', 'sq': 'Albanian', 'sw': 'Swahili', 'sv': 'Swedish', 'su': 'Sundanese', 'st': 'Sotho, Southern', 'sk': 'Slovak', 'si': 'Sinhalese', 'sh': 'Serbo-Croatian', 'so': 'Somali', 'sn': 'Shona', 'sm': 'Samoan', 'sl': 'Slovenian', 'sc': 'Sardinian', 'sa': 'Sanskrit', 'sg': 'Sango', 'se': 'Northern Sami', 'sd': 'Sindhi', 'zen': 'Zenaga', 'kbd': 'Kabardian', 'afa': 'Afro-Asiatic (Other)', 'lg': 'Ganda', 'lb': 'Luxembourgish', 'fiu': 'Finno - Ugrian (Other)', 'ln': 'Lingala', 'lo': 'Lao', 'li': 'Limburgish', 'byn': 'Blin', 'lt': 'Lithuanian', 'lu': 'Luba-Katanga', 'yi': 'Yiddish', 'non': 'Norse, Old', 'ceb': 'Cebuano', 'yo': 'Yoruba', 'nog': 'Nogai', 'bat': 'Baltic (Other)', 'dak': 'Dakota', 'dar': 'Dargwa', 'day': 'Dayak', 'ssa': 'Nilo-Saharam (Other)', 'kpe': 'Kpelle', 'el': 'Greek', 'eo': 'Esperanto', 'en': 'English', 'lam': 'Lamba', 'ee': 'Ewe', 'mdf': 'Moksha', 'fr': 'French', 'mdr': 'Mandar', 'et': 'Estonian', 'es': 'Spanish', 'ru': 'Russian', 'gon': 'Gondi', 'goh': 'German, Old High (ca.750-1050)', 'sms': 'Skolt Sami', 'smn': 'Inari Sami', 'smj': 'Lule Sami', 'smi': 'Sami languages (Other)', 'got': 'Gothic', 'rn': 'Rundi', 'ro': 'Romanian', 'dsb': 'Lower Sorbian', 'sma': 'Southern Sami', 'gor': 'Gorontalo', 'ast': 'Asturian', 'wal': 'Walamo', 'crh': 'Crimean Turkish; Crimean Tatar', 'ath': 'Athapascan Languages', 'gez': 'Geez', 'xh': 'Xhosa', 'ff': 'Fulah', 'mak': 'Makasar', 'zap': 'Zapotec', 'kok': 'Konkani', 'kos': 'Kosraean', 'fo': 'Faroese', 'tog': 'Tonga (Nyasa)', 'hup': 'Hupa', 'udm': 'Udmurt', 'bej': 'Beja', 'bem': 'Bemba', 'tsi': 'Tsimshian', 'ber': 'Berber', 'nzi': 'Nzima', 'sai': 'South American Indian (Other)', 'ang': 'English, Old (ca.450-1100)', 'pra': 'Prakrit Languages', 'bho': 'Bhojpuri', 'sal': 'Salishan languages', 'pro': u'Proven\xe7al, Old (to 1500)', 'raj': 'Rajasthani', 'sad': 'Sandawe', 'rar': 'Rarotongan', 'rap': 'Rapanui', 'sas': 'Sasak', 'car': 'Carib', 'min': 'Minangkabau', 'mic': 'Micmac', 'efi': 'Efik', 'arn': 'Araucanian', 'ypk': 'Yupik Languages', 'mis': 'Miscellaneous Languages', 'kac': 'Kachin', 'kab': 'Kabyle', 'kaa': 'Kara-Kalpak', 'kam': 'Kamba', 'kar': 'Karen', 'kaw': 'Kawi', 'tyv': 'Tuvinian', 'awa': 'Awadhi', 'ka': 'Georgian', 'doi': 'Dogri', 'kg': 'Kongo', 'kk': 'Kazakh', 'kj': 'Kuanyama', 'ki': 'Kikuyu', 'ko': 'Korean', 'kn': 'Kannada', 'km': 'Khmer', 'kl': 'Kalaallisut', 'ks': 'Kashmiri', 'kr': 'Kanuri', 'kw': 'Cornish', 'kv': 'Komi', 'ku': 'Kurdish', 'ky': 'Kirghiz', 'tkl': 'Tokelau', 'bua': 'Buriat', 'mga': 'Irish, Middle (900-1200)', 'hit': 'Hittite', 'dyu': 'Dyula', 'de': 'German', 'da': 'Danish', 'dz': 'Dzongkha', 'ira': 'Iranian', 'dv': 'Divehi', 'hil': 'Hiligaynon', 'him': 'Himachali', 'gem': 'Germanic (Other)', 'crp': 'Creoles and Pidgins (Other)', 'qu': 'Quechua', 'bas': 'Basa', 'gba': 'Gbaya', 'bad': 'Banda', 'ban': 'Balinese', 'bal': 'Baluchi', 'bam': 'Bambara', 'shn': 'Shan', 'bai': 'Bamileke Languages', 'arp': 'Arapaho', 'art': 'Artificial (Other)', 'arw': 'Arawak', 'arc': 'Aramaic', 'sem': 'Semitic (Other)', 'sel': 'Selkup', 'nub': 'Nubian Languages', 'btk': 'Batak', 'lus': 'Lushai', 'mus': 'Creek', 'lua': 'Luba-Lulua', 'iro': 'Iroquoian languages', 'lui': 'Luiseno', 'mun': 'Munda Languages', 'lun': 'Lunda', 'luo': 'Luo', 'wa': 'Walloon', 'tup': 'Tupi languages', 'jv': 'Javanese', 'tut': 'Altaic (Other)', 'tum': 'Tumbuka', 'ja': 'Japanese', 'cop': 'Coptic', 'ilo': 'Iloko', 'la': 'Latin', 'gwi': "Gwich'in", 'und': 'Undetermined', 'tli': 'Tlingit', 'ch': 'Chamorro', 'co': 'Corsican', 'ca': 'Catalan', 'ce': 'Chechen', 'pon': 'Pohnpeian', 'cy': 'Welsh', 'sah': 'Yakut', 'cs': 'Czech', 'cr': 'Cree', 'bnt': 'Bantu', 'cv': 'Chuvash', 'cu': 'Church Slavic', 'lv': 'Latvian', 'dum': 'Dutch, Middle (ca. 1050-1350)', 'pt': 'Portuguese', 'dua': 'Duala', 'fro': 'French, Old (842-ca.1400)', 'yap': 'Yapese', 'frm': 'French, Middle (ca.1400-1600)', 'tiv': 'Tiv', 'yao': 'Yao', 'pa': 'Punjabi', 'xal': 'Kalmyk', 'pi': 'Pali', 'pl': 'Polish', 'gay': 'Gayo', 'oto': 'Otomian Languages', 'ota': 'Turkish, Ottoman (1500-1928)', 'hmn': 'Hmong', 'an': 'Aragonese', 'gaa': 'Ga', 'fur': 'Friulian', 'khi': 'Khoisan (Other)', 'sla': 'Slavic (Other)', 've': 'Venda', 'vi': 'Vietnamese', 'is': 'Icelandic', 'kho': 'Khotanese', 'iu': 'Inuktitut', 'it': 'Italian', 'vo': u'Volap\xfck', 'ii': 'Sichuan Yi', 'ik': 'Inupiaq', 'io': 'Ido', 'ine': 'Indo-European (Other)', 'ia': 'Interlingua', 'jpr': 'Judeo-Persian', 'ie': 'Interlingue', 'id': 'Indonesian', 'ig': 'Igbo', 'pap': 'Papiamento', 'ewo': 'Ewondo', 'pau': 'Palauan', 'paa': 'Papuan (Other)', 'pag': 'Pangasinan', 'sat': 'Santali', 'pal': 'Pahlavi', 'pam': 'Pampanga', 'phi': 'Philippine (Other)', 'cel': 'Celtic (Other)', 'phn': 'Phoenician', 'nic': 'Niger - Kordofanian (Other)', 'nia': 'Nias', 'dgr': 'Dogrib', 'syr': 'Syriac', 'niu': 'Niuean', 'jbo': 'Lojban', 'nah': 'Nahuatl', 'sam': 'Samaritan Aramaic', 'hai': 'Haida', 'gmh': 'German, Middle High (ca.1050-1500)', 'cus': 'Cushitic (Other)', 'wen': 'Sorbian Languages', 'ady': 'Adyghe', 'elx': 'Elamite', 'ada': 'Adangme', 'haw': 'Hawaiian', 'bin': 'Bini', 'bik': 'Bikol', 'mos': 'Mossi', 'moh': 'Mohawk', 'tl': 'Tagalog', 'tvl': 'Tuvalu', 'ijo': 'Ijo', 'kmb': 'Kimbundu', 'peo': 'Persian Old (ca.600-400 B.C.)', 'umb': 'Umbundu', 'tmh': 'Tamashek', 'fon': 'Fon', 'hsb': 'Upper Sorbian', 'be': 'Belarusian', 'bg': 'Bulgarian', 'ba': 'Bashkir', 'ps': 'Pashto (Pushto)', 'bm': 'Bambara', 'bn': 'Bengali', 'bo': 'Tibetan', 'bh': 'Bihari', 'bi': 'Bislama', 'br': 'Breton', 'bs': 'Bosnian', 'om': 'Oromo', 'oj': 'Ojibwa', 'ace': 'Achinese', 'ach': 'Acoli', 'oc': u'Occitan (post 1500); Proven\xe7al', 'kru': 'Kurukh', 'srr': 'Serer', 'kro': 'Kru', 'krc': 'Karachay-Balkar', 'nds': 'Low German; Low Saxon', 'os': 'Ossetic', 'or': 'Oriya', 'sog': 'Sogdien', 'nso': 'Sotho, Northern', 'son': 'Songhai', 'vai': 'Vai', 'wak': 'Wakashan Languages', 'lol': 'Mongo', 'mkh': 'Mon-Khmer (Other)', 'loz': 'Lozi', 'gil': 'Gilbertese', 'was': 'Washo', 'war': 'Waray', 'hz': 'Herero', 'hy': 'Armenian', 'sid': 'Sidamo', 'hr': 'Croatian', 'ht': 'Haitian', 'hu': 'Hungarian', 'hi': 'Hindi', 'ho': 'Hiri Motu', 'ha': 'Hausa', 'bug': 'Buginese', 'he': 'Hebrew', 'uz': 'Uzbek', 'ur': 'Urdu', 'uk': 'Ukrainian', 'ug': 'Uighur', 'aa': 'Afar', 'ab': 'Abkhazian', 'ae': 'Avestan', 'af': 'Afrikaans', 'ak': 'Akan', 'am': 'Amharic', 'myv': 'Erzya', 'eu': 'Basque', 'as': 'Assamese', 'ar': 'Arabic', 'inh': 'Ingush', 'tpi': 'Tok Pisin', 'myn': 'Mayan', 'ay': 'Aymara', 'kha': 'Khasi', 'az': 'Azerbaijani', 'inc': 'Indic (Other)', 'nl': 'Dutch', 'nn': 'Norwegian Nynorsk', 'no': 'Norwegian', 'na': 'Nauru', 'nb': u'Norwegian Bokm\xe5l', 'nai': 'North American Indian (Other)', 'nd': 'Ndebele, North', 'ne': 'Nepali', 'ng': 'Ndonga', 'ny': 'Nyanja; Chichewa; Chewa', 'nap': 'Neapolitan', 'grb': 'Gerbo', 'grc': 'Greek, Ancient (to 1453)', 'nr': 'Ndebele, South', 'tig': 'Tigre', 'nv': 'Navajo', 'zun': 'Zuni', 'rw': 'Kinyarwanda', 'cpe': 'Creoles and Pidgins, English-based (Other)', 'cpf': 'Creoles and Pidgins, French-based (Other)', 'cpp': 'Creoles and pidgins, Portuguese-based (Other)'} countries={'BD': 'Bangladesh', 'BE': 'Belgium', 'BF': 'Burkina Faso', 'BG': 'Bulgaria', 'BA': 'Bosnia and Herzegovina', 'BB': 'Barbados', 'WF': 'Wallis and Futuna', 'BM': 'Bermuda', 'BN': 'Brunei', 'BO': 'Bolivia', 'BH': 'Bahrain', 'BI': 'Burundi', 'BJ': 'Benin', 'BT': 'Bhutan', 'JM': 'Jamaica', 'BV': 'Bouvet Island', 'BW': 'Botswana', 'WS': 'Samoa', 'BR': 'Brazil', 'BS': 'Bahamas', 'BY': 'Belarus', 'BZ': 'Belize', 'RU': 'Russia', 'RW': 'Rwanda', 'TL': 'Timor-Leste', 'RE': u'R\xe9union', 'TM': 'Turkmenistan', 'TJ': 'Tajikistan', 'RO': 'Romania', 'TK': 'Tokelau', 'GW': 'Guinea-Bissau', 'GU': 'Guam', 'GT': 'Guatemala', 'GS': 'South Georgia and South Sandwich Islands', 'GR': 'Greece', 'GQ': 'Equatorial Guinea', 'GP': 'Guadeloupe', 'JP': 'Japan', 'GY': 'Guyana', 'GF': 'French Guiana', 'GE': 'Georgia', 'GD': 'Grenada', 'GB': 'United Kingdom', 'GA': 'Gabon', 'SV': 'El Salvador', 'GN': 'Guinea', 'GM': 'Gambia', 'GL': 'Greenland', 'GI': 'Gibraltar', 'GH': 'Ghana', 'OM': 'Oman', 'TN': 'Tunisia', 'JO': 'Jordan', 'SP': 'Serbia', 'HR': 'Croatia', 'HT': 'Haiti', 'HU': 'Hungary', 'HK': 'Hong Kong S.A.R., China', 'HN': 'Honduras', 'HM': 'Heard Island and McDonald Islands', 'VE': 'Venezuela', 'PR': 'Puerto Rico', 'PS': 'Palestinian Territory', 'PW': 'Palau', 'PT': 'Portugal', 'SJ': 'Svalbard and Jan Mayen', 'PY': 'Paraguay', 'IQ': 'Iraq', 'PA': 'Panama', 'PF': 'French Polynesia', 'PG': 'Papua New Guinea', 'PE': 'Peru', 'PK': 'Pakistan', 'PH': 'Philippines', 'PN': 'Pitcairn', 'PL': 'Poland', 'PM': 'Saint Pierre and Miquelon', 'ZM': 'Zambia', 'EH': 'Western Sahara', 'EE': 'Estonia', 'EG': 'Egypt', 'ZA': 'South Africa', 'EC': 'Ecuador', 'IT': 'Italy', 'VN': 'Vietnam', 'SB': 'Solomon Islands', 'ET': 'Ethiopia', 'SO': 'Somalia', 'ZW': 'Zimbabwe', 'SA': 'Saudi Arabia', 'ES': 'Spain', 'ER': 'Eritrea', 'MD': 'Moldova', 'MG': 'Madagascar', 'MA': 'Morocco', 'MC': 'Monaco', 'UZ': 'Uzbekistan', 'MM': 'Myanmar', 'ML': 'Mali', 'MO': 'Macao S.A.R. China', 'MN': 'Mongolia', 'MH': 'Marshall Islands', 'MK': 'Macedonia', 'MU': 'Mauritius', 'MT': 'Malta', 'MW': 'Malawi', 'MV': 'Maldives', 'MQ': 'Martinique', 'MP': 'Northern Mariana Islands', 'MS': 'Montserrat', 'MR': 'Mauritania', 'UG': 'Uganda', 'MY': 'Malaysia', 'MX': 'Mexico', 'IL': 'Israel', 'FR': 'France', 'IO': 'British Indian Ocean Territory', 'SH': 'Saint Helena', 'FI': 'Finland', 'FJ': 'Fiji', 'FK': 'Falkland Islands', 'FM': 'Micronesia', 'FO': 'Faroe Islands', 'NI': 'Nicaragua', 'NL': 'Netherlands', 'NO': 'Norway', 'NA': 'Namibia', 'VU': 'Vanuatu', 'NC': 'New Caledonia', 'NE': 'Niger', 'NF': 'Norfolk Island', 'NG': 'Nigeria', 'NZ': 'New Zealand', 'NP': 'Nepal', 'NR': 'Nauru', 'NU': 'Niue', 'CK': 'Cook Islands', 'CI': u"C\xf4te d'Ivoire", 'CH': 'Switzerland', 'CO': 'Colombia', 'CN': 'China', 'CM': 'Cameroon', 'CL': 'Chile', 'CC': 'Cocos Islands', 'CA': 'Canada', 'CG': 'Congo', 'CF': 'Central African Republic', 'CD': 'Democratic Republic of the Congo', 'CZ': 'Czech Republic', 'CY': 'Cyprus', 'CX': 'Christmas Island', 'CR': 'Costa Rica', 'CV': 'Cape Verde', 'CU': 'Cuba', 'SZ': 'Swaziland', 'SY': 'Syria', 'KG': 'Kyrgyzstan', 'KE': 'Kenya', 'SR': 'Suriname', 'KI': 'Kiribati', 'KH': 'Cambodia', 'KN': 'Saint Kitts and Nevis', 'KM': 'Comoros', 'ST': 'Sao Tome and Principe', 'SK': 'Slovakia', 'KR': 'South Korea', 'SI': 'Slovenia', 'KP': 'North Korea', 'KW': 'Kuwait', 'SN': 'Senegal', 'SM': 'San Marino', 'SL': 'Sierra Leone', 'SC': 'Seychelles', 'KZ': 'Kazakhstan', 'KY': 'Cayman Islands', 'SG': 'Singapore', 'SE': 'Sweden', 'SD': 'Sudan', 'DO': 'Dominican Republic', 'DM': 'Dominica', 'DJ': 'Djibouti', 'DK': 'Denmark', 'VG': 'British Virgin Islands', 'DE': 'Germany', 'YE': 'Yemen', 'DZ': 'Algeria', 'US': 'United States', 'UY': 'Uruguay', 'YU': 'Yugoslavia', 'YT': 'Mayotte', 'UM': 'United States Minor Outlying Islands', 'LB': 'Lebanon', 'LC': 'Saint Lucia', 'LA': 'Laos', 'TV': 'Tuvalu', 'TW': 'Taiwan', 'TT': 'Trinidad and Tobago', 'TR': 'Turkey', 'LK': 'Sri Lanka', 'LI': 'Liechtenstein', 'LV': 'Latvia', 'TO': 'Tonga', 'LT': 'Lithuania', 'LU': 'Luxembourg', 'LR': 'Liberia', 'LS': 'Lesotho', 'TH': 'Thailand', 'TF': 'French Southern Territories', 'TG': 'Togo', 'TD': 'Chad', 'TC': 'Turks and Caicos Islands', 'LY': 'Libya', 'VA': 'Vatican', 'VC': 'Saint Vincent and the Grenadines', 'AE': 'United Arab Emirates', 'AD': 'Andorra', 'AG': 'Antigua and Barbuda', 'AF': 'Afghanistan', 'AI': 'Anguilla', 'VI': 'U.S. Virgin Islands', 'IS': 'Iceland', 'IR': 'Iran', 'AM': 'Armenia', 'AL': 'Albania', 'AO': 'Angola', 'AN': 'Netherlands Antilles', 'AQ': 'Antarctica', 'AS': 'American Samoa', 'AR': 'Argentina', 'AU': 'Australia', 'AT': 'Austria', 'AW': 'Aruba', 'IN': 'India', 'TZ': 'Tanzania', 'AZ': 'Azerbaijan', 'IE': 'Ireland', 'ID': 'Indonesia', 'UA': 'Ukraine', 'QA': 'Qatar', 'MZ': 'Mozambique'} months=['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] abbrMonths=['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] days=['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'] abbrDays=['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] dateFormats={'medium': '%m %d, %y', 'full': '%%(dayname)s, %%(monthname)s %d, %Y', 'long': '%%(monthname)s %d, %Y', 'short': '%m/%d/%y'} numericSymbols={'group': ',', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': '.', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'} PKA>ThZZturbogears/i18n/data/en_PH.pyc; ȸHIc @s#hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd~***PKK9s* $:$:turbogears/i18n/data/en_SG.py# Formatting configuration for locale en_SG languages={'gv': 'Manx', 'gu': 'Gujarati', 'rom': 'Romany', 'alg': 'Algonquian Languages', 'ale': 'Aleut', 'sco': 'Scots', 'mni': 'Manipuri', 'gd': 'Scottish Gaelic', 'ga': 'Irish', 'mno': 'Manobo Languages', 'osa': 'Osage', 'gn': 'Guarani', 'gl': 'Gallegan', 'mwr': 'Marwari', 'ty': 'Tahitian', 'tw': 'Twi', 'tt': 'Tatar', 'tr': 'Turkish', 'ts': 'Tsonga', 'tn': 'Tswana', 'to': 'Tonga (Tonga Islands)', 'aus': 'Australian Languages', 'av': 'Avaric', 'tk': 'Turkmen', 'th': 'Thai', 'roa': 'Romance (Other)', 'tg': 'Tajik', 'te': 'Telugu', 'uga': 'Ugaritic', 'ta': 'Tamil', 'fat': 'Fanti', 'fan': 'Fang', 'wo': 'Wolof', 'rm': 'Rhaeto-Romance', 'din': 'Dinka', 'bla': 'Siksika', 'cmc': 'Chamic Languages', 'ml': 'Malayalam', 'zh': 'Chinese', 'tem': 'Timne', 'za': 'Zhuang', 'cau': 'Caucasian (Other)', 'zu': 'Zulu', 'ter': 'Tereno', 'tet': 'Tetum', 'mnc': 'Manchu', 'kut': 'Kutenai', 'suk': 'Sukuma', 'kum': 'Kumyk', 'sus': 'Susu', 'new': 'Newari', 'sux': 'Sumerian', 'den': 'Slave', 'men': 'Mende', 'mul': 'Multiple Languages', 'lez': 'Lezghian', 'root': 'Root', 'eka': 'Ekajuk', 'akk': 'Akkadian', 'dra': 'Dravidian (Other)', 'jrb': 'Judeo-Arabic', 'sgn': 'Sign Languages', 'sga': 'Irish, Old (to 900)', 'apa': 'Apache Languages', 'bra': 'Braj', 'chb': 'Chibcha', 'chg': 'Chagatai', 'chk': 'Chuukese', 'chm': 'Mari', 'chn': 'Chinook Jargon', 'cho': 'Choctaw', 'chp': 'Chipewyan', 'chr': 'Cherokee', 'chy': 'Cheyenne', 'ti': 'Tigrinya', 'vot': 'Votic', 'mg': 'Malagasy', 'iba': 'Iban', 'mo': 'Moldavian', 'mn': 'Mongolian', 'mi': 'Maori', 'mh': 'Marshallese', 'mk': 'Macedonian', 'mt': 'Maltese', 'cai': 'Central American Indian (Other)', 'del': 'Delaware', 'ms': 'Malay', 'mr': 'Marathi', 'my': 'Burmese', 'cad': 'Caddo', 'tai': 'Tai (Other)', 'afh': 'Afrihili', 'sit': 'Sino-Tibetan (Other)', 'enm': 'English, Middle (1100-1500)', 'csb': 'Kashubian', 'nyn': 'Nyankole', 'nyo': 'Nyoro', 'nym': 'Nyamwezi', 'sio': 'Siouan Languages', 'map': 'Austronesian', 'mas': 'Masai', 'lah': 'Lahnda', 'lad': 'Ladino', 'fy': 'Frisian', 'snk': 'Soninke', 'fa': 'Persian', 'mad': 'Madurese', 'mag': 'Magahi', 'mai': 'Maithili', 'fi': 'Finnish', 'fj': 'Fijian', 'man': 'Mandingo', 'egy': 'Egyptian (Ancient)', 'znd': 'Zande', 'ss': 'Swati', 'sr': 'Serbian', 'sq': 'Albanian', 'sw': 'Swahili', 'sv': 'Swedish', 'su': 'Sundanese', 'st': 'Sotho, Southern', 'sk': 'Slovak', 'si': 'Sinhalese', 'sh': 'Serbo-Croatian', 'so': 'Somali', 'sn': 'Shona', 'sm': 'Samoan', 'sl': 'Slovenian', 'sc': 'Sardinian', 'sa': 'Sanskrit', 'sg': 'Sango', 'se': 'Northern Sami', 'sd': 'Sindhi', 'zen': 'Zenaga', 'kbd': 'Kabardian', 'afa': 'Afro-Asiatic (Other)', 'lg': 'Ganda', 'lb': 'Luxembourgish', 'fiu': 'Finno - Ugrian (Other)', 'ln': 'Lingala', 'lo': 'Lao', 'li': 'Limburgish', 'byn': 'Blin', 'lt': 'Lithuanian', 'lu': 'Luba-Katanga', 'yi': 'Yiddish', 'non': 'Norse, Old', 'ceb': 'Cebuano', 'yo': 'Yoruba', 'nog': 'Nogai', 'bat': 'Baltic (Other)', 'dak': 'Dakota', 'dar': 'Dargwa', 'day': 'Dayak', 'ssa': 'Nilo-Saharam (Other)', 'kpe': 'Kpelle', 'el': 'Greek', 'eo': 'Esperanto', 'en': 'English', 'lam': 'Lamba', 'ee': 'Ewe', 'mdf': 'Moksha', 'fr': 'French', 'mdr': 'Mandar', 'et': 'Estonian', 'es': 'Spanish', 'ru': 'Russian', 'gon': 'Gondi', 'goh': 'German, Old High (ca.750-1050)', 'sms': 'Skolt Sami', 'smn': 'Inari Sami', 'smj': 'Lule Sami', 'smi': 'Sami languages (Other)', 'got': 'Gothic', 'rn': 'Rundi', 'ro': 'Romanian', 'dsb': 'Lower Sorbian', 'sma': 'Southern Sami', 'gor': 'Gorontalo', 'ast': 'Asturian', 'wal': 'Walamo', 'crh': 'Crimean Turkish; Crimean Tatar', 'ath': 'Athapascan Languages', 'gez': 'Geez', 'xh': 'Xhosa', 'ff': 'Fulah', 'mak': 'Makasar', 'zap': 'Zapotec', 'kok': 'Konkani', 'kos': 'Kosraean', 'fo': 'Faroese', 'tog': 'Tonga (Nyasa)', 'hup': 'Hupa', 'udm': 'Udmurt', 'bej': 'Beja', 'bem': 'Bemba', 'tsi': 'Tsimshian', 'ber': 'Berber', 'nzi': 'Nzima', 'sai': 'South American Indian (Other)', 'ang': 'English, Old (ca.450-1100)', 'pra': 'Prakrit Languages', 'bho': 'Bhojpuri', 'sal': 'Salishan languages', 'pro': u'Proven\xe7al, Old (to 1500)', 'raj': 'Rajasthani', 'sad': 'Sandawe', 'rar': 'Rarotongan', 'rap': 'Rapanui', 'sas': 'Sasak', 'car': 'Carib', 'min': 'Minangkabau', 'mic': 'Micmac', 'efi': 'Efik', 'arn': 'Araucanian', 'ypk': 'Yupik Languages', 'mis': 'Miscellaneous Languages', 'kac': 'Kachin', 'kab': 'Kabyle', 'kaa': 'Kara-Kalpak', 'kam': 'Kamba', 'kar': 'Karen', 'kaw': 'Kawi', 'tyv': 'Tuvinian', 'awa': 'Awadhi', 'ka': 'Georgian', 'doi': 'Dogri', 'kg': 'Kongo', 'kk': 'Kazakh', 'kj': 'Kuanyama', 'ki': 'Kikuyu', 'ko': 'Korean', 'kn': 'Kannada', 'km': 'Khmer', 'kl': 'Kalaallisut', 'ks': 'Kashmiri', 'kr': 'Kanuri', 'kw': 'Cornish', 'kv': 'Komi', 'ku': 'Kurdish', 'ky': 'Kirghiz', 'tkl': 'Tokelau', 'bua': 'Buriat', 'mga': 'Irish, Middle (900-1200)', 'hit': 'Hittite', 'dyu': 'Dyula', 'de': 'German', 'da': 'Danish', 'dz': 'Dzongkha', 'ira': 'Iranian', 'dv': 'Divehi', 'hil': 'Hiligaynon', 'him': 'Himachali', 'gem': 'Germanic (Other)', 'crp': 'Creoles and Pidgins (Other)', 'qu': 'Quechua', 'bas': 'Basa', 'gba': 'Gbaya', 'bad': 'Banda', 'ban': 'Balinese', 'bal': 'Baluchi', 'bam': 'Bambara', 'shn': 'Shan', 'bai': 'Bamileke Languages', 'arp': 'Arapaho', 'art': 'Artificial (Other)', 'arw': 'Arawak', 'arc': 'Aramaic', 'sem': 'Semitic (Other)', 'sel': 'Selkup', 'nub': 'Nubian Languages', 'btk': 'Batak', 'lus': 'Lushai', 'mus': 'Creek', 'lua': 'Luba-Lulua', 'iro': 'Iroquoian languages', 'lui': 'Luiseno', 'mun': 'Munda Languages', 'lun': 'Lunda', 'luo': 'Luo', 'wa': 'Walloon', 'tup': 'Tupi languages', 'jv': 'Javanese', 'tut': 'Altaic (Other)', 'tum': 'Tumbuka', 'ja': 'Japanese', 'cop': 'Coptic', 'ilo': 'Iloko', 'la': 'Latin', 'gwi': "Gwich'in", 'und': 'Undetermined', 'tli': 'Tlingit', 'ch': 'Chamorro', 'co': 'Corsican', 'ca': 'Catalan', 'ce': 'Chechen', 'pon': 'Pohnpeian', 'cy': 'Welsh', 'sah': 'Yakut', 'cs': 'Czech', 'cr': 'Cree', 'bnt': 'Bantu', 'cv': 'Chuvash', 'cu': 'Church Slavic', 'lv': 'Latvian', 'dum': 'Dutch, Middle (ca. 1050-1350)', 'pt': 'Portuguese', 'dua': 'Duala', 'fro': 'French, Old (842-ca.1400)', 'yap': 'Yapese', 'frm': 'French, Middle (ca.1400-1600)', 'tiv': 'Tiv', 'yao': 'Yao', 'pa': 'Punjabi', 'xal': 'Kalmyk', 'pi': 'Pali', 'pl': 'Polish', 'gay': 'Gayo', 'oto': 'Otomian Languages', 'ota': 'Turkish, Ottoman (1500-1928)', 'hmn': 'Hmong', 'an': 'Aragonese', 'gaa': 'Ga', 'fur': 'Friulian', 'khi': 'Khoisan (Other)', 'sla': 'Slavic (Other)', 've': 'Venda', 'vi': 'Vietnamese', 'is': 'Icelandic', 'kho': 'Khotanese', 'iu': 'Inuktitut', 'it': 'Italian', 'vo': u'Volap\xfck', 'ii': 'Sichuan Yi', 'ik': 'Inupiaq', 'io': 'Ido', 'ine': 'Indo-European (Other)', 'ia': 'Interlingua', 'jpr': 'Judeo-Persian', 'ie': 'Interlingue', 'id': 'Indonesian', 'ig': 'Igbo', 'pap': 'Papiamento', 'ewo': 'Ewondo', 'pau': 'Palauan', 'paa': 'Papuan (Other)', 'pag': 'Pangasinan', 'sat': 'Santali', 'pal': 'Pahlavi', 'pam': 'Pampanga', 'phi': 'Philippine (Other)', 'cel': 'Celtic (Other)', 'phn': 'Phoenician', 'nic': 'Niger - Kordofanian (Other)', 'nia': 'Nias', 'dgr': 'Dogrib', 'syr': 'Syriac', 'niu': 'Niuean', 'jbo': 'Lojban', 'nah': 'Nahuatl', 'sam': 'Samaritan Aramaic', 'hai': 'Haida', 'gmh': 'German, Middle High (ca.1050-1500)', 'cus': 'Cushitic (Other)', 'wen': 'Sorbian Languages', 'ady': 'Adyghe', 'elx': 'Elamite', 'ada': 'Adangme', 'haw': 'Hawaiian', 'bin': 'Bini', 'bik': 'Bikol', 'mos': 'Mossi', 'moh': 'Mohawk', 'tl': 'Tagalog', 'tvl': 'Tuvalu', 'ijo': 'Ijo', 'kmb': 'Kimbundu', 'peo': 'Persian Old (ca.600-400 B.C.)', 'umb': 'Umbundu', 'tmh': 'Tamashek', 'fon': 'Fon', 'hsb': 'Upper Sorbian', 'be': 'Belarusian', 'bg': 'Bulgarian', 'ba': 'Bashkir', 'ps': 'Pashto (Pushto)', 'bm': 'Bambara', 'bn': 'Bengali', 'bo': 'Tibetan', 'bh': 'Bihari', 'bi': 'Bislama', 'br': 'Breton', 'bs': 'Bosnian', 'om': 'Oromo', 'oj': 'Ojibwa', 'ace': 'Achinese', 'ach': 'Acoli', 'oc': u'Occitan (post 1500); Proven\xe7al', 'kru': 'Kurukh', 'srr': 'Serer', 'kro': 'Kru', 'krc': 'Karachay-Balkar', 'nds': 'Low German; Low Saxon', 'os': 'Ossetic', 'or': 'Oriya', 'sog': 'Sogdien', 'nso': 'Sotho, Northern', 'son': 'Songhai', 'vai': 'Vai', 'wak': 'Wakashan Languages', 'lol': 'Mongo', 'mkh': 'Mon-Khmer (Other)', 'loz': 'Lozi', 'gil': 'Gilbertese', 'was': 'Washo', 'war': 'Waray', 'hz': 'Herero', 'hy': 'Armenian', 'sid': 'Sidamo', 'hr': 'Croatian', 'ht': 'Haitian', 'hu': 'Hungarian', 'hi': 'Hindi', 'ho': 'Hiri Motu', 'ha': 'Hausa', 'bug': 'Buginese', 'he': 'Hebrew', 'uz': 'Uzbek', 'ur': 'Urdu', 'uk': 'Ukrainian', 'ug': 'Uighur', 'aa': 'Afar', 'ab': 'Abkhazian', 'ae': 'Avestan', 'af': 'Afrikaans', 'ak': 'Akan', 'am': 'Amharic', 'myv': 'Erzya', 'eu': 'Basque', 'as': 'Assamese', 'ar': 'Arabic', 'inh': 'Ingush', 'tpi': 'Tok Pisin', 'myn': 'Mayan', 'ay': 'Aymara', 'kha': 'Khasi', 'az': 'Azerbaijani', 'inc': 'Indic (Other)', 'nl': 'Dutch', 'nn': 'Norwegian Nynorsk', 'no': 'Norwegian', 'na': 'Nauru', 'nb': u'Norwegian Bokm\xe5l', 'nai': 'North American Indian (Other)', 'nd': 'Ndebele, North', 'ne': 'Nepali', 'ng': 'Ndonga', 'ny': 'Nyanja; Chichewa; Chewa', 'nap': 'Neapolitan', 'grb': 'Gerbo', 'grc': 'Greek, Ancient (to 1453)', 'nr': 'Ndebele, South', 'tig': 'Tigre', 'nv': 'Navajo', 'zun': 'Zuni', 'rw': 'Kinyarwanda', 'cpe': 'Creoles and Pidgins, English-based (Other)', 'cpf': 'Creoles and Pidgins, French-based (Other)', 'cpp': 'Creoles and pidgins, Portuguese-based (Other)'} countries={'BD': 'Bangladesh', 'BE': 'Belgium', 'BF': 'Burkina Faso', 'BG': 'Bulgaria', 'BA': 'Bosnia and Herzegovina', 'BB': 'Barbados', 'WF': 'Wallis and Futuna', 'BM': 'Bermuda', 'BN': 'Brunei', 'BO': 'Bolivia', 'BH': 'Bahrain', 'BI': 'Burundi', 'BJ': 'Benin', 'BT': 'Bhutan', 'JM': 'Jamaica', 'BV': 'Bouvet Island', 'BW': 'Botswana', 'WS': 'Samoa', 'BR': 'Brazil', 'BS': 'Bahamas', 'BY': 'Belarus', 'BZ': 'Belize', 'RU': 'Russia', 'RW': 'Rwanda', 'TL': 'Timor-Leste', 'RE': u'R\xe9union', 'TM': 'Turkmenistan', 'TJ': 'Tajikistan', 'RO': 'Romania', 'TK': 'Tokelau', 'GW': 'Guinea-Bissau', 'GU': 'Guam', 'GT': 'Guatemala', 'GS': 'South Georgia and South Sandwich Islands', 'GR': 'Greece', 'GQ': 'Equatorial Guinea', 'GP': 'Guadeloupe', 'JP': 'Japan', 'GY': 'Guyana', 'GF': 'French Guiana', 'GE': 'Georgia', 'GD': 'Grenada', 'GB': 'United Kingdom', 'GA': 'Gabon', 'SV': 'El Salvador', 'GN': 'Guinea', 'GM': 'Gambia', 'GL': 'Greenland', 'GI': 'Gibraltar', 'GH': 'Ghana', 'OM': 'Oman', 'TN': 'Tunisia', 'JO': 'Jordan', 'SP': 'Serbia', 'HR': 'Croatia', 'HT': 'Haiti', 'HU': 'Hungary', 'HK': 'Hong Kong S.A.R., China', 'HN': 'Honduras', 'HM': 'Heard Island and McDonald Islands', 'VE': 'Venezuela', 'PR': 'Puerto Rico', 'PS': 'Palestinian Territory', 'PW': 'Palau', 'PT': 'Portugal', 'SJ': 'Svalbard and Jan Mayen', 'PY': 'Paraguay', 'IQ': 'Iraq', 'PA': 'Panama', 'PF': 'French Polynesia', 'PG': 'Papua New Guinea', 'PE': 'Peru', 'PK': 'Pakistan', 'PH': 'Philippines', 'PN': 'Pitcairn', 'PL': 'Poland', 'PM': 'Saint Pierre and Miquelon', 'ZM': 'Zambia', 'EH': 'Western Sahara', 'EE': 'Estonia', 'EG': 'Egypt', 'ZA': 'South Africa', 'EC': 'Ecuador', 'IT': 'Italy', 'VN': 'Vietnam', 'SB': 'Solomon Islands', 'ET': 'Ethiopia', 'SO': 'Somalia', 'ZW': 'Zimbabwe', 'SA': 'Saudi Arabia', 'ES': 'Spain', 'ER': 'Eritrea', 'MD': 'Moldova', 'MG': 'Madagascar', 'MA': 'Morocco', 'MC': 'Monaco', 'UZ': 'Uzbekistan', 'MM': 'Myanmar', 'ML': 'Mali', 'MO': 'Macao S.A.R. China', 'MN': 'Mongolia', 'MH': 'Marshall Islands', 'MK': 'Macedonia', 'MU': 'Mauritius', 'MT': 'Malta', 'MW': 'Malawi', 'MV': 'Maldives', 'MQ': 'Martinique', 'MP': 'Northern Mariana Islands', 'MS': 'Montserrat', 'MR': 'Mauritania', 'UG': 'Uganda', 'MY': 'Malaysia', 'MX': 'Mexico', 'IL': 'Israel', 'FR': 'France', 'IO': 'British Indian Ocean Territory', 'SH': 'Saint Helena', 'FI': 'Finland', 'FJ': 'Fiji', 'FK': 'Falkland Islands', 'FM': 'Micronesia', 'FO': 'Faroe Islands', 'NI': 'Nicaragua', 'NL': 'Netherlands', 'NO': 'Norway', 'NA': 'Namibia', 'VU': 'Vanuatu', 'NC': 'New Caledonia', 'NE': 'Niger', 'NF': 'Norfolk Island', 'NG': 'Nigeria', 'NZ': 'New Zealand', 'NP': 'Nepal', 'NR': 'Nauru', 'NU': 'Niue', 'CK': 'Cook Islands', 'CI': u"C\xf4te d'Ivoire", 'CH': 'Switzerland', 'CO': 'Colombia', 'CN': 'China', 'CM': 'Cameroon', 'CL': 'Chile', 'CC': 'Cocos Islands', 'CA': 'Canada', 'CG': 'Congo', 'CF': 'Central African Republic', 'CD': 'Democratic Republic of the Congo', 'CZ': 'Czech Republic', 'CY': 'Cyprus', 'CX': 'Christmas Island', 'CR': 'Costa Rica', 'CV': 'Cape Verde', 'CU': 'Cuba', 'SZ': 'Swaziland', 'SY': 'Syria', 'KG': 'Kyrgyzstan', 'KE': 'Kenya', 'SR': 'Suriname', 'KI': 'Kiribati', 'KH': 'Cambodia', 'KN': 'Saint Kitts and Nevis', 'KM': 'Comoros', 'ST': 'Sao Tome and Principe', 'SK': 'Slovakia', 'KR': 'South Korea', 'SI': 'Slovenia', 'KP': 'North Korea', 'KW': 'Kuwait', 'SN': 'Senegal', 'SM': 'San Marino', 'SL': 'Sierra Leone', 'SC': 'Seychelles', 'KZ': 'Kazakhstan', 'KY': 'Cayman Islands', 'SG': 'Singapore', 'SE': 'Sweden', 'SD': 'Sudan', 'DO': 'Dominican Republic', 'DM': 'Dominica', 'DJ': 'Djibouti', 'DK': 'Denmark', 'VG': 'British Virgin Islands', 'DE': 'Germany', 'YE': 'Yemen', 'DZ': 'Algeria', 'US': 'United States', 'UY': 'Uruguay', 'YU': 'Yugoslavia', 'YT': 'Mayotte', 'UM': 'United States Minor Outlying Islands', 'LB': 'Lebanon', 'LC': 'Saint Lucia', 'LA': 'Laos', 'TV': 'Tuvalu', 'TW': 'Taiwan', 'TT': 'Trinidad and Tobago', 'TR': 'Turkey', 'LK': 'Sri Lanka', 'LI': 'Liechtenstein', 'LV': 'Latvia', 'TO': 'Tonga', 'LT': 'Lithuania', 'LU': 'Luxembourg', 'LR': 'Liberia', 'LS': 'Lesotho', 'TH': 'Thailand', 'TF': 'French Southern Territories', 'TG': 'Togo', 'TD': 'Chad', 'TC': 'Turks and Caicos Islands', 'LY': 'Libya', 'VA': 'Vatican', 'VC': 'Saint Vincent and the Grenadines', 'AE': 'United Arab Emirates', 'AD': 'Andorra', 'AG': 'Antigua and Barbuda', 'AF': 'Afghanistan', 'AI': 'Anguilla', 'VI': 'U.S. Virgin Islands', 'IS': 'Iceland', 'IR': 'Iran', 'AM': 'Armenia', 'AL': 'Albania', 'AO': 'Angola', 'AN': 'Netherlands Antilles', 'AQ': 'Antarctica', 'AS': 'American Samoa', 'AR': 'Argentina', 'AU': 'Australia', 'AT': 'Austria', 'AW': 'Aruba', 'IN': 'India', 'TZ': 'Tanzania', 'AZ': 'Azerbaijan', 'IE': 'Ireland', 'ID': 'Indonesia', 'UA': 'Ukraine', 'QA': 'Qatar', 'MZ': 'Mozambique'} months=['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] abbrMonths=['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] days=['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'] abbrDays=['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] dateFormats={'medium': '%d-%%(abbrmonthname)s-%y', 'full': '%d %%(monthname)s %Y', 'long': '%d %%(abbrmonthname)s %Y', 'short': '%d/%m/%y'} numericSymbols={'group': ',', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': '.', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'} PKA>#5ZZturbogears/i18n/data/en_SG.pyc; ȸHIc @s#hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd~***PKK9x>1:1:turbogears/i18n/data/en_US.py# Formatting configuration for locale en_US languages={'gv': 'Manx', 'gu': 'Gujarati', 'rom': 'Romany', 'alg': 'Algonquian Languages', 'ale': 'Aleut', 'sco': 'Scots', 'mni': 'Manipuri', 'gd': 'Scottish Gaelic', 'ga': 'Irish', 'mno': 'Manobo Languages', 'osa': 'Osage', 'gn': 'Guarani', 'gl': 'Gallegan', 'mwr': 'Marwari', 'ty': 'Tahitian', 'tw': 'Twi', 'tt': 'Tatar', 'tr': 'Turkish', 'ts': 'Tsonga', 'tn': 'Tswana', 'to': 'Tonga (Tonga Islands)', 'aus': 'Australian Languages', 'av': 'Avaric', 'tk': 'Turkmen', 'th': 'Thai', 'roa': 'Romance (Other)', 'tg': 'Tajik', 'te': 'Telugu', 'uga': 'Ugaritic', 'ta': 'Tamil', 'fat': 'Fanti', 'fan': 'Fang', 'wo': 'Wolof', 'rm': 'Rhaeto-Romance', 'din': 'Dinka', 'bla': 'Siksika', 'cmc': 'Chamic Languages', 'ml': 'Malayalam', 'zh': 'Chinese', 'tem': 'Timne', 'za': 'Zhuang', 'cau': 'Caucasian (Other)', 'zu': 'Zulu', 'ter': 'Tereno', 'tet': 'Tetum', 'mnc': 'Manchu', 'kut': 'Kutenai', 'suk': 'Sukuma', 'kum': 'Kumyk', 'sus': 'Susu', 'new': 'Newari', 'sux': 'Sumerian', 'den': 'Slave', 'men': 'Mende', 'mul': 'Multiple Languages', 'lez': 'Lezghian', 'root': 'Root', 'eka': 'Ekajuk', 'akk': 'Akkadian', 'dra': 'Dravidian (Other)', 'jrb': 'Judeo-Arabic', 'sgn': 'Sign Languages', 'sga': 'Irish, Old (to 900)', 'apa': 'Apache Languages', 'bra': 'Braj', 'chb': 'Chibcha', 'chg': 'Chagatai', 'chk': 'Chuukese', 'chm': 'Mari', 'chn': 'Chinook Jargon', 'cho': 'Choctaw', 'chp': 'Chipewyan', 'chr': 'Cherokee', 'chy': 'Cheyenne', 'ti': 'Tigrinya', 'vot': 'Votic', 'mg': 'Malagasy', 'iba': 'Iban', 'mo': 'Moldavian', 'mn': 'Mongolian', 'mi': 'Maori', 'mh': 'Marshallese', 'mk': 'Macedonian', 'mt': 'Maltese', 'cai': 'Central American Indian (Other)', 'del': 'Delaware', 'ms': 'Malay', 'mr': 'Marathi', 'my': 'Burmese', 'cad': 'Caddo', 'tai': 'Tai (Other)', 'afh': 'Afrihili', 'sit': 'Sino-Tibetan (Other)', 'enm': 'English, Middle (1100-1500)', 'csb': 'Kashubian', 'nyn': 'Nyankole', 'nyo': 'Nyoro', 'nym': 'Nyamwezi', 'sio': 'Siouan Languages', 'map': 'Austronesian', 'mas': 'Masai', 'lah': 'Lahnda', 'lad': 'Ladino', 'fy': 'Frisian', 'snk': 'Soninke', 'fa': 'Persian', 'mad': 'Madurese', 'mag': 'Magahi', 'mai': 'Maithili', 'fi': 'Finnish', 'fj': 'Fijian', 'man': 'Mandingo', 'egy': 'Egyptian (Ancient)', 'znd': 'Zande', 'ss': 'Swati', 'sr': 'Serbian', 'sq': 'Albanian', 'sw': 'Swahili', 'sv': 'Swedish', 'su': 'Sundanese', 'st': 'Sotho, Southern', 'sk': 'Slovak', 'si': 'Sinhalese', 'sh': 'Serbo-Croatian', 'so': 'Somali', 'sn': 'Shona', 'sm': 'Samoan', 'sl': 'Slovenian', 'sc': 'Sardinian', 'sa': 'Sanskrit', 'sg': 'Sango', 'se': 'Northern Sami', 'sd': 'Sindhi', 'zen': 'Zenaga', 'kbd': 'Kabardian', 'afa': 'Afro-Asiatic (Other)', 'lg': 'Ganda', 'lb': 'Luxembourgish', 'fiu': 'Finno - Ugrian (Other)', 'ln': 'Lingala', 'lo': 'Lao', 'li': 'Limburgish', 'byn': 'Blin', 'lt': 'Lithuanian', 'lu': 'Luba-Katanga', 'yi': 'Yiddish', 'non': 'Norse, Old', 'ceb': 'Cebuano', 'yo': 'Yoruba', 'nog': 'Nogai', 'bat': 'Baltic (Other)', 'dak': 'Dakota', 'dar': 'Dargwa', 'day': 'Dayak', 'ssa': 'Nilo-Saharam (Other)', 'kpe': 'Kpelle', 'el': 'Greek', 'eo': 'Esperanto', 'en': 'English', 'lam': 'Lamba', 'ee': 'Ewe', 'mdf': 'Moksha', 'fr': 'French', 'mdr': 'Mandar', 'et': 'Estonian', 'es': 'Spanish', 'ru': 'Russian', 'gon': 'Gondi', 'goh': 'German, Old High (ca.750-1050)', 'sms': 'Skolt Sami', 'smn': 'Inari Sami', 'smj': 'Lule Sami', 'smi': 'Sami languages (Other)', 'got': 'Gothic', 'rn': 'Rundi', 'ro': 'Romanian', 'dsb': 'Lower Sorbian', 'sma': 'Southern Sami', 'gor': 'Gorontalo', 'ast': 'Asturian', 'wal': 'Walamo', 'crh': 'Crimean Turkish; Crimean Tatar', 'ath': 'Athapascan Languages', 'gez': 'Geez', 'xh': 'Xhosa', 'ff': 'Fulah', 'mak': 'Makasar', 'zap': 'Zapotec', 'kok': 'Konkani', 'kos': 'Kosraean', 'fo': 'Faroese', 'tog': 'Tonga (Nyasa)', 'hup': 'Hupa', 'udm': 'Udmurt', 'bej': 'Beja', 'bem': 'Bemba', 'tsi': 'Tsimshian', 'ber': 'Berber', 'nzi': 'Nzima', 'sai': 'South American Indian (Other)', 'ang': 'English, Old (ca.450-1100)', 'pra': 'Prakrit Languages', 'bho': 'Bhojpuri', 'sal': 'Salishan languages', 'pro': u'Proven\xe7al, Old (to 1500)', 'raj': 'Rajasthani', 'sad': 'Sandawe', 'rar': 'Rarotongan', 'rap': 'Rapanui', 'sas': 'Sasak', 'car': 'Carib', 'min': 'Minangkabau', 'mic': 'Micmac', 'efi': 'Efik', 'arn': 'Araucanian', 'ypk': 'Yupik Languages', 'mis': 'Miscellaneous Languages', 'kac': 'Kachin', 'kab': 'Kabyle', 'kaa': 'Kara-Kalpak', 'kam': 'Kamba', 'kar': 'Karen', 'kaw': 'Kawi', 'tyv': 'Tuvinian', 'awa': 'Awadhi', 'ka': 'Georgian', 'doi': 'Dogri', 'kg': 'Kongo', 'kk': 'Kazakh', 'kj': 'Kuanyama', 'ki': 'Kikuyu', 'ko': 'Korean', 'kn': 'Kannada', 'km': 'Khmer', 'kl': 'Kalaallisut', 'ks': 'Kashmiri', 'kr': 'Kanuri', 'kw': 'Cornish', 'kv': 'Komi', 'ku': 'Kurdish', 'ky': 'Kirghiz', 'tkl': 'Tokelau', 'bua': 'Buriat', 'mga': 'Irish, Middle (900-1200)', 'hit': 'Hittite', 'dyu': 'Dyula', 'de': 'German', 'da': 'Danish', 'dz': 'Dzongkha', 'ira': 'Iranian', 'dv': 'Divehi', 'hil': 'Hiligaynon', 'him': 'Himachali', 'gem': 'Germanic (Other)', 'crp': 'Creoles and Pidgins (Other)', 'qu': 'Quechua', 'bas': 'Basa', 'gba': 'Gbaya', 'bad': 'Banda', 'ban': 'Balinese', 'bal': 'Baluchi', 'bam': 'Bambara', 'shn': 'Shan', 'bai': 'Bamileke Languages', 'arp': 'Arapaho', 'art': 'Artificial (Other)', 'arw': 'Arawak', 'arc': 'Aramaic', 'sem': 'Semitic (Other)', 'sel': 'Selkup', 'nub': 'Nubian Languages', 'btk': 'Batak', 'lus': 'Lushai', 'mus': 'Creek', 'lua': 'Luba-Lulua', 'iro': 'Iroquoian languages', 'lui': 'Luiseno', 'mun': 'Munda Languages', 'lun': 'Lunda', 'luo': 'Luo', 'wa': 'Walloon', 'tup': 'Tupi languages', 'jv': 'Javanese', 'tut': 'Altaic (Other)', 'tum': 'Tumbuka', 'ja': 'Japanese', 'cop': 'Coptic', 'ilo': 'Iloko', 'la': 'Latin', 'gwi': "Gwich'in", 'und': 'Undetermined', 'tli': 'Tlingit', 'ch': 'Chamorro', 'co': 'Corsican', 'ca': 'Catalan', 'ce': 'Chechen', 'pon': 'Pohnpeian', 'cy': 'Welsh', 'sah': 'Yakut', 'cs': 'Czech', 'cr': 'Cree', 'bnt': 'Bantu', 'cv': 'Chuvash', 'cu': 'Church Slavic', 'lv': 'Latvian', 'dum': 'Dutch, Middle (ca. 1050-1350)', 'pt': 'Portuguese', 'dua': 'Duala', 'fro': 'French, Old (842-ca.1400)', 'yap': 'Yapese', 'frm': 'French, Middle (ca.1400-1600)', 'tiv': 'Tiv', 'yao': 'Yao', 'pa': 'Punjabi', 'xal': 'Kalmyk', 'pi': 'Pali', 'pl': 'Polish', 'gay': 'Gayo', 'oto': 'Otomian Languages', 'ota': 'Turkish, Ottoman (1500-1928)', 'hmn': 'Hmong', 'an': 'Aragonese', 'gaa': 'Ga', 'fur': 'Friulian', 'khi': 'Khoisan (Other)', 'sla': 'Slavic (Other)', 've': 'Venda', 'vi': 'Vietnamese', 'is': 'Icelandic', 'kho': 'Khotanese', 'iu': 'Inuktitut', 'it': 'Italian', 'vo': u'Volap\xfck', 'ii': 'Sichuan Yi', 'ik': 'Inupiaq', 'io': 'Ido', 'ine': 'Indo-European (Other)', 'ia': 'Interlingua', 'jpr': 'Judeo-Persian', 'ie': 'Interlingue', 'id': 'Indonesian', 'ig': 'Igbo', 'pap': 'Papiamento', 'ewo': 'Ewondo', 'pau': 'Palauan', 'paa': 'Papuan (Other)', 'pag': 'Pangasinan', 'sat': 'Santali', 'pal': 'Pahlavi', 'pam': 'Pampanga', 'phi': 'Philippine (Other)', 'cel': 'Celtic (Other)', 'phn': 'Phoenician', 'nic': 'Niger - Kordofanian (Other)', 'nia': 'Nias', 'dgr': 'Dogrib', 'syr': 'Syriac', 'niu': 'Niuean', 'jbo': 'Lojban', 'nah': 'Nahuatl', 'sam': 'Samaritan Aramaic', 'hai': 'Haida', 'gmh': 'German, Middle High (ca.1050-1500)', 'cus': 'Cushitic (Other)', 'wen': 'Sorbian Languages', 'ady': 'Adyghe', 'elx': 'Elamite', 'ada': 'Adangme', 'haw': 'Hawaiian', 'bin': 'Bini', 'bik': 'Bikol', 'mos': 'Mossi', 'moh': 'Mohawk', 'tl': 'Tagalog', 'tvl': 'Tuvalu', 'ijo': 'Ijo', 'kmb': 'Kimbundu', 'peo': 'Persian Old (ca.600-400 B.C.)', 'umb': 'Umbundu', 'tmh': 'Tamashek', 'fon': 'Fon', 'hsb': 'Upper Sorbian', 'be': 'Belarusian', 'bg': 'Bulgarian', 'ba': 'Bashkir', 'ps': 'Pashto (Pushto)', 'bm': 'Bambara', 'bn': 'Bengali', 'bo': 'Tibetan', 'bh': 'Bihari', 'bi': 'Bislama', 'br': 'Breton', 'bs': 'Bosnian', 'om': 'Oromo', 'oj': 'Ojibwa', 'ace': 'Achinese', 'ach': 'Acoli', 'oc': u'Occitan (post 1500); Proven\xe7al', 'kru': 'Kurukh', 'srr': 'Serer', 'kro': 'Kru', 'krc': 'Karachay-Balkar', 'nds': 'Low German; Low Saxon', 'os': 'Ossetic', 'or': 'Oriya', 'sog': 'Sogdien', 'nso': 'Sotho, Northern', 'son': 'Songhai', 'vai': 'Vai', 'wak': 'Wakashan Languages', 'lol': 'Mongo', 'mkh': 'Mon-Khmer (Other)', 'loz': 'Lozi', 'gil': 'Gilbertese', 'was': 'Washo', 'war': 'Waray', 'hz': 'Herero', 'hy': 'Armenian', 'sid': 'Sidamo', 'hr': 'Croatian', 'ht': 'Haitian', 'hu': 'Hungarian', 'hi': 'Hindi', 'ho': 'Hiri Motu', 'ha': 'Hausa', 'bug': 'Buginese', 'he': 'Hebrew', 'uz': 'Uzbek', 'ur': 'Urdu', 'uk': 'Ukrainian', 'ug': 'Uighur', 'aa': 'Afar', 'ab': 'Abkhazian', 'ae': 'Avestan', 'af': 'Afrikaans', 'ak': 'Akan', 'am': 'Amharic', 'myv': 'Erzya', 'eu': 'Basque', 'as': 'Assamese', 'ar': 'Arabic', 'inh': 'Ingush', 'tpi': 'Tok Pisin', 'myn': 'Mayan', 'ay': 'Aymara', 'kha': 'Khasi', 'az': 'Azerbaijani', 'inc': 'Indic (Other)', 'nl': 'Dutch', 'nn': 'Norwegian Nynorsk', 'no': 'Norwegian', 'na': 'Nauru', 'nb': u'Norwegian Bokm\xe5l', 'nai': 'North American Indian (Other)', 'nd': 'Ndebele, North', 'ne': 'Nepali', 'ng': 'Ndonga', 'ny': 'Nyanja; Chichewa; Chewa', 'nap': 'Neapolitan', 'grb': 'Gerbo', 'grc': 'Greek, Ancient (to 1453)', 'nr': 'Ndebele, South', 'tig': 'Tigre', 'nv': 'Navajo', 'zun': 'Zuni', 'rw': 'Kinyarwanda', 'cpe': 'Creoles and Pidgins, English-based (Other)', 'cpf': 'Creoles and Pidgins, French-based (Other)', 'cpp': 'Creoles and pidgins, Portuguese-based (Other)'} countries={'BD': 'Bangladesh', 'BE': 'Belgium', 'BF': 'Burkina Faso', 'BG': 'Bulgaria', 'BA': 'Bosnia and Herzegovina', 'BB': 'Barbados', 'WF': 'Wallis and Futuna', 'BM': 'Bermuda', 'BN': 'Brunei', 'BO': 'Bolivia', 'BH': 'Bahrain', 'BI': 'Burundi', 'BJ': 'Benin', 'BT': 'Bhutan', 'JM': 'Jamaica', 'BV': 'Bouvet Island', 'BW': 'Botswana', 'WS': 'Samoa', 'BR': 'Brazil', 'BS': 'Bahamas', 'BY': 'Belarus', 'BZ': 'Belize', 'RU': 'Russia', 'RW': 'Rwanda', 'TL': 'Timor-Leste', 'RE': u'R\xe9union', 'TM': 'Turkmenistan', 'TJ': 'Tajikistan', 'RO': 'Romania', 'TK': 'Tokelau', 'GW': 'Guinea-Bissau', 'GU': 'Guam', 'GT': 'Guatemala', 'GS': 'South Georgia and South Sandwich Islands', 'GR': 'Greece', 'GQ': 'Equatorial Guinea', 'GP': 'Guadeloupe', 'JP': 'Japan', 'GY': 'Guyana', 'GF': 'French Guiana', 'GE': 'Georgia', 'GD': 'Grenada', 'GB': 'United Kingdom', 'GA': 'Gabon', 'SV': 'El Salvador', 'GN': 'Guinea', 'GM': 'Gambia', 'GL': 'Greenland', 'GI': 'Gibraltar', 'GH': 'Ghana', 'OM': 'Oman', 'TN': 'Tunisia', 'JO': 'Jordan', 'SP': 'Serbia', 'HR': 'Croatia', 'HT': 'Haiti', 'HU': 'Hungary', 'HK': 'Hong Kong S.A.R., China', 'HN': 'Honduras', 'HM': 'Heard Island and McDonald Islands', 'VE': 'Venezuela', 'PR': 'Puerto Rico', 'PS': 'Palestinian Territory', 'PW': 'Palau', 'PT': 'Portugal', 'SJ': 'Svalbard and Jan Mayen', 'PY': 'Paraguay', 'IQ': 'Iraq', 'PA': 'Panama', 'PF': 'French Polynesia', 'PG': 'Papua New Guinea', 'PE': 'Peru', 'PK': 'Pakistan', 'PH': 'Philippines', 'PN': 'Pitcairn', 'PL': 'Poland', 'PM': 'Saint Pierre and Miquelon', 'ZM': 'Zambia', 'EH': 'Western Sahara', 'EE': 'Estonia', 'EG': 'Egypt', 'ZA': 'South Africa', 'EC': 'Ecuador', 'IT': 'Italy', 'VN': 'Vietnam', 'SB': 'Solomon Islands', 'ET': 'Ethiopia', 'SO': 'Somalia', 'ZW': 'Zimbabwe', 'SA': 'Saudi Arabia', 'ES': 'Spain', 'ER': 'Eritrea', 'MD': 'Moldova', 'MG': 'Madagascar', 'MA': 'Morocco', 'MC': 'Monaco', 'UZ': 'Uzbekistan', 'MM': 'Myanmar', 'ML': 'Mali', 'MO': 'Macao S.A.R. China', 'MN': 'Mongolia', 'MH': 'Marshall Islands', 'MK': 'Macedonia', 'MU': 'Mauritius', 'MT': 'Malta', 'MW': 'Malawi', 'MV': 'Maldives', 'MQ': 'Martinique', 'MP': 'Northern Mariana Islands', 'MS': 'Montserrat', 'MR': 'Mauritania', 'UG': 'Uganda', 'MY': 'Malaysia', 'MX': 'Mexico', 'IL': 'Israel', 'FR': 'France', 'IO': 'British Indian Ocean Territory', 'SH': 'Saint Helena', 'FI': 'Finland', 'FJ': 'Fiji', 'FK': 'Falkland Islands', 'FM': 'Micronesia', 'FO': 'Faroe Islands', 'NI': 'Nicaragua', 'NL': 'Netherlands', 'NO': 'Norway', 'NA': 'Namibia', 'VU': 'Vanuatu', 'NC': 'New Caledonia', 'NE': 'Niger', 'NF': 'Norfolk Island', 'NG': 'Nigeria', 'NZ': 'New Zealand', 'NP': 'Nepal', 'NR': 'Nauru', 'NU': 'Niue', 'CK': 'Cook Islands', 'CI': u"C\xf4te d'Ivoire", 'CH': 'Switzerland', 'CO': 'Colombia', 'CN': 'China', 'CM': 'Cameroon', 'CL': 'Chile', 'CC': 'Cocos Islands', 'CA': 'Canada', 'CG': 'Congo', 'CF': 'Central African Republic', 'CD': 'Democratic Republic of the Congo', 'CZ': 'Czech Republic', 'CY': 'Cyprus', 'CX': 'Christmas Island', 'CR': 'Costa Rica', 'CV': 'Cape Verde', 'CU': 'Cuba', 'SZ': 'Swaziland', 'SY': 'Syria', 'KG': 'Kyrgyzstan', 'KE': 'Kenya', 'SR': 'Suriname', 'KI': 'Kiribati', 'KH': 'Cambodia', 'KN': 'Saint Kitts and Nevis', 'KM': 'Comoros', 'ST': 'Sao Tome and Principe', 'SK': 'Slovakia', 'KR': 'South Korea', 'SI': 'Slovenia', 'KP': 'North Korea', 'KW': 'Kuwait', 'SN': 'Senegal', 'SM': 'San Marino', 'SL': 'Sierra Leone', 'SC': 'Seychelles', 'KZ': 'Kazakhstan', 'KY': 'Cayman Islands', 'SG': 'Singapore', 'SE': 'Sweden', 'SD': 'Sudan', 'DO': 'Dominican Republic', 'DM': 'Dominica', 'DJ': 'Djibouti', 'DK': 'Denmark', 'VG': 'British Virgin Islands', 'DE': 'Germany', 'YE': 'Yemen', 'DZ': 'Algeria', 'US': 'United States', 'UY': 'Uruguay', 'YU': 'Yugoslavia', 'YT': 'Mayotte', 'UM': 'United States Minor Outlying Islands', 'LB': 'Lebanon', 'LC': 'Saint Lucia', 'LA': 'Laos', 'TV': 'Tuvalu', 'TW': 'Taiwan', 'TT': 'Trinidad and Tobago', 'TR': 'Turkey', 'LK': 'Sri Lanka', 'LI': 'Liechtenstein', 'LV': 'Latvia', 'TO': 'Tonga', 'LT': 'Lithuania', 'LU': 'Luxembourg', 'LR': 'Liberia', 'LS': 'Lesotho', 'TH': 'Thailand', 'TF': 'French Southern Territories', 'TG': 'Togo', 'TD': 'Chad', 'TC': 'Turks and Caicos Islands', 'LY': 'Libya', 'VA': 'Vatican', 'VC': 'Saint Vincent and the Grenadines', 'AE': 'United Arab Emirates', 'AD': 'Andorra', 'AG': 'Antigua and Barbuda', 'AF': 'Afghanistan', 'AI': 'Anguilla', 'VI': 'U.S. Virgin Islands', 'IS': 'Iceland', 'IR': 'Iran', 'AM': 'Armenia', 'AL': 'Albania', 'AO': 'Angola', 'AN': 'Netherlands Antilles', 'AQ': 'Antarctica', 'AS': 'American Samoa', 'AR': 'Argentina', 'AU': 'Australia', 'AT': 'Austria', 'AW': 'Aruba', 'IN': 'India', 'TZ': 'Tanzania', 'AZ': 'Azerbaijan', 'IE': 'Ireland', 'ID': 'Indonesia', 'UA': 'Ukraine', 'QA': 'Qatar', 'MZ': 'Mozambique'} months=['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] abbrMonths=['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] days=['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'] abbrDays=['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] dateFormats={'medium': '%%(abbrmonthname)s %d, %Y', 'full': '%%(dayname)s, %%(monthname)s %d, %Y', 'long': '%%(monthname)s %d, %Y', 'short': '%m/%d/%y'} numericSymbols={'group': ',', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': '.', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'} PKA>FK ZZturbogears/i18n/data/en_US.pyc; ȸHIc @s#hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd~***PKK9޴_0:0:#turbogears/i18n/data/en_US_POSIX.py# Formatting configuration for locale en_US_POSIX languages={'gv': 'Manx', 'gu': 'Gujarati', 'rom': 'Romany', 'alg': 'Algonquian Languages', 'ale': 'Aleut', 'sco': 'Scots', 'mni': 'Manipuri', 'gd': 'Scottish Gaelic', 'ga': 'Irish', 'mno': 'Manobo Languages', 'osa': 'Osage', 'gn': 'Guarani', 'gl': 'Gallegan', 'mwr': 'Marwari', 'ty': 'Tahitian', 'tw': 'Twi', 'tt': 'Tatar', 'tr': 'Turkish', 'ts': 'Tsonga', 'tn': 'Tswana', 'to': 'Tonga (Tonga Islands)', 'aus': 'Australian Languages', 'av': 'Avaric', 'tk': 'Turkmen', 'th': 'Thai', 'roa': 'Romance (Other)', 'tg': 'Tajik', 'te': 'Telugu', 'uga': 'Ugaritic', 'ta': 'Tamil', 'fat': 'Fanti', 'fan': 'Fang', 'wo': 'Wolof', 'rm': 'Rhaeto-Romance', 'din': 'Dinka', 'bla': 'Siksika', 'cmc': 'Chamic Languages', 'ml': 'Malayalam', 'zh': 'Chinese', 'tem': 'Timne', 'za': 'Zhuang', 'cau': 'Caucasian (Other)', 'zu': 'Zulu', 'ter': 'Tereno', 'tet': 'Tetum', 'mnc': 'Manchu', 'kut': 'Kutenai', 'suk': 'Sukuma', 'kum': 'Kumyk', 'sus': 'Susu', 'new': 'Newari', 'sux': 'Sumerian', 'den': 'Slave', 'men': 'Mende', 'mul': 'Multiple Languages', 'lez': 'Lezghian', 'root': 'Root', 'eka': 'Ekajuk', 'akk': 'Akkadian', 'dra': 'Dravidian (Other)', 'jrb': 'Judeo-Arabic', 'sgn': 'Sign Languages', 'sga': 'Irish, Old (to 900)', 'apa': 'Apache Languages', 'bra': 'Braj', 'chb': 'Chibcha', 'chg': 'Chagatai', 'chk': 'Chuukese', 'chm': 'Mari', 'chn': 'Chinook Jargon', 'cho': 'Choctaw', 'chp': 'Chipewyan', 'chr': 'Cherokee', 'chy': 'Cheyenne', 'ti': 'Tigrinya', 'vot': 'Votic', 'mg': 'Malagasy', 'iba': 'Iban', 'mo': 'Moldavian', 'mn': 'Mongolian', 'mi': 'Maori', 'mh': 'Marshallese', 'mk': 'Macedonian', 'mt': 'Maltese', 'cai': 'Central American Indian (Other)', 'del': 'Delaware', 'ms': 'Malay', 'mr': 'Marathi', 'my': 'Burmese', 'cad': 'Caddo', 'tai': 'Tai (Other)', 'afh': 'Afrihili', 'sit': 'Sino-Tibetan (Other)', 'enm': 'English, Middle (1100-1500)', 'csb': 'Kashubian', 'nyn': 'Nyankole', 'nyo': 'Nyoro', 'nym': 'Nyamwezi', 'sio': 'Siouan Languages', 'map': 'Austronesian', 'mas': 'Masai', 'lah': 'Lahnda', 'lad': 'Ladino', 'fy': 'Frisian', 'snk': 'Soninke', 'fa': 'Persian', 'mad': 'Madurese', 'mag': 'Magahi', 'mai': 'Maithili', 'fi': 'Finnish', 'fj': 'Fijian', 'man': 'Mandingo', 'egy': 'Egyptian (Ancient)', 'znd': 'Zande', 'ss': 'Swati', 'sr': 'Serbian', 'sq': 'Albanian', 'sw': 'Swahili', 'sv': 'Swedish', 'su': 'Sundanese', 'st': 'Sotho, Southern', 'sk': 'Slovak', 'si': 'Sinhalese', 'sh': 'Serbo-Croatian', 'so': 'Somali', 'sn': 'Shona', 'sm': 'Samoan', 'sl': 'Slovenian', 'sc': 'Sardinian', 'sa': 'Sanskrit', 'sg': 'Sango', 'se': 'Northern Sami', 'sd': 'Sindhi', 'zen': 'Zenaga', 'kbd': 'Kabardian', 'afa': 'Afro-Asiatic (Other)', 'lg': 'Ganda', 'lb': 'Luxembourgish', 'fiu': 'Finno - Ugrian (Other)', 'ln': 'Lingala', 'lo': 'Lao', 'li': 'Limburgish', 'byn': 'Blin', 'lt': 'Lithuanian', 'lu': 'Luba-Katanga', 'yi': 'Yiddish', 'non': 'Norse, Old', 'ceb': 'Cebuano', 'yo': 'Yoruba', 'nog': 'Nogai', 'bat': 'Baltic (Other)', 'dak': 'Dakota', 'dar': 'Dargwa', 'day': 'Dayak', 'ssa': 'Nilo-Saharam (Other)', 'kpe': 'Kpelle', 'el': 'Greek', 'eo': 'Esperanto', 'en': 'English', 'lam': 'Lamba', 'ee': 'Ewe', 'mdf': 'Moksha', 'fr': 'French', 'mdr': 'Mandar', 'et': 'Estonian', 'es': 'Spanish', 'ru': 'Russian', 'gon': 'Gondi', 'goh': 'German, Old High (ca.750-1050)', 'sms': 'Skolt Sami', 'smn': 'Inari Sami', 'smj': 'Lule Sami', 'smi': 'Sami languages (Other)', 'got': 'Gothic', 'rn': 'Rundi', 'ro': 'Romanian', 'dsb': 'Lower Sorbian', 'sma': 'Southern Sami', 'gor': 'Gorontalo', 'ast': 'Asturian', 'wal': 'Walamo', 'crh': 'Crimean Turkish; Crimean Tatar', 'ath': 'Athapascan Languages', 'gez': 'Geez', 'xh': 'Xhosa', 'ff': 'Fulah', 'mak': 'Makasar', 'zap': 'Zapotec', 'kok': 'Konkani', 'kos': 'Kosraean', 'fo': 'Faroese', 'tog': 'Tonga (Nyasa)', 'hup': 'Hupa', 'udm': 'Udmurt', 'bej': 'Beja', 'bem': 'Bemba', 'tsi': 'Tsimshian', 'ber': 'Berber', 'nzi': 'Nzima', 'sai': 'South American Indian (Other)', 'ang': 'English, Old (ca.450-1100)', 'pra': 'Prakrit Languages', 'bho': 'Bhojpuri', 'sal': 'Salishan languages', 'pro': u'Proven\xe7al, Old (to 1500)', 'raj': 'Rajasthani', 'sad': 'Sandawe', 'rar': 'Rarotongan', 'rap': 'Rapanui', 'sas': 'Sasak', 'car': 'Carib', 'min': 'Minangkabau', 'mic': 'Micmac', 'efi': 'Efik', 'arn': 'Araucanian', 'ypk': 'Yupik Languages', 'mis': 'Miscellaneous Languages', 'kac': 'Kachin', 'kab': 'Kabyle', 'kaa': 'Kara-Kalpak', 'kam': 'Kamba', 'kar': 'Karen', 'kaw': 'Kawi', 'tyv': 'Tuvinian', 'awa': 'Awadhi', 'ka': 'Georgian', 'doi': 'Dogri', 'kg': 'Kongo', 'kk': 'Kazakh', 'kj': 'Kuanyama', 'ki': 'Kikuyu', 'ko': 'Korean', 'kn': 'Kannada', 'km': 'Khmer', 'kl': 'Kalaallisut', 'ks': 'Kashmiri', 'kr': 'Kanuri', 'kw': 'Cornish', 'kv': 'Komi', 'ku': 'Kurdish', 'ky': 'Kirghiz', 'tkl': 'Tokelau', 'bua': 'Buriat', 'mga': 'Irish, Middle (900-1200)', 'hit': 'Hittite', 'dyu': 'Dyula', 'de': 'German', 'da': 'Danish', 'dz': 'Dzongkha', 'ira': 'Iranian', 'dv': 'Divehi', 'hil': 'Hiligaynon', 'him': 'Himachali', 'gem': 'Germanic (Other)', 'crp': 'Creoles and Pidgins (Other)', 'qu': 'Quechua', 'bas': 'Basa', 'gba': 'Gbaya', 'bad': 'Banda', 'ban': 'Balinese', 'bal': 'Baluchi', 'bam': 'Bambara', 'shn': 'Shan', 'bai': 'Bamileke Languages', 'arp': 'Arapaho', 'art': 'Artificial (Other)', 'arw': 'Arawak', 'arc': 'Aramaic', 'sem': 'Semitic (Other)', 'sel': 'Selkup', 'nub': 'Nubian Languages', 'btk': 'Batak', 'lus': 'Lushai', 'mus': 'Creek', 'lua': 'Luba-Lulua', 'iro': 'Iroquoian languages', 'lui': 'Luiseno', 'mun': 'Munda Languages', 'lun': 'Lunda', 'luo': 'Luo', 'wa': 'Walloon', 'tup': 'Tupi languages', 'jv': 'Javanese', 'tut': 'Altaic (Other)', 'tum': 'Tumbuka', 'ja': 'Japanese', 'cop': 'Coptic', 'ilo': 'Iloko', 'la': 'Latin', 'gwi': "Gwich'in", 'und': 'Undetermined', 'tli': 'Tlingit', 'ch': 'Chamorro', 'co': 'Corsican', 'ca': 'Catalan', 'ce': 'Chechen', 'pon': 'Pohnpeian', 'cy': 'Welsh', 'sah': 'Yakut', 'cs': 'Czech', 'cr': 'Cree', 'bnt': 'Bantu', 'cv': 'Chuvash', 'cu': 'Church Slavic', 'lv': 'Latvian', 'dum': 'Dutch, Middle (ca. 1050-1350)', 'pt': 'Portuguese', 'dua': 'Duala', 'fro': 'French, Old (842-ca.1400)', 'yap': 'Yapese', 'frm': 'French, Middle (ca.1400-1600)', 'tiv': 'Tiv', 'yao': 'Yao', 'pa': 'Punjabi', 'xal': 'Kalmyk', 'pi': 'Pali', 'pl': 'Polish', 'gay': 'Gayo', 'oto': 'Otomian Languages', 'ota': 'Turkish, Ottoman (1500-1928)', 'hmn': 'Hmong', 'an': 'Aragonese', 'gaa': 'Ga', 'fur': 'Friulian', 'khi': 'Khoisan (Other)', 'sla': 'Slavic (Other)', 've': 'Venda', 'vi': 'Vietnamese', 'is': 'Icelandic', 'kho': 'Khotanese', 'iu': 'Inuktitut', 'it': 'Italian', 'vo': u'Volap\xfck', 'ii': 'Sichuan Yi', 'ik': 'Inupiaq', 'io': 'Ido', 'ine': 'Indo-European (Other)', 'ia': 'Interlingua', 'jpr': 'Judeo-Persian', 'ie': 'Interlingue', 'id': 'Indonesian', 'ig': 'Igbo', 'pap': 'Papiamento', 'ewo': 'Ewondo', 'pau': 'Palauan', 'paa': 'Papuan (Other)', 'pag': 'Pangasinan', 'sat': 'Santali', 'pal': 'Pahlavi', 'pam': 'Pampanga', 'phi': 'Philippine (Other)', 'cel': 'Celtic (Other)', 'phn': 'Phoenician', 'nic': 'Niger - Kordofanian (Other)', 'nia': 'Nias', 'dgr': 'Dogrib', 'syr': 'Syriac', 'niu': 'Niuean', 'jbo': 'Lojban', 'nah': 'Nahuatl', 'sam': 'Samaritan Aramaic', 'hai': 'Haida', 'gmh': 'German, Middle High (ca.1050-1500)', 'cus': 'Cushitic (Other)', 'wen': 'Sorbian Languages', 'ady': 'Adyghe', 'elx': 'Elamite', 'ada': 'Adangme', 'haw': 'Hawaiian', 'bin': 'Bini', 'bik': 'Bikol', 'mos': 'Mossi', 'moh': 'Mohawk', 'tl': 'Tagalog', 'tvl': 'Tuvalu', 'ijo': 'Ijo', 'kmb': 'Kimbundu', 'peo': 'Persian Old (ca.600-400 B.C.)', 'umb': 'Umbundu', 'tmh': 'Tamashek', 'fon': 'Fon', 'hsb': 'Upper Sorbian', 'be': 'Belarusian', 'bg': 'Bulgarian', 'ba': 'Bashkir', 'ps': 'Pashto (Pushto)', 'bm': 'Bambara', 'bn': 'Bengali', 'bo': 'Tibetan', 'bh': 'Bihari', 'bi': 'Bislama', 'br': 'Breton', 'bs': 'Bosnian', 'om': 'Oromo', 'oj': 'Ojibwa', 'ace': 'Achinese', 'ach': 'Acoli', 'oc': u'Occitan (post 1500); Proven\xe7al', 'kru': 'Kurukh', 'srr': 'Serer', 'kro': 'Kru', 'krc': 'Karachay-Balkar', 'nds': 'Low German; Low Saxon', 'os': 'Ossetic', 'or': 'Oriya', 'sog': 'Sogdien', 'nso': 'Sotho, Northern', 'son': 'Songhai', 'vai': 'Vai', 'wak': 'Wakashan Languages', 'lol': 'Mongo', 'mkh': 'Mon-Khmer (Other)', 'loz': 'Lozi', 'gil': 'Gilbertese', 'was': 'Washo', 'war': 'Waray', 'hz': 'Herero', 'hy': 'Armenian', 'sid': 'Sidamo', 'hr': 'Croatian', 'ht': 'Haitian', 'hu': 'Hungarian', 'hi': 'Hindi', 'ho': 'Hiri Motu', 'ha': 'Hausa', 'bug': 'Buginese', 'he': 'Hebrew', 'uz': 'Uzbek', 'ur': 'Urdu', 'uk': 'Ukrainian', 'ug': 'Uighur', 'aa': 'Afar', 'ab': 'Abkhazian', 'ae': 'Avestan', 'af': 'Afrikaans', 'ak': 'Akan', 'am': 'Amharic', 'myv': 'Erzya', 'eu': 'Basque', 'as': 'Assamese', 'ar': 'Arabic', 'inh': 'Ingush', 'tpi': 'Tok Pisin', 'myn': 'Mayan', 'ay': 'Aymara', 'kha': 'Khasi', 'az': 'Azerbaijani', 'inc': 'Indic (Other)', 'nl': 'Dutch', 'nn': 'Norwegian Nynorsk', 'no': 'Norwegian', 'na': 'Nauru', 'nb': u'Norwegian Bokm\xe5l', 'nai': 'North American Indian (Other)', 'nd': 'Ndebele, North', 'ne': 'Nepali', 'ng': 'Ndonga', 'ny': 'Nyanja; Chichewa; Chewa', 'nap': 'Neapolitan', 'grb': 'Gerbo', 'grc': 'Greek, Ancient (to 1453)', 'nr': 'Ndebele, South', 'tig': 'Tigre', 'nv': 'Navajo', 'zun': 'Zuni', 'rw': 'Kinyarwanda', 'cpe': 'Creoles and Pidgins, English-based (Other)', 'cpf': 'Creoles and Pidgins, French-based (Other)', 'cpp': 'Creoles and pidgins, Portuguese-based (Other)'} countries={'BD': 'Bangladesh', 'BE': 'Belgium', 'BF': 'Burkina Faso', 'BG': 'Bulgaria', 'BA': 'Bosnia and Herzegovina', 'BB': 'Barbados', 'WF': 'Wallis and Futuna', 'BM': 'Bermuda', 'BN': 'Brunei', 'BO': 'Bolivia', 'BH': 'Bahrain', 'BI': 'Burundi', 'BJ': 'Benin', 'BT': 'Bhutan', 'JM': 'Jamaica', 'BV': 'Bouvet Island', 'BW': 'Botswana', 'WS': 'Samoa', 'BR': 'Brazil', 'BS': 'Bahamas', 'BY': 'Belarus', 'BZ': 'Belize', 'RU': 'Russia', 'RW': 'Rwanda', 'TL': 'Timor-Leste', 'RE': u'R\xe9union', 'TM': 'Turkmenistan', 'TJ': 'Tajikistan', 'RO': 'Romania', 'TK': 'Tokelau', 'GW': 'Guinea-Bissau', 'GU': 'Guam', 'GT': 'Guatemala', 'GS': 'South Georgia and South Sandwich Islands', 'GR': 'Greece', 'GQ': 'Equatorial Guinea', 'GP': 'Guadeloupe', 'JP': 'Japan', 'GY': 'Guyana', 'GF': 'French Guiana', 'GE': 'Georgia', 'GD': 'Grenada', 'GB': 'United Kingdom', 'GA': 'Gabon', 'SV': 'El Salvador', 'GN': 'Guinea', 'GM': 'Gambia', 'GL': 'Greenland', 'GI': 'Gibraltar', 'GH': 'Ghana', 'OM': 'Oman', 'TN': 'Tunisia', 'JO': 'Jordan', 'SP': 'Serbia', 'HR': 'Croatia', 'HT': 'Haiti', 'HU': 'Hungary', 'HK': 'Hong Kong S.A.R., China', 'HN': 'Honduras', 'HM': 'Heard Island and McDonald Islands', 'VE': 'Venezuela', 'PR': 'Puerto Rico', 'PS': 'Palestinian Territory', 'PW': 'Palau', 'PT': 'Portugal', 'SJ': 'Svalbard and Jan Mayen', 'PY': 'Paraguay', 'IQ': 'Iraq', 'PA': 'Panama', 'PF': 'French Polynesia', 'PG': 'Papua New Guinea', 'PE': 'Peru', 'PK': 'Pakistan', 'PH': 'Philippines', 'PN': 'Pitcairn', 'PL': 'Poland', 'PM': 'Saint Pierre and Miquelon', 'ZM': 'Zambia', 'EH': 'Western Sahara', 'EE': 'Estonia', 'EG': 'Egypt', 'ZA': 'South Africa', 'EC': 'Ecuador', 'IT': 'Italy', 'VN': 'Vietnam', 'SB': 'Solomon Islands', 'ET': 'Ethiopia', 'SO': 'Somalia', 'ZW': 'Zimbabwe', 'SA': 'Saudi Arabia', 'ES': 'Spain', 'ER': 'Eritrea', 'MD': 'Moldova', 'MG': 'Madagascar', 'MA': 'Morocco', 'MC': 'Monaco', 'UZ': 'Uzbekistan', 'MM': 'Myanmar', 'ML': 'Mali', 'MO': 'Macao S.A.R. China', 'MN': 'Mongolia', 'MH': 'Marshall Islands', 'MK': 'Macedonia', 'MU': 'Mauritius', 'MT': 'Malta', 'MW': 'Malawi', 'MV': 'Maldives', 'MQ': 'Martinique', 'MP': 'Northern Mariana Islands', 'MS': 'Montserrat', 'MR': 'Mauritania', 'UG': 'Uganda', 'MY': 'Malaysia', 'MX': 'Mexico', 'IL': 'Israel', 'FR': 'France', 'IO': 'British Indian Ocean Territory', 'SH': 'Saint Helena', 'FI': 'Finland', 'FJ': 'Fiji', 'FK': 'Falkland Islands', 'FM': 'Micronesia', 'FO': 'Faroe Islands', 'NI': 'Nicaragua', 'NL': 'Netherlands', 'NO': 'Norway', 'NA': 'Namibia', 'VU': 'Vanuatu', 'NC': 'New Caledonia', 'NE': 'Niger', 'NF': 'Norfolk Island', 'NG': 'Nigeria', 'NZ': 'New Zealand', 'NP': 'Nepal', 'NR': 'Nauru', 'NU': 'Niue', 'CK': 'Cook Islands', 'CI': u"C\xf4te d'Ivoire", 'CH': 'Switzerland', 'CO': 'Colombia', 'CN': 'China', 'CM': 'Cameroon', 'CL': 'Chile', 'CC': 'Cocos Islands', 'CA': 'Canada', 'CG': 'Congo', 'CF': 'Central African Republic', 'CD': 'Democratic Republic of the Congo', 'CZ': 'Czech Republic', 'CY': 'Cyprus', 'CX': 'Christmas Island', 'CR': 'Costa Rica', 'CV': 'Cape Verde', 'CU': 'Cuba', 'SZ': 'Swaziland', 'SY': 'Syria', 'KG': 'Kyrgyzstan', 'KE': 'Kenya', 'SR': 'Suriname', 'KI': 'Kiribati', 'KH': 'Cambodia', 'KN': 'Saint Kitts and Nevis', 'KM': 'Comoros', 'ST': 'Sao Tome and Principe', 'SK': 'Slovakia', 'KR': 'South Korea', 'SI': 'Slovenia', 'KP': 'North Korea', 'KW': 'Kuwait', 'SN': 'Senegal', 'SM': 'San Marino', 'SL': 'Sierra Leone', 'SC': 'Seychelles', 'KZ': 'Kazakhstan', 'KY': 'Cayman Islands', 'SG': 'Singapore', 'SE': 'Sweden', 'SD': 'Sudan', 'DO': 'Dominican Republic', 'DM': 'Dominica', 'DJ': 'Djibouti', 'DK': 'Denmark', 'VG': 'British Virgin Islands', 'DE': 'Germany', 'YE': 'Yemen', 'DZ': 'Algeria', 'US': 'United States', 'UY': 'Uruguay', 'YU': 'Yugoslavia', 'YT': 'Mayotte', 'UM': 'United States Minor Outlying Islands', 'LB': 'Lebanon', 'LC': 'Saint Lucia', 'LA': 'Laos', 'TV': 'Tuvalu', 'TW': 'Taiwan', 'TT': 'Trinidad and Tobago', 'TR': 'Turkey', 'LK': 'Sri Lanka', 'LI': 'Liechtenstein', 'LV': 'Latvia', 'TO': 'Tonga', 'LT': 'Lithuania', 'LU': 'Luxembourg', 'LR': 'Liberia', 'LS': 'Lesotho', 'TH': 'Thailand', 'TF': 'French Southern Territories', 'TG': 'Togo', 'TD': 'Chad', 'TC': 'Turks and Caicos Islands', 'LY': 'Libya', 'VA': 'Vatican', 'VC': 'Saint Vincent and the Grenadines', 'AE': 'United Arab Emirates', 'AD': 'Andorra', 'AG': 'Antigua and Barbuda', 'AF': 'Afghanistan', 'AI': 'Anguilla', 'VI': 'U.S. Virgin Islands', 'IS': 'Iceland', 'IR': 'Iran', 'AM': 'Armenia', 'AL': 'Albania', 'AO': 'Angola', 'AN': 'Netherlands Antilles', 'AQ': 'Antarctica', 'AS': 'American Samoa', 'AR': 'Argentina', 'AU': 'Australia', 'AT': 'Austria', 'AW': 'Aruba', 'IN': 'India', 'TZ': 'Tanzania', 'AZ': 'Azerbaijan', 'IE': 'Ireland', 'ID': 'Indonesia', 'UA': 'Ukraine', 'QA': 'Qatar', 'MZ': 'Mozambique'} months=['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] abbrMonths=['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] days=['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'] abbrDays=['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] dateFormats={'medium': '%%(abbrmonthname)s %d, %Y', 'full': '%%(dayname)s, %%(monthname)s %d, %Y', 'long': '%%(monthname)s %d, %Y', 'short': '%m/%d/%y'} numericSymbols={'group': ',', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': '0/00', 'nan': u'\ufffd', 'decimal': '.', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': 'INF', 'minusSign': '-'} PKA>0gZZ$turbogears/i18n/data/en_US_POSIX.pyc; ȸHIc @s#hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd~***PKK9wc1:1:turbogears/i18n/data/en_VI.py# Formatting configuration for locale en_VI languages={'gv': 'Manx', 'gu': 'Gujarati', 'rom': 'Romany', 'alg': 'Algonquian Languages', 'ale': 'Aleut', 'sco': 'Scots', 'mni': 'Manipuri', 'gd': 'Scottish Gaelic', 'ga': 'Irish', 'mno': 'Manobo Languages', 'osa': 'Osage', 'gn': 'Guarani', 'gl': 'Gallegan', 'mwr': 'Marwari', 'ty': 'Tahitian', 'tw': 'Twi', 'tt': 'Tatar', 'tr': 'Turkish', 'ts': 'Tsonga', 'tn': 'Tswana', 'to': 'Tonga (Tonga Islands)', 'aus': 'Australian Languages', 'av': 'Avaric', 'tk': 'Turkmen', 'th': 'Thai', 'roa': 'Romance (Other)', 'tg': 'Tajik', 'te': 'Telugu', 'uga': 'Ugaritic', 'ta': 'Tamil', 'fat': 'Fanti', 'fan': 'Fang', 'wo': 'Wolof', 'rm': 'Rhaeto-Romance', 'din': 'Dinka', 'bla': 'Siksika', 'cmc': 'Chamic Languages', 'ml': 'Malayalam', 'zh': 'Chinese', 'tem': 'Timne', 'za': 'Zhuang', 'cau': 'Caucasian (Other)', 'zu': 'Zulu', 'ter': 'Tereno', 'tet': 'Tetum', 'mnc': 'Manchu', 'kut': 'Kutenai', 'suk': 'Sukuma', 'kum': 'Kumyk', 'sus': 'Susu', 'new': 'Newari', 'sux': 'Sumerian', 'den': 'Slave', 'men': 'Mende', 'mul': 'Multiple Languages', 'lez': 'Lezghian', 'root': 'Root', 'eka': 'Ekajuk', 'akk': 'Akkadian', 'dra': 'Dravidian (Other)', 'jrb': 'Judeo-Arabic', 'sgn': 'Sign Languages', 'sga': 'Irish, Old (to 900)', 'apa': 'Apache Languages', 'bra': 'Braj', 'chb': 'Chibcha', 'chg': 'Chagatai', 'chk': 'Chuukese', 'chm': 'Mari', 'chn': 'Chinook Jargon', 'cho': 'Choctaw', 'chp': 'Chipewyan', 'chr': 'Cherokee', 'chy': 'Cheyenne', 'ti': 'Tigrinya', 'vot': 'Votic', 'mg': 'Malagasy', 'iba': 'Iban', 'mo': 'Moldavian', 'mn': 'Mongolian', 'mi': 'Maori', 'mh': 'Marshallese', 'mk': 'Macedonian', 'mt': 'Maltese', 'cai': 'Central American Indian (Other)', 'del': 'Delaware', 'ms': 'Malay', 'mr': 'Marathi', 'my': 'Burmese', 'cad': 'Caddo', 'tai': 'Tai (Other)', 'afh': 'Afrihili', 'sit': 'Sino-Tibetan (Other)', 'enm': 'English, Middle (1100-1500)', 'csb': 'Kashubian', 'nyn': 'Nyankole', 'nyo': 'Nyoro', 'nym': 'Nyamwezi', 'sio': 'Siouan Languages', 'map': 'Austronesian', 'mas': 'Masai', 'lah': 'Lahnda', 'lad': 'Ladino', 'fy': 'Frisian', 'snk': 'Soninke', 'fa': 'Persian', 'mad': 'Madurese', 'mag': 'Magahi', 'mai': 'Maithili', 'fi': 'Finnish', 'fj': 'Fijian', 'man': 'Mandingo', 'egy': 'Egyptian (Ancient)', 'znd': 'Zande', 'ss': 'Swati', 'sr': 'Serbian', 'sq': 'Albanian', 'sw': 'Swahili', 'sv': 'Swedish', 'su': 'Sundanese', 'st': 'Sotho, Southern', 'sk': 'Slovak', 'si': 'Sinhalese', 'sh': 'Serbo-Croatian', 'so': 'Somali', 'sn': 'Shona', 'sm': 'Samoan', 'sl': 'Slovenian', 'sc': 'Sardinian', 'sa': 'Sanskrit', 'sg': 'Sango', 'se': 'Northern Sami', 'sd': 'Sindhi', 'zen': 'Zenaga', 'kbd': 'Kabardian', 'afa': 'Afro-Asiatic (Other)', 'lg': 'Ganda', 'lb': 'Luxembourgish', 'fiu': 'Finno - Ugrian (Other)', 'ln': 'Lingala', 'lo': 'Lao', 'li': 'Limburgish', 'byn': 'Blin', 'lt': 'Lithuanian', 'lu': 'Luba-Katanga', 'yi': 'Yiddish', 'non': 'Norse, Old', 'ceb': 'Cebuano', 'yo': 'Yoruba', 'nog': 'Nogai', 'bat': 'Baltic (Other)', 'dak': 'Dakota', 'dar': 'Dargwa', 'day': 'Dayak', 'ssa': 'Nilo-Saharam (Other)', 'kpe': 'Kpelle', 'el': 'Greek', 'eo': 'Esperanto', 'en': 'English', 'lam': 'Lamba', 'ee': 'Ewe', 'mdf': 'Moksha', 'fr': 'French', 'mdr': 'Mandar', 'et': 'Estonian', 'es': 'Spanish', 'ru': 'Russian', 'gon': 'Gondi', 'goh': 'German, Old High (ca.750-1050)', 'sms': 'Skolt Sami', 'smn': 'Inari Sami', 'smj': 'Lule Sami', 'smi': 'Sami languages (Other)', 'got': 'Gothic', 'rn': 'Rundi', 'ro': 'Romanian', 'dsb': 'Lower Sorbian', 'sma': 'Southern Sami', 'gor': 'Gorontalo', 'ast': 'Asturian', 'wal': 'Walamo', 'crh': 'Crimean Turkish; Crimean Tatar', 'ath': 'Athapascan Languages', 'gez': 'Geez', 'xh': 'Xhosa', 'ff': 'Fulah', 'mak': 'Makasar', 'zap': 'Zapotec', 'kok': 'Konkani', 'kos': 'Kosraean', 'fo': 'Faroese', 'tog': 'Tonga (Nyasa)', 'hup': 'Hupa', 'udm': 'Udmurt', 'bej': 'Beja', 'bem': 'Bemba', 'tsi': 'Tsimshian', 'ber': 'Berber', 'nzi': 'Nzima', 'sai': 'South American Indian (Other)', 'ang': 'English, Old (ca.450-1100)', 'pra': 'Prakrit Languages', 'bho': 'Bhojpuri', 'sal': 'Salishan languages', 'pro': u'Proven\xe7al, Old (to 1500)', 'raj': 'Rajasthani', 'sad': 'Sandawe', 'rar': 'Rarotongan', 'rap': 'Rapanui', 'sas': 'Sasak', 'car': 'Carib', 'min': 'Minangkabau', 'mic': 'Micmac', 'efi': 'Efik', 'arn': 'Araucanian', 'ypk': 'Yupik Languages', 'mis': 'Miscellaneous Languages', 'kac': 'Kachin', 'kab': 'Kabyle', 'kaa': 'Kara-Kalpak', 'kam': 'Kamba', 'kar': 'Karen', 'kaw': 'Kawi', 'tyv': 'Tuvinian', 'awa': 'Awadhi', 'ka': 'Georgian', 'doi': 'Dogri', 'kg': 'Kongo', 'kk': 'Kazakh', 'kj': 'Kuanyama', 'ki': 'Kikuyu', 'ko': 'Korean', 'kn': 'Kannada', 'km': 'Khmer', 'kl': 'Kalaallisut', 'ks': 'Kashmiri', 'kr': 'Kanuri', 'kw': 'Cornish', 'kv': 'Komi', 'ku': 'Kurdish', 'ky': 'Kirghiz', 'tkl': 'Tokelau', 'bua': 'Buriat', 'mga': 'Irish, Middle (900-1200)', 'hit': 'Hittite', 'dyu': 'Dyula', 'de': 'German', 'da': 'Danish', 'dz': 'Dzongkha', 'ira': 'Iranian', 'dv': 'Divehi', 'hil': 'Hiligaynon', 'him': 'Himachali', 'gem': 'Germanic (Other)', 'crp': 'Creoles and Pidgins (Other)', 'qu': 'Quechua', 'bas': 'Basa', 'gba': 'Gbaya', 'bad': 'Banda', 'ban': 'Balinese', 'bal': 'Baluchi', 'bam': 'Bambara', 'shn': 'Shan', 'bai': 'Bamileke Languages', 'arp': 'Arapaho', 'art': 'Artificial (Other)', 'arw': 'Arawak', 'arc': 'Aramaic', 'sem': 'Semitic (Other)', 'sel': 'Selkup', 'nub': 'Nubian Languages', 'btk': 'Batak', 'lus': 'Lushai', 'mus': 'Creek', 'lua': 'Luba-Lulua', 'iro': 'Iroquoian languages', 'lui': 'Luiseno', 'mun': 'Munda Languages', 'lun': 'Lunda', 'luo': 'Luo', 'wa': 'Walloon', 'tup': 'Tupi languages', 'jv': 'Javanese', 'tut': 'Altaic (Other)', 'tum': 'Tumbuka', 'ja': 'Japanese', 'cop': 'Coptic', 'ilo': 'Iloko', 'la': 'Latin', 'gwi': "Gwich'in", 'und': 'Undetermined', 'tli': 'Tlingit', 'ch': 'Chamorro', 'co': 'Corsican', 'ca': 'Catalan', 'ce': 'Chechen', 'pon': 'Pohnpeian', 'cy': 'Welsh', 'sah': 'Yakut', 'cs': 'Czech', 'cr': 'Cree', 'bnt': 'Bantu', 'cv': 'Chuvash', 'cu': 'Church Slavic', 'lv': 'Latvian', 'dum': 'Dutch, Middle (ca. 1050-1350)', 'pt': 'Portuguese', 'dua': 'Duala', 'fro': 'French, Old (842-ca.1400)', 'yap': 'Yapese', 'frm': 'French, Middle (ca.1400-1600)', 'tiv': 'Tiv', 'yao': 'Yao', 'pa': 'Punjabi', 'xal': 'Kalmyk', 'pi': 'Pali', 'pl': 'Polish', 'gay': 'Gayo', 'oto': 'Otomian Languages', 'ota': 'Turkish, Ottoman (1500-1928)', 'hmn': 'Hmong', 'an': 'Aragonese', 'gaa': 'Ga', 'fur': 'Friulian', 'khi': 'Khoisan (Other)', 'sla': 'Slavic (Other)', 've': 'Venda', 'vi': 'Vietnamese', 'is': 'Icelandic', 'kho': 'Khotanese', 'iu': 'Inuktitut', 'it': 'Italian', 'vo': u'Volap\xfck', 'ii': 'Sichuan Yi', 'ik': 'Inupiaq', 'io': 'Ido', 'ine': 'Indo-European (Other)', 'ia': 'Interlingua', 'jpr': 'Judeo-Persian', 'ie': 'Interlingue', 'id': 'Indonesian', 'ig': 'Igbo', 'pap': 'Papiamento', 'ewo': 'Ewondo', 'pau': 'Palauan', 'paa': 'Papuan (Other)', 'pag': 'Pangasinan', 'sat': 'Santali', 'pal': 'Pahlavi', 'pam': 'Pampanga', 'phi': 'Philippine (Other)', 'cel': 'Celtic (Other)', 'phn': 'Phoenician', 'nic': 'Niger - Kordofanian (Other)', 'nia': 'Nias', 'dgr': 'Dogrib', 'syr': 'Syriac', 'niu': 'Niuean', 'jbo': 'Lojban', 'nah': 'Nahuatl', 'sam': 'Samaritan Aramaic', 'hai': 'Haida', 'gmh': 'German, Middle High (ca.1050-1500)', 'cus': 'Cushitic (Other)', 'wen': 'Sorbian Languages', 'ady': 'Adyghe', 'elx': 'Elamite', 'ada': 'Adangme', 'haw': 'Hawaiian', 'bin': 'Bini', 'bik': 'Bikol', 'mos': 'Mossi', 'moh': 'Mohawk', 'tl': 'Tagalog', 'tvl': 'Tuvalu', 'ijo': 'Ijo', 'kmb': 'Kimbundu', 'peo': 'Persian Old (ca.600-400 B.C.)', 'umb': 'Umbundu', 'tmh': 'Tamashek', 'fon': 'Fon', 'hsb': 'Upper Sorbian', 'be': 'Belarusian', 'bg': 'Bulgarian', 'ba': 'Bashkir', 'ps': 'Pashto (Pushto)', 'bm': 'Bambara', 'bn': 'Bengali', 'bo': 'Tibetan', 'bh': 'Bihari', 'bi': 'Bislama', 'br': 'Breton', 'bs': 'Bosnian', 'om': 'Oromo', 'oj': 'Ojibwa', 'ace': 'Achinese', 'ach': 'Acoli', 'oc': u'Occitan (post 1500); Proven\xe7al', 'kru': 'Kurukh', 'srr': 'Serer', 'kro': 'Kru', 'krc': 'Karachay-Balkar', 'nds': 'Low German; Low Saxon', 'os': 'Ossetic', 'or': 'Oriya', 'sog': 'Sogdien', 'nso': 'Sotho, Northern', 'son': 'Songhai', 'vai': 'Vai', 'wak': 'Wakashan Languages', 'lol': 'Mongo', 'mkh': 'Mon-Khmer (Other)', 'loz': 'Lozi', 'gil': 'Gilbertese', 'was': 'Washo', 'war': 'Waray', 'hz': 'Herero', 'hy': 'Armenian', 'sid': 'Sidamo', 'hr': 'Croatian', 'ht': 'Haitian', 'hu': 'Hungarian', 'hi': 'Hindi', 'ho': 'Hiri Motu', 'ha': 'Hausa', 'bug': 'Buginese', 'he': 'Hebrew', 'uz': 'Uzbek', 'ur': 'Urdu', 'uk': 'Ukrainian', 'ug': 'Uighur', 'aa': 'Afar', 'ab': 'Abkhazian', 'ae': 'Avestan', 'af': 'Afrikaans', 'ak': 'Akan', 'am': 'Amharic', 'myv': 'Erzya', 'eu': 'Basque', 'as': 'Assamese', 'ar': 'Arabic', 'inh': 'Ingush', 'tpi': 'Tok Pisin', 'myn': 'Mayan', 'ay': 'Aymara', 'kha': 'Khasi', 'az': 'Azerbaijani', 'inc': 'Indic (Other)', 'nl': 'Dutch', 'nn': 'Norwegian Nynorsk', 'no': 'Norwegian', 'na': 'Nauru', 'nb': u'Norwegian Bokm\xe5l', 'nai': 'North American Indian (Other)', 'nd': 'Ndebele, North', 'ne': 'Nepali', 'ng': 'Ndonga', 'ny': 'Nyanja; Chichewa; Chewa', 'nap': 'Neapolitan', 'grb': 'Gerbo', 'grc': 'Greek, Ancient (to 1453)', 'nr': 'Ndebele, South', 'tig': 'Tigre', 'nv': 'Navajo', 'zun': 'Zuni', 'rw': 'Kinyarwanda', 'cpe': 'Creoles and Pidgins, English-based (Other)', 'cpf': 'Creoles and Pidgins, French-based (Other)', 'cpp': 'Creoles and pidgins, Portuguese-based (Other)'} countries={'BD': 'Bangladesh', 'BE': 'Belgium', 'BF': 'Burkina Faso', 'BG': 'Bulgaria', 'BA': 'Bosnia and Herzegovina', 'BB': 'Barbados', 'WF': 'Wallis and Futuna', 'BM': 'Bermuda', 'BN': 'Brunei', 'BO': 'Bolivia', 'BH': 'Bahrain', 'BI': 'Burundi', 'BJ': 'Benin', 'BT': 'Bhutan', 'JM': 'Jamaica', 'BV': 'Bouvet Island', 'BW': 'Botswana', 'WS': 'Samoa', 'BR': 'Brazil', 'BS': 'Bahamas', 'BY': 'Belarus', 'BZ': 'Belize', 'RU': 'Russia', 'RW': 'Rwanda', 'TL': 'Timor-Leste', 'RE': u'R\xe9union', 'TM': 'Turkmenistan', 'TJ': 'Tajikistan', 'RO': 'Romania', 'TK': 'Tokelau', 'GW': 'Guinea-Bissau', 'GU': 'Guam', 'GT': 'Guatemala', 'GS': 'South Georgia and South Sandwich Islands', 'GR': 'Greece', 'GQ': 'Equatorial Guinea', 'GP': 'Guadeloupe', 'JP': 'Japan', 'GY': 'Guyana', 'GF': 'French Guiana', 'GE': 'Georgia', 'GD': 'Grenada', 'GB': 'United Kingdom', 'GA': 'Gabon', 'SV': 'El Salvador', 'GN': 'Guinea', 'GM': 'Gambia', 'GL': 'Greenland', 'GI': 'Gibraltar', 'GH': 'Ghana', 'OM': 'Oman', 'TN': 'Tunisia', 'JO': 'Jordan', 'SP': 'Serbia', 'HR': 'Croatia', 'HT': 'Haiti', 'HU': 'Hungary', 'HK': 'Hong Kong S.A.R., China', 'HN': 'Honduras', 'HM': 'Heard Island and McDonald Islands', 'VE': 'Venezuela', 'PR': 'Puerto Rico', 'PS': 'Palestinian Territory', 'PW': 'Palau', 'PT': 'Portugal', 'SJ': 'Svalbard and Jan Mayen', 'PY': 'Paraguay', 'IQ': 'Iraq', 'PA': 'Panama', 'PF': 'French Polynesia', 'PG': 'Papua New Guinea', 'PE': 'Peru', 'PK': 'Pakistan', 'PH': 'Philippines', 'PN': 'Pitcairn', 'PL': 'Poland', 'PM': 'Saint Pierre and Miquelon', 'ZM': 'Zambia', 'EH': 'Western Sahara', 'EE': 'Estonia', 'EG': 'Egypt', 'ZA': 'South Africa', 'EC': 'Ecuador', 'IT': 'Italy', 'VN': 'Vietnam', 'SB': 'Solomon Islands', 'ET': 'Ethiopia', 'SO': 'Somalia', 'ZW': 'Zimbabwe', 'SA': 'Saudi Arabia', 'ES': 'Spain', 'ER': 'Eritrea', 'MD': 'Moldova', 'MG': 'Madagascar', 'MA': 'Morocco', 'MC': 'Monaco', 'UZ': 'Uzbekistan', 'MM': 'Myanmar', 'ML': 'Mali', 'MO': 'Macao S.A.R. China', 'MN': 'Mongolia', 'MH': 'Marshall Islands', 'MK': 'Macedonia', 'MU': 'Mauritius', 'MT': 'Malta', 'MW': 'Malawi', 'MV': 'Maldives', 'MQ': 'Martinique', 'MP': 'Northern Mariana Islands', 'MS': 'Montserrat', 'MR': 'Mauritania', 'UG': 'Uganda', 'MY': 'Malaysia', 'MX': 'Mexico', 'IL': 'Israel', 'FR': 'France', 'IO': 'British Indian Ocean Territory', 'SH': 'Saint Helena', 'FI': 'Finland', 'FJ': 'Fiji', 'FK': 'Falkland Islands', 'FM': 'Micronesia', 'FO': 'Faroe Islands', 'NI': 'Nicaragua', 'NL': 'Netherlands', 'NO': 'Norway', 'NA': 'Namibia', 'VU': 'Vanuatu', 'NC': 'New Caledonia', 'NE': 'Niger', 'NF': 'Norfolk Island', 'NG': 'Nigeria', 'NZ': 'New Zealand', 'NP': 'Nepal', 'NR': 'Nauru', 'NU': 'Niue', 'CK': 'Cook Islands', 'CI': u"C\xf4te d'Ivoire", 'CH': 'Switzerland', 'CO': 'Colombia', 'CN': 'China', 'CM': 'Cameroon', 'CL': 'Chile', 'CC': 'Cocos Islands', 'CA': 'Canada', 'CG': 'Congo', 'CF': 'Central African Republic', 'CD': 'Democratic Republic of the Congo', 'CZ': 'Czech Republic', 'CY': 'Cyprus', 'CX': 'Christmas Island', 'CR': 'Costa Rica', 'CV': 'Cape Verde', 'CU': 'Cuba', 'SZ': 'Swaziland', 'SY': 'Syria', 'KG': 'Kyrgyzstan', 'KE': 'Kenya', 'SR': 'Suriname', 'KI': 'Kiribati', 'KH': 'Cambodia', 'KN': 'Saint Kitts and Nevis', 'KM': 'Comoros', 'ST': 'Sao Tome and Principe', 'SK': 'Slovakia', 'KR': 'South Korea', 'SI': 'Slovenia', 'KP': 'North Korea', 'KW': 'Kuwait', 'SN': 'Senegal', 'SM': 'San Marino', 'SL': 'Sierra Leone', 'SC': 'Seychelles', 'KZ': 'Kazakhstan', 'KY': 'Cayman Islands', 'SG': 'Singapore', 'SE': 'Sweden', 'SD': 'Sudan', 'DO': 'Dominican Republic', 'DM': 'Dominica', 'DJ': 'Djibouti', 'DK': 'Denmark', 'VG': 'British Virgin Islands', 'DE': 'Germany', 'YE': 'Yemen', 'DZ': 'Algeria', 'US': 'United States', 'UY': 'Uruguay', 'YU': 'Yugoslavia', 'YT': 'Mayotte', 'UM': 'United States Minor Outlying Islands', 'LB': 'Lebanon', 'LC': 'Saint Lucia', 'LA': 'Laos', 'TV': 'Tuvalu', 'TW': 'Taiwan', 'TT': 'Trinidad and Tobago', 'TR': 'Turkey', 'LK': 'Sri Lanka', 'LI': 'Liechtenstein', 'LV': 'Latvia', 'TO': 'Tonga', 'LT': 'Lithuania', 'LU': 'Luxembourg', 'LR': 'Liberia', 'LS': 'Lesotho', 'TH': 'Thailand', 'TF': 'French Southern Territories', 'TG': 'Togo', 'TD': 'Chad', 'TC': 'Turks and Caicos Islands', 'LY': 'Libya', 'VA': 'Vatican', 'VC': 'Saint Vincent and the Grenadines', 'AE': 'United Arab Emirates', 'AD': 'Andorra', 'AG': 'Antigua and Barbuda', 'AF': 'Afghanistan', 'AI': 'Anguilla', 'VI': 'U.S. Virgin Islands', 'IS': 'Iceland', 'IR': 'Iran', 'AM': 'Armenia', 'AL': 'Albania', 'AO': 'Angola', 'AN': 'Netherlands Antilles', 'AQ': 'Antarctica', 'AS': 'American Samoa', 'AR': 'Argentina', 'AU': 'Australia', 'AT': 'Austria', 'AW': 'Aruba', 'IN': 'India', 'TZ': 'Tanzania', 'AZ': 'Azerbaijan', 'IE': 'Ireland', 'ID': 'Indonesia', 'UA': 'Ukraine', 'QA': 'Qatar', 'MZ': 'Mozambique'} months=['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] abbrMonths=['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] days=['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'] abbrDays=['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] dateFormats={'medium': '%%(abbrmonthname)s %d, %Y', 'full': '%%(dayname)s, %%(monthname)s %d, %Y', 'long': '%%(monthname)s %d, %Y', 'short': '%m/%d/%y'} numericSymbols={'group': ',', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': '.', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'} PKA>^ZZturbogears/i18n/data/en_VI.pyc; ȸHIc @s#hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd~***PKK9Ih-:-:turbogears/i18n/data/en_ZA.py# Formatting configuration for locale en_ZA languages={'gv': 'Manx', 'gu': 'Gujarati', 'rom': 'Romany', 'alg': 'Algonquian Languages', 'ale': 'Aleut', 'sco': 'Scots', 'mni': 'Manipuri', 'gd': 'Scottish Gaelic', 'ga': 'Irish', 'mno': 'Manobo Languages', 'osa': 'Osage', 'gn': 'Guarani', 'gl': 'Gallegan', 'mwr': 'Marwari', 'ty': 'Tahitian', 'tw': 'Twi', 'tt': 'Tatar', 'tr': 'Turkish', 'ts': 'Tsonga', 'tn': 'Tswana', 'to': 'Tonga (Tonga Islands)', 'aus': 'Australian Languages', 'av': 'Avaric', 'tk': 'Turkmen', 'th': 'Thai', 'roa': 'Romance (Other)', 'tg': 'Tajik', 'te': 'Telugu', 'uga': 'Ugaritic', 'ta': 'Tamil', 'fat': 'Fanti', 'fan': 'Fang', 'wo': 'Wolof', 'rm': 'Rhaeto-Romance', 'din': 'Dinka', 'bla': 'Siksika', 'cmc': 'Chamic Languages', 'ml': 'Malayalam', 'zh': 'Chinese', 'tem': 'Timne', 'za': 'Zhuang', 'cau': 'Caucasian (Other)', 'zu': 'Zulu', 'ter': 'Tereno', 'tet': 'Tetum', 'mnc': 'Manchu', 'kut': 'Kutenai', 'suk': 'Sukuma', 'kum': 'Kumyk', 'sus': 'Susu', 'new': 'Newari', 'sux': 'Sumerian', 'den': 'Slave', 'men': 'Mende', 'mul': 'Multiple Languages', 'lez': 'Lezghian', 'root': 'Root', 'eka': 'Ekajuk', 'akk': 'Akkadian', 'dra': 'Dravidian (Other)', 'jrb': 'Judeo-Arabic', 'sgn': 'Sign Languages', 'sga': 'Irish, Old (to 900)', 'apa': 'Apache Languages', 'bra': 'Braj', 'chb': 'Chibcha', 'chg': 'Chagatai', 'chk': 'Chuukese', 'chm': 'Mari', 'chn': 'Chinook Jargon', 'cho': 'Choctaw', 'chp': 'Chipewyan', 'chr': 'Cherokee', 'chy': 'Cheyenne', 'ti': 'Tigrinya', 'vot': 'Votic', 'mg': 'Malagasy', 'iba': 'Iban', 'mo': 'Moldavian', 'mn': 'Mongolian', 'mi': 'Maori', 'mh': 'Marshallese', 'mk': 'Macedonian', 'mt': 'Maltese', 'cai': 'Central American Indian (Other)', 'del': 'Delaware', 'ms': 'Malay', 'mr': 'Marathi', 'my': 'Burmese', 'cad': 'Caddo', 'tai': 'Tai (Other)', 'afh': 'Afrihili', 'sit': 'Sino-Tibetan (Other)', 'enm': 'English, Middle (1100-1500)', 'csb': 'Kashubian', 'nyn': 'Nyankole', 'nyo': 'Nyoro', 'nym': 'Nyamwezi', 'sio': 'Siouan Languages', 'map': 'Austronesian', 'mas': 'Masai', 'lah': 'Lahnda', 'lad': 'Ladino', 'fy': 'Frisian', 'snk': 'Soninke', 'fa': 'Persian', 'mad': 'Madurese', 'mag': 'Magahi', 'mai': 'Maithili', 'fi': 'Finnish', 'fj': 'Fijian', 'man': 'Mandingo', 'egy': 'Egyptian (Ancient)', 'znd': 'Zande', 'ss': 'Swati', 'sr': 'Serbian', 'sq': 'Albanian', 'sw': 'Swahili', 'sv': 'Swedish', 'su': 'Sundanese', 'st': 'Sotho, Southern', 'sk': 'Slovak', 'si': 'Sinhalese', 'sh': 'Serbo-Croatian', 'so': 'Somali', 'sn': 'Shona', 'sm': 'Samoan', 'sl': 'Slovenian', 'sc': 'Sardinian', 'sa': 'Sanskrit', 'sg': 'Sango', 'se': 'Northern Sami', 'sd': 'Sindhi', 'zen': 'Zenaga', 'kbd': 'Kabardian', 'afa': 'Afro-Asiatic (Other)', 'lg': 'Ganda', 'lb': 'Luxembourgish', 'fiu': 'Finno - Ugrian (Other)', 'ln': 'Lingala', 'lo': 'Lao', 'li': 'Limburgish', 'byn': 'Blin', 'lt': 'Lithuanian', 'lu': 'Luba-Katanga', 'yi': 'Yiddish', 'non': 'Norse, Old', 'ceb': 'Cebuano', 'yo': 'Yoruba', 'nog': 'Nogai', 'bat': 'Baltic (Other)', 'dak': 'Dakota', 'dar': 'Dargwa', 'day': 'Dayak', 'ssa': 'Nilo-Saharam (Other)', 'kpe': 'Kpelle', 'el': 'Greek', 'eo': 'Esperanto', 'en': 'English', 'lam': 'Lamba', 'ee': 'Ewe', 'mdf': 'Moksha', 'fr': 'French', 'mdr': 'Mandar', 'et': 'Estonian', 'es': 'Spanish', 'ru': 'Russian', 'gon': 'Gondi', 'goh': 'German, Old High (ca.750-1050)', 'sms': 'Skolt Sami', 'smn': 'Inari Sami', 'smj': 'Lule Sami', 'smi': 'Sami languages (Other)', 'got': 'Gothic', 'rn': 'Rundi', 'ro': 'Romanian', 'dsb': 'Lower Sorbian', 'sma': 'Southern Sami', 'gor': 'Gorontalo', 'ast': 'Asturian', 'wal': 'Walamo', 'crh': 'Crimean Turkish; Crimean Tatar', 'ath': 'Athapascan Languages', 'gez': 'Geez', 'xh': 'Xhosa', 'ff': 'Fulah', 'mak': 'Makasar', 'zap': 'Zapotec', 'kok': 'Konkani', 'kos': 'Kosraean', 'fo': 'Faroese', 'tog': 'Tonga (Nyasa)', 'hup': 'Hupa', 'udm': 'Udmurt', 'bej': 'Beja', 'bem': 'Bemba', 'tsi': 'Tsimshian', 'ber': 'Berber', 'nzi': 'Nzima', 'sai': 'South American Indian (Other)', 'ang': 'English, Old (ca.450-1100)', 'pra': 'Prakrit Languages', 'bho': 'Bhojpuri', 'sal': 'Salishan languages', 'pro': u'Proven\xe7al, Old (to 1500)', 'raj': 'Rajasthani', 'sad': 'Sandawe', 'rar': 'Rarotongan', 'rap': 'Rapanui', 'sas': 'Sasak', 'car': 'Carib', 'min': 'Minangkabau', 'mic': 'Micmac', 'efi': 'Efik', 'arn': 'Araucanian', 'ypk': 'Yupik Languages', 'mis': 'Miscellaneous Languages', 'kac': 'Kachin', 'kab': 'Kabyle', 'kaa': 'Kara-Kalpak', 'kam': 'Kamba', 'kar': 'Karen', 'kaw': 'Kawi', 'tyv': 'Tuvinian', 'awa': 'Awadhi', 'ka': 'Georgian', 'doi': 'Dogri', 'kg': 'Kongo', 'kk': 'Kazakh', 'kj': 'Kuanyama', 'ki': 'Kikuyu', 'ko': 'Korean', 'kn': 'Kannada', 'km': 'Khmer', 'kl': 'Kalaallisut', 'ks': 'Kashmiri', 'kr': 'Kanuri', 'kw': 'Cornish', 'kv': 'Komi', 'ku': 'Kurdish', 'ky': 'Kirghiz', 'tkl': 'Tokelau', 'bua': 'Buriat', 'mga': 'Irish, Middle (900-1200)', 'hit': 'Hittite', 'dyu': 'Dyula', 'de': 'German', 'da': 'Danish', 'dz': 'Dzongkha', 'ira': 'Iranian', 'dv': 'Divehi', 'hil': 'Hiligaynon', 'him': 'Himachali', 'gem': 'Germanic (Other)', 'crp': 'Creoles and Pidgins (Other)', 'qu': 'Quechua', 'bas': 'Basa', 'gba': 'Gbaya', 'bad': 'Banda', 'ban': 'Balinese', 'bal': 'Baluchi', 'bam': 'Bambara', 'shn': 'Shan', 'bai': 'Bamileke Languages', 'arp': 'Arapaho', 'art': 'Artificial (Other)', 'arw': 'Arawak', 'arc': 'Aramaic', 'sem': 'Semitic (Other)', 'sel': 'Selkup', 'nub': 'Nubian Languages', 'btk': 'Batak', 'lus': 'Lushai', 'mus': 'Creek', 'lua': 'Luba-Lulua', 'iro': 'Iroquoian languages', 'lui': 'Luiseno', 'mun': 'Munda Languages', 'lun': 'Lunda', 'luo': 'Luo', 'wa': 'Walloon', 'tup': 'Tupi languages', 'jv': 'Javanese', 'tut': 'Altaic (Other)', 'tum': 'Tumbuka', 'ja': 'Japanese', 'cop': 'Coptic', 'ilo': 'Iloko', 'la': 'Latin', 'gwi': "Gwich'in", 'und': 'Undetermined', 'tli': 'Tlingit', 'ch': 'Chamorro', 'co': 'Corsican', 'ca': 'Catalan', 'ce': 'Chechen', 'pon': 'Pohnpeian', 'cy': 'Welsh', 'sah': 'Yakut', 'cs': 'Czech', 'cr': 'Cree', 'bnt': 'Bantu', 'cv': 'Chuvash', 'cu': 'Church Slavic', 'lv': 'Latvian', 'dum': 'Dutch, Middle (ca. 1050-1350)', 'pt': 'Portuguese', 'dua': 'Duala', 'fro': 'French, Old (842-ca.1400)', 'yap': 'Yapese', 'frm': 'French, Middle (ca.1400-1600)', 'tiv': 'Tiv', 'yao': 'Yao', 'pa': 'Punjabi', 'xal': 'Kalmyk', 'pi': 'Pali', 'pl': 'Polish', 'gay': 'Gayo', 'oto': 'Otomian Languages', 'ota': 'Turkish, Ottoman (1500-1928)', 'hmn': 'Hmong', 'an': 'Aragonese', 'gaa': 'Ga', 'fur': 'Friulian', 'khi': 'Khoisan (Other)', 'sla': 'Slavic (Other)', 've': 'Venda', 'vi': 'Vietnamese', 'is': 'Icelandic', 'kho': 'Khotanese', 'iu': 'Inuktitut', 'it': 'Italian', 'vo': u'Volap\xfck', 'ii': 'Sichuan Yi', 'ik': 'Inupiaq', 'io': 'Ido', 'ine': 'Indo-European (Other)', 'ia': 'Interlingua', 'jpr': 'Judeo-Persian', 'ie': 'Interlingue', 'id': 'Indonesian', 'ig': 'Igbo', 'pap': 'Papiamento', 'ewo': 'Ewondo', 'pau': 'Palauan', 'paa': 'Papuan (Other)', 'pag': 'Pangasinan', 'sat': 'Santali', 'pal': 'Pahlavi', 'pam': 'Pampanga', 'phi': 'Philippine (Other)', 'cel': 'Celtic (Other)', 'phn': 'Phoenician', 'nic': 'Niger - Kordofanian (Other)', 'nia': 'Nias', 'dgr': 'Dogrib', 'syr': 'Syriac', 'niu': 'Niuean', 'jbo': 'Lojban', 'nah': 'Nahuatl', 'sam': 'Samaritan Aramaic', 'hai': 'Haida', 'gmh': 'German, Middle High (ca.1050-1500)', 'cus': 'Cushitic (Other)', 'wen': 'Sorbian Languages', 'ady': 'Adyghe', 'elx': 'Elamite', 'ada': 'Adangme', 'haw': 'Hawaiian', 'bin': 'Bini', 'bik': 'Bikol', 'mos': 'Mossi', 'moh': 'Mohawk', 'tl': 'Tagalog', 'tvl': 'Tuvalu', 'ijo': 'Ijo', 'kmb': 'Kimbundu', 'peo': 'Persian Old (ca.600-400 B.C.)', 'umb': 'Umbundu', 'tmh': 'Tamashek', 'fon': 'Fon', 'hsb': 'Upper Sorbian', 'be': 'Belarusian', 'bg': 'Bulgarian', 'ba': 'Bashkir', 'ps': 'Pashto (Pushto)', 'bm': 'Bambara', 'bn': 'Bengali', 'bo': 'Tibetan', 'bh': 'Bihari', 'bi': 'Bislama', 'br': 'Breton', 'bs': 'Bosnian', 'om': 'Oromo', 'oj': 'Ojibwa', 'ace': 'Achinese', 'ach': 'Acoli', 'oc': u'Occitan (post 1500); Proven\xe7al', 'kru': 'Kurukh', 'srr': 'Serer', 'kro': 'Kru', 'krc': 'Karachay-Balkar', 'nds': 'Low German; Low Saxon', 'os': 'Ossetic', 'or': 'Oriya', 'sog': 'Sogdien', 'nso': 'Sotho, Northern', 'son': 'Songhai', 'vai': 'Vai', 'wak': 'Wakashan Languages', 'lol': 'Mongo', 'mkh': 'Mon-Khmer (Other)', 'loz': 'Lozi', 'gil': 'Gilbertese', 'was': 'Washo', 'war': 'Waray', 'hz': 'Herero', 'hy': 'Armenian', 'sid': 'Sidamo', 'hr': 'Croatian', 'ht': 'Haitian', 'hu': 'Hungarian', 'hi': 'Hindi', 'ho': 'Hiri Motu', 'ha': 'Hausa', 'bug': 'Buginese', 'he': 'Hebrew', 'uz': 'Uzbek', 'ur': 'Urdu', 'uk': 'Ukrainian', 'ug': 'Uighur', 'aa': 'Afar', 'ab': 'Abkhazian', 'ae': 'Avestan', 'af': 'Afrikaans', 'ak': 'Akan', 'am': 'Amharic', 'myv': 'Erzya', 'eu': 'Basque', 'as': 'Assamese', 'ar': 'Arabic', 'inh': 'Ingush', 'tpi': 'Tok Pisin', 'myn': 'Mayan', 'ay': 'Aymara', 'kha': 'Khasi', 'az': 'Azerbaijani', 'inc': 'Indic (Other)', 'nl': 'Dutch', 'nn': 'Norwegian Nynorsk', 'no': 'Norwegian', 'na': 'Nauru', 'nb': u'Norwegian Bokm\xe5l', 'nai': 'North American Indian (Other)', 'nd': 'Ndebele, North', 'ne': 'Nepali', 'ng': 'Ndonga', 'ny': 'Nyanja; Chichewa; Chewa', 'nap': 'Neapolitan', 'grb': 'Gerbo', 'grc': 'Greek, Ancient (to 1453)', 'nr': 'Ndebele, South', 'tig': 'Tigre', 'nv': 'Navajo', 'zun': 'Zuni', 'rw': 'Kinyarwanda', 'cpe': 'Creoles and Pidgins, English-based (Other)', 'cpf': 'Creoles and Pidgins, French-based (Other)', 'cpp': 'Creoles and pidgins, Portuguese-based (Other)'} countries={'BD': 'Bangladesh', 'BE': 'Belgium', 'BF': 'Burkina Faso', 'BG': 'Bulgaria', 'BA': 'Bosnia and Herzegovina', 'BB': 'Barbados', 'WF': 'Wallis and Futuna', 'BM': 'Bermuda', 'BN': 'Brunei', 'BO': 'Bolivia', 'BH': 'Bahrain', 'BI': 'Burundi', 'BJ': 'Benin', 'BT': 'Bhutan', 'JM': 'Jamaica', 'BV': 'Bouvet Island', 'BW': 'Botswana', 'WS': 'Samoa', 'BR': 'Brazil', 'BS': 'Bahamas', 'BY': 'Belarus', 'BZ': 'Belize', 'RU': 'Russia', 'RW': 'Rwanda', 'TL': 'Timor-Leste', 'RE': u'R\xe9union', 'TM': 'Turkmenistan', 'TJ': 'Tajikistan', 'RO': 'Romania', 'TK': 'Tokelau', 'GW': 'Guinea-Bissau', 'GU': 'Guam', 'GT': 'Guatemala', 'GS': 'South Georgia and South Sandwich Islands', 'GR': 'Greece', 'GQ': 'Equatorial Guinea', 'GP': 'Guadeloupe', 'JP': 'Japan', 'GY': 'Guyana', 'GF': 'French Guiana', 'GE': 'Georgia', 'GD': 'Grenada', 'GB': 'United Kingdom', 'GA': 'Gabon', 'SV': 'El Salvador', 'GN': 'Guinea', 'GM': 'Gambia', 'GL': 'Greenland', 'GI': 'Gibraltar', 'GH': 'Ghana', 'OM': 'Oman', 'TN': 'Tunisia', 'JO': 'Jordan', 'SP': 'Serbia', 'HR': 'Croatia', 'HT': 'Haiti', 'HU': 'Hungary', 'HK': 'Hong Kong S.A.R., China', 'HN': 'Honduras', 'HM': 'Heard Island and McDonald Islands', 'VE': 'Venezuela', 'PR': 'Puerto Rico', 'PS': 'Palestinian Territory', 'PW': 'Palau', 'PT': 'Portugal', 'SJ': 'Svalbard and Jan Mayen', 'PY': 'Paraguay', 'IQ': 'Iraq', 'PA': 'Panama', 'PF': 'French Polynesia', 'PG': 'Papua New Guinea', 'PE': 'Peru', 'PK': 'Pakistan', 'PH': 'Philippines', 'PN': 'Pitcairn', 'PL': 'Poland', 'PM': 'Saint Pierre and Miquelon', 'ZM': 'Zambia', 'EH': 'Western Sahara', 'EE': 'Estonia', 'EG': 'Egypt', 'ZA': 'South Africa', 'EC': 'Ecuador', 'IT': 'Italy', 'VN': 'Vietnam', 'SB': 'Solomon Islands', 'ET': 'Ethiopia', 'SO': 'Somalia', 'ZW': 'Zimbabwe', 'SA': 'Saudi Arabia', 'ES': 'Spain', 'ER': 'Eritrea', 'MD': 'Moldova', 'MG': 'Madagascar', 'MA': 'Morocco', 'MC': 'Monaco', 'UZ': 'Uzbekistan', 'MM': 'Myanmar', 'ML': 'Mali', 'MO': 'Macao S.A.R. China', 'MN': 'Mongolia', 'MH': 'Marshall Islands', 'MK': 'Macedonia', 'MU': 'Mauritius', 'MT': 'Malta', 'MW': 'Malawi', 'MV': 'Maldives', 'MQ': 'Martinique', 'MP': 'Northern Mariana Islands', 'MS': 'Montserrat', 'MR': 'Mauritania', 'UG': 'Uganda', 'MY': 'Malaysia', 'MX': 'Mexico', 'IL': 'Israel', 'FR': 'France', 'IO': 'British Indian Ocean Territory', 'SH': 'Saint Helena', 'FI': 'Finland', 'FJ': 'Fiji', 'FK': 'Falkland Islands', 'FM': 'Micronesia', 'FO': 'Faroe Islands', 'NI': 'Nicaragua', 'NL': 'Netherlands', 'NO': 'Norway', 'NA': 'Namibia', 'VU': 'Vanuatu', 'NC': 'New Caledonia', 'NE': 'Niger', 'NF': 'Norfolk Island', 'NG': 'Nigeria', 'NZ': 'New Zealand', 'NP': 'Nepal', 'NR': 'Nauru', 'NU': 'Niue', 'CK': 'Cook Islands', 'CI': u"C\xf4te d'Ivoire", 'CH': 'Switzerland', 'CO': 'Colombia', 'CN': 'China', 'CM': 'Cameroon', 'CL': 'Chile', 'CC': 'Cocos Islands', 'CA': 'Canada', 'CG': 'Congo', 'CF': 'Central African Republic', 'CD': 'Democratic Republic of the Congo', 'CZ': 'Czech Republic', 'CY': 'Cyprus', 'CX': 'Christmas Island', 'CR': 'Costa Rica', 'CV': 'Cape Verde', 'CU': 'Cuba', 'SZ': 'Swaziland', 'SY': 'Syria', 'KG': 'Kyrgyzstan', 'KE': 'Kenya', 'SR': 'Suriname', 'KI': 'Kiribati', 'KH': 'Cambodia', 'KN': 'Saint Kitts and Nevis', 'KM': 'Comoros', 'ST': 'Sao Tome and Principe', 'SK': 'Slovakia', 'KR': 'South Korea', 'SI': 'Slovenia', 'KP': 'North Korea', 'KW': 'Kuwait', 'SN': 'Senegal', 'SM': 'San Marino', 'SL': 'Sierra Leone', 'SC': 'Seychelles', 'KZ': 'Kazakhstan', 'KY': 'Cayman Islands', 'SG': 'Singapore', 'SE': 'Sweden', 'SD': 'Sudan', 'DO': 'Dominican Republic', 'DM': 'Dominica', 'DJ': 'Djibouti', 'DK': 'Denmark', 'VG': 'British Virgin Islands', 'DE': 'Germany', 'YE': 'Yemen', 'DZ': 'Algeria', 'US': 'United States', 'UY': 'Uruguay', 'YU': 'Yugoslavia', 'YT': 'Mayotte', 'UM': 'United States Minor Outlying Islands', 'LB': 'Lebanon', 'LC': 'Saint Lucia', 'LA': 'Laos', 'TV': 'Tuvalu', 'TW': 'Taiwan', 'TT': 'Trinidad and Tobago', 'TR': 'Turkey', 'LK': 'Sri Lanka', 'LI': 'Liechtenstein', 'LV': 'Latvia', 'TO': 'Tonga', 'LT': 'Lithuania', 'LU': 'Luxembourg', 'LR': 'Liberia', 'LS': 'Lesotho', 'TH': 'Thailand', 'TF': 'French Southern Territories', 'TG': 'Togo', 'TD': 'Chad', 'TC': 'Turks and Caicos Islands', 'LY': 'Libya', 'VA': 'Vatican', 'VC': 'Saint Vincent and the Grenadines', 'AE': 'United Arab Emirates', 'AD': 'Andorra', 'AG': 'Antigua and Barbuda', 'AF': 'Afghanistan', 'AI': 'Anguilla', 'VI': 'U.S. Virgin Islands', 'IS': 'Iceland', 'IR': 'Iran', 'AM': 'Armenia', 'AL': 'Albania', 'AO': 'Angola', 'AN': 'Netherlands Antilles', 'AQ': 'Antarctica', 'AS': 'American Samoa', 'AR': 'Argentina', 'AU': 'Australia', 'AT': 'Austria', 'AW': 'Aruba', 'IN': 'India', 'TZ': 'Tanzania', 'AZ': 'Azerbaijan', 'IE': 'Ireland', 'ID': 'Indonesia', 'UA': 'Ukraine', 'QA': 'Qatar', 'MZ': 'Mozambique'} months=['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] abbrMonths=['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] days=['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'] abbrDays=['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] dateFormats={'medium': '%d %%(abbrmonthname)s %Y', 'full': '%%(dayname)s %d %%(monthname)s %Y', 'long': '%d %%(monthname)s %Y', 'short': '%Y/%m/%d'} numericSymbols={'group': ',', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': '.', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'} PKA>41ZZturbogears/i18n/data/en_ZA.pyc; ȸHIc @s#hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd~***PKK9KRM-:-:turbogears/i18n/data/en_ZW.py# Formatting configuration for locale en_ZW languages={'gv': 'Manx', 'gu': 'Gujarati', 'rom': 'Romany', 'alg': 'Algonquian Languages', 'ale': 'Aleut', 'sco': 'Scots', 'mni': 'Manipuri', 'gd': 'Scottish Gaelic', 'ga': 'Irish', 'mno': 'Manobo Languages', 'osa': 'Osage', 'gn': 'Guarani', 'gl': 'Gallegan', 'mwr': 'Marwari', 'ty': 'Tahitian', 'tw': 'Twi', 'tt': 'Tatar', 'tr': 'Turkish', 'ts': 'Tsonga', 'tn': 'Tswana', 'to': 'Tonga (Tonga Islands)', 'aus': 'Australian Languages', 'av': 'Avaric', 'tk': 'Turkmen', 'th': 'Thai', 'roa': 'Romance (Other)', 'tg': 'Tajik', 'te': 'Telugu', 'uga': 'Ugaritic', 'ta': 'Tamil', 'fat': 'Fanti', 'fan': 'Fang', 'wo': 'Wolof', 'rm': 'Rhaeto-Romance', 'din': 'Dinka', 'bla': 'Siksika', 'cmc': 'Chamic Languages', 'ml': 'Malayalam', 'zh': 'Chinese', 'tem': 'Timne', 'za': 'Zhuang', 'cau': 'Caucasian (Other)', 'zu': 'Zulu', 'ter': 'Tereno', 'tet': 'Tetum', 'mnc': 'Manchu', 'kut': 'Kutenai', 'suk': 'Sukuma', 'kum': 'Kumyk', 'sus': 'Susu', 'new': 'Newari', 'sux': 'Sumerian', 'den': 'Slave', 'men': 'Mende', 'mul': 'Multiple Languages', 'lez': 'Lezghian', 'root': 'Root', 'eka': 'Ekajuk', 'akk': 'Akkadian', 'dra': 'Dravidian (Other)', 'jrb': 'Judeo-Arabic', 'sgn': 'Sign Languages', 'sga': 'Irish, Old (to 900)', 'apa': 'Apache Languages', 'bra': 'Braj', 'chb': 'Chibcha', 'chg': 'Chagatai', 'chk': 'Chuukese', 'chm': 'Mari', 'chn': 'Chinook Jargon', 'cho': 'Choctaw', 'chp': 'Chipewyan', 'chr': 'Cherokee', 'chy': 'Cheyenne', 'ti': 'Tigrinya', 'vot': 'Votic', 'mg': 'Malagasy', 'iba': 'Iban', 'mo': 'Moldavian', 'mn': 'Mongolian', 'mi': 'Maori', 'mh': 'Marshallese', 'mk': 'Macedonian', 'mt': 'Maltese', 'cai': 'Central American Indian (Other)', 'del': 'Delaware', 'ms': 'Malay', 'mr': 'Marathi', 'my': 'Burmese', 'cad': 'Caddo', 'tai': 'Tai (Other)', 'afh': 'Afrihili', 'sit': 'Sino-Tibetan (Other)', 'enm': 'English, Middle (1100-1500)', 'csb': 'Kashubian', 'nyn': 'Nyankole', 'nyo': 'Nyoro', 'nym': 'Nyamwezi', 'sio': 'Siouan Languages', 'map': 'Austronesian', 'mas': 'Masai', 'lah': 'Lahnda', 'lad': 'Ladino', 'fy': 'Frisian', 'snk': 'Soninke', 'fa': 'Persian', 'mad': 'Madurese', 'mag': 'Magahi', 'mai': 'Maithili', 'fi': 'Finnish', 'fj': 'Fijian', 'man': 'Mandingo', 'egy': 'Egyptian (Ancient)', 'znd': 'Zande', 'ss': 'Swati', 'sr': 'Serbian', 'sq': 'Albanian', 'sw': 'Swahili', 'sv': 'Swedish', 'su': 'Sundanese', 'st': 'Sotho, Southern', 'sk': 'Slovak', 'si': 'Sinhalese', 'sh': 'Serbo-Croatian', 'so': 'Somali', 'sn': 'Shona', 'sm': 'Samoan', 'sl': 'Slovenian', 'sc': 'Sardinian', 'sa': 'Sanskrit', 'sg': 'Sango', 'se': 'Northern Sami', 'sd': 'Sindhi', 'zen': 'Zenaga', 'kbd': 'Kabardian', 'afa': 'Afro-Asiatic (Other)', 'lg': 'Ganda', 'lb': 'Luxembourgish', 'fiu': 'Finno - Ugrian (Other)', 'ln': 'Lingala', 'lo': 'Lao', 'li': 'Limburgish', 'byn': 'Blin', 'lt': 'Lithuanian', 'lu': 'Luba-Katanga', 'yi': 'Yiddish', 'non': 'Norse, Old', 'ceb': 'Cebuano', 'yo': 'Yoruba', 'nog': 'Nogai', 'bat': 'Baltic (Other)', 'dak': 'Dakota', 'dar': 'Dargwa', 'day': 'Dayak', 'ssa': 'Nilo-Saharam (Other)', 'kpe': 'Kpelle', 'el': 'Greek', 'eo': 'Esperanto', 'en': 'English', 'lam': 'Lamba', 'ee': 'Ewe', 'mdf': 'Moksha', 'fr': 'French', 'mdr': 'Mandar', 'et': 'Estonian', 'es': 'Spanish', 'ru': 'Russian', 'gon': 'Gondi', 'goh': 'German, Old High (ca.750-1050)', 'sms': 'Skolt Sami', 'smn': 'Inari Sami', 'smj': 'Lule Sami', 'smi': 'Sami languages (Other)', 'got': 'Gothic', 'rn': 'Rundi', 'ro': 'Romanian', 'dsb': 'Lower Sorbian', 'sma': 'Southern Sami', 'gor': 'Gorontalo', 'ast': 'Asturian', 'wal': 'Walamo', 'crh': 'Crimean Turkish; Crimean Tatar', 'ath': 'Athapascan Languages', 'gez': 'Geez', 'xh': 'Xhosa', 'ff': 'Fulah', 'mak': 'Makasar', 'zap': 'Zapotec', 'kok': 'Konkani', 'kos': 'Kosraean', 'fo': 'Faroese', 'tog': 'Tonga (Nyasa)', 'hup': 'Hupa', 'udm': 'Udmurt', 'bej': 'Beja', 'bem': 'Bemba', 'tsi': 'Tsimshian', 'ber': 'Berber', 'nzi': 'Nzima', 'sai': 'South American Indian (Other)', 'ang': 'English, Old (ca.450-1100)', 'pra': 'Prakrit Languages', 'bho': 'Bhojpuri', 'sal': 'Salishan languages', 'pro': u'Proven\xe7al, Old (to 1500)', 'raj': 'Rajasthani', 'sad': 'Sandawe', 'rar': 'Rarotongan', 'rap': 'Rapanui', 'sas': 'Sasak', 'car': 'Carib', 'min': 'Minangkabau', 'mic': 'Micmac', 'efi': 'Efik', 'arn': 'Araucanian', 'ypk': 'Yupik Languages', 'mis': 'Miscellaneous Languages', 'kac': 'Kachin', 'kab': 'Kabyle', 'kaa': 'Kara-Kalpak', 'kam': 'Kamba', 'kar': 'Karen', 'kaw': 'Kawi', 'tyv': 'Tuvinian', 'awa': 'Awadhi', 'ka': 'Georgian', 'doi': 'Dogri', 'kg': 'Kongo', 'kk': 'Kazakh', 'kj': 'Kuanyama', 'ki': 'Kikuyu', 'ko': 'Korean', 'kn': 'Kannada', 'km': 'Khmer', 'kl': 'Kalaallisut', 'ks': 'Kashmiri', 'kr': 'Kanuri', 'kw': 'Cornish', 'kv': 'Komi', 'ku': 'Kurdish', 'ky': 'Kirghiz', 'tkl': 'Tokelau', 'bua': 'Buriat', 'mga': 'Irish, Middle (900-1200)', 'hit': 'Hittite', 'dyu': 'Dyula', 'de': 'German', 'da': 'Danish', 'dz': 'Dzongkha', 'ira': 'Iranian', 'dv': 'Divehi', 'hil': 'Hiligaynon', 'him': 'Himachali', 'gem': 'Germanic (Other)', 'crp': 'Creoles and Pidgins (Other)', 'qu': 'Quechua', 'bas': 'Basa', 'gba': 'Gbaya', 'bad': 'Banda', 'ban': 'Balinese', 'bal': 'Baluchi', 'bam': 'Bambara', 'shn': 'Shan', 'bai': 'Bamileke Languages', 'arp': 'Arapaho', 'art': 'Artificial (Other)', 'arw': 'Arawak', 'arc': 'Aramaic', 'sem': 'Semitic (Other)', 'sel': 'Selkup', 'nub': 'Nubian Languages', 'btk': 'Batak', 'lus': 'Lushai', 'mus': 'Creek', 'lua': 'Luba-Lulua', 'iro': 'Iroquoian languages', 'lui': 'Luiseno', 'mun': 'Munda Languages', 'lun': 'Lunda', 'luo': 'Luo', 'wa': 'Walloon', 'tup': 'Tupi languages', 'jv': 'Javanese', 'tut': 'Altaic (Other)', 'tum': 'Tumbuka', 'ja': 'Japanese', 'cop': 'Coptic', 'ilo': 'Iloko', 'la': 'Latin', 'gwi': "Gwich'in", 'und': 'Undetermined', 'tli': 'Tlingit', 'ch': 'Chamorro', 'co': 'Corsican', 'ca': 'Catalan', 'ce': 'Chechen', 'pon': 'Pohnpeian', 'cy': 'Welsh', 'sah': 'Yakut', 'cs': 'Czech', 'cr': 'Cree', 'bnt': 'Bantu', 'cv': 'Chuvash', 'cu': 'Church Slavic', 'lv': 'Latvian', 'dum': 'Dutch, Middle (ca. 1050-1350)', 'pt': 'Portuguese', 'dua': 'Duala', 'fro': 'French, Old (842-ca.1400)', 'yap': 'Yapese', 'frm': 'French, Middle (ca.1400-1600)', 'tiv': 'Tiv', 'yao': 'Yao', 'pa': 'Punjabi', 'xal': 'Kalmyk', 'pi': 'Pali', 'pl': 'Polish', 'gay': 'Gayo', 'oto': 'Otomian Languages', 'ota': 'Turkish, Ottoman (1500-1928)', 'hmn': 'Hmong', 'an': 'Aragonese', 'gaa': 'Ga', 'fur': 'Friulian', 'khi': 'Khoisan (Other)', 'sla': 'Slavic (Other)', 've': 'Venda', 'vi': 'Vietnamese', 'is': 'Icelandic', 'kho': 'Khotanese', 'iu': 'Inuktitut', 'it': 'Italian', 'vo': u'Volap\xfck', 'ii': 'Sichuan Yi', 'ik': 'Inupiaq', 'io': 'Ido', 'ine': 'Indo-European (Other)', 'ia': 'Interlingua', 'jpr': 'Judeo-Persian', 'ie': 'Interlingue', 'id': 'Indonesian', 'ig': 'Igbo', 'pap': 'Papiamento', 'ewo': 'Ewondo', 'pau': 'Palauan', 'paa': 'Papuan (Other)', 'pag': 'Pangasinan', 'sat': 'Santali', 'pal': 'Pahlavi', 'pam': 'Pampanga', 'phi': 'Philippine (Other)', 'cel': 'Celtic (Other)', 'phn': 'Phoenician', 'nic': 'Niger - Kordofanian (Other)', 'nia': 'Nias', 'dgr': 'Dogrib', 'syr': 'Syriac', 'niu': 'Niuean', 'jbo': 'Lojban', 'nah': 'Nahuatl', 'sam': 'Samaritan Aramaic', 'hai': 'Haida', 'gmh': 'German, Middle High (ca.1050-1500)', 'cus': 'Cushitic (Other)', 'wen': 'Sorbian Languages', 'ady': 'Adyghe', 'elx': 'Elamite', 'ada': 'Adangme', 'haw': 'Hawaiian', 'bin': 'Bini', 'bik': 'Bikol', 'mos': 'Mossi', 'moh': 'Mohawk', 'tl': 'Tagalog', 'tvl': 'Tuvalu', 'ijo': 'Ijo', 'kmb': 'Kimbundu', 'peo': 'Persian Old (ca.600-400 B.C.)', 'umb': 'Umbundu', 'tmh': 'Tamashek', 'fon': 'Fon', 'hsb': 'Upper Sorbian', 'be': 'Belarusian', 'bg': 'Bulgarian', 'ba': 'Bashkir', 'ps': 'Pashto (Pushto)', 'bm': 'Bambara', 'bn': 'Bengali', 'bo': 'Tibetan', 'bh': 'Bihari', 'bi': 'Bislama', 'br': 'Breton', 'bs': 'Bosnian', 'om': 'Oromo', 'oj': 'Ojibwa', 'ace': 'Achinese', 'ach': 'Acoli', 'oc': u'Occitan (post 1500); Proven\xe7al', 'kru': 'Kurukh', 'srr': 'Serer', 'kro': 'Kru', 'krc': 'Karachay-Balkar', 'nds': 'Low German; Low Saxon', 'os': 'Ossetic', 'or': 'Oriya', 'sog': 'Sogdien', 'nso': 'Sotho, Northern', 'son': 'Songhai', 'vai': 'Vai', 'wak': 'Wakashan Languages', 'lol': 'Mongo', 'mkh': 'Mon-Khmer (Other)', 'loz': 'Lozi', 'gil': 'Gilbertese', 'was': 'Washo', 'war': 'Waray', 'hz': 'Herero', 'hy': 'Armenian', 'sid': 'Sidamo', 'hr': 'Croatian', 'ht': 'Haitian', 'hu': 'Hungarian', 'hi': 'Hindi', 'ho': 'Hiri Motu', 'ha': 'Hausa', 'bug': 'Buginese', 'he': 'Hebrew', 'uz': 'Uzbek', 'ur': 'Urdu', 'uk': 'Ukrainian', 'ug': 'Uighur', 'aa': 'Afar', 'ab': 'Abkhazian', 'ae': 'Avestan', 'af': 'Afrikaans', 'ak': 'Akan', 'am': 'Amharic', 'myv': 'Erzya', 'eu': 'Basque', 'as': 'Assamese', 'ar': 'Arabic', 'inh': 'Ingush', 'tpi': 'Tok Pisin', 'myn': 'Mayan', 'ay': 'Aymara', 'kha': 'Khasi', 'az': 'Azerbaijani', 'inc': 'Indic (Other)', 'nl': 'Dutch', 'nn': 'Norwegian Nynorsk', 'no': 'Norwegian', 'na': 'Nauru', 'nb': u'Norwegian Bokm\xe5l', 'nai': 'North American Indian (Other)', 'nd': 'Ndebele, North', 'ne': 'Nepali', 'ng': 'Ndonga', 'ny': 'Nyanja; Chichewa; Chewa', 'nap': 'Neapolitan', 'grb': 'Gerbo', 'grc': 'Greek, Ancient (to 1453)', 'nr': 'Ndebele, South', 'tig': 'Tigre', 'nv': 'Navajo', 'zun': 'Zuni', 'rw': 'Kinyarwanda', 'cpe': 'Creoles and Pidgins, English-based (Other)', 'cpf': 'Creoles and Pidgins, French-based (Other)', 'cpp': 'Creoles and pidgins, Portuguese-based (Other)'} countries={'BD': 'Bangladesh', 'BE': 'Belgium', 'BF': 'Burkina Faso', 'BG': 'Bulgaria', 'BA': 'Bosnia and Herzegovina', 'BB': 'Barbados', 'WF': 'Wallis and Futuna', 'BM': 'Bermuda', 'BN': 'Brunei', 'BO': 'Bolivia', 'BH': 'Bahrain', 'BI': 'Burundi', 'BJ': 'Benin', 'BT': 'Bhutan', 'JM': 'Jamaica', 'BV': 'Bouvet Island', 'BW': 'Botswana', 'WS': 'Samoa', 'BR': 'Brazil', 'BS': 'Bahamas', 'BY': 'Belarus', 'BZ': 'Belize', 'RU': 'Russia', 'RW': 'Rwanda', 'TL': 'Timor-Leste', 'RE': u'R\xe9union', 'TM': 'Turkmenistan', 'TJ': 'Tajikistan', 'RO': 'Romania', 'TK': 'Tokelau', 'GW': 'Guinea-Bissau', 'GU': 'Guam', 'GT': 'Guatemala', 'GS': 'South Georgia and South Sandwich Islands', 'GR': 'Greece', 'GQ': 'Equatorial Guinea', 'GP': 'Guadeloupe', 'JP': 'Japan', 'GY': 'Guyana', 'GF': 'French Guiana', 'GE': 'Georgia', 'GD': 'Grenada', 'GB': 'United Kingdom', 'GA': 'Gabon', 'SV': 'El Salvador', 'GN': 'Guinea', 'GM': 'Gambia', 'GL': 'Greenland', 'GI': 'Gibraltar', 'GH': 'Ghana', 'OM': 'Oman', 'TN': 'Tunisia', 'JO': 'Jordan', 'SP': 'Serbia', 'HR': 'Croatia', 'HT': 'Haiti', 'HU': 'Hungary', 'HK': 'Hong Kong S.A.R., China', 'HN': 'Honduras', 'HM': 'Heard Island and McDonald Islands', 'VE': 'Venezuela', 'PR': 'Puerto Rico', 'PS': 'Palestinian Territory', 'PW': 'Palau', 'PT': 'Portugal', 'SJ': 'Svalbard and Jan Mayen', 'PY': 'Paraguay', 'IQ': 'Iraq', 'PA': 'Panama', 'PF': 'French Polynesia', 'PG': 'Papua New Guinea', 'PE': 'Peru', 'PK': 'Pakistan', 'PH': 'Philippines', 'PN': 'Pitcairn', 'PL': 'Poland', 'PM': 'Saint Pierre and Miquelon', 'ZM': 'Zambia', 'EH': 'Western Sahara', 'EE': 'Estonia', 'EG': 'Egypt', 'ZA': 'South Africa', 'EC': 'Ecuador', 'IT': 'Italy', 'VN': 'Vietnam', 'SB': 'Solomon Islands', 'ET': 'Ethiopia', 'SO': 'Somalia', 'ZW': 'Zimbabwe', 'SA': 'Saudi Arabia', 'ES': 'Spain', 'ER': 'Eritrea', 'MD': 'Moldova', 'MG': 'Madagascar', 'MA': 'Morocco', 'MC': 'Monaco', 'UZ': 'Uzbekistan', 'MM': 'Myanmar', 'ML': 'Mali', 'MO': 'Macao S.A.R. China', 'MN': 'Mongolia', 'MH': 'Marshall Islands', 'MK': 'Macedonia', 'MU': 'Mauritius', 'MT': 'Malta', 'MW': 'Malawi', 'MV': 'Maldives', 'MQ': 'Martinique', 'MP': 'Northern Mariana Islands', 'MS': 'Montserrat', 'MR': 'Mauritania', 'UG': 'Uganda', 'MY': 'Malaysia', 'MX': 'Mexico', 'IL': 'Israel', 'FR': 'France', 'IO': 'British Indian Ocean Territory', 'SH': 'Saint Helena', 'FI': 'Finland', 'FJ': 'Fiji', 'FK': 'Falkland Islands', 'FM': 'Micronesia', 'FO': 'Faroe Islands', 'NI': 'Nicaragua', 'NL': 'Netherlands', 'NO': 'Norway', 'NA': 'Namibia', 'VU': 'Vanuatu', 'NC': 'New Caledonia', 'NE': 'Niger', 'NF': 'Norfolk Island', 'NG': 'Nigeria', 'NZ': 'New Zealand', 'NP': 'Nepal', 'NR': 'Nauru', 'NU': 'Niue', 'CK': 'Cook Islands', 'CI': u"C\xf4te d'Ivoire", 'CH': 'Switzerland', 'CO': 'Colombia', 'CN': 'China', 'CM': 'Cameroon', 'CL': 'Chile', 'CC': 'Cocos Islands', 'CA': 'Canada', 'CG': 'Congo', 'CF': 'Central African Republic', 'CD': 'Democratic Republic of the Congo', 'CZ': 'Czech Republic', 'CY': 'Cyprus', 'CX': 'Christmas Island', 'CR': 'Costa Rica', 'CV': 'Cape Verde', 'CU': 'Cuba', 'SZ': 'Swaziland', 'SY': 'Syria', 'KG': 'Kyrgyzstan', 'KE': 'Kenya', 'SR': 'Suriname', 'KI': 'Kiribati', 'KH': 'Cambodia', 'KN': 'Saint Kitts and Nevis', 'KM': 'Comoros', 'ST': 'Sao Tome and Principe', 'SK': 'Slovakia', 'KR': 'South Korea', 'SI': 'Slovenia', 'KP': 'North Korea', 'KW': 'Kuwait', 'SN': 'Senegal', 'SM': 'San Marino', 'SL': 'Sierra Leone', 'SC': 'Seychelles', 'KZ': 'Kazakhstan', 'KY': 'Cayman Islands', 'SG': 'Singapore', 'SE': 'Sweden', 'SD': 'Sudan', 'DO': 'Dominican Republic', 'DM': 'Dominica', 'DJ': 'Djibouti', 'DK': 'Denmark', 'VG': 'British Virgin Islands', 'DE': 'Germany', 'YE': 'Yemen', 'DZ': 'Algeria', 'US': 'United States', 'UY': 'Uruguay', 'YU': 'Yugoslavia', 'YT': 'Mayotte', 'UM': 'United States Minor Outlying Islands', 'LB': 'Lebanon', 'LC': 'Saint Lucia', 'LA': 'Laos', 'TV': 'Tuvalu', 'TW': 'Taiwan', 'TT': 'Trinidad and Tobago', 'TR': 'Turkey', 'LK': 'Sri Lanka', 'LI': 'Liechtenstein', 'LV': 'Latvia', 'TO': 'Tonga', 'LT': 'Lithuania', 'LU': 'Luxembourg', 'LR': 'Liberia', 'LS': 'Lesotho', 'TH': 'Thailand', 'TF': 'French Southern Territories', 'TG': 'Togo', 'TD': 'Chad', 'TC': 'Turks and Caicos Islands', 'LY': 'Libya', 'VA': 'Vatican', 'VC': 'Saint Vincent and the Grenadines', 'AE': 'United Arab Emirates', 'AD': 'Andorra', 'AG': 'Antigua and Barbuda', 'AF': 'Afghanistan', 'AI': 'Anguilla', 'VI': 'U.S. Virgin Islands', 'IS': 'Iceland', 'IR': 'Iran', 'AM': 'Armenia', 'AL': 'Albania', 'AO': 'Angola', 'AN': 'Netherlands Antilles', 'AQ': 'Antarctica', 'AS': 'American Samoa', 'AR': 'Argentina', 'AU': 'Australia', 'AT': 'Austria', 'AW': 'Aruba', 'IN': 'India', 'TZ': 'Tanzania', 'AZ': 'Azerbaijan', 'IE': 'Ireland', 'ID': 'Indonesia', 'UA': 'Ukraine', 'QA': 'Qatar', 'MZ': 'Mozambique'} months=['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] abbrMonths=['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] days=['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'] abbrDays=['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] dateFormats={'medium': '%d %%(abbrmonthname)s,%y', 'full': '%%(dayname)s %d %%(monthname)s %Y', 'long': '%d %%(monthname)s %Y', 'short': '%d/%m/%Y'} numericSymbols={'group': ',', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': '.', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'} PKA>ZZturbogears/i18n/data/en_ZW.pyc; ȸHIc @s#hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd~***PKK9p#@@turbogears/i18n/data/eo.py# Formatting configuration for locale eo languages={'gu': u'gu\u011darata', 'gd': 'gaela', 'ga': 'irlanda', 'gn': 'gvarania', 'gl': 'galega', 'la': 'latino', 'ln': 'lingala', 'lo': u'la\u016da', 'tt': 'tatara', 'tr': 'turka', 'ts': 'conga', 'lv': 'latva', 'to': 'tongaa', 'lt': 'litova', 'tk': 'turkmena', 'th': 'taja', 'ti': 'tigraja', 'tg': u'ta\u011dika', 'te': 'telugua', 'ta': 'tamila', 'yi': 'jida', 'yo': 'joruba', 'de': 'germana', 'da': 'dana', 'dz': 'dzonko', 'st': 'sota', 'qu': u'ke\u0109ua', 'el': 'greka', 'eo': 'esperanto', 'en': 'angla', 'zh': u'\u0109ina', 'za': u'\u011duanga', 'uk': 'ukraina', 'eu': u'e\u016dska', 'et': 'estona', 'es': 'hispana', 'ru': 'rusa', 'rw': 'ruanda', 'rm': u'roman\u0109a', 'rn': 'burunda', 'ro': 'rumana', 'bn': 'bengala', 'be': 'belorusa', 'bg': 'bulgara', 'ba': u'ba\u015dkira', 'wo': 'volofa', 'jv': 'java', 'bo': 'tibeta', 'bh': 'bihara', 'bi': 'bislamo', 'br': 'bretona', 'ja': 'japana', 'om': 'oroma', 'oc': 'okcitana', 'tw': 'akana', 'or': 'orijo', 'xh': 'ksosa', 'co': 'korsika', 'ca': 'kataluna', 'cy': 'kimra', 'cs': u'\u0109e\u0125a', 'ps': u'pa\u015dtua', 'pt': 'portugala', 'tl': 'filipina', 'pa': u'pan\u011daba', 'vi': 'vjetnama', 'pl': 'pola', 'hy': 'armena', 'hr': 'kroata', 'iu': 'inuita', 'hu': 'hungara', 'hi': 'hinda', 'ha': u'ha\u016dsa', 'he': 'hebrea', 'mg': 'malagasa', 'uz': 'uzbeka', 'ml': 'malajalama', 'mn': 'mongola', 'mi': 'maoria', 'ik': 'eskima', 'mk': 'makedona', 'ur': 'urduo', 'mt': 'malta', 'ms': 'malaja', 'mr': 'marata', 'ug': 'ujgura', 'my': 'birma', 'aa': 'afara', 'ab': u'ab\u0125aza', 'ss': 'svazia', 'af': 'afrikansa', 'tn': 'cvana', 'sw': 'svahila', 'is': 'islanda', 'am': 'amhara', 'it': 'itala', 'sv': 'sveda', 'ia': 'interlingvao', 'as': 'asama', 'ar': 'araba', 'su': 'sunda', 'zu': 'zulua', 'ay': 'ajmara', 'az': u'azerbaj\u011dana', 'ie': 'okcidentalo', 'id': 'indonezia', 'sk': 'slovaka', 'nl': 'nederlanda', 'no': 'norvega', 'na': 'naura', 'ne': 'nepala', 'vo': 'volapuko', 'fr': 'franca', 'sm': 'samoa', 'fy': 'frisa', 'fa': 'persa', 'fi': 'finna', 'fj': u'fi\u011dia', 'sa': 'sanskrito', 'fo': 'feroa', 'ka': 'kartvela', 'kk': u'kaza\u0125a', 'sr': 'serba', 'sq': 'albana', 'ko': 'korea', 'kn': 'kanara', 'km': 'kmera', 'kl': 'gronlanda', 'ks': u'ka\u015dmira', 'si': 'sinhala', 'sh': 'serbo-Kroata', 'so': 'somala', 'sn': u'\u015dona', 'ku': 'kurda', 'sl': 'slovena', 'ky': 'kirgiza', 'sg': 'sangoa', 'sd': 'sinda'} countries={'BD': u'Banglade\u015do', 'BE': 'Belgujo', 'BF': 'Burkino', 'BG': 'Bulgarujo', 'BA': 'Bosnio-Hercegovino', 'BB': 'Barbado', 'WF': 'Valiso kaj Futuno', 'BM': 'Bermudoj', 'BN': 'Brunejo', 'BO': 'Bolivio', 'BH': 'Barejno', 'BI': 'Burundo', 'BJ': 'Benino', 'BT': 'Butano', 'JM': 'Jamajko', 'BW': 'Bocvano', 'WS': 'Samoo', 'BR': 'Brazilo', 'BS': 'Bahamoj', 'BY': 'Belorusujo', 'BZ': 'Belizo', 'RU': 'Rusujo', 'RW': 'Ruando', 'RE': 'Reunio', 'TM': 'Turkmenujo', 'TJ': u'Ta\u011dikujo', 'RO': 'Rumanujo', 'GW': u'Gvineo-Bisa\u016do', 'GU': 'Gvamo', 'GT': 'Gvatemalo', 'GS': u'Sud-Georgio kaj Sud-Sandvi\u0109insuloj', 'GR': 'Grekujo', 'GQ': 'Ekvatora Gvineo', 'GP': 'Gvadelupo', 'JP': 'Japanujo', 'GY': 'Gujano', 'GF': 'Franca Gviano', 'GE': 'Kartvelujo', 'GD': 'Grenado', 'GB': u'Unui\u011dinta Re\u011dlando', 'GA': 'Gabono', 'SV': 'Salvadoro', 'GN': 'Gvineo', 'GM': 'Gambio', 'GL': 'Gronlando', 'GI': u'\u011cibraltaro', 'GH': 'Ganao', 'OM': 'Omano', 'TN': 'Tunizio', 'JO': 'Jordanio', 'SP': 'Serbujo', 'HR': 'Kroatujo', 'HT': 'Haitio', 'HU': 'Hungarujo', 'HN': 'Honduro', 'HM': 'Herda kaj Makdonaldaj Insuloj', 'VE': 'Venezuelo', 'PR': 'Puerto-Riko', 'PW': u'Bela\u016do', 'PT': 'Portugalujo', 'SJ': 'Svalbardo kaj Jan-Majen-insulo', 'PY': 'Paragvajo', 'IQ': 'Irako', 'PA': 'Panamo', 'PF': 'Franca Polinezio', 'PG': 'Papuo-Nov-Gvineo', 'PE': 'Peruo', 'PK': 'Pakistano', 'PH': 'Filipinoj', 'PN': 'Pitkarna Insulo', 'PL': 'Pollando', 'PM': 'Sent-Piero kaj Mikelono', 'ZM': 'Zambio', 'EH': 'Okcidenta Saharo', 'EE': 'Estonujo', 'EG': 'Egipto', 'ZA': 'Sud-Afriko', 'EC': 'Ekvadoro', 'IT': 'Italujo', 'VN': 'Vjetnamo', 'SB': 'Salomonoj', 'ET': 'Etiopujo', 'SO': 'Somalujo', 'ZW': 'Zimbabvo', 'SA': u'Sa\u016dda Arabujo', 'ES': 'Hispanujo', 'ER': 'Eritreo', 'MD': 'Moldavujo', 'MG': 'Madagaskaro', 'MA': 'Maroko', 'MC': 'Monako', 'UZ': 'Uzbekujo', 'MM': 'Mjanmao', 'ML': 'Malio', 'MN': 'Mongolujo', 'MH': u'Mar\u015daloj', 'MK': 'Makedonujo', 'MU': u'Ma\u016dricio', 'MT': 'Malto', 'MW': 'Malavio', 'MV': 'Maldivoj', 'MQ': 'Martiniko', 'MP': 'Nord-Marianoj', 'MR': u'Ma\u016dritanujo', 'UG': 'Ugando', 'MY': 'Malajzio', 'MX': 'Meksiko', 'IL': 'Israelo', 'FR': 'Francujo', 'IO': 'Brita Hindoceana Teritorio', 'SH': 'Sent-Heleno', 'FI': 'Finnlando', 'FJ': u'Fi\u011doj', 'FM': 'Mikronezio', 'FO': 'Ferooj', 'NI': 'Nikaragvo', 'NL': 'Nederlando', 'NO': 'Norvegujo', 'NA': 'Namibio', 'VU': 'Vanuatuo', 'NC': 'Nov-Kaledonio', 'NE': u'Ni\u011dero', 'NF': 'Norfolkinsulo', 'NG': u'Ni\u011derio', 'NZ': 'Nov-Zelando', 'NP': 'Nepalo', 'NR': 'Nauro', 'NU': 'Niuo', 'CK': 'Kukinsuloj', 'CI': 'Ebur-Bordo', 'CH': 'Svisujo', 'CO': 'Kolombio', 'CN': u'\u0108inujo', 'CM': 'Kameruno', 'CL': u'\u0108ilio', 'CA': 'Kanado', 'CG': 'Kongolo', 'CF': 'Centr-Afrika Respubliko', 'CZ': u'\u0108e\u0125ujo', 'CY': 'Kipro', 'CR': 'Kostariko', 'CV': 'Kabo-Verdo', 'CU': 'Kubo', 'SZ': 'Svazilando', 'SY': 'Sirio', 'KG': 'Kirgizistano', 'KE': 'Kenjo', 'SR': 'Surinamo', 'KI': 'Kiribato', 'KH': u'Kambo\u011do', 'KN': 'Sent-Kristofo kaj Neviso', 'KM': 'Komoroj', 'ST': 'Sao-Tomeo kaj Principeo', 'SK': 'Slovakujo', 'KR': 'Sud-Koreo', 'SI': 'Slovenujo', 'KP': 'Nord-Koreo', 'KW': 'Kuvajto', 'SN': 'Senegalo', 'SM': 'San-Marino', 'SL': 'Siera-Leono', 'SC': u'Sej\u015deloj', 'KZ': u'Kaza\u0125stano', 'KY': 'Kejmanoj', 'SG': 'Singapuro', 'SE': 'Svedujo', 'SD': 'Sudano', 'DO': 'Domingo', 'DM': 'Dominiko', 'DJ': u'\u011cibutio', 'DK': 'Danujo', 'VG': 'Britaj Virgulininsuloj', 'DE': 'Germanujo', 'YE': 'Jemeno', 'DZ': u'Al\u011derio', 'US': 'Usono', 'UY': 'Urugvajo', 'YT': 'Majoto', 'UM': 'Usonaj malgrandaj insuloj', 'LB': 'Libano', 'LC': 'Sent-Lucio', 'LA': 'Laoso', 'TV': 'Tuvalo', 'TW': 'Tajvano', 'TT': 'Trinidado kaj Tobago', 'TR': 'Turkujo', 'LK': 'Sri-Lanko', 'LI': u'Li\u0125ten\u015dtejno', 'LV': 'Latvujo', 'TO': 'Tongo', 'LT': 'Litovujo', 'LU': 'Luksemburgo', 'LR': 'Liberio', 'LS': 'Lesoto', 'TH': 'Tajlando', 'TG': 'Togolo', 'TD': u'\u0108ado', 'LY': 'Libio', 'VA': 'Vatikano', 'VC': 'Sent-Vincento kaj la Grenadinoj', 'AE': u'Unui\u011dintaj Arabaj Emirlandos', 'AD': 'Andoro', 'AG': 'Antigvo-Barbudo', 'AF': 'Afganujo', 'AI': 'Angvilo', 'VI': 'Usonaj Virgulininsuloj', 'IS': 'Islando', 'IR': 'Irano', 'AM': 'Armenujo', 'AL': 'Albanujo', 'AO': 'Angolo', 'AN': 'Nederlandaj Antiloj', 'AQ': 'Antarkto', 'AR': 'Argentino', 'AU': u'A\u016dstralio', 'AT': u'A\u016dstrujo', 'AW': 'Arubo', 'IN': 'Hindujo', 'TZ': 'Tanzanio', 'AZ': u'Azerbaj\u011dano', 'IE': 'Irlando', 'ID': 'Indonezio', 'UA': 'Ukrajno', 'QA': 'Kataro', 'MZ': 'Mozambiko'} months=['januaro', 'februaro', 'marto', 'aprilo', 'majo', 'junio', 'julio', u'a\u016dgusto', 'septembro', 'oktobro', 'novembro', 'decembro'] abbrMonths=['jan', 'feb', 'mar', 'apr', 'maj', 'jun', 'jul', u'a\u016dg', 'sep', 'okt', 'nov', 'dec'] days=['lundo', 'mardo', 'merkredo', u'\u0135a\u016ddo', 'vendredo', 'sabato', u'diman\u0109o'] abbrDays=['lu', 'ma', 'me', u'\u0135a', 've', 'sa', 'di'] dateFormats={'medium': '%Y-%%(abbrmonthname)s-%d', 'full': '%%(dayname)s, %d-a de %%(monthname)s %Y', 'long': '%Y-%%(monthname)s-%d', 'short': '%y-%m-%d'} numericSymbols={'group': u'\xa0', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': ',', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'} PKA>&//turbogears/i18n/data/eo.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddYă00turbogears/i18n/data/es.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d.<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd1R00turbogears/i18n/data/es_AR.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d.<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddQ%00turbogears/i18n/data/es_BO.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d.<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd0'00turbogears/i18n/data/es_CL.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d.<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd*W00turbogears/i18n/data/es_CO.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d.<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd[00turbogears/i18n/data/es_CR.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d.<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd_4300turbogears/i18n/data/es_DO.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d.<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddYIw00turbogears/i18n/data/es_EC.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d.<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddX&00turbogears/i18n/data/es_ES.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d.<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd/Q00turbogears/i18n/data/es_GT.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d.<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd%X00turbogears/i18n/data/es_HN.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d.<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd9X00turbogears/i18n/data/es_MX.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d.<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd200turbogears/i18n/data/es_NI.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d.<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddE00turbogears/i18n/data/es_PA.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d.<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddD @00turbogears/i18n/data/es_PE.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d.<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd Of00turbogears/i18n/data/es_PR.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d.<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddj00turbogears/i18n/data/es_PY.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d.<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd\f00turbogears/i18n/data/es_SV.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d.<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddՇ00turbogears/i18n/data/es_US.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d.<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd,00turbogears/i18n/data/es_UY.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d.<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddƨ00turbogears/i18n/data/es_VE.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d.<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd A%%turbogears/i18n/data/et.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;d?<d@dA<dBd%<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsd<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd/<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd!<dd<dd<dd<dd <dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d-<d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJd<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dad<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd7<dd<dd<dd<dd<dd+<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM|=4%%turbogears/i18n/data/et_EE.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;d?<d@dA<dBd%<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsd<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd/<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd!<dd<dd<dd<dd <dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d-<d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJd<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dad<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd7<dd<dd<dd<dd<dd+<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdMrrturbogears/i18n/data/eu.py# Formatting configuration for locale eu languages={'eu': 'euskara'} countries={'ES': 'Espainia'} months=['urtarrila', 'otsaila', 'martxoa', 'apirila', 'maiatza', 'ekaina', 'uztaila', 'abuztua', 'iraila', 'urria', 'azaroa', 'abendua'] abbrMonths=['urt', 'ots', 'mar', 'api', 'mai', 'eka', 'uzt', 'abu', 'ira', 'urr', 'aza', 'abe'] days=['astelehena', 'asteartea', 'asteazkena', 'osteguna', 'ostirala', 'larunbata', 'igandea'] abbrDays=['al', 'as', 'az', 'og', 'or', 'lr', 'ig'] dateFormats={'medium': '%Y %%(abbrmonthname)s %d ', 'full': '%%(dayname)s, %Y %%(monthname)s %d ', 'long': '%Y %%(monthname)s %d ', 'short': '%y/%m/%d'} numericSymbols={'group': '.', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': ',', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'} PKA>cturbogears/i18n/data/eu.pyc; ȸHIc @sHhddd?<d@dA<dBdC<dDdE<dFdG<dHdI|turbogears/i18n/data/eu_ES.pyc; ȸHIc @sHhddd?<d@dA<dBdC<dDdE<dFdG<dHdI5%%CHCHturbogears/i18n/data/fa.pyc; ȸHIc @shdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd3<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdtturbogears/i18n/data/fa_AF.pyc; ȸHIc @sShdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddLDwPHPHturbogears/i18n/data/fa_IR.pyc; ȸHIc @shdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd3<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt DR+R+turbogears/i18n/data/fi.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dddddd0dgZhdd<dd<dd<dd(U+U+turbogears/i18n/data/fi_FI.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dddddd0dgZhdd<dd<dd<dduպAturbogears/i18n/data/fo.pyc; ȸHIc @sHhdd<d?d@<dAdB<dCdD<dEdF<dGdH&gturbogears/i18n/data/fo_FO.pyc; ȸHIc @sHhdd<d?d@<dAdB<dCdD<dEdF<dGdHF~A8A8turbogears/i18n/data/fr.pyc; ȸHIc @sBhdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdud?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddF<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdVZYC8C8turbogears/i18n/data/fr_BE.pyc; ȸHIc @sBhdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdud?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddF<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV'8'8turbogears/i18n/data/fr_CA.pyc; ȸHIc @sBhdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdud?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddF<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdVD8D8turbogears/i18n/data/fr_CH.pyc; ȸHIc @sBhdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdud?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddF<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV.sFD8D8turbogears/i18n/data/fr_FR.pyc; ȸHIc @sBhdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdud?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddF<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV C8C8turbogears/i18n/data/fr_LU.pyc; ȸHIc @sBhdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdud?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddF<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV{C4C4turbogears/i18n/data/ga.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddvSB4B4turbogears/i18n/data/ga_IE.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddEyyturbogears/i18n/data/gl.py# Formatting configuration for locale gl languages={'gl': 'galego'} countries={'ES': u'Espa\xf1a'} months=['Xaneiro', 'Febreiro', 'Marzo', 'Abril', 'Maio', u'Xu\xf1o', 'Xullo', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Decembro'] abbrMonths=['Xan', 'Feb', 'Mar', 'Abr', 'Mai', u'Xu\xf1', 'Xul', 'Ago', 'Set', 'Out', 'Nov', 'Dec'] days=['Luns', 'Martes', u'M\xe9rcores', 'Xoves', 'Venres', u'S\xe1bado', 'Domingo'] abbrDays=['Lun', 'Mar', u'M\xe9r', 'Xov', 'Ven', u'S\xe1b', 'Dom'] dateFormats={'medium': '%Y %%(abbrmonthname)s %d ', 'full': '%%(dayname)s, %Y %%(monthname)s %d ', 'long': '%Y %%(monthname)s %d ', 'short': '%y/%m/%d'} numericSymbols={'group': '.', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': ',', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'} PKA>turbogears/i18n/data/gl.pyc; ȸHIc @sHhdd<d?d@<dAdB<dCdD<dEdF<dGdHturbogears/i18n/data/gl_ES.pyc; ȸHIc @sHhdd<d?d@<dAdB<dCdD<dEdF<dGdH'Lturbogears/i18n/data/gu.pyc; ȸHIc @sHhddd?<d@dA<dBdC`#M  turbogears/i18n/data/gu_IN.pyc; ȸHIc @sHhddd?<d@dA<dBdC33turbogears/i18n/data/gv.pyc; ȸHIc @s5hdd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d!d!<d"d"<d#d#<d$d$<d%d%<d&d&<d'd'<d(d(<d)d)<d*d*<d+d+<d,d,<d-d-<d.d.<d/d/<d0d0<d1d1<d2d2<d3d3<d4d4<d5d5<d6d6<d7d7<d8d8<d9d9<d:d:<d;d;<d<d<<d=d=<d>d><d?d?<d@d@<dAdA<dBdB<dCdC<dDdD<dEdE<dFdF<dGdG<dHdH<dIdI<dJdJ<dKdK<dLdL<dMdM<dNdN<dOdO<dPdP<dQdQ<dRdR<dSdS<dTdT<dUdU<dVdV<dWdW<dXdX<dYdY<dZdZ<d[d[<d\d\<d]d]<d^d^<d_d_<d`d`<dada<dbdb<dcdc<dddd<dede<dfdf<dgdg<dhdh<didi<djdj<dkdk<dldl<dmdm<dndn<dodo<dpdp<dqdq<drdr<dsds<dtdt<dudu<dvdv<dwdw<dxdx<dydy<dzdz<d{d{<d|d|<d}d}<d~d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d!d!<d"d"<d#d#<d$d$<d%d%<d&d&<d'd'<d(d(<d)d)<d*d*<d+d+<d,d,<d-d-<d.d.<d/d/<d0d0<d1d1<d2d2<d3d3<d4d4<d5d5<d6d6<d7d7<d8d8<d9d9<d:d:<d;d;<d<d<<d=d=<d>d><d?d?<d@d@<dAdA<dBdB<dCdC<dDdD<dEdE<dFdF<dGdG<dHdH<dIdI<dJdJ<dKdK<dLdL<dMdM<dNdN<dOdO<dPdP<dQdQ<dRdR<dSdS<dTdT<dUdU<dVdV<dWdW<dXdX<dYdY<dZdZ<d[d[<d\d\<d]d]<d^d^<d_d_<d`d`<dada<dbdb<dcdc<dddd<dede<dfdf<dgdg<dhdh<didi<djdj<dkdk<dldl<dmdm<dndn<dodo<dpdp<dqdq<drdr<dsds<dtdt<dudu<dvdv<dwdw<dxdx<dydy<dzdz<d{d{<d|d|<d}d}<d~d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<de<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd><d?d?<d@d@<dAdA<dBdB<dCdC<dDdD<dEdE<dFdF<dGdG<dHdH<dIdI<dJdJ<dKdK<dLdL<dMdM<dNdN<dOdO<dPdP<dQdQ<dRdR<dSdS<dTdT<dUdU<dVdV<dWdW<dXdX<dYdY<dZdZ<d[d[<d\d\<d]d]<d^d^<d_d_<d`d`<dada<dbdb<dcdc<dddd<dede<dfdf<dgdg<dhdh<didi<djdj<dkdk<dldl<dmdm<de<dndn<dodo<dpdp<dqdq<drdr<dsds<dtdt<dudu<dvdv<dwdw<dxdx<dydy<dzdz<d{d{<d|d|<d}d}<d~d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd***PKK9tI'I'turbogears/i18n/data/gv_GB.py# Formatting configuration for locale gv_GB languages={'gv': 'gv', 'gu': 'gu', 'rom': 'rom', 'alg': 'alg', 'ale': 'ale', 'sco': 'sco', 'mni': 'mni', 'gd': 'gd', 'ga': 'ga', 'mno': 'mno', 'osa': 'osa', 'gn': 'gn', 'gl': 'gl', 'mwr': 'mwr', 'ty': 'ty', 'tw': 'tw', 'tt': 'tt', 'tr': 'tr', 'ts': 'ts', 'tn': 'tn', 'to': 'to', 'aus': 'aus', 'av': 'av', 'tk': 'tk', 'th': 'th', 'roa': 'roa', 'tg': 'tg', 'te': 'te', 'uga': 'uga', 'ta': 'ta', 'fat': 'fat', 'fan': 'fan', 'wo': 'wo', 'rm': 'rm', 'din': 'din', 'bla': 'bla', 'cmc': 'cmc', 'ml': 'ml', 'zh': 'zh', 'tem': 'tem', 'za': 'za', 'cau': 'cau', 'zu': 'zu', 'ter': 'ter', 'tet': 'tet', 'mnc': 'mnc', 'kut': 'kut', 'suk': 'suk', 'kum': 'kum', 'sus': 'sus', 'new': 'new', 'sux': 'sux', 'den': 'den', 'men': 'men', 'mul': 'mul', 'lez': 'lez', 'root': 'root', 'eka': 'eka', 'akk': 'akk', 'dra': 'dra', 'jrb': 'jrb', 'sgn': 'sgn', 'sga': 'sga', 'apa': 'apa', 'bra': 'bra', 'chb': 'chb', 'chg': 'chg', 'chk': 'chk', 'chm': 'chm', 'chn': 'chn', 'cho': 'cho', 'chp': 'chp', 'chr': 'chr', 'chy': 'chy', 'ti': 'ti', 'vot': 'vot', 'mg': 'mg', 'iba': 'iba', 'mo': 'mo', 'mn': 'mn', 'mi': 'mi', 'mh': 'mh', 'mk': 'mk', 'mt': 'mt', 'cai': 'cai', 'del': 'del', 'ms': 'ms', 'mr': 'mr', 'my': 'my', 'cad': 'cad', 'tai': 'tai', 'afh': 'afh', 'sit': 'sit', 'enm': 'enm', 'csb': 'csb', 'nyn': 'nyn', 'nyo': 'nyo', 'nym': 'nym', 'sio': 'sio', 'map': 'map', 'mas': 'mas', 'lah': 'lah', 'lad': 'lad', 'fy': 'fy', 'snk': 'snk', 'fa': 'fa', 'mad': 'mad', 'mag': 'mag', 'mai': 'mai', 'fi': 'fi', 'fj': 'fj', 'man': 'man', 'egy': 'egy', 'znd': 'znd', 'ss': 'ss', 'sr': 'sr', 'sq': 'sq', 'sw': 'sw', 'sv': 'sv', 'su': 'su', 'st': 'st', 'sk': 'sk', 'si': 'si', 'sh': 'sh', 'so': 'so', 'sn': 'sn', 'sm': 'sm', 'sl': 'sl', 'sc': 'sc', 'sa': 'sa', 'sg': 'sg', 'se': 'se', 'sd': 'sd', 'zen': 'zen', 'kbd': 'kbd', 'afa': 'afa', 'lg': 'lg', 'lb': 'lb', 'fiu': 'fiu', 'ln': 'ln', 'lo': 'lo', 'li': 'li', 'byn': 'byn', 'lt': 'lt', 'lu': 'lu', 'yi': 'yi', 'non': 'non', 'ceb': 'ceb', 'yo': 'yo', 'nog': 'nog', 'bat': 'bat', 'dak': 'dak', 'dar': 'dar', 'day': 'day', 'ssa': 'ssa', 'kpe': 'kpe', 'el': 'el', 'eo': 'eo', 'en': 'en', 'lam': 'lam', 'ee': 'ee', 'mdf': 'mdf', 'fr': 'fr', 'mdr': 'mdr', 'et': 'et', 'es': 'es', 'ru': 'ru', 'gon': 'gon', 'goh': 'goh', 'sms': 'sms', 'smn': 'smn', 'smj': 'smj', 'smi': 'smi', 'got': 'got', 'rn': 'rn', 'ro': 'ro', 'dsb': 'dsb', 'sma': 'sma', 'gor': 'gor', 'ast': 'ast', 'wal': 'wal', 'crh': 'crh', 'ath': 'ath', 'gez': 'gez', 'xh': 'xh', 'ff': 'ff', 'mak': 'mak', 'zap': 'zap', 'kok': 'kok', 'kos': 'kos', 'fo': 'fo', 'tog': 'tog', 'hup': 'hup', 'udm': 'udm', 'bej': 'bej', 'bem': 'bem', 'tsi': 'tsi', 'ber': 'ber', 'nzi': 'nzi', 'sai': 'sai', 'ang': 'ang', 'pra': 'pra', 'bho': 'bho', 'sal': 'sal', 'pro': 'pro', 'raj': 'raj', 'sad': 'sad', 'rar': 'rar', 'rap': 'rap', 'sas': 'sas', 'car': 'car', 'min': 'min', 'mic': 'mic', 'efi': 'efi', 'arn': 'arn', 'ypk': 'ypk', 'mis': 'mis', 'kac': 'kac', 'kab': 'kab', 'kaa': 'kaa', 'kam': 'kam', 'kar': 'kar', 'kaw': 'kaw', 'tyv': 'tyv', 'awa': 'awa', 'ka': 'ka', 'doi': 'doi', 'kg': 'kg', 'kk': 'kk', 'kj': 'kj', 'ki': 'ki', 'ko': 'ko', 'kn': 'kn', 'km': 'km', 'kl': 'kl', 'ks': 'ks', 'kr': 'kr', 'kw': 'kw', 'kv': 'kv', 'ku': 'ku', 'ky': 'ky', 'tkl': 'tkl', 'bua': 'bua', 'mga': 'mga', 'hit': 'hit', 'dyu': 'dyu', 'de': 'de', 'da': 'da', 'dz': 'dz', 'ira': 'ira', 'dv': 'dv', 'hil': 'hil', 'him': 'him', 'gem': 'gem', 'crp': 'crp', 'qu': 'qu', 'bas': 'bas', 'gba': 'gba', 'bad': 'bad', 'ban': 'ban', 'bal': 'bal', 'bam': 'bam', 'shn': 'shn', 'bai': 'bai', 'arp': 'arp', 'art': 'art', 'arw': 'arw', 'arc': 'arc', 'sem': 'sem', 'sel': 'sel', 'nub': 'nub', 'btk': 'btk', 'lus': 'lus', 'mus': 'mus', 'lua': 'lua', 'iro': 'iro', 'lui': 'lui', 'mun': 'mun', 'lun': 'lun', 'luo': 'luo', 'wa': 'wa', 'tup': 'tup', 'jv': 'jv', 'tut': 'tut', 'tum': 'tum', 'ja': 'ja', 'cop': 'cop', 'ilo': 'ilo', 'la': 'la', 'gwi': 'gwi', 'und': 'und', 'tli': 'tli', 'ch': 'ch', 'co': 'co', 'ca': 'ca', 'ce': 'ce', 'pon': 'pon', 'cy': 'cy', 'sah': 'sah', 'cs': 'cs', 'cr': 'cr', 'bnt': 'bnt', 'cv': 'cv', 'cu': 'cu', 'lv': 'lv', 'dum': 'dum', 'pt': 'pt', 'dua': 'dua', 'fro': 'fro', 'yap': 'yap', 'frm': 'frm', 'tiv': 'tiv', 'yao': 'yao', 'pa': 'pa', 'xal': 'xal', 'pi': 'pi', 'pl': 'pl', 'gay': 'gay', 'oto': 'oto', 'ota': 'ota', 'hmn': 'hmn', 'an': 'an', 'gaa': 'gaa', 'fur': 'fur', 'khi': 'khi', 'sla': 'sla', 've': 've', 'vi': 'vi', 'is': 'is', 'kho': 'kho', 'iu': 'iu', 'it': 'it', 'vo': 'vo', 'ii': 'ii', 'ik': 'ik', 'io': 'io', 'ine': 'ine', 'ia': 'ia', 'jpr': 'jpr', 'ie': 'ie', 'id': 'id', 'ig': 'ig', 'pap': 'pap', 'ewo': 'ewo', 'pau': 'pau', 'paa': 'paa', 'pag': 'pag', 'sat': 'sat', 'pal': 'pal', 'pam': 'pam', 'phi': 'phi', 'cel': 'cel', 'phn': 'phn', 'nic': 'nic', 'nia': 'nia', 'dgr': 'dgr', 'syr': 'syr', 'niu': 'niu', 'jbo': 'jbo', 'nah': 'nah', 'sam': 'sam', 'hai': 'hai', 'gmh': 'gmh', 'cus': 'cus', 'wen': 'wen', 'ady': 'ady', 'elx': 'elx', 'ada': 'ada', 'haw': 'haw', 'bin': 'bin', 'bik': 'bik', 'mos': 'mos', 'moh': 'moh', 'tl': 'tl', 'tvl': 'tvl', 'ijo': 'ijo', 'kmb': 'kmb', 'peo': 'peo', 'umb': 'umb', 'tmh': 'tmh', 'fon': 'fon', 'hsb': 'hsb', 'be': 'be', 'bg': 'bg', 'ba': 'ba', 'ps': 'ps', 'bm': 'bm', 'bn': 'bn', 'bo': 'bo', 'bh': 'bh', 'bi': 'bi', 'br': 'br', 'bs': 'bs', 'om': 'om', 'oj': 'oj', 'ace': 'ace', 'ach': 'ach', 'oc': 'oc', 'kru': 'kru', 'srr': 'srr', 'kro': 'kro', 'krc': 'krc', 'nds': 'nds', 'os': 'os', 'or': 'or', 'sog': 'sog', 'nso': 'nso', 'son': 'son', 'vai': 'vai', 'wak': 'wak', 'lol': 'lol', 'mkh': 'mkh', 'loz': 'loz', 'gil': 'gil', 'was': 'was', 'war': 'war', 'hz': 'hz', 'hy': 'hy', 'sid': 'sid', 'hr': 'hr', 'ht': 'ht', 'hu': 'hu', 'hi': 'hi', 'ho': 'ho', 'Fallback': None, 'ha': 'ha', 'bug': 'bug', 'he': 'he', 'uz': 'uz', 'ur': 'ur', 'uk': 'uk', 'ug': 'ug', 'aa': 'aa', 'ab': 'ab', 'ae': 'ae', 'af': 'af', 'ak': 'ak', 'am': 'am', 'myv': 'myv', 'eu': 'eu', 'as': 'as', 'ar': 'ar', 'inh': 'inh', 'tpi': 'tpi', 'myn': 'myn', 'ay': 'ay', 'kha': 'kha', 'az': 'az', 'inc': 'inc', 'nl': 'nl', 'nn': 'nn', 'no': 'no', 'na': 'na', 'nb': 'nb', 'nai': 'nai', 'nd': 'nd', 'ne': 'ne', 'ng': 'ng', 'ny': 'ny', 'nap': 'nap', 'grb': 'grb', 'grc': 'grc', 'nr': 'nr', 'tig': 'tig', 'nv': 'nv', 'zun': 'zun', 'rw': 'rw', 'cpe': 'cpe', 'cpf': 'cpf', 'cpp': 'cpp'} countries={'BD': 'BD', 'BE': 'BE', 'BF': 'BF', 'BG': 'BG', 'BA': 'BA', 'BB': 'BB', 'WF': 'WF', 'BM': 'BM', 'BN': 'BN', 'BO': 'BO', 'BH': 'BH', 'BI': 'BI', 'BJ': 'BJ', 'BT': 'BT', 'JM': 'JM', 'BV': 'BV', 'BW': 'BW', 'WS': 'WS', 'BR': 'BR', 'BS': 'BS', 'BY': 'BY', 'BZ': 'BZ', 'RU': 'RU', 'RW': 'RW', 'TL': 'TL', 'RE': 'RE', 'TM': 'TM', 'TJ': 'TJ', 'RO': 'RO', 'TK': 'TK', 'GW': 'GW', 'GU': 'GU', 'GT': 'GT', 'GS': 'GS', 'GR': 'GR', 'GQ': 'GQ', 'GP': 'GP', 'JP': 'JP', 'GY': 'GY', 'GF': 'GF', 'GE': 'GE', 'GD': 'GD', 'GB': 'GB', 'GA': 'GA', 'SV': 'SV', 'GN': 'GN', 'GM': 'GM', 'GL': 'GL', 'GI': 'GI', 'GH': 'GH', 'OM': 'OM', 'TN': 'TN', 'JO': 'JO', 'SP': 'SP', 'HR': 'HR', 'HT': 'HT', 'HU': 'HU', 'HK': 'HK', 'HN': 'HN', 'HM': 'HM', 'VE': 'VE', 'PR': 'PR', 'PS': 'PS', 'PW': 'PW', 'PT': 'PT', 'SJ': 'SJ', 'PY': 'PY', 'IQ': 'IQ', 'PA': 'PA', 'PF': 'PF', 'PG': 'PG', 'PE': 'PE', 'PK': 'PK', 'PH': 'PH', 'PN': 'PN', 'PL': 'PL', 'PM': 'PM', 'ZM': 'ZM', 'EH': 'EH', 'EE': 'EE', 'EG': 'EG', 'ZA': 'ZA', 'EC': 'EC', 'IT': 'IT', 'VN': 'VN', 'SB': 'SB', 'ET': 'ET', 'SO': 'SO', 'ZW': 'ZW', 'SA': 'SA', 'ES': 'ES', 'ER': 'ER', 'MD': 'MD', 'MG': 'MG', 'MA': 'MA', 'MC': 'MC', 'UZ': 'UZ', 'MM': 'MM', 'ML': 'ML', 'MO': 'MO', 'MN': 'MN', 'MH': 'MH', 'MK': 'MK', 'MU': 'MU', 'MT': 'MT', 'MW': 'MW', 'MV': 'MV', 'MQ': 'MQ', 'MP': 'MP', 'MS': 'MS', 'MR': 'MR', 'UG': 'UG', 'MY': 'MY', 'MX': 'MX', 'IL': 'IL', 'FR': 'FR', 'IO': 'IO', 'SH': 'SH', 'FI': 'FI', 'FJ': 'FJ', 'FK': 'FK', 'FM': 'FM', 'FO': 'FO', 'NI': 'NI', 'NL': 'NL', 'NO': 'NO', 'NA': 'NA', 'VU': 'VU', 'NC': 'NC', 'NE': 'NE', 'NF': 'NF', 'NG': 'NG', 'NZ': 'NZ', 'NP': 'NP', 'NR': 'NR', 'NU': 'NU', 'CK': 'CK', 'CI': 'CI', 'CH': 'CH', 'CO': 'CO', 'CN': 'CN', 'CM': 'CM', 'CL': 'CL', 'CC': 'CC', 'CA': 'CA', 'CG': 'CG', 'CF': 'CF', 'CD': 'CD', 'CZ': 'CZ', 'CY': 'CY', 'CX': 'CX', 'CR': 'CR', 'Fallback': None, 'CV': 'CV', 'CU': 'CU', 'SZ': 'SZ', 'SY': 'SY', 'KG': 'KG', 'KE': 'KE', 'SR': 'SR', 'KI': 'KI', 'KH': 'KH', 'KN': 'KN', 'KM': 'KM', 'ST': 'ST', 'SK': 'SK', 'KR': 'KR', 'SI': 'SI', 'KP': 'KP', 'KW': 'KW', 'SN': 'SN', 'SM': 'SM', 'SL': 'SL', 'SC': 'SC', 'KZ': 'KZ', 'KY': 'KY', 'SG': 'SG', 'SE': 'SE', 'SD': 'SD', 'DO': 'DO', 'DM': 'DM', 'DJ': 'DJ', 'DK': 'DK', 'VG': 'VG', 'DE': 'DE', 'YE': 'YE', 'DZ': 'DZ', 'US': 'US', 'UY': 'UY', 'YU': 'YU', 'YT': 'YT', 'UM': 'UM', 'LB': 'LB', 'LC': 'LC', 'LA': 'LA', 'TV': 'TV', 'TW': 'TW', 'TT': 'TT', 'TR': 'TR', 'LK': 'LK', 'LI': 'LI', 'LV': 'LV', 'TO': 'TO', 'LT': 'LT', 'LU': 'LU', 'LR': 'LR', 'LS': 'LS', 'TH': 'TH', 'TF': 'TF', 'TG': 'TG', 'TD': 'TD', 'TC': 'TC', 'LY': 'LY', 'VA': 'VA', 'VC': 'VC', 'AE': 'AE', 'AD': 'AD', 'AG': 'AG', 'AF': 'AF', 'AI': 'AI', 'VI': 'VI', 'IS': 'IS', 'IR': 'IR', 'AM': 'AM', 'AL': 'AL', 'AO': 'AO', 'AN': 'AN', 'AQ': 'AQ', 'AS': 'AS', 'AR': 'AR', 'AU': 'AU', 'AT': 'AT', 'AW': 'AW', 'IN': 'IN', 'TZ': 'TZ', 'AZ': 'AZ', 'IE': 'IE', 'ID': 'ID', 'UA': 'UA', 'QA': 'QA', 'MZ': 'MZ'} months=['Jerrey-geuree', 'Toshiaght-arree', 'Mayrnt', 'Averil', 'Boaldyn', 'Mean-souree', 'Jerrey-souree', 'Luanistyn', 'Mean-fouyir', 'Jerrey-fouyir', 'Mee Houney', 'Mee ny Nollick'] abbrMonths=['J-guer', 'T-arree', 'Mayrnt', 'Avrril', 'Boaldyn', 'M-souree', 'J-souree', 'Luanistyn', 'M-fouyir', 'J-fouyir', 'M.Houney', 'M.Nollick'] days=['Jelhein', 'Jemayrt', 'Jercean', 'Jerdein', 'Jeheiney', 'Jesarn', 'Jedoonee'] abbrDays=['Jel', 'Jem', 'Jerc', 'Jerd', 'Jeh', 'Jes', 'Jed'] dateFormats={'medium': '%%(abbrmonthname)s %d,%y', 'full': '%%(dayname)s %d %%(monthname)s %Y', 'long': '%d %%(monthname)s %Y', 'short': '%d/%m/%y'} numericSymbols={'group': ',', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': '.', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'} PKA>򟵠33turbogears/i18n/data/gv_GB.pyc; ȸHIc @s5hdd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d!d!<d"d"<d#d#<d$d$<d%d%<d&d&<d'd'<d(d(<d)d)<d*d*<d+d+<d,d,<d-d-<d.d.<d/d/<d0d0<d1d1<d2d2<d3d3<d4d4<d5d5<d6d6<d7d7<d8d8<d9d9<d:d:<d;d;<d<d<<d=d=<d>d><d?d?<d@d@<dAdA<dBdB<dCdC<dDdD<dEdE<dFdF<dGdG<dHdH<dIdI<dJdJ<dKdK<dLdL<dMdM<dNdN<dOdO<dPdP<dQdQ<dRdR<dSdS<dTdT<dUdU<dVdV<dWdW<dXdX<dYdY<dZdZ<d[d[<d\d\<d]d]<d^d^<d_d_<d`d`<dada<dbdb<dcdc<dddd<dede<dfdf<dgdg<dhdh<didi<djdj<dkdk<dldl<dmdm<dndn<dodo<dpdp<dqdq<drdr<dsds<dtdt<dudu<dvdv<dwdw<dxdx<dydy<dzdz<d{d{<d|d|<d}d}<d~d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d!d!<d"d"<d#d#<d$d$<d%d%<d&d&<d'd'<d(d(<d)d)<d*d*<d+d+<d,d,<d-d-<d.d.<d/d/<d0d0<d1d1<d2d2<d3d3<d4d4<d5d5<d6d6<d7d7<d8d8<d9d9<d:d:<d;d;<d<d<<d=d=<d>d><d?d?<d@d@<dAdA<dBdB<dCdC<dDdD<dEdE<dFdF<dGdG<dHdH<dIdI<dJdJ<dKdK<dLdL<dMdM<dNdN<dOdO<dPdP<dQdQ<dRdR<dSdS<dTdT<dUdU<dVdV<dWdW<dXdX<dYdY<dZdZ<d[d[<d\d\<d]d]<d^d^<d_d_<d`d`<dada<dbdb<dcdc<dddd<dede<dfdf<dgdg<dhdh<didi<djdj<dkdk<dldl<dmdm<dndn<dodo<dpdp<dqdq<drdr<dsds<dtdt<dudu<dvdv<dwdw<dxdx<dydy<dzdz<d{d{<d|d|<d}d}<d~d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<de<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd><d?d?<d@d@<dAdA<dBdB<dCdC<dDdD<dEdE<dFdF<dGdG<dHdH<dIdI<dJdJ<dKdK<dLdL<dMdM<dNdN<dOdO<dPdP<dQdQ<dRdR<dSdS<dTdT<dUdU<dVdV<dWdW<dXdX<dYdY<dZdZ<d[d[<d\d\<d]d]<d^d^<d_d_<d`d`<dada<dbdb<dcdc<dddd<dede<dfdf<dgdg<dhdh<didi<djdj<dkdk<dldl<dmdm<de<dndn<dodo<dpdp<dqdq<drdr<dsds<dtdt<dudu<dvdv<dwdw<dxdx<dydy<dzdz<d{d{<d|d|<d}d}<d~d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd***PKK97gEEturbogears/i18n/data/he.py# Formatting configuration for locale he languages={'el': u'\u05d9\u05d5\u05d5\u05e0\u05d9\u05ea', 'en': u'\u05d0\u05e0\u05d2\u05dc\u05d9\u05ea', 'zh': u'\u05e1\u05d9\u05e0\u05d9\u05ea', 'it': u'\u05d0\u05d9\u05d8\u05dc\u05e7\u05d9\u05ea', 'ar': u'\u05e2\u05e8\u05d1\u05d9\u05ea', 'cs': u"\u05e6'\u05db\u05d9\u05ea", 'et': u'\u05d0\u05e1\u05d8\u05d5\u05e0\u05d9\u05ea', 'es': u'\u05e1\u05e4\u05e8\u05d3\u05d9\u05ea', 'ru': u'\u05e8\u05d5\u05e1\u05d9\u05ea', 'nl': u'\u05d4\u05d5\u05dc\u05e0\u05d3\u05d9\u05ea', 'pt': u'\u05e4\u05d5\u05e8\u05d8\u05d5\u05d2\u05d6\u05d9\u05ea', 'no': u'\u05e0\u05d5\u05e8\u05d5\u05d5\u05d2\u05d9\u05ea', 'tr': u'\u05d8\u05d5\u05e8\u05e7\u05d9\u05ea', 'lv': u'\u05dc\u05d8\u05d1\u05d9\u05ea', 'lt': u'\u05dc\u05d9\u05d8\u05d0\u05d9\u05ea', 'ro': u'\u05e8\u05d5\u05de\u05e0\u05d9\u05ea', 'pl': u'\u05e4\u05d5\u05dc\u05e0\u05d9\u05ea', 'fr': u'\u05e6\u05e8\u05e4\u05ea\u05d9\u05ea', 'bg': u'\u05d1\u05d5\u05dc\u05d2\u05e8\u05d9\u05ea', 'hr': u'\u05e7\u05e8\u05d5\u05d0\u05d8\u05d9\u05ea', 'de': u'\u05d2\u05e8\u05de\u05e0\u05d9\u05ea', 'da': u'\u05d3\u05e0\u05d9\u05ea', 'fi': u'\u05e4\u05d9\u05e0\u05d9\u05ea', 'hu': u'\u05d4\u05d5\u05e0\u05d2\u05e8\u05d9\u05ea', 'ja': u'\u05d9\u05e4\u05e0\u05d9\u05ea', 'he': u'\u05e2\u05d1\u05e8\u05d9\u05ea', 'ko': u'\u05e7\u05d5\u05e8\u05d9\u05d0\u05e0\u05d9\u05ea', 'sv': u'\u05e9\u05d5\u05d5\u05d3\u05d9\u05ea', 'sk': u'\u05e1\u05dc\u05d5\u05d1\u05e7\u05d9\u05ea', 'sl': u'\u05e1\u05dc\u05d5\u05d1\u05e0\u05d9\u05ea'} countries={'BD': u'\u05d1\u05e0\u05d2\u05dc\u05d3\u05e9', 'BE': u'\u05d1\u05dc\u05d2\u05d9\u05d4', 'BF': u'\u05d1\u05d5\u05e8\u05e7\u05d9\u05e0\u05d4 \u05e4\u05d0\u05e1\u05d5', 'BG': u'\u05d1\u05d5\u05dc\u05d2\u05e8\u05d9\u05d4', 'BA': u'\u05d1\u05d5\u05e1\u05e0\u05d9\u05d4 \u05d5\u05d4\u05e8\u05e6\u05d2\u05d5\u05d1\u05d9\u05e0\u05d4', 'BB': u'\u05d1\u05e8\u05d1\u05d3\u05d5\u05e1', 'WF': u'\u05d5\u05d0\u05dc\u05d9\u05e1 \u05d5\u05e4\u05d5\u05d8\u05d5\u05e0\u05d4', 'BM': u'\u05d1\u05e8\u05de\u05d5\u05d3\u05d4', 'BN': u'\u05d1\u05e8\u05d5\u05e0\u05d9\u05d9 \u05d3\u05d0\u05e8\u05e1\u05dc\u05d0\u05dd', 'BO': u'\u05d1\u05d5\u05dc\u05d9\u05d1\u05d9\u05d4', 'BH': u'\u05d1\u05d7\u05e8\u05d9\u05d9\u05df', 'BI': u'\u05d1\u05d5\u05e8\u05d5\u05e0\u05d3\u05d9', 'BJ': u'\u05d1\u05e0\u05d9\u05df', 'BT': u'\u05d1\u05d5\u05d8\u05d0\u05df', 'JM': u"\u05d2'\u05de\u05d9\u05d9\u05e7\u05d4", 'BV': u'\u05d4\u05d0\u05d9 \u05d1\u05d5\u05d1\u05d4', 'BW': u'\u05d1\u05d5\u05d8\u05e1\u05d5\u05d5\u05d0\u05e0\u05d4', 'WS': u'\u05e1\u05de\u05d5\u05d0\u05d4', 'BR': u'\u05d1\u05e8\u05d6\u05d9\u05dc', 'BS': u'\u05d1\u05d4\u05d0\u05de\u05d4', 'BY': u'\u05d1\u05dc\u05e8\u05d5\u05e1', 'BZ': u'\u05d1\u05dc\u05d9\u05d6', 'RU': u'\u05d7\u05d1\u05e8 \u05d4\u05de\u05d3\u05d9\u05e0\u05d5\u05ea \u05d4\u05e8\u05d5\u05e1\u05d9\u05d5\u05ea', 'RW': u'\u05e8\u05d5\u05d0\u05e0\u05d3\u05d4', 'TL': u'\u05de\u05d6\u05e8\u05d7 \u05d8\u05d9\u05de\u05d5\u05e8', 'RE': u'\u05e8\u05d0\u05d5\u05e0\u05d9\u05d5\u05df', 'TM': u'\u05d8\u05d5\u05e8\u05e7\u05de\u05e0\u05d9\u05e1\u05d8\u05df', 'TJ': u"\u05d8\u05d2'\u05d9\u05e7\u05d9\u05e1\u05d8\u05df", 'RO': u'\u05e8\u05d5\u05de\u05e0\u05d9\u05d4', 'TK': u'\u05d8\u05d5\u05e7\u05dc\u05d0\u05d5', 'GW': u'\u05d2\u05d9\u05e0\u05d9\u05d0\u05d4-\u05d1\u05d9\u05e1\u05d0\u05d5', 'GU': u'\u05d2\u05d5\u05d0\u05dd', 'GT': u'\u05d2\u05d5\u05d5\u05d8\u05de\u05d0\u05dc\u05d4', 'GS': u"\u05d4\u05d0\u05d9 \u05d2'\u05d5\u05e8\u05d2'\u05d9\u05d4 \u05d4\u05d3\u05e8\u05d5\u05de\u05d9\u05ea \u05d5\u05d0\u05d9\u05d9 \u05e1\u05e0\u05d3\u05d5\u05d5\u05d9\u05e5' \u05d4\u05d3\u05e8\u05d5\u05de\u05d9\u05d9\u05dd", 'GR': u'\u05d9\u05d5\u05d5\u05df', 'GQ': u'\u05d2\u05d9\u05e0\u05d9\u05d0\u05d4 \u05d4\u05de\u05e9\u05d5\u05d5\u05e0\u05d9\u05ea', 'GP': u'\u05d2\u05d5\u05d5\u05d0\u05d3\u05dc\u05d5\u05e4', 'JP': u'\u05d9\u05e4\u05df', 'GY': u'\u05d2\u05d9\u05d0\u05e0\u05d4', 'GF': u'\u05d2\u05d9\u05d0\u05e0\u05d4 \u05d4\u05e6\u05e8\u05e4\u05ea\u05d9\u05ea', 'GE': u'\u05d2\u05e8\u05d5\u05d6\u05d9\u05d4', 'GD': u'\u05d2\u05e8\u05e0\u05d3\u05d4', 'GB': u'\u05d1\u05e8\u05d9\u05d8\u05e0\u05d9\u05d4', 'GA': u'\u05d2\u05d1\u05d5\u05df', 'SV': u'\u05d0\u05dc \u05e1\u05dc\u05d1\u05d0\u05d3\u05d5\u05e8', 'GN': u'\u05d2\u05d9\u05e0\u05d9\u05d0\u05d4', 'GM': u'\u05d2\u05de\u05d1\u05d9\u05d4', 'GL': u'\u05d2\u05e8\u05d9\u05e0\u05dc\u05e0\u05d3', 'GI': u'\u05d2\u05d9\u05d1\u05e8\u05dc\u05d8\u05e8', 'GH': u'\u05d2\u05d0\u05e0\u05d4', 'OM': u'\u05e2\u05d5\u05de\u05df', 'TN': u'\u05d8\u05d5\u05e0\u05d9\u05e1\u05d9\u05d4', 'JO': u'\u05d9\u05e8\u05d3\u05df', 'HR': u'\u05e7\u05e8\u05d5\u05d0\u05d8\u05d9\u05d4', 'HT': u'\u05d4\u05d0\u05d9\u05d8\u05d9', 'HU': u'\u05d4\u05d5\u05e0\u05d2\u05e8\u05d9\u05d4', 'HK': u'\u05d4\u05d5\u05e0\u05d2 \u05e7\u05d5\u05e0\u05d2 S.A.R. \u05e9\u05dc \u05e1\u05d9\u05df', 'HN': u'\u05d4\u05d5\u05e0\u05d3\u05d5\u05e8\u05e1', 'HM': u'\u05d0\u05d9\u05d9 \u05d4\u05e8\u05d3 \u05d5\u05d0\u05d9\u05d9 \u05de\u05e7\u05d3\u05d5\u05e0\u05dc\u05e0\u05d3', 'VE': u'\u05d5\u05e0\u05e6\u05d5\u05d0\u05dc\u05d4', 'PR': u'\u05e4\u05d5\u05e8\u05d8\u05d5 \u05e8\u05d9\u05e7\u05d5', 'PS': u'\u05d4\u05e8\u05e9\u05d5\u05ea \u05d4\u05e4\u05dc\u05e9\u05ea\u05d9\u05e0\u05d9\u05ea', 'PW': u'\u05e4\u05dc\u05d0\u05d5', 'PT': u'\u05e4\u05d5\u05e8\u05d8\u05d5\u05d2\u05dc', 'SJ': u"\u05e1\u05d5\u05d5\u05dc\u05d1\u05d0\u05e8\u05d3 \u05d5\u05d6'\u05d0\u05df \u05de\u05d0\u05d9\u05d9\u05df", 'PY': u'\u05e4\u05e8\u05d0\u05d2\u05d5\u05d5\u05d0\u05d9', 'IQ': u'\u05e2\u05d9\u05e8\u05e7', 'PA': u'\u05e4\u05e0\u05de\u05d4', 'PF': u'\u05e4\u05d5\u05dc\u05d9\u05e0\u05d6\u05d9\u05d4 \u05d4\u05e6\u05e8\u05e4\u05ea\u05d9\u05ea', 'PG': u'\u05e4\u05e4\u05d5\u05d0\u05d4 \u05d2\u05d9\u05e0\u05d9\u05d0\u05d4 \u05d4\u05d7\u05d3\u05e9\u05d4', 'PE': u'\u05e4\u05e8\u05d5', 'PK': u'\u05e4\u05e7\u05d9\u05e1\u05d8\u05df', 'PH': u'\u05e4\u05d9\u05dc\u05d9\u05e4\u05d9\u05e0\u05d9\u05dd', 'PN': u'\u05e4\u05d9\u05d8\u05e7\u05d9\u05d9\u05e8\u05df', 'PL': u'\u05e4\u05d5\u05dc\u05d9\u05df', 'PM': u'\u05e1\u05e0\u05d8 \u05e4\u05d9\u05d9\u05e8 \u05d5\u05de\u05d9\u05e7\u05dc\u05d5\u05df', 'ZM': u'\u05d6\u05de\u05d1\u05d9\u05d4', 'EH': u'\u05e1\u05d4\u05e8\u05d4 \u05d4\u05de\u05e2\u05e8\u05d1\u05d9\u05ea', 'EE': u'\u05d0\u05e1\u05d8\u05d5\u05e0\u05d9\u05d4', 'EG': u'\u05de\u05e6\u05e8\u05d9\u05dd', 'ZA': u'\u05d3\u05e8\u05d5\u05dd \u05d0\u05e4\u05e8\u05d9\u05e7\u05d4', 'EC': u'\u05d0\u05e7\u05d5\u05d5\u05d0\u05d3\u05d5\u05e8', 'IT': u'\u05d0\u05d9\u05d8\u05dc\u05d9\u05d4', 'VN': u'\u05d5\u05d9\u05d9\u05d8\u05e0\u05d0\u05dd', 'SB': u'\u05d0\u05d9\u05d9 \u05e9\u05dc\u05de\u05d4', 'ET': u'\u05d0\u05ea\u05d9\u05d5\u05e4\u05d9\u05d4', 'SO': u'\u05e1\u05d5\u05de\u05dc\u05d9\u05d4', 'ZW': u'\u05d6\u05d9\u05de\u05d1\u05d1\u05d5\u05d5\u05d4', 'SA': u'\u05e2\u05e8\u05d1 \u05d4\u05e1\u05e2\u05d5\u05d3\u05d9\u05ea', 'ES': u'\u05e1\u05e4\u05e8\u05d3', 'ER': u'\u05d0\u05e8\u05d9\u05ea\u05e8\u05d9\u05d0\u05d4', 'MD': u'\u05de\u05d5\u05dc\u05d3\u05d5\u05d1\u05d4, \u05d4\u05e8\u05e4\u05d5\u05d1\u05dc\u05d9\u05e7\u05d4', 'MG': u'\u05de\u05d3\u05d2\u05e1\u05e7\u05e8', 'MA': u'\u05de\u05e8\u05d5\u05e7\u05d5', 'MC': u'\u05de\u05d5\u05e0\u05e7\u05d5', 'UZ': u'\u05d0\u05d5\u05d6\u05d1\u05e7\u05d9\u05e1\u05d8\u05df', 'MM': u'\u05de\u05d9\u05e0\u05de\u05d0\u05e8', 'ML': u'\u05de\u05d0\u05dc', 'MO': u'\u05de\u05e7\u05d0\u05d5 S.A.R. \u05e9\u05dc \u05e1\u05d9\u05df', 'MN': u'\u05de\u05d5\u05e0\u05d2\u05d5\u05dc\u05d9', 'MH': u'\u05d0\u05d9\u05d9 \u05de\u05e8\u05e9\u05dc', 'MK': u'\u05de\u05e7\u05d3\u05d5\u05e0\u05d9\u05d4, \u05d4\u05e8\u05e4\u05d5\u05d1\u05dc\u05d9\u05e7\u05d4 \u05e9\u05dc', 'MU': u'\u05de\u05d0\u05d5\u05e8\u05d9\u05e6\u05d9\u05d5\u05e1', 'MT': u'\u05de\u05dc\u05d8\u05d4', 'MW': u'\u05de\u05dc\u05d0\u05d5\u05d5\u05d9', 'MV': u'\u05de\u05dc\u05d3\u05d9\u05d1\u05d0\u05e1', 'MQ': u'\u05de\u05e8\u05d8\u05d9\u05e0\u05d9\u05e7', 'MP': u'\u05d0\u05d9\u05d9 \u05de\u05e8\u05d9\u05d0\u05e0\u05d4 \u05d4\u05e6\u05e4\u05d5\u05e0\u05d9\u05d9\u05dd', 'MS': u'\u05de\u05d5\u05e0\u05d8\u05e1\u05e8\u05d0\u05d8', 'MR': u'\u05de\u05d0\u05d5\u05e8\u05d9\u05d8\u05e0\u05d9\u05d4', 'UG': u'\u05d0\u05d5\u05d2\u05e0\u05d3\u05d4', 'MY': u'\u05de\u05dc\u05d6\u05d9\u05d4', 'MX': u'\u05de\u05db\u05e1\u05d9\u05e7\u05d5', 'IL': u'\u05d9\u05e9\u05e8\u05d0\u05dc', 'FR': u'\u05e6\u05e8\u05e4\u05ea', 'IO': u'\u05d4\u05d8\u05e8\u05d9\u05d8\u05d5\u05e8\u05d9\u05d4 \u05d4\u05d1\u05e8\u05d9\u05d8\u05d9\u05ea \u05d1\u05d0\u05d5\u05e7\u05d9\u05e0\u05d5\u05e1 \u05d4\u05d4\u05d5\u05d3\u05d9', 'SH': u'\u05e1\u05d9\u05d9\u05e0\u05d8 \u05d4\u05dc\u05e0\u05d4', 'FI': u'\u05e4\u05d9\u05e0\u05dc\u05e0\u05d3', 'FJ': u"\u05e4\u05d9\u05d2'\u05d9", 'FK': u'\u05d0\u05d9\u05d9 \u05e4\u05d5\u05e7\u05dc\u05e0\u05d3', 'FM': u'\u05de\u05d0\u05d5\u05e8\u05d9\u05e6\u05d9\u05d5\u05e1, \u05d4\u05de\u05d3\u05d9\u05e0\u05d5\u05ea \u05d4\u05de\u05d0\u05d5\u05d2\u05d3\u05d5\u05ea \u05e9\u05dc', 'FO': u'\u05d0\u05d9\u05d9 \u05e4\u05d0\u05e8\u05d5', 'NI': u'\u05e0\u05d9\u05e7\u05e8\u05d0\u05d2\u05d5\u05d5\u05d4', 'NL': u'\u05d4\u05d5\u05dc\u05e0\u05d3', 'NO': u'\u05e0\u05d5\u05e8\u05d5\u05d5\u05d2\u05d9\u05d4', 'NA': u'\u05e0\u05de\u05d9\u05d1\u05d9\u05d4', 'VU': u'\u05d5\u05d0\u05e0\u05d5\u05d0\u05d8\u05d5', 'NC': u'\u05e7\u05dc\u05d3\u05d5\u05e0\u05d9\u05d4 \u05d4\u05d7\u05d3\u05e9', 'NE': u"\u05e0\u05d9\u05d6'\u05e8", 'NF': u'\u05d0\u05d9\u05d9 \u05e0\u05d5\u05e8\u05e4\u05e7', 'NG': u'\u05e0\u05d9\u05d2\u05e8\u05d9\u05d4', 'NZ': u'\u05e0\u05d9\u05d5 \u05d6\u05d9\u05dc\u05e0\u05d3', 'NP': u'\u05e0\u05e4\u05d0\u05dc', 'NR': u'\u05e0\u05d0\u05d5\u05e8\u05d5', 'NU': u'\u05e0\u05d9\u05d5\u05d5\u05d4', 'CK': u'\u05d0\u05d9\u05d9 \u05e7\u05d5\u05e7', 'CI': u'\u05d7\u05d5\u05e3 \u05d4\u05e9\u05e0\u05d4\u05d1', 'CH': u'\u05e9\u05d5\u05d5\u05d9\u05d9\u05e5', 'CO': u'\u05e7\u05d5\u05dc\u05d5\u05de\u05d1\u05d9\u05d4', 'CN': u'\u05e1\u05d9\u05df', 'CM': u'\u05e7\u05de\u05e8\u05d5\u05df', 'CL': u"\u05e6'\u05d9\u05dc\u05d4", 'CC': u'\u05d0\u05d9\u05d9 \u05e7\u05d5\u05e7\u05d5\u05e1 (\u05e7\u05d9\u05dc\u05d9\u05e0\u05d2)', 'CA': u'\u05e7\u05e0\u05d3\u05d4', 'CG': u'\u05e7\u05d5\u05e0\u05d2\u05d5', 'CF': u'\u05d4\u05e8\u05e4\u05d5\u05d1\u05dc\u05d9\u05e7\u05d4 \u05e9\u05dc \u05de\u05e8\u05db\u05d6 \u05d0\u05e4\u05e8\u05d9\u05e7\u05d4', 'CD': u'\u05e7\u05d5\u05e0\u05d2\u05d5, \u05d4\u05e8\u05e4\u05d5\u05d1\u05dc\u05d9\u05e7\u05d4 \u05d4\u05d3\u05de\u05d5\u05e7\u05e8\u05d8\u05d9\u05ea \u05e9\u05dc', 'CZ': u"\u05d4\u05e8\u05e4\u05d5\u05d1\u05dc\u05d9\u05e7\u05d4 \u05d4\u05e6'\u05db\u05d9\u05ea", 'CY': u'\u05e7\u05e4\u05e8\u05d9\u05e1\u05d9\u05df', 'CX': u'\u05d0\u05d9\u05d9 \u05db\u05e8\u05d9\u05e1\u05d8\u05de\u05e1', 'CR': u'\u05e7\u05d5\u05e1\u05d8\u05d4 \u05e8\u05d9\u05e7\u05d4', 'CV': u'\u05e7\u05d9\u05d9\u05e4 \u05d5\u05e8\u05d3\u05d4', 'CU': u'\u05e7\u05d5\u05d1\u05d4', 'SZ': u'\u05e1\u05d5\u05d5\u05d6\u05d9\u05dc\u05e0\u05d3', 'SY': u'\u05d4\u05e8\u05e4\u05d5\u05d1\u05dc\u05d9\u05e7\u05d4 \u05d4\u05e2\u05e8\u05d1\u05d9\u05ea \u05d4\u05e1\u05d5\u05e8\u05d9\u05ea', 'KG': u'\u05e7\u05d9\u05e8\u05d2\u05d9\u05d6\u05e1\u05d8\u05df', 'KE': u'\u05e7\u05e0\u05d9\u05d4', 'SR': u'\u05e1\u05d5\u05e8\u05d9\u05e0\u05d0\u05dd', 'KI': u'\u05e7\u05d9\u05e8\u05d9\u05d1\u05d0\u05d8\u05d9', 'KH': u'\u05e7\u05de\u05d1\u05d5\u05d3\u05d9\u05d4', 'KN': u'\u05e1\u05e0\u05d8 \u05e7\u05d9\u05d8\u05e1 \u05d5\u05e0\u05d9\u05d1\u05e1', 'KM': u'\u05e7\u05d5\u05de\u05d5\u05e8\u05d5\u05e1', 'ST': u'\u05e1\u05df \u05ea\u05d5\u05de\u05d4 \u05d5\u05e4\u05e8\u05d9\u05e0\u05e1\u05d9\u05e4\u05d4', 'SK': u'\u05e1\u05dc\u05d5\u05d1\u05e7\u05d9\u05d4', 'KR': u'\u05e7\u05d5\u05e8\u05d9\u05d0\u05d4, \u05d3\u05e8\u05d5\u05dd', 'SI': u'\u05e1\u05dc\u05d5\u05d1\u05e0\u05d9\u05d4', 'KP': u'\u05e7\u05d5\u05e8\u05d9\u05d0\u05d4, \u05e6\u05e4\u05d5\u05df', 'KW': u'\u05db\u05d5\u05d5\u05d9\u05ea', 'SN': u'\u05e1\u05e0\u05d2\u05dc', 'SM': u'\u05e1\u05df \u05de\u05e8\u05d9\u05e0\u05d5', 'SL': u'\u05e1\u05d9\u05d9\u05e8\u05d4 \u05dc\u05d0\u05d5\u05e0\u05d4', 'SC': u'\u05d0\u05d9\u05d9 \u05e1\u05d9\u05d9\u05e9\u05dc', 'KZ': u'\u05e7\u05d6\u05d7\u05e1\u05d8\u05df', 'KY': u'\u05d0\u05d9\u05d9 \u05e7\u05d9\u05d9\u05de\u05d0\u05df', 'SG': u'\u05e1\u05d9\u05e0\u05d2\u05e4\u05d5\u05e8', 'SE': u'\u05e9\u05d5\u05d5\u05d3\u05d9\u05d4', 'SD': u'\u05e1\u05d5\u05d3\u05df', 'DO': u'\u05d4\u05e8\u05e4\u05d5\u05d1\u05dc\u05d9\u05e7\u05d4 \u05d4\u05d3\u05d5\u05de\u05d9\u05e0\u05d9\u05e7\u05e0\u05d9\u05ea', 'DM': u'\u05d3\u05d5\u05de\u05d9\u05e0\u05d9\u05e7\u05d4', 'DJ': u"\u05d2'\u05d9\u05d1\u05d5\u05d8\u05d9", 'DK': u'\u05d3\u05e0\u05de\u05e8\u05e7', 'VG': u'\u05d0\u05d9\u05d9 \u05d4\u05d1\u05ea\u05d5\u05dc\u05d4 \u05d4\u05d1\u05e8\u05d9\u05d8\u05d9\u05d9\u05dd', 'DE': u'\u05d2\u05e8\u05de\u05e0\u05d9\u05d4', 'YE': u'\u05ea\u05d9\u05de\u05df', 'DZ': u"\u05d0\u05dc\u05d2'\u05d9\u05e8\u05d9\u05d4", 'US': u'\u05d0\u05e8\u05e6\u05d5\u05ea \u05d4\u05d1\u05e8\u05d9\u05ea', 'UY': u'\u05d0\u05d5\u05e8\u05d5\u05d2\u05d5\u05d5\u05d0\u05d9', 'YU': u'\u05d9\u05d5\u05d2\u05d5\u05e1\u05dc\u05d1\u05d9\u05d4', 'YT': u'\u05de\u05d9\u05d5\u05d8\u05d4', 'UM': u'\u05d0\u05d9\u05d9\u05dd \u05e7\u05d8\u05e0\u05d9\u05dd \u05e9\u05dc\u05d7\u05d5\u05e3 \u05d0\u05e8\u05e6\u05d5\u05ea \u05d4\u05d1\u05e8\u05d9\u05ea', 'LB': u'\u05dc\u05d1\u05e0\u05d5\u05df', 'LC': u'\u05e1\u05e0\u05d8 \u05dc\u05d5\u05e9\u05d9\u05d4', 'LA': u'\u05dc\u05d0\u05d5\u05e1, \u05d4\u05e8\u05e4\u05d5\u05d1\u05dc\u05d9\u05e7\u05d4 \u05d4\u05d3\u05de\u05e7\u05d5\u05e8\u05d8\u05d9\u05ea \u05d4\u05e2\u05de\u05de\u05d9\u05ea', 'TV': u'\u05d8\u05d5\u05d1\u05d0\u05dc\u05d5', 'TW': u'\u05d8\u05d9\u05d5\u05d5\u05d0\u05df', 'TT': u'\u05d8\u05e8\u05d9\u05e0\u05d9\u05d3\u05d3 \u05d5\u05d8\u05d5\u05d1\u05d2\u05d5', 'TR': u'\u05d8\u05d5\u05e8\u05e7\u05d9\u05d4', 'LK': u'\u05e1\u05e8\u05d9 \u05dc\u05e0\u05e7\u05d4', 'LI': u'\u05dc\u05d9\u05db\u05d8\u05e0\u05e9\u05d8\u05d9\u05d9\u05df', 'LV': u'\u05dc\u05d8\u05d1\u05d9\u05d4', 'TO': u'\u05d8\u05d5\u05e0\u05d2\u05d4', 'LT': u'\u05dc\u05d9\u05d8\u05d0', 'LU': u'\u05dc\u05d5\u05e7\u05e1\u05de\u05d1\u05d5\u05e8\u05d2', 'LR': u'\u05dc\u05d9\u05d1\u05e8\u05d9\u05d4', 'LS': u'\u05dc\u05e1\u05d5\u05d8\u05d5', 'TH': u'\u05ea\u05d0\u05d9\u05dc\u05e0\u05d3', 'TF': u'\u05d8\u05e8\u05d9\u05d8\u05d5\u05e8\u05d9\u05d5\u05ea \u05d3\u05e8\u05d5\u05de\u05d9\u05d5\u05ea \u05e9\u05dc \u05e6\u05e8\u05e4\u05ea', 'TG': u'\u05d8\u05d5\u05d2\u05d5', 'TD': u"\u05e6'\u05d0\u05d3", 'TC': u'\u05d0\u05d9\u05d9 \u05d8\u05d5\u05e8\u05e7\u05e1 \u05d5\u05e7\u05d0\u05d9\u05e7\u05d5\u05e1', 'LY': u'\u05dc\u05d5\u05d1', 'VA': u'\u05d4\u05d5\u05d5\u05ea\u05d9\u05e7\u05df', 'VC': u'\u05e1\u05e0\u05d8 \u05d5\u05d9\u05e0\u05e1\u05e0\u05d8 \u05d5\u05d4\u05d2\u05e8\u05e0\u05d3\u05d9\u05e0\u05d9\u05dd', 'AE': u'\u05d0\u05d9\u05d7\u05d5\u05d3 \u05d4\u05d0\u05de\u05d9\u05e8\u05d5\u05d9\u05d5\u05ea \u05d4\u05e2\u05e8\u05d1\u05d9\u05d5\u05ea', 'AD': u'\u05d0\u05e0\u05d3\u05d5\u05e8\u05d4', 'AG': u'\u05d0\u05e0\u05d8\u05d9\u05d2\u05d5\u05d0\u05d4 \u05d5\u05d1\u05e8\u05d1\u05d5\u05d3\u05d4', 'AF': u'\u05d0\u05e4\u05d2\u05e0\u05d9\u05e1\u05d8\u05df', 'AI': u'\u05d0\u05e0\u05d2\u05d9\u05dc\u05d4', 'VI': u'\u05d0\u05d9\u05d9 \u05d4\u05d1\u05ea\u05d5\u05dc\u05d4 \u05d4\u05d0\u05de\u05e8\u05d9\u05e7\u05e0\u05d9\u05d9\u05dd', 'IS': u'\u05d0\u05d9\u05e1\u05dc\u05e0\u05d3', 'IR': u'\u05d0\u05d9\u05e8\u05d0\u05df, \u05d4\u05e8\u05e4\u05d5\u05d1\u05dc\u05d9\u05e7\u05d4 \u05d4\u05d0\u05d9\u05e1\u05dc\u05de\u05d9\u05ea', 'AM': u'\u05d0\u05e8\u05de\u05e0\u05d9\u05d4', 'AL': u'\u05d0\u05dc\u05d1\u05e0\u05d9\u05d4', 'AO': u'\u05d0\u05e0\u05d2\u05d5\u05dc', 'AN': u'\u05d4\u05d0\u05d9\u05e0\u05d8\u05d9\u05dc\u05d9\u05dd \u05d4\u05d4\u05d5\u05dc\u05e0\u05d3\u05d9\u05d9\u05dd', 'AQ': u'\u05d0\u05e0\u05d8\u05d0\u05e8\u05e7\u05d8\u05d9\u05e7\u05d4', 'AS': u'\u05e1\u05de\u05d5\u05d0\u05d4 \u05d4\u05d0\u05de\u05e8\u05d9\u05e7\u05e0\u05d9\u05ea', 'AR': u'\u05d0\u05e8\u05d2\u05e0\u05d8\u05d9\u05e0\u05d4', 'AU': u'\u05d0\u05d5\u05e1\u05d8\u05e8\u05dc\u05d9\u05d4', 'AT': u'\u05d0\u05d5\u05e1\u05d8\u05e8\u05d9\u05d4', 'AW': u'\u05d0\u05e8\u05d5\u05d1\u05d4', 'IN': u'\u05d4\u05d5\u05d3\u05d5', 'TZ': u'\u05d8\u05e0\u05d6\u05e0\u05d9\u05d4', 'AZ': u"\u05d0\u05d6\u05e8\u05d1\u05d9\u05d9\u05d2'\u05df", 'IE': u'\u05d0\u05d9\u05e8\u05dc\u05e0\u05d3', 'ID': u'\u05d0\u05d9\u05e0\u05d3\u05d5\u05e0\u05d6\u05d9\u05d4', 'UA': u'\u05d0\u05d5\u05e7\u05e8\u05d0\u05d9\u05e0\u05d4', 'QA': u'\u05e7\u05d8\u05e8', 'MZ': u'\u05de\u05d5\u05d6\u05de\u05d1\u05d9\u05e7'} months=[u'\u05d9\u05e0\u05d5\u05d0\u05e8', u'\u05e4\u05d1\u05e8\u05d5\u05d0\u05e8', u'\u05de\u05e8\u05e5', u'\u05d0\u05e4\u05e8\u05d9\u05dc', u'\u05de\u05d0\u05d9', u'\u05d9\u05d5\u05e0\u05d9', u'\u05d9\u05d5\u05dc\u05d9', u'\u05d0\u05d5\u05d2\u05d5\u05e1\u05d8', u'\u05e1\u05e4\u05d8\u05de\u05d1\u05e8', u'\u05d0\u05d5\u05e7\u05d8\u05d5\u05d1\u05e8', u'\u05e0\u05d5\u05d1\u05de\u05d1\u05e8', u'\u05d3\u05e6\u05de\u05d1\u05e8'] abbrMonths=[u'\u05d9\u05e0\u05d5', u'\u05e4\u05d1\u05e8', u'\u05de\u05e8\u05e5', u'\u05d0\u05e4\u05e8', u'\u05de\u05d0\u05d9', u'\u05d9\u05d5\u05e0', u'\u05d9\u05d5\u05dc', u'\u05d0\u05d5\u05d2', u'\u05e1\u05e4\u05d8', u'\u05d0\u05d5\u05e7', u'\u05e0\u05d5\u05d1', u'\u05d3\u05e6\u05de'] days=[u'\u05d9\u05d5\u05dd \u05e9\u05e0\u05d9', u'\u05d9\u05d5\u05dd \u05e9\u05dc\u05d9\u05e9\u05d9', u'\u05d9\u05d5\u05dd \u05e8\u05d1\u05d9\u05e2\u05d9', u'\u05d9\u05d5\u05dd \u05d7\u05de\u05d9\u05e9\u05d9', u'\u05d9\u05d5\u05dd \u05e9\u05d9\u05e9\u05d9', u'\u05e9\u05d1\u05ea', u'\u05d9\u05d5\u05dd \u05e8\u05d0\u05e9\u05d5\u05df'] abbrDays=[u'\u05d1', u'\u05d2', u'\u05d3', u'\u05d4', u'\u05d5', u'\u05e9', u'\u05d0'] dateFormats={'medium': '%d/%m/%Y', 'full': '%%(dayname)s %d %%(monthname)s %Y', 'long': '%d %%(monthname)s %Y', 'short': '%d/%m/%y'} numericSymbols={'group': ',', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': '.', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'} PKA>p`--turbogears/i18n/data/he.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE'o--turbogears/i18n/data/he_IL.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdEY;;turbogears/i18n/data/hi.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didjz;;turbogears/i18n/data/hi_IN.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didjGr&&turbogears/i18n/data/hr.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dld<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<ddd?d@dAdBgZhdCdD<dEdF<dGdF<dHdD@&&turbogears/i18n/data/hr_HR.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dld<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<ddd?d@dAdBgZhdCdD<dEdF<dGdF<dHdDGZ33turbogears/i18n/data/hu.pyc; ȸHIc @shdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFd:<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddu܌33turbogears/i18n/data/hu_HU.pyc; ȸHIc @shdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFd:<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddf3turbogears/i18n/data/hy.pyc; ȸHIc @sHhddd?<d@dA<dBdC<dDdE<dFdG<dHdI @)turbogears/i18n/data/hy_AM.pyc; ȸHIc @sHhddd?<d@dA<dBdC<dDdE<dFdG<dHdI2l]&turbogears/i18n/data/hy_AM_REVISED.pyc; ȸHIc @sHhddd?<d@dA<dBdC<dDdE<dFdG<dHdI{vF;F;turbogears/i18n/data/id.pyc; ȸHIc @sthdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d?d<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drdq<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd9<dde<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd?<dd<d d=<d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCd<dDd<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<ded<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|dS<d}d <d~d<dd<dd<dd&E;E;turbogears/i18n/data/id_ID.pyc; ȸHIc @sthdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d?d<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drdq<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd9<dde<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd?<dd<d d=<d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCd<dDd<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<ded<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|dS<d}d <d~d<dd<dd<dditurbogears/i18n/data/is.pyc; ȸHIc @sHhddd?<d@dA<dBdC<dDdE<dFdG<2~turbogears/i18n/data/is_IS.pyc; ȸHIc @sHhddd?<d@dA<dBdC<dDdE<dFdGn7G*G*turbogears/i18n/data/it.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh-\K*K*turbogears/i18n/data/it_CH.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdhwJ*J*turbogears/i18n/data/it_IT.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdhLX5==turbogears/i18n/data/ja.pyc; ȸHIc @shdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d?d@<dAdB<dCdDב==turbogears/i18n/data/ja_JP.pyc; ȸHIc @shdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d?d@<dAdB<dCdDrturbogears/i18n/data/kk.pyc; ȸHIc @sHhddd?<d@dA<dBdC<dDdE<dFdG<dHdI͹*@turbogears/i18n/data/kk_KZ.pyc; ȸHIc @sHhddd?<d@dA<dBdC<dDdE<dFdG<dHdIturbogears/i18n/data/kl.pyc; ȸHIc @sHhdd<d?d@<dAdB<dCdD<dEdF<dGdHZturbogears/i18n/data/kl_GL.pyc; ȸHIc @sHhdd<d?d@<dAdB<dCdD<dEdF<dGdH turbogears/i18n/data/kn.pyc; ȸHIc @sHhddS(?sknuಕನ್ನಡsINu ಭಾರತuಜನವರೀuಫೆಬ್ರವರೀuಮಾರ್ಚ್uಎಪ್ರಿಲ್uಮೆu ಜೂನ್u ಜುಲೈuಆಗಸ್ಟ್uಸಪ್ಟೆಂಬರ್uಅಕ್ಟೋಬರ್uನವೆಂಬರ್uಡಿಸೆಂಬರ್uಸೋಮವಾರuಮಂಗಳವಾರuಬುಧವಾರuಗುರುವಾರuಶುಕ್ರವಾರuಶನಿವಾರuರವಿವಾರuಸೋ.uಮಂ.uಬು.uಗು.uಶು.u ಶನಿ.uರ.smediums%Y %%(abbrmonthname)s %d sfulls#%%(dayname)s, %Y %%(monthname)s %d slongs%Y %%(monthname)s %d sshorts%y/%m/%dsgroups,snativeZeroDigits0s exponentialsEsperMilleu‰snanu�sdecimals.s percentSigns%slists;s patternDigits#splusSigns+sinfinityu∞s minusSigns-N(s languagess countriessmonthss abbrMonthssdayssabbrDayss dateFormatssnumericSymbols(sabbrDayssnumericSymbolss countriessmonthssdayss abbrMonthss languagess dateFormats((s0build\bdist.win32\egg\turbogears\i18n\data\kn.pys?s***PKK96dturbogears/i18n/data/kn_IN.py# Formatting configuration for locale kn_IN languages={'kn': u'\u0c95\u0ca8\u0ccd\u0ca8\u0ca1'} countries={'IN': u'\u0cad\u0cbe\u0cb0\u0ca4'} months=[u'\u0c9c\u0ca8\u0cb5\u0cb0\u0cc0', u'\u0cab\u0cc6\u0cac\u0ccd\u0cb0\u0cb5\u0cb0\u0cc0', u'\u0cae\u0cbe\u0cb0\u0ccd\u0c9a\u0ccd', u'\u0c8e\u0caa\u0ccd\u0cb0\u0cbf\u0cb2\u0ccd', u'\u0cae\u0cc6', u'\u0c9c\u0cc2\u0ca8\u0ccd', u'\u0c9c\u0cc1\u0cb2\u0cc8', u'\u0c86\u0c97\u0cb8\u0ccd\u0c9f\u0ccd', u'\u0cb8\u0caa\u0ccd\u0c9f\u0cc6\u0c82\u0cac\u0cb0\u0ccd', u'\u0c85\u0c95\u0ccd\u0c9f\u0ccb\u0cac\u0cb0\u0ccd', u'\u0ca8\u0cb5\u0cc6\u0c82\u0cac\u0cb0\u0ccd', u'\u0ca1\u0cbf\u0cb8\u0cc6\u0c82\u0cac\u0cb0\u0ccd'] abbrMonths=[u'\u0c9c\u0ca8\u0cb5\u0cb0\u0cc0', u'\u0cab\u0cc6\u0cac\u0ccd\u0cb0\u0cb5\u0cb0\u0cc0', u'\u0cae\u0cbe\u0cb0\u0ccd\u0c9a\u0ccd', u'\u0c8e\u0caa\u0ccd\u0cb0\u0cbf\u0cb2\u0ccd', u'\u0cae\u0cc6', u'\u0c9c\u0cc2\u0ca8\u0ccd', u'\u0c9c\u0cc1\u0cb2\u0cc8', u'\u0c86\u0c97\u0cb8\u0ccd\u0c9f\u0ccd', u'\u0cb8\u0caa\u0ccd\u0c9f\u0cc6\u0c82\u0cac\u0cb0\u0ccd', u'\u0c85\u0c95\u0ccd\u0c9f\u0ccb\u0cac\u0cb0\u0ccd', u'\u0ca8\u0cb5\u0cc6\u0c82\u0cac\u0cb0\u0ccd', u'\u0ca1\u0cbf\u0cb8\u0cc6\u0c82\u0cac\u0cb0\u0ccd'] days=[u'\u0cb8\u0ccb\u0cae\u0cb5\u0cbe\u0cb0', u'\u0cae\u0c82\u0c97\u0cb3\u0cb5\u0cbe\u0cb0', u'\u0cac\u0cc1\u0ca7\u0cb5\u0cbe\u0cb0', u'\u0c97\u0cc1\u0cb0\u0cc1\u0cb5\u0cbe\u0cb0', u'\u0cb6\u0cc1\u0c95\u0ccd\u0cb0\u0cb5\u0cbe\u0cb0', u'\u0cb6\u0ca8\u0cbf\u0cb5\u0cbe\u0cb0', u'\u0cb0\u0cb5\u0cbf\u0cb5\u0cbe\u0cb0'] abbrDays=[u'\u0cb8\u0ccb.', u'\u0cae\u0c82.', u'\u0cac\u0cc1.', u'\u0c97\u0cc1.', u'\u0cb6\u0cc1.', u'\u0cb6\u0ca8\u0cbf.', u'\u0cb0.'] dateFormats={'medium': '%d-%m-%Y', 'full': '%%(dayname)s %d %%(monthname)s %Y', 'long': '%d %%(monthname)s %Y', 'short': '%d-%m-%y'} numericSymbols={'group': ',', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': '.', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'} PKA>S ppturbogears/i18n/data/kn_IN.pyc; ȸHIc @sHhddS(?sknuಕನ್ನಡsINu ಭಾರತuಜನವರೀuಫೆಬ್ರವರೀuಮಾರ್ಚ್uಎಪ್ರಿಲ್uಮೆu ಜೂನ್u ಜುಲೈuಆಗಸ್ಟ್uಸಪ್ಟೆಂಬರ್uಅಕ್ಟೋಬರ್uನವೆಂಬರ್uಡಿಸೆಂಬರ್uಸೋಮವಾರuಮಂಗಳವಾರuಬುಧವಾರuಗುರುವಾರuಶುಕ್ರವಾರuಶನಿವಾರuರವಿವಾರuಸೋ.uಮಂ.uಬು.uಗು.uಶು.u ಶನಿ.uರ.smediums%d-%m-%Ysfulls!%%(dayname)s %d %%(monthname)s %Yslongs%d %%(monthname)s %Ysshorts%d-%m-%ysgroups,snativeZeroDigits0s exponentialsEsperMilleu‰snanu�sdecimals.s percentSigns%slists;s patternDigits#splusSigns+sinfinityu∞s minusSigns-N(s languagess countriessmonthss abbrMonthssdayssabbrDayss dateFormatssnumericSymbols(sabbrDayssnumericSymbolss countriessmonthssdayss abbrMonthss languagess dateFormats((s3build\bdist.win32\egg\turbogears\i18n\data\kn_IN.pys?s***PKK949:c<c<turbogears/i18n/data/ko.py# Formatting configuration for locale ko languages={'gv': u'\ub9f9\ud06c\uc2a4\uc5b4', 'gu': u'\uad6c\uc790\ub77c\ud2b8\uc5b4', 'gd': u'\uc2a4\ucf54\uac24\ub9ad\uc5b4', 'ga': u'\uc544\uc77c\ub79c\ub4dc\uc5b4', 'gn': u'\uad6c\uc544\ub77c\ub2c8\uc5b4', 'gl': u'\uac08\ub9ac\uc2dc\uc544\uc5b4', 'la': u'\ub77c\ud2f4\uc5b4', 'ln': u'\ub9c1\uac08\ub77c\uc5b4', 'lo': u'\ub77c\uc624\uc5b4', 'tt': u'\ud0c0\ud0c0\ub974\uc5b4', 'tr': u'\ud130\ud0a4\uc5b4', 'ts': u'\ud1b5\uac00\uc5b4', 'lv': u'\ub77c\ud2b8\ube44\uc544\uc5b4', 'to': u'\ud1b5\uac00\uc5b4', 'lt': u'\ub9ac\ud22c\uc544\ub2c8\uc544\uc5b4', 'tk': u'\ud22c\ub974\ud06c\uba58\uc5b4', 'th': u'\ud0dc\uad6d\uc5b4', 'ti': u'\ud2f0\uadf8\ub9ac\ub0d0\uc5b4', 'tg': u'\ud0c0\uc9c0\ud0a4\uc2a4\ud0c4\uc5b4', 'te': u'\ud154\ub8e8\uad6c\uc5b4', 'haw': u'\ud558\uc640\uc774\uc5b4', 'yi': u'\uc774\ub514\uc2dc\uc5b4', 'yo': u'\uc694\ub8e8\ubc14\uc5b4', 'de': u'\ub3c5\uc77c\uc5b4', 'da': u'\ub374\ub9c8\ud06c\uc5b4', 'dz': u'\ubd80\ud0c4\uc5b4', 'st': u'\uc138\uc18c\ud1a0\uc5b4', 'qu': u'\ucf00\ucd94\uc544\uc5b4', 'el': u'\uadf8\ub9ac\uc2a4\uc5b4', 'eo': u'\uc5d0\uc2a4\ud398\ub780\ud1a0\uc5b4', 'en': u'\uc601\uc5b4', 'zh': u'\uc911\uad6d\uc5b4', 'za': u'\uc8fc\uc559\uc5b4', 'uk': u'\uc6b0\ud06c\ub77c\uc774\ub098\uc5b4', 'eu': u'\ubc14\uc2a4\ud06c\uc5b4', 'et': u'\uc5d0\uc2a4\ud1a0\ub2c8\uc544\uc5b4', 'es': u'\uc2a4\ud398\uc778\uc5b4', 'ru': u'\ub7ec\uc2dc\uc544\uc5b4', 'rw': u'\ubc18\ud22c\uc5b4(\ub8e8\uc644\ub2e4)', 'rm': u'\ub808\ud1a0\ub85c\ub9cc\uc5b4', 'rn': u'\ubc18\ud22c\uc5b4(\ubd80\ub8ec\ub514)', 'ro': u'\ub8e8\ub9c8\ub2c8\uc544\uc5b4', 'bn': u'\ubcb5\uace8\uc5b4', 'be': u'\ubca8\ub85c\ub8e8\uc2dc\uc5b4', 'bg': u'\ubd88\uac00\ub9ac\uc544\uc5b4', 'ba': u'\ubc14\uc288\ud0a4\ub974\uc5b4', 'wo': u'\uc62c\ub85c\ud504\uc5b4', 'jv': u'\uc790\ubc14\uc5b4', 'bo': u'\ud2f0\ubca0\ud2b8\uc5b4', 'bh': u'\ube44\ud558\ub974\uc5b4', 'bi': u'\ube44\uc2ac\ub77c\ub9c8\uc5b4', 'br': u'\ube0c\ub974\ud0c0\ub274\uc5b4', 'ja': u'\uc77c\ubcf8\uc5b4', 'om': u'\uc624\ub85c\ubaa8\uc5b4 (\uc544\ud310)', 'oc': u'\uc625\uc2dc\ud2b8\uc5b4', 'tw': u'\ud2b8\uc704\uc5b4', 'or': u'\uc624\ub9ac\uc57c\uc5b4', 'xh': u'\ubc18\ud22c\uc5b4(\ub0a8\uc544\ud504\ub9ac\uce74)', 'co': u'\ucf54\ub974\uc2dc\uce74\uc5b4', 'ca': u'\uce74\ud0c8\ub85c\ub2c8\uc544\uc5b4', 'cy': u'\uc6e8\uc77c\uc2a4\uc5b4', 'cs': u'\uccb4\ucf54\uc5b4', 'ps': u'\ud30c\uc2dc\ud1a0\uc5b4 (\ud478\uc2dc\ud1a0)', 'pt': u'\ud3ec\ub974\ud22c\uce7c\uc5b4', 'tl': u'\ud0c0\uac08\ub85c\uadf8\uc5b4', 'pa': u'\ud380\uc7a1\uc5b4', 'vi': u'\ubca0\ud2b8\ub0a8\uc5b4', 'pl': u'\ud3f4\ub780\ub4dc\uc5b4', 'hy': u'\uc544\ub974\uba54\ub2c8\uc544\uc5b4', 'hr': u'\ud06c\ub85c\uc544\ud2f0\uc544\uc5b4', 'iu': u'\uc774\ub205\ud2f0\ud22c\ud2b8\uc5b4', 'hu': u'\ud5dd\uac00\ub9ac\uc5b4', 'hi': u'\ud78c\ub514\uc5b4', 'ha': u'\ud558\uc6b0\uc790\uc5b4', 'he': u'\ud788\ube0c\ub9ac\uc5b4', 'mg': u'\ub9c8\ub2e4\uac00\uc2a4\uce74\ub974\uc5b4', 'uz': u'\uc6b0\uc988\ubca0\ud06c\uc5b4', 'ml': u'\ub9d0\ub77c\uc584\ub78c\uc5b4', 'mo': u'\ubab0\ub2e4\ube44\uc544\uc5b4', 'mn': u'\ubabd\uace8\uc5b4', 'mi': u'\ub9c8\uc624\ub9ac\uc5b4', 'ik': u'\uc774\ub204\ud53c\uc544\ud06c\uc5b4', 'mk': u'\ub9c8\ucf00\ub3c4\ub2c8\uc544\uc5b4', 'ur': u'\uc6b0\ub974\ub450\uc5b4', 'mt': u'\ubab0\ud0c0\uc5b4', 'ms': u'\ub9d0\ub808\uc774\uc5b4', 'mr': u'\ub9c8\ub77c\ud2f0\uc5b4', 'ug': u'\uc704\uad6c\ub974\uc5b4', 'ta': u'\ud0c0\ubc00\uc5b4', 'my': u'\ubc84\ub9c8\uc5b4', 'aa': u'\uc544\ud30c\ub974\uc5b4', 'ab': u'\uc555\uce74\uc988\uc5b4', 'ss': u'\uc2dc\uc2a4\uc640\ud2f0\uc5b4', 'af': u'\ub0a8\uc544\uacf5 \uacf5\uc6a9\uc5b4', 'tn': u'\uc138\uce20\uc640\ub098\uc5b4', 'sw': u'\uc2a4\uc640\ud790\ub9ac\uc5b4', 'is': u'\uc544\uc774\uc2ac\ub780\ub4dc\uc5b4', 'am': u'\uc554\ud558\ub77c\uc5b4', 'it': u'\uc774\ud0c8\ub9ac\uc544\uc5b4', 'sv': u'\uc2a4\uc6e8\ub374\uc5b4', 'ia': u'\uc778\ud130\ub9c1\uac70', 'as': u'\uc544\uc0d8\uc5b4', 'ar': u'\uc544\ub78d\uc5b4', 'su': u'\uc21c\ub2e8\uc5b4', 'zu': u'\uc904\ub8e8\uc5b4', 'ay': u'\uc544\uc774\ub9c8\ub77c\uc5b4', 'az': u'\uc544\uc81c\ub974\ubc14\uc774\uc794\uc5b4', 'ie': u'\uc778\ud130\ub9c1\uac8c\uc5b4', 'id': u'\uc778\ub3c4\ub124\uc2dc\uc544\uc5b4', 'sk': u'\uc2ac\ub85c\ubc14\ud0a4\uc544\uc5b4', 'nl': u'\ub124\ub35c\ub780\ub4dc\uc5b4', 'nn': u'\ub258\ub178\ub974\uc2a4\ud06c \ub178\ub974\uc6e8\uc774\uc5b4', 'no': u'\ub178\ub974\uc6e8\uc774\uc5b4', 'na': u'\ub098\uc6b0\ub8e8\uc5b4', 'nb': u'\ubcf4\ud06c\ub9d0 \ub178\ub974\uc6e8\uc774\uc5b4', 'ne': u'\ub124\ud314\uc5b4', 'vo': u'\ubcfc\ub77c\ud4cc\ud06c\uc5b4', 'so': u'\uc18c\ub9d0\ub9ac\uc544\uc5b4', 'fr': u'\ud504\ub791\uc2a4\uc5b4', 'sm': u'\uc0ac\ubaa8\uc544\uc5b4', 'fy': u'\ud504\ub9ac\uc9c0\uc544\uc5b4', 'fa': u'\uc774\ub780\uc5b4', 'fi': u'\ud540\ub780\ub4dc\uc5b4', 'fj': u'\ud53c\uc9c0\uc5b4', 'sa': u'\uc0b0\uc2a4\ud06c\ub9ac\ud2b8\uc5b4', 'fo': u'\ud398\ub85c\uc2a4\uc5b4', 'ka': u'\uadf8\ub8e8\uc9c0\uc57c\uc5b4', 'kk': u'\uce74\uc790\ud750\uc5b4', 'sr': u'\uc138\ub974\ube44\uc544\uc5b4', 'sq': u'\uc54c\ubc14\ub2c8\uc544\uc5b4', 'ko': u'\ud55c\uad6d\uc5b4', 'kn': u'\uce74\ub098\ub2e4\uc5b4', 'km': u'\uce84\ubcf4\ub514\uc544\uc5b4', 'kl': u'\uadf8\ub9b0\ub79c\ub4dc\uc5b4', 'ks': u'\uce74\uc288\ubbf8\ub974\uc5b4', 'si': u'\uc2a4\ub9ac\ub791\uce74\uc5b4', 'sh': u'\uc138\ub974\ubcf4\ud06c\ub85c\uc544\ud2f0\uc544\uc5b4', 'kw': u'\ucf58\uc6d4\uc5b4', 'sn': u'\uc1fc\ub098\uc5b4', 'ku': u'\ud06c\ub974\ub4dc\uc5b4', 'sl': u'\uc2ac\ub85c\ubca0\ub2c8\uc544\uc5b4', 'ky': u'\ud0a4\ub974\uae30\uc2a4\uc5b4', 'sg': u'\uc0b0\uace0\uc5b4', 'sd': u'\uc2e0\ub514\uc5b4'} countries={'BD': u'\ubc29\uae00\ub77c\ub370\uc2dc', 'BE': u'\ubca8\uae30\uc5d0', 'BF': u'\ubd80\ub974\ud0a4\ub098\ud30c\uc18c', 'BG': u'\ubd88\uac00\ub9ac\uc544', 'BA': u'\ubcf4\uc2a4\ub2c8\uc544 \ud5e4\ub974\uccb4\uace0\ube44\ub098', 'BB': u'\ubc14\ubca0\uc774\ub3c4\uc2a4', 'WF': u'\uc648\ub9ac\uc2a4-\ud478\ud22c\ub098 \uc81c\ub3c4', 'BM': u'\ubc84\ubba4\ub2e4', 'BN': u'\ube0c\ub8e8\ub098\uc774', 'BO': u'\ubcfc\ub9ac\ube44\uc544', 'BH': u'\ubc14\ub808\uc778', 'BI': u'\ubd80\ub8ec\ub514', 'BJ': u'\ubca0\ub139', 'BT': u'\ubd80\ud0c4', 'JM': u'\uc790\uba54\uc774\uce74', 'BV': u'\ubd80\ubca0', 'BW': u'\ubcf4\uce20\uc640\ub098', 'WS': u'\uc0ac\ubaa8\uc544', 'BR': u'\ube0c\ub77c\uc9c8', 'BS': u'\ubc14\ud558\ub9c8', 'BY': u'\ubca8\ub77c\ub8e8\uc2a4', 'BZ': u'\ubca8\ub9ac\uc988', 'RU': u'\ub7ec\uc2dc\uc544', 'RW': u'\ub974\uc644\ub2e4', 'TL': u'\ub3d9\ud2f0\ubaa8\ub974', 'RE': u'\ub9ac\uc720\ub2c8\uc628', 'TM': u'\ud22c\ub974\ud06c\uba54\ub2c8\uc2a4\ud0c4', 'TJ': u'\ud0c0\uc9c0\ud0a4\uc2a4\ud0c4', 'RO': u'\ub8e8\ub9c8\ub2c8\uc544', 'TK': u'\ud1a0\ucf08\ub77c\uc6b0', 'GW': u'\uae30\ub124\ube44\uc3d8', 'GU': u'\uad0c', 'GT': u'\uacfc\ud14c\ub9d0\ub77c', 'GS': u'\uc0ac\uc6b0\uc2a4\uc870\uc9c0\uc544-\uc0ac\uc6b0\uc2a4\uc0cc\ub4dc\uc704\uce58\uc81c\ub3c4', 'GR': u'\uadf8\ub9ac\uc2a4', 'GQ': u'\uc801\ub3c4 \uae30\ub2c8', 'GP': u'\uacfc\ub2ec\ub85c\ud504', 'JP': u'\uc77c\ubcf8', 'GY': u'\uac00\uc774\uc544\ub098', 'GF': u'\ud504\ub791\uc2a4\ub839 \uae30\uc544\ub098', 'GE': u'\uadf8\ub8e8\uc9c0\uc57c', 'GD': u'\uadf8\ub808\ub098\ub2e4', 'GB': u'\uc601\uad6d', 'GA': u'\uac00\ubd09', 'SV': u'\uc5d8\uc0b4\ubc14\ub3c4\ub974', 'GN': u'\uae30\ub2c8', 'GM': u'\uac10\ube44\uc544', 'GL': u'\uadf8\ub9b0\ub780\ub4dc', 'GI': u'\uc9c0\ube0c\ub864\ud130', 'GH': u'\uac00\ub098', 'OM': u'\uc624\ub9cc', 'TN': u'\ud280\ub2c8\uc9c0', 'JO': u'\uc694\ub974\ub2e8', 'SP': u'\uc138\ub974\ube44\uc544', 'HR': u'\ud06c\ub85c\uc544\ud2f0\uc544', 'HT': u'\ud558\uc774\ud2f0', 'HU': u'\ud5dd\uac00\ub9ac', 'HK': u'\ud64d\ucf69, \uc911\uad6d \ud2b9\ubcc4\ud589\uc815\uad6c', 'HN': u'\uc628\ub450\ub77c\uc2a4', 'HM': u'\ud5c8\ub4dc\uc12c-\ub9e5\ub3c4\ub110\ub4dc\uc81c\ub3c4', 'VE': u'\ubca0\ub124\uc218\uc5d8\ub77c', 'PR': u'\ud478\uc5d0\ub974\ud1a0\ub9ac\ucf54', 'PS': u'\ud314\ub808\uc2a4\ud0c0\uc778 \uc9c0\uad6c', 'PW': u'\ud314\ub77c\uc6b0', 'PT': u'\ud3ec\ub974\ud2b8\uce7c', 'SJ': u'\uc2a4\ubc1c\ubc14\ub974\uc81c\ub3c4-\uc580\ub9c8\uc6ec\uc12c', 'PY': u'\ud30c\ub77c\uacfc\uc774', 'IQ': u'\uc774\ub77c\ud06c', 'PA': u'\ud30c\ub098\ub9c8', 'PF': u'\ud504\ub791\uc2a4\ub839 \ud3f4\ub9ac\ub124\uc2dc\uc544', 'PG': u'\ud30c\ud478\uc544\ub274\uae30\ub2c8', 'PE': u'\ud398\ub8e8', 'PK': u'\ud30c\ud0a4\uc2a4\ud0c4', 'PH': u'\ud544\ub9ac\ud540', 'PN': u'\ud54f\ucf00\uc5b8\uc12c', 'PL': u'\ud3f4\ub780\ub4dc', 'PM': u'\uc138\uc778\ud2b8\ud53c\uc5d0\ub974-\ubbf8\ufffd\ub871', 'ZM': u'\uc7a0\ube44\uc544', 'EH': u'\uc11c\uc0ac\ud558\ub77c', 'EE': u'\uc5d0\uc2a4\ud1a0\ub2c8\uc544', 'EG': u'\uc774\uc9d1\ud2b8', 'ZA': u'\ub0a8\uc544\ud504\ub9ac\uce74', 'EC': u'\uc5d0\ucfe0\uc544\ub3c4\ub974', 'IT': u'\uc774\ud0c8\ub9ac\uc544', 'VN': u'\ubca0\ud2b8\ub0a8', 'SB': u'\uc194\ub85c\ubaac', 'ET': u'\uc774\ub514\uc624\ud53c\uc544', 'SO': u'\uc18c\ub9d0\ub9ac\uc544', 'ZW': u'\uc9d0\ubc14\ube0c\uc6e8', 'SA': u'\uc0ac\uc6b0\ub514\uc544\ub77c\ube44\uc544', 'ES': u'\uc2a4\ud398\uc778', 'ER': u'\uc5d0\ub9ac\ud2b8\ub9ac\uc544', 'MD': u'\ubab0\ub3c4\ubc14', 'MG': u'\ub9c8\ub2e4\uac00\uc2a4\uce74\ub974', 'MA': u'\ubaa8\ub85c\ucf54', 'MC': u'\ubaa8\ub098\ucf54', 'UZ': u'\uc6b0\uc988\ubca0\ud0a4\uc2a4\ud0c4', 'MM': u'\ubbf8\uc580\ub9c8', 'ML': u'\ub9d0\ub9ac', 'MO': u'\ub9c8\uce74\uc624, \uc911\uad6d \ud2b9\ubcc4\ud589\uc815\uad6c', 'MN': u'\ubabd\uace8', 'MH': u'\ub9c8\uc0ec \uad70\ub3c4', 'MK': u'\ub9c8\ucf00\ub3c4\ub2c8\uc544\uc5b4', 'MU': u'\ubaa8\ub9ac\uc154\uc2a4', 'MT': u'\ubab0\ud0c0', 'MW': u'\ub9d0\ub77c\uc704', 'MV': u'\ubab0\ub514\ube0c', 'MQ': u'\ub9d0\ud2f0\ub2c8\ud06c', 'MP': u'\ubd81\ub9c8\ub9ac\uc544\ub098\uc81c\ub3c4', 'MS': u'\ubaac\ud2b8\uc138\ub77c\ud2b8', 'MR': u'\ubaa8\ub9ac\ud0c0\ub2c8', 'UG': u'\uc6b0\uac04\ub2e4', 'MY': u'\ub9d0\ub808\uc774\uc9c0\uc544', 'MX': u'\uba55\uc2dc\ucf54', 'IL': u'\uc774\uc2a4\ub77c\uc5d8', 'FR': u'\ud504\ub791\uc2a4', 'IO': u'\uc601\uad6d\ub839\uc778\ub3c4\uc591\uc2dd\ubbfc\uc9c0', 'SH': u'\uc138\uc778\ud2b8\ud5ec\ub808\ub098', 'FI': u'\ud540\ub780\ub4dc', 'FJ': u'\ud53c\uc9c0', 'FK': u'\ud3ec\ud074\ub79c\ub4dc\uc81c\ub3c4', 'FM': u'\ub9c8\uc774\ud06c\ub85c\ub124\uc2dc\uc544', 'FO': u'\ud398\ub85c\uc81c\ub3c4', 'NI': u'\ub2c8\uce74\ub77c\uacfc', 'NL': u'\ub124\ub35c\ub780\ub4dc', 'NO': u'\ub178\ub974\uc6e8\uc774', 'NA': u'\ub098\ubbf8\ube44\uc544', 'VU': u'\ubc14\ub204\uc544\ud22c', 'NC': u'\ub274 \uce7c\ub808\ub3c4\ub2c8\uc544', 'NE': u'\ub2c8\uc81c\ub974', 'NF': u'\ub178\ud37d\uc12c', 'NG': u'\ub098\uc774\uc9c0\ub9ac\uc544', 'NZ': u'\ub274\uc9c8\ub79c\ub4dc', 'NP': u'\ub124\ud314', 'NR': u'\ub098\uc6b0\ub8e8', 'NU': u'\ub2c8\uc6b0\uc5d0', 'CK': u'\ucfe1\uc81c\ub3c4', 'CI': u'\ucf54\ud2b8\ub514\ubd80\uc640\ub974', 'CH': u'\uc2a4\uc704\uc2a4', 'CO': u'\ucf5c\ub86c\ube44\uc544', 'CN': u'\uc911\uad6d', 'CM': u'\uce74\uba54\ub8ec', 'CL': u'\uce60\ub808', 'CC': u'\ucf54\ucf54\uc2a4\uc81c\ub3c4', 'CA': u'\uce90\ub098\ub2e4', 'CG': u'\ucf69\uace0', 'CF': u'\uc911\uc559 \uc544\ud504\ub9ac\uce74', 'CD': u'\ucf69\uace0\ubbfc\uc8fc\uacf5\ud654\uad6d', 'CZ': u'\uccb4\ucf54', 'CY': u'\uc0ac\uc774\ud504\ub7ec\uc2a4', 'CX': u'\ud06c\ub9ac\uc2a4\ub9c8\uc2a4\uc12c', 'CR': u'\ucf54\uc2a4\ud0c0\ub9ac\uce74', 'CV': u'\uae4c\ubf40\ubca0\ub974\ub370', 'CU': u'\ucfe0\ubc14', 'SZ': u'\uc2a4\uc640\uc9c8\ub79c\ub4dc', 'SY': u'\uc2dc\ub9ac\uc544', 'KG': u'\ud0a4\ub974\uae30\uc2a4\uc2a4\ud0c4', 'KE': u'\ucf00\ub0d0', 'SR': u'\uc218\ub9ac\ub0a8', 'KI': u'\ud0a4\ub9ac\ubc14\uc2dc', 'KH': u'\uce84\ubcf4\ub514\uc544', 'KN': u'\uc138\uc778\ud2b8\ud06c\ub9ac\uc2a4\ud1a0\ud37c \ub124\ube44\uc2a4', 'KM': u'\ucf54\ubaa8\ub974', 'ST': u'\uc0c1\ud22c\uba54 \ud504\ub9b0\uc2dc\ud398', 'SK': u'\uc2ac\ub85c\ubc14\ud0a4\uc544', 'KR': u'\ub300\ud55c\ubbfc\uad6d', 'SI': u'\uc2ac\ub85c\ubca0\ub2c8\uc544', 'KP': u'\uc870\uc120 \ubbfc\uc8fc\uc8fc\uc758 \uc778\ubbfc \uacf5\ud654\uad6d', 'KW': u'\ucfe0\uc6e8\uc774\ud2b8', 'SN': u'\uc138\ub124\uac08', 'SM': u'\uc0b0\ub9c8\ub9ac\ub178', 'SL': u'\uc2dc\uc5d0\ub77c\ub9ac\uc628', 'SC': u'\uc250\uc774\uc258', 'KZ': u'\uce74\uc790\ud750\uc2a4\ud0c4', 'KY': u'\ucf00\uc774\ub9e8\uc81c\ub3c4', 'SG': u'\uc2f1\uac00\ud3ec\ub974', 'SE': u'\uc2a4\uc6e8\ub374', 'SD': u'\uc218\ub2e8', 'DO': u'\ub3c4\ubbf8\ub2c8\uce74 \uacf5\ud654\uad6d', 'DM': u'\ub3c4\ubbf8\ub2c8\uce74', 'DJ': u'\uc9c0\ubd80\ud2f0', 'DK': u'\ub374\ub9c8\ud06c', 'VG': u'\uc601\uad6d\ub839 \ubc84\uc9c4 \uc544\uc77c\ub79c\ub4dc', 'DE': u'\ub3c5\uc77c', 'YE': u'\uc608\uba58', 'DZ': u'\uc54c\uc81c\ub9ac', 'US': u'\ubbf8\uad6d', 'UY': u'\uc6b0\ub8e8\uacfc\uc774', 'YU': u'\uc720\uace0\uc2ac\ub77c\ube44\uc544', 'YT': u'\ub9c8\uc694\ud2f0', 'UM': u'\ubbf8\uad6d\ub839 \ud574\uc678 \uc81c\ub3c4', 'LB': u'\ub808\ubc14\ub17c', 'LC': u'\uc138\uc778\ud2b8\ub8e8\uc2dc\uc544', 'LA': u'\ub77c\uc624\uc2a4', 'TV': u'\ud22c\ubc1c\ub8e8', 'TW': u'\ub300\ub9cc', 'TT': u'\ud2b8\ub9ac\ub2c8\ub2e4\ub4dc \ud1a0\ubc14\uace0', 'TR': u'\ud130\ud0a4', 'LK': u'\uc2a4\ub9ac\ub791\uce74', 'LI': u'\ub9ac\ud788\ud150\uc288\ud0c0\uc778', 'LV': u'\ub77c\ud2b8\ube44\uc544', 'TO': u'\ud1b5\uac00', 'LT': u'\ub9ac\ud22c\uc544\ub2c8\uc544', 'LU': u'\ub8e9\uc148\ubd80\ub974\ud06c', 'LR': u'\ub77c\uc774\ubca0\ub9ac\uc544', 'LS': u'\ub808\uc18c\ud1a0', 'TH': u'\ud0dc\uad6d', 'TF': u'\ud504\ub791\uc2a4 \ub0a8\ubd80 \uc9c0\ubc29', 'TG': u'\ud1a0\uace0', 'TD': u'\ucc28\ub4dc', 'TC': u'\ud130\ud06c\uc2a4\ucf00\uc774\ucee4\uc2a4\uc81c\ub3c4', 'LY': u'\ub9ac\ube44\uc544', 'VA': u'\ubc14\ud2f0\uce78', 'VC': u'\uc138\uc778\ud2b8\ube48\uc13c\ud2b8\uadf8\ub808\ub098\ub518', 'AE': u'\uc544\ub78d\uc5d0\ubbf8\ub9ac\ud2b8', 'AD': u'\uc548\ub3c4\ub77c', 'AG': u'\uc564\ud2f0\uac00 \ubc14\ubd80\ub2e4', 'AF': u'\uc544\ud504\uac00\ub2c8\uc2a4\ud0c4', 'AI': u'\uc548\uae38\ub77c', 'VI': u'\ubbf8\uad6d\ub839 \ubc84\uc9c4 \uc544\uc77c\ub79c\ub4dc', 'IS': u'\uc544\uc774\uc2ac\ub780\ub4dc', 'IR': u'\uc774\ub780', 'AM': u'\uc544\ub974\uba54\ub2c8\uc544', 'AL': u'\uc54c\ubc14\ub2c8\uc544', 'AO': u'\uc559\uace8\ub77c', 'AN': u'\ub124\ub35c\ub780\ub4dc\ub839 \uc548\ud2f8\ub808\uc2a4', 'AQ': u'\ub0a8\uadf9 \ub300\ub959', 'AS': u'\uc544\uba54\ub9ac\uce78 \uc0ac\ubaa8\uc544', 'AR': u'\uc544\ub974\ud5e8\ud2f0\ub098', 'AU': u'\uc624\uc2a4\ud2b8\ub808\uc77c\ub9ac\uc544', 'AT': u'\uc624\uc2a4\ud2b8\ub9ac\uc544', 'AW': u'\uc544\ub8e8\ubc14', 'IN': u'\uc778\ub3c4', 'TZ': u'\ud0c4\uc790\ub2c8\uc544', 'AZ': u'\uc544\uc81c\ub974\ubc14\uc774\uc794', 'IE': u'\uc544\uc77c\ub79c\ub4dc', 'ID': u'\uc778\ub3c4\ub124\uc2dc\uc544', 'UA': u'\uc6b0\ud06c\ub77c\uc774\ub098', 'QA': u'\uce74\ud0c0\ub974', 'MZ': u'\ubaa8\uc7a0\ube44\ud06c'} months=[u'1\uc6d4', u'2\uc6d4', u'3\uc6d4', u'4\uc6d4', u'5\uc6d4', u'6\uc6d4', u'7\uc6d4', u'8\uc6d4', u'9\uc6d4', u'10\uc6d4', u'11\uc6d4', u'12\uc6d4'] abbrMonths=[u'1\uc6d4', u'2\uc6d4', u'3\uc6d4', u'4\uc6d4', u'5\uc6d4', u'6\uc6d4', u'7\uc6d4', u'8\uc6d4', u'9\uc6d4', u'10\uc6d4', u'11\uc6d4', u'12\uc6d4'] days=[u'\uc6d4\uc694\uc77c', u'\ud654\uc694\uc77c', u'\uc218\uc694\uc77c', u'\ubaa9\uc694\uc77c', u'\uae08\uc694\uc77c', u'\ud1a0\uc694\uc77c', u'\uc77c\uc694\uc77c'] abbrDays=[u'\uc6d4', u'\ud654', u'\uc218', u'\ubaa9', u'\uae08', u'\ud1a0', u'\uc77c'] dateFormats={'medium': '%Y-%m-%d', 'full': u'%Y\ub144 %m\uc6d4 %d\uc77c %%(dayname)s', 'long': u'%Y\ub144 %m\uc6d4 %d\uc77c %%{abbrdayname}s', 'short': '%y-%m-%d'} numericSymbols={'group': ',', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': '.', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'} PKA>ⱐv88turbogears/i18n/data/ko.pyc; ȸHIc @shdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddE,,turbogears/i18n/data/kok.pyc; ȸHIc @s+hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT88turbogears/i18n/data/kok_IN.pyc; ȸHIc @shdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd9B}88turbogears/i18n/data/ko_KR.pyc; ȸHIc @shdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd,turbogears/i18n/data/kw.pyc; ȸHIc @sHhddd?<d@dA<dBdC<dDdE<dFdG<dHdIzturbogears/i18n/data/kw_GB.pyc; ȸHIc @sHhddd?<d@dA<dBdC<dDdE<dFdG<dHdI ''turbogears/i18n/data/lt.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dld<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<ddd?d@dAdBgZhdCdD<dEdF<dGdH<dIdDm''turbogears/i18n/data/lt_LT.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dld<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<ddd?d@dAdBgZhdCdD<dEdF<dGdH<dIdD I>'>'turbogears/i18n/data/lv.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dld<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<ddd?d@dAdBgZhdCdD<dEdF<dGdH<dIdJ%T2A'A'turbogears/i18n/data/lv_LV.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dld<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<ddd?d@dAdBgZhdCdD<dEdF<dGdH<dIdJäpturbogears/i18n/data/mk.pyc; ȸHIc @sHhddd?<d@dA<dBdC<dDdE<dFdG<dHdIHGturbogears/i18n/data/mk_MK.pyc; ȸHIc @sHhddd?<d@dA<dBdC<dDdE<dFdG<dHdIp*\turbogears/i18n/data/mr.pyc; ȸHIc @s4hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddk<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT2turbogears/i18n/data/mr_IN.pyc; ȸHIc @s4hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddk<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdTTYI""turbogears/i18n/data/ms.pyc; ȸHIc @s hddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddJSW"W"turbogears/i18n/data/ms_BN.pyc; ȸHIc @s hddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddK,""turbogears/i18n/data/ms_MY.pyc; ȸHIc @s hddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd=J:[[turbogears/i18n/data/mt.pyc; ȸHIc @s5hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddi<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNd;<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dNd;<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd***PKK9qԜw??turbogears/i18n/data/mt_MT.py# Formatting configuration for locale mt_MT languages={'gv': 'Manks', 'gu': u'Gu\u0121arati', 'rom': u'\u017bingaru', 'alg': 'Lingwi Algonqwinjani', 'ale': 'Aleut', 'sco': u'Sko\u010b\u010bi\u017c', 'mni': 'Manipuri', 'gd': u'Galliku Sko\u010b\u010bi\u017c', 'ga': u'Irlandi\u017c', 'mno': 'Lingwi Manobo', 'osa': u'Osa\u0121jan', 'gn': 'Gwarani', 'gl': 'Gallegjan', 'mwr': 'Marwari', 'ty': u'Ta\u0127itjan', 'tw': 'Twi', 'tt': 'Tatar', 'tr': 'Tork', 'ts': 'Tsonga', 'tn': 'Zwana', 'to': u"Tongan (G\u017cejjer ta' Tonga)", 'aus': 'Lingwi Awstraljani', 'av': 'Avarik', 'tk': 'Turkmeni', 'th': u'Tajlandi\u017c', 'roa': u'Romanz (O\u0127ra)', 'tg': u'Ta\u0121ik', 'te': 'Telugu', 'uga': 'Ugaritiku', 'ta': 'Tamil', 'fat': 'Fanti', 'fan': 'Fang', 'wo': 'Wolof', 'rm': 'Reto-Romanz', 'din': 'Dinka', 'bla': 'Siksika', 'cmc': u'Lingwi \u010aamiki', 'ml': 'Malajalam', 'zh': u'\u010aini\u017c', 'tem': 'Timne', 'za': u'\u017bwang', 'cau': u'Kawkasu (O\u0127ra)', 'zu': u'\u017bulu', 'ter': 'Tereno', 'tet': 'Tetum', 'mnc': u'Man\u010burjan', 'kut': 'Kutenaj', 'suk': 'Sukuma', 'kum': 'Kumiku', 'sus': 'Susu', 'new': 'Newari', 'sux': 'Sumerjan', 'den': 'Slav', 'men': 'Mende', 'mul': 'Lingwi Diversi', 'lez': u'Le\u017cgjan', 'root': u'G\u0127erq', 'eka': 'Ekajuk', 'akk': 'Akkadjen', 'dra': u'Dravidjan (O\u0127ra)', 'jrb': u'Lhudi-G\u0127arbi', 'sgn': 'Lingwa tas-Sinjali', 'sga': u'Irlandi\u017c, Antik (sa l-900)', 'apa': u'Lingwi Apa\u010bi', 'bra': 'Braj', 'chb': u'\u010aib\u010ba', 'chg': u'\u010aagataj', 'chk': u'\u010aukese', 'chm': 'Mari', 'chn': u'\u0120argon ta\u010b-\u010ainuk', 'cho': u'\u010aostaw', 'chp': u'\u010aipewjan', 'chr': u'\u010aerokij', 'chy': 'Xajenn', 'ti': 'Tigrinja', 'vot': 'Votik', 'mg': u'Malaga\u017ci', 'iba': 'Iban', 'mo': 'Moldavjan', 'mn': 'Mongoljan', 'mi': 'Maori', 'mh': 'Marxall', 'mk': u'Ma\u010bedonjan', 'mt': 'Malti', 'cai': u'Amerika \u010aentrali (O\u0127ra)', 'del': 'Delawerjan', 'ms': 'Malajan', 'mr': 'Marati', 'my': u'Burmi\u017c', 'cad': 'Kaddo', 'tai': u'Tai (O\u0127ra)', 'afh': u'Afri\u0127ili', 'sit': u'Sino-Tibetjani (O\u0127ra)', 'enm': u'Ingli\u017c, Medjevali (1100-1500)', 'csb': 'Kashubian', 'nyn': 'Nyankole', 'nyo': 'Njoro', 'nym': u'Njamwe\u017ci', 'sio': 'Lingwi Suwjani', 'map': 'Awstronesjan', 'mas': 'Masaj', 'lah': 'Landa', 'lad': 'Ladino', 'fy': u'Fri\u017cjan', 'snk': 'Soninke', 'fa': 'Persjan', 'mad': u'Maduri\u017c', 'mag': u'Maga\u0127i', 'mai': 'Majtili', 'fi': u'Finlandi\u017c', 'fj': u'Fi\u0121i', 'man': 'Mandingwan', 'egy': u'E\u0121izzjan (Antik)', 'znd': u'\u017bande', 'ss': 'Swati', 'sr': 'Serb', 'sq': u'Albani\u017c', 'sw': u'Swa\u0127ili', 'sv': u'Svedi\u017c', 'su': u'Sundani\u017c', 'st': "Soto, t'Isfel", 'sk': 'Slovakk', 'si': u'Sin\u0127ali\u017c', 'sh': 'Serbo-Kroat', 'so': 'Somali', 'sn': 'Xona', 'sm': 'Samojan', 'sl': 'Slav', 'sc': 'Sardinjan', 'sa': 'Sanskrit', 'sg': 'Sango', 'se': "Sami ta' Fuq", 'sd': 'Sindi', 'zen': u'\u017benaga', 'kbd': 'Kabardian', 'afa': u'Afro-Asjatiku (O\u0127ra)', 'lg': 'Ganda', 'lb': u'Let\u017cburgi\u017c', 'fiu': 'Finno - Ugrijan', 'ln': 'Lingaljan', 'lo': 'Lao', 'li': 'Limburgish', 'byn': 'Blin', 'lt': 'Litwanjan', 'lu': 'Luba-Katanga', 'yi': 'Jiddix', 'non': 'Skandinav, Antik', 'ceb': 'Sibwano', 'yo': 'Joruba', 'nog': 'Nogai', 'bat': u'Baltiku (O\u0127ra)', 'dak': 'Dakota', 'dar': 'Dargwa', 'day': 'Dajak', 'ssa': u'Nilo-Sa\u0127aram', 'kpe': 'Kpelle', 'el': 'Grieg', 'eo': 'Esperanto', 'en': u'Ingli\u017c', 'lam': 'Lamba', 'ee': 'Ewe', 'mdf': 'Moksha', 'fr': u'Fran\u010bi\u017c', 'mdr': 'Mandar', 'et': 'Estonjan', 'es': 'Spanjol', 'ru': 'Russu', 'gon': 'Gondi', 'goh': u'\u0120ermaniku, Antik Pulit (ca. 750-1050)', 'sms': 'Skolt Sami', 'smn': 'Inari Sami', 'smj': 'Lule Sami', 'smi': 'Sami languages (Other)', 'got': 'Gotiku', 'rn': 'Rundi', 'ro': 'Rumen', 'dsb': 'Lower Sorbian', 'sma': 'Southern Sami', 'gor': 'Gorontalo', 'ast': 'Asturian', 'wal': 'Walamo', 'crh': 'Crimean Turkish; Crimean Tatar', 'ath': 'Lingwi Atabaskani', 'gez': 'Geez', 'xh': u'\u0126o\u017ca', 'ff': u'Fula\u0127', 'mak': 'Makasar', 'zap': u'\u017bapotek', 'kok': 'Konkani', 'kos': 'Kosrejan', 'fo': u'Fawri\u017c', 'tog': 'Tonga (Njasa)', 'hup': u'\u0126upa', 'udm': 'Udmurt', 'bej': 'Beja', 'bem': 'Bemba', 'tsi': 'Zimxjan', 'ber': 'Berber', 'nzi': u'N\u017cima', 'sai': u"Indjan tal-Amerika t'Isfel (O\u0127ra)", 'ang': u'Ingli\u017c, Antik (ca.450-1100)', 'pra': 'Lingwi Prakriti', 'bho': 'Bojpuri', 'sal': 'Salixan', 'pro': 'Provenzal, Antik (sa l-1500)', 'raj': u'Ra\u0121astani', 'sad': 'Sandawe', 'rar': 'Rarotongani', 'rap': 'Rapanwi', 'sas': 'Sasak', 'car': 'Karib', 'min': 'Minangkabaw', 'mic': 'Mikmek', 'efi': 'Efik', 'arn': 'Arawkanjan', 'ypk': u'Lingwi Jupi\u010bi', 'mis': u'Lingwi O\u0127ra', 'kac': u'Ka\u010bin', 'kab': 'Kabuljan', 'kaa': 'Kara-Kalpak', 'kam': 'Kamba', 'kar': 'Karen', 'kaw': 'Kawi', 'tyv': 'Tuvinjan', 'awa': u'Awad\u0127i', 'ka': u'\u0120or\u0121jan', 'doi': 'Dogri', 'kg': 'Kongo', 'kk': u'Ka\u017cak', 'kj': 'Kuanyama', 'ki': 'Kikuju', 'ko': 'Korejan', 'kn': 'Kannada', 'km': 'Kmer', 'kl': 'Kalallisut', 'ks': 'Kaxmiri', 'kr': 'Kanuri', 'kw': 'Korniku', 'kv': 'Komi', 'ku': u'Kurdi\u017c', 'ky': u'Kirgi\u017c', 'tkl': 'Tokelau', 'bua': 'Burjat', 'mga': u'Irlandi\u017c, Medjevali (900-1200)', 'hit': u'\u0126ittit', 'dyu': 'Djula', 'de': u'\u0120ermani\u017c', 'da': u'Dani\u017c', 'dz': u'D\u017congka', 'ira': 'Iranjan', 'dv': u'Dive\u0127i', 'hil': 'Hiligaynon', 'him': u'\u0126ima\u010bali', 'gem': u'\u0120ermaniku (O\u0127ra)', 'crp': u'Kreoli u Pi\u0121ini (O\u0127ra)', 'qu': u'Ke\u010bwa', 'bas': 'Basa', 'gba': 'Gbaja', 'bad': 'Banda', 'ban': u'Balini\u017c', 'bal': u'Balu\u010bi', 'bam': 'Bambara', 'shn': 'Xan', 'bai': 'Lingwi Bamileke', 'arp': u'Arapa\u0127o', 'art': u'Artifi\u010bjali (O\u0127ra)', 'arw': 'Arawak', 'arc': 'Aramajk', 'sem': 'Semitiku', 'sel': 'Selkup', 'nub': 'Lingwi Nubjani', 'btk': 'Batak', 'lus': 'Luxaj', 'mus': 'Kriek', 'lua': 'Luba-Luluwa', 'iro': 'Lingwi Irogwjani', 'lui': u'Luwisinu\u017c', 'mun': 'Lingwi tal-Munda', 'lun': 'Lunda', 'luo': 'Luwa', 'wa': 'Walloon', 'tup': 'Tupi languages', 'jv': u'\u0120avani\u017c', 'tut': u'Altajk (O\u0127ra)', 'tum': 'Tumbuka', 'ja': u'\u0120appuni\u017c', 'cop': 'Koptiku', 'ilo': 'Iloko', 'la': 'Latin', 'gwi': u'Gwi\u010bin', 'und': 'Indeterminat', 'tli': 'Tlingit', 'ch': u'\u010aamorro', 'co': 'Korsiku', 'ca': 'Katalan', 'ce': u'\u010ae\u010ben', 'pon': 'Ponpejan', 'cy': 'Welx', 'sah': 'Jakut', 'cs': u'\u010aek', 'cr': 'Krij', 'bnt': 'Bantu', 'cv': u'\u010auvax', 'cu': 'Slaviku tal-Knisja', 'lv': 'Latvjan (Lettix)', 'dum': u'Olandi\u017c, Medjevali (ca. 1050-1350)', 'pt': u'Portugi\u017c', 'dua': 'Dwala', 'fro': u'Fran\u010bi\u017c, Antik (842-ca. 1400)', 'yap': 'Japese', 'frm': u'Fran\u010bi\u017c, Medjevali (ca. 1400-1600)', 'tiv': 'Tiv', 'yao': 'Jao', 'pa': u'Pun\u0121abi', 'xal': 'Kalmyk', 'pi': 'Pali', 'pl': 'Pollakk', 'gay': 'Gajo', 'oto': 'Lingwi Otomjani', 'ota': 'Tork (Imperu Ottoman)', 'hmn': u'\u0126mong', 'an': 'Aragonese', 'gaa': 'Ga', 'fur': 'Frijuljan', 'khi': 'Kojsan', 'sla': 'Slavic (Other)', 've': 'Venda', 'vi': u'Vjetnami\u017c', 'is': u'I\u017clandi\u017c', 'kho': u'Kotani\u017c', 'iu': 'Inuktitut', 'it': 'Taljan', 'vo': u'Volap\xfck', 'ii': 'Sichuan Yi', 'ik': 'Inupjak', 'io': 'Ido', 'ine': 'Indo-Ewropew', 'ia': 'Interlingua', 'jpr': 'Lhudi-Persjan', 'ie': 'Interlingue', 'id': u'Indone\u017cjan', 'ig': 'Igbo', 'pap': 'Papjamento', 'ewo': 'Ewondo', 'pau': 'Palawjan', 'paa': u'Papwan (O\u0127ra)', 'pag': 'Pangasinjan', 'sat': 'Santali', 'pal': u'Pa\u0127lavi', 'pam': 'Pampamga', 'phi': u'Filippin (O\u0127ra)', 'cel': u'Keltiku (O\u0127ra)', 'phn': u'Feni\u010bju', 'nic': u'Ni\u0121erjan - Kordofanjan', 'nia': 'Nijas', 'dgr': 'Dogrib', 'syr': 'Sirjan', 'niu': 'Nijuwejan', 'jbo': 'Lojban', 'nah': u'Na\u0127watil', 'sam': 'Samaritan Aramaic', 'hai': u'\u0126ajda', 'gmh': u'\u0120ermaniku, Medjevali Pulit (ca. 1050-1500)', 'cus': u'Kuxtiku (O\u0127ra)', 'wen': 'Lingwi Sorbjani', 'ady': 'Adyghe', 'elx': 'Elamit', 'ada': 'Adangme', 'haw': u'\u0126awajjan', 'bin': 'Bini', 'bik': 'Bikol', 'mos': 'Mossi', 'moh': u'Mo\u0127ak', 'tl': 'Tagalog', 'tvl': 'Tuvalu', 'ijo': u'I\u0121o', 'kmb': 'Kimbundu', 'peo': 'Persjan Antik (ca. 600-400 Q.K.)', 'umb': 'Umbundu', 'tmh': 'Tamaxek', 'fon': 'Fon', 'hsb': 'Upper Sorbian', 'be': 'Belarussu', 'bg': 'Bulgaru', 'ba': 'Baxkir', 'ps': 'Paxtun', 'bm': 'Bambara', 'bn': 'Bengali', 'bo': 'Tibetjan', 'bh': u'Bi\u0127ari', 'bi': 'Bislama', 'br': 'Breton', 'bs': 'Bosnijan', 'om': 'Oromo', 'oj': u'O\u0121ibwa', 'ace': u'A\u010bini\u017c', 'ach': 'Akoli', 'oc': 'Provenzal (wara 1500)', 'kru': 'Kurusk', 'srr': 'Serer', 'kro': 'Kru', 'krc': 'Karachay-Balkar', 'nds': u'\u0120ermani\u017c Komuni; Sassonu Komuni', 'os': 'Ossettiku', 'or': 'Orija', 'sog': 'Sogdien', 'nso': "Soto, ta' Fuq", 'son': 'Songaj', 'vai': 'Vai', 'wak': 'Lingwi Wakaxani', 'lol': 'Mongo', 'mkh': u'Mon-Kmer (O\u0127ra)', 'loz': u'Lo\u017ci', 'gil': 'Gilbertjan', 'was': 'Waxo', 'war': 'Waraj', 'hz': u'\u0126erero', 'hy': 'Armenjan', 'sid': 'Sidamo', 'hr': 'Kroat', 'ht': 'Haitian', 'hu': u'Ungeri\u017c', 'hi': u'\u0126indi', 'ho': u'\u0126iri Motu', 'Fallback': 'en', 'ha': u'\u0126awsa', 'bug': u'Bugini\u017c', 'he': 'Ebrajk', 'uz': u'U\u017cbek', 'ur': 'Urdu', 'uk': 'Ukranjan', 'ug': 'Wigur', 'aa': 'Afar', 'ab': u'Abka\u017cjan', 'ae': 'Avestan', 'af': 'Afrikans', 'ak': 'Akan', 'am': u'Am\u0127ariku', 'myv': 'Erzya', 'eu': 'Bask', 'as': 'Assamese', 'ar': u'G\u0127arbi', 'inh': 'Ingush', 'tpi': 'Tok Pisin', 'myn': 'Majan', 'ay': 'Ajmara', 'kha': 'Kasi', 'az': u'A\u017cerbaj\u0121ani', 'inc': u'Indjan (O\u0127ra)', 'nl': u'Olandi\u017c', 'nn': u'Ninorsk Norve\u0121i\u017c', 'no': u'Norve\u0121i\u017c', 'na': 'Nawuru', 'nb': u'Bokmahal Norve\u0121i\u017c', 'nai': u"Indjan tal-Amerika ta' Fuq (O\u0127ra)", 'nd': "Ndebele, ta' Fuq", 'ne': u'Nepali\u017c', 'ng': 'Ndonga', 'ny': u'\u010ai\u010bewa; Njan\u0121a', 'nap': 'Neapolitan', 'grb': u'\u0120erbo', 'grc': 'Grieg, Antik (to 1453)', 'nr': "Ndebele, t'Isfel", 'tig': 'Tigre', 'nv': u'Nava\u0127o', 'zun': u'\u017buni', 'rw': 'Kinjarwanda', 'cpe': u'Kreoli u Pi\u0121ini, Bba\u017cat fuq l-Ingli\u017c (O\u0127ra)', 'cpf': u'Kreoli u Pi\u0121ini, Bba\u017cat fuq il-Fran\u010bi\u017c (O\u0127ra)', 'cpp': 'Creoles and pidgins, Portuguese-based (Other)'} countries={'BD': 'Bangladexx', 'BE': u'Bel\u0121ju', 'BF': 'Burkina Faso', 'BG': 'Bulgarija', 'BA': u'Bo\u017cnija \u0126er\u017cegovina', 'BB': 'Barbados', 'WF': 'Wallis and Futuna', 'BM': 'Bermuda', 'BN': 'Brunej', 'BO': 'Bolivja', 'BH': u'Ba\u0127rajn', 'BI': 'Burundi', 'BJ': 'Benin', 'BT': 'Butan', 'JM': u'\u0120amajka', 'BV': 'Bouvet Island', 'BW': 'Botswana', 'WS': 'Samoa', 'BR': u'Bra\u017cil', 'BS': u'Ba\u0127amas', 'BY': 'Bjelorussja', 'BZ': u'Beli\u017ce', 'RU': 'Russja', 'RW': 'Rwanda', 'TL': 'Timor tal-Lvant', 'RE': u'R\xe9union', 'TM': 'Turkmenistan', 'TJ': u'Ta\u0121ikistan', 'RO': 'Rumanija', 'TK': 'Tokelaw', 'GW': 'Ginea-Bissaw', 'GU': 'Gwam', 'GT': 'Gwatemala', 'GS': 'South Georgia and South Sandwich Islands', 'GR': u'Gre\u010bja', 'GQ': 'Ginea Ekwatorjali', 'GP': 'Gwadelupe', 'JP': u'\u0120appun', 'GY': 'Gujana', 'GF': u'Gujana Fran\u010bi\u017ca', 'GE': u'\u0120or\u0121ja', 'GD': 'Grenada', 'GB': 'Ingilterra', 'GA': 'Gabon', 'SV': 'El Salvador', 'GN': 'Gineja', 'GM': 'Gambja', 'GL': 'Grinlandja', 'GI': 'Gibraltar', 'GH': 'Gana', 'OM': 'Oman', 'TN': u'Tune\u017c', 'JO': u'\u0120ordan', 'SP': 'Serbja', 'HR': 'Kroazja', 'HT': u'\u0126aiti', 'HU': 'Ungerija', 'HK': u'\u0126ong Kong S.A.R., \u010aina', 'HN': u'\u0126onduras', 'HM': 'Heard Island and McDonald Islands', 'VE': 'Venezwela', 'PR': 'Puerto Rico', 'PS': 'Palestinian Territory', 'PW': 'Palau', 'PT': 'Portugall', 'SJ': 'Svalbard and Jan Mayen', 'PY': 'Paragwaj', 'IQ': 'Iraq', 'PA': 'Panama', 'PF': u'Polinesja Fran\u010bi\u017ca', 'PG': u'Papwa-Ginea \u0120dida', 'PE': 'Peru', 'PK': 'Pakistan', 'PH': 'Filippini', 'PN': 'Pitcairn', 'PL': 'Polonja', 'PM': 'Saint Pierre and Miquelon', 'ZM': u'\u017bambja', 'EH': 'Sahara tal-Punent', 'EE': 'Estonja', 'EG': u'E\u0121ittu', 'ZA': "Afrika t'Isfel", 'EC': 'Ekwador', 'IT': 'Italja', 'VN': 'Vjetnam', 'SB': 'Solomon Islands', 'ET': 'Etijopja', 'SO': 'Somalja', 'ZW': u'\u017bimbabwe', 'SA': u'G\u0127arabja Sawdita', 'ES': 'Spanja', 'ER': 'Eritreja', 'MD': 'Maldova', 'MG': 'Madagaskar', 'MA': 'Marokk', 'MC': 'Monako', 'UZ': u'U\u017cbekistan', 'MM': 'Mjanmar', 'ML': 'Mali', 'MO': 'Macao S.A.R. China', 'MN': 'Mongolja', 'MH': u"G\u017cejjer ta' Marshall", 'MK': u'Ma\u010bedonja', 'MU': 'Mawrizju', 'MT': 'Malta', 'MW': 'Malawi', 'MV': 'Maldives', 'MQ': 'Martinik', 'MP': u"G\u017cejjer Marjana ta' Fuq", 'MS': 'Montserrat', 'MR': 'Mawritanja', 'UG': 'Uganda', 'MY': 'Malasja', 'MX': 'Messiku', 'IL': u'I\u017crael', 'FR': 'Franza', 'IO': 'British Indian Ocean Territory', 'SH': 'Saint Helena', 'FI': 'Finlandja', 'FJ': u'Fi\u0121i', 'FK': 'Falkland Islands', 'FM': 'Mikronesja', 'FO': u'G\u017cejjer Faroe', 'NI': 'Nikaragwa', 'NL': 'Olanda', 'NO': u'Norve\u0121ja', 'NA': 'Namibja', 'VU': 'Vanwatu', 'NC': 'New Caledonia', 'NE': u'Ni\u0121er', 'NF': 'Norfolk Island', 'NG': u'Ni\u0121erja', 'NZ': 'New Zealand', 'NP': 'Nepal', 'NR': 'Nauru', 'NU': 'Niue', 'CK': 'Cook Islands', 'CI': "Kosta ta' l-Avorju", 'CH': 'Svizzera', 'CO': 'Kolumbja', 'CN': u'\u010aina', 'CM': 'Kamerun', 'CL': u'\u010aili', 'CC': 'Cocos Islands', 'CA': 'Kanada', 'CG': 'Kongo', 'CF': u'Repubblika Afrikana \u010aentrali', 'CD': 'Democratic Republic of the Congo', 'CZ': u'Repubblika \u010aeka', 'CY': u'\u010aipru', 'CX': 'Christmas Island', 'CR': 'Kosta Rika', 'Fallback': 'en', 'CV': 'Kape Verde', 'CU': 'Kuba', 'SZ': u'Swa\u017ciland', 'SY': 'Sirja', 'KG': 'Kirgistan', 'KE': 'Kenja', 'SR': 'Surinam', 'KI': 'Kiribati', 'KH': 'Kambodja', 'KN': 'Saint Kitts and Nevis', 'KM': 'Komoros', 'ST': 'Sao Tome and Principe', 'SK': 'Slovakkja', 'KR': "Koreja t'Isfel", 'SI': 'Slovenja', 'KP': "Koreja ta' Fuq", 'KW': 'Kuwajt', 'SN': 'Senegal', 'SM': 'San Marino', 'SL': 'Sierra Leone', 'SC': 'Seychelles', 'KZ': u'Ka\u017cakstan', 'KY': 'Cayman Islands', 'SG': 'Singapor', 'SE': u'\u017bvezja', 'SD': 'Sudan', 'DO': 'Republikka Domenikana', 'DM': 'Dominika', 'DJ': u'\u0120ibuti', 'DK': 'Danimarka', 'VG': 'British Virgin Islands', 'DE': u'\u0120ermanja', 'YE': 'Jemen', 'DZ': u'Al\u0121erija', 'US': 'Stati Uniti', 'UY': 'Urugwaj', 'YU': 'Jugoslavja', 'YT': 'Majotte', 'UM': 'United States Minor Outlying Islands', 'LB': 'Libanu', 'LC': 'Saint Lucia', 'LA': 'Laos', 'TV': 'Tuvalu', 'TW': 'Tajwan', 'TT': 'Trinidad u Tobago', 'TR': 'Turkija', 'LK': 'Sri Lanka', 'LI': 'Liechtenstein', 'LV': 'Latvja', 'TO': 'Tonga', 'LT': 'Litwanja', 'LU': 'Lussemburgu', 'LR': 'Liberja', 'LS': 'Lesoto', 'TH': 'Tajlandja', 'TF': u"Territorji Fran\u010bi\u017ci ta' Nofsinhar", 'TG': 'Togo', 'TD': u'\u010aad', 'TC': 'Turks and Caicos Islands', 'LY': 'Libja', 'VA': 'Vatikan', 'VC': 'Saint Vincent and the Grenadines', 'AE': u'Emirati G\u0127arab Maqg\u0127uda', 'AD': 'Andorra', 'AG': 'Antigua and Barbuda', 'AF': 'Afganistan', 'AI': 'Angwilla', 'VI': 'U.S. Virgin Islands', 'IS': 'Islanda', 'IR': 'Iran', 'AM': 'Armenja', 'AL': 'Albanija', 'AO': 'Angola', 'AN': u'Antilles Olandi\u017ci', 'AQ': 'Antarctica', 'AS': 'Samoa Amerikana', 'AR': u'Ar\u0121entina', 'AU': 'Awstralja', 'AT': 'Awstrija', 'AW': 'Aruba', 'IN': 'Indja', 'TZ': u'Tan\u017canija', 'AZ': u'A\u017cerbaj\u0121an', 'IE': 'Irlanda', 'ID': u'Indone\u017cja', 'UA': 'Ukraina', 'QA': 'Qatar', 'MZ': u'Mo\u017cambik'} months=['Jannar', 'Frar', 'Marzu', 'April', 'Mejju', u'\u0120unju', 'Lulju', 'Awissu', 'Settembru', 'Ottubru', 'Novembru', u'Di\u010bembru'] abbrMonths=['Jan', 'Fra', 'Mar', 'Apr', 'Mej', u'\u0120un', 'Lul', 'Awi', 'Set', 'Ott', 'Nov', u'Di\u010b'] days=['It-Tnejn', 'It-Tlieta', u'L-Erbg\u0127a', u'Il-\u0126amis', u'Il-\u0120img\u0127a', 'Is-Sibt', u'Il-\u0126add'] abbrDays=['Tne', 'Tli', 'Erb', u'\u0126am', u'\u0120im', 'Sib', u'\u0126ad'] dateFormats={'medium': '%d-%%(abbrmonthname)s-%Y', 'full': '%%(dayname)s, %d ta %%(monthname)s, %Y', 'long': '%d ta %%(monthname)s %Y', 'short': '%d/%m/%y'} numericSymbols={'group': ',', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': '.', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'} PKA>hKe[[turbogears/i18n/data/mt_MT.pyc; ȸHIc @s5hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddi<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNd;<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dNd;<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd***PKK9iHHturbogears/i18n/data/nb.py# Formatting configuration for locale nb languages={'vi': 'vietnamesisk', 'el': 'gresk', 'eo': 'esperanto', 'en': 'engelsk', 'zh': 'kinesisk', 'af': 'afrikaans', 'sw': 'swahili', 'ca': 'katalansk', 'am': 'amharisk', 'gu': 'gujarati', 'sv': 'svensk', 'cs': 'tsjekkisk', 'ar': 'arabisk', 'ga': 'irsk', 'eu': 'baskisk', 'et': 'estisk', 'gl': 'galicisk', 'id': 'indonesisk', 'es': 'spansk', 'ru': 'russisk', 'nl': 'nederlandsk', 'nn': 'norsk nynorsk', 'no': 'norsk', 'nb': u'norsk bokm\xe5l', 'tr': 'tyrkisk', 'lv': 'latvisk', 'lt': 'litauisk', 'th': 'thai', 'ti': 'tigrinya', 'it': 'italiensk', 'so': 'somalisk', 'he': 'hebraisk', 'is': 'islandsk', 'pl': 'polsk', 'haw': 'hawaiisk', 'be': 'hviterussisk', 'fr': 'fransk', 'bg': 'bulgarsk', 'sl': 'slovensk', 'hr': 'kroatisk', 'iu': 'inuktitut', 'bn': 'bengali', 'de': 'tysk', 'da': 'dansk', 'fa': 'persisk', 'hi': 'hindi', 'fi': 'finsk', 'hy': 'armensk', 'hu': 'ungarsk', 'ja': 'japansk', 'fo': u'f\xe6r\xf8ysk', 'om': 'oromo', 'ro': 'rumensk', 'gv': 'manx', 'pt': 'portugisisk', 'sr': 'serbisk', 'sq': 'albansk', 'ko': 'koreansk', 'kn': 'kannada', 'mk': 'makedonsk', 'kl': 'kalaallisut', 'sk': 'slovakisk', 'mt': 'maltesisk', 'sh': 'serbokroatisk', 'kw': 'kornisk', 'uk': 'ukrainsk', 'mr': 'marathi', 'ta': 'tamil'} countries={'BD': 'Bangladesh', 'BE': 'Belgia', 'BF': 'Burkina Faso', 'BG': 'Bulgaria', 'BA': 'Bosnia og Hercegovina', 'BB': 'Barbados', 'WF': 'Wallis og Futuna', 'BM': 'Bermuda', 'BN': 'Brunei Darussalam', 'BO': 'Bolivia', 'BH': 'Bahrain', 'BI': 'Burundi', 'BJ': 'Benin', 'BT': 'Bhutan', 'JM': 'Jamaica', 'BV': u'Bouvet\xf8ya', 'BW': 'Botswana', 'WS': 'Samoa', 'BR': 'Brasil', 'BS': 'Bahamas', 'BY': 'Hviterussland', 'BZ': 'Belize', 'RU': u'Den russiske f\xf8derasjon', 'RW': 'Rwanda', 'TL': u'\xd8st-Timor', 'RE': 'Reunion', 'TM': 'Turkmenistan', 'TJ': 'Tadsjikistan', 'RO': 'Romania', 'TK': 'Tokelau', 'GW': 'Guinea-Bissau', 'GU': 'Guam', 'GT': 'Guatemala', 'GS': u'S\xf8r-Georgia og S\xf8r-Sandwich-\xf8yene', 'GR': 'Hellas', 'GQ': 'Ekvatorial-Guinea', 'GP': 'Guadeloupe', 'JP': 'Japan', 'GY': 'Guyana', 'GF': 'Fransk Guyana', 'GE': 'Georgia', 'GD': 'Grenada', 'GB': 'Storbritannia', 'GA': 'Gabon', 'SV': 'El Salvador', 'GN': 'Guinea', 'GM': 'Gambia', 'GL': u'Gr\xf8nland', 'GI': 'Gibraltar', 'GH': 'Ghana', 'OM': 'Oman', 'TN': 'Tunisia', 'JO': 'Jordan', 'SP': 'Serbia', 'HR': 'Kroatia', 'HT': 'Haiti', 'HU': 'Ungarn', 'HK': 'Hong Kong S.A.R. (Kina)', 'HN': 'Honduras', 'HM': u'Heard- og McDonalds\xf8yene', 'VE': 'Venezuela', 'PR': 'Puerto Rico', 'PS': 'Palestinsk territorium', 'PW': 'Palau', 'PT': 'Portugal', 'SJ': 'Svalbard og Jan Mayen', 'PY': 'Paraguay', 'IQ': 'Irak', 'PA': 'Panama', 'PF': 'Fransk Polynesia', 'PG': 'Papua Ny-Guinea', 'PE': 'Peru', 'PK': 'Pakistan', 'PH': 'Filippinene', 'PN': 'Pitcairn', 'PL': 'Polen', 'PM': 'St. Pierre og Miquelon', 'ZM': 'Zambia', 'EH': 'Vest-Sahara', 'EE': 'Estland', 'EG': 'Egypt', 'ZA': u'S\xf8r-Afrika', 'EC': 'Ecuador', 'IT': 'Italia', 'VN': 'Vietnam', 'SB': u'Salomon\xf8yene', 'ET': 'Etiopia', 'SO': 'Somalia', 'ZW': 'Zimbabwe', 'SA': 'Saudi Arabia', 'ES': 'Spania', 'ER': 'Eritrea', 'MD': 'Moldova', 'MG': 'Madagaskar', 'MA': 'Marokko', 'MC': 'Monaco', 'UZ': 'Usbekistan', 'MM': 'Myanmar', 'ML': 'Mali', 'MO': 'Macao S.A.R. (Kina)', 'MN': 'Mongolia', 'MH': u'Marshall\xf8yene', 'MK': 'Makedonia, Republikken', 'MU': 'Mauritius', 'MT': 'Malta', 'MW': 'Malawi', 'MV': 'Maldivene', 'MQ': 'Martinique', 'MP': 'Nord-Marianene', 'MS': 'Montserrat', 'MR': 'Mauritania', 'UG': 'Uganda', 'MY': 'Malaysia', 'MX': 'Mexico', 'IL': 'Israel', 'FR': 'Frankrike', 'IO': u'Britiske omr\xe5der i det indiske hav', 'SH': 'Saint Helena', 'FI': 'Finland', 'FJ': 'Fiji', 'FK': u'Falklands\xf8yene (Malvinas)', 'FM': u'Mikronesiaf\xf8derasjonen', 'FO': u'F\xe6r\xf8yene', 'NI': 'Nicaragua', 'NL': 'Nederland', 'NO': 'Norge', 'NA': 'Namibia', 'VU': 'Vanuatu', 'NC': 'Ny-Caledonia', 'NE': 'Niger', 'NF': u'Norfolk\xf8yene', 'NG': 'Nigeria', 'NZ': 'New Zealand', 'NP': 'Nepal', 'NR': 'Nauru', 'NU': 'Niue', 'CK': u'Cook\xf8yene', 'CI': 'Elfenbenskysten', 'CH': 'Sveits', 'CO': 'Colombia', 'CN': 'Kina', 'CM': 'Kamerun', 'CL': 'Chile', 'CC': u'Kokos\xf8yene (Keeling\xf8yene)', 'CA': 'Canada', 'CG': 'Kongo', 'CF': 'Den sentralafrikanske republikk', 'CD': 'Kongo, Den demokratiske republikken', 'CZ': 'Tsjekkia', 'CY': 'Kypros', 'CX': u'Christmas\xf8ya', 'CR': 'Costa Rica', 'Fallback': 'en', 'CV': 'Kapp Verde', 'CU': 'Cuba', 'SZ': 'Swaziland', 'SY': 'Syria', 'KG': 'Kirgisistan', 'KE': 'Kenya', 'SR': 'Surinam', 'KI': 'Kiribati', 'KH': 'Kambodsja', 'KN': 'St. Christopher og Nevis', 'KM': 'Komorene', 'ST': 'Sao Tome og Principe', 'SK': 'Slovakia', 'KR': u'Korea (S\xf8r)', 'SI': 'Slovenia', 'KP': 'Korea (Nord)', 'KW': 'Kuwait', 'SN': 'Senegal', 'SM': 'San Marino', 'SL': 'Sierra Leone', 'SC': 'Seychellene', 'KZ': 'Kasakhstan', 'KY': u'Cayman\xf8yene', 'SG': 'Singapore', 'SE': 'Sverige', 'SD': 'Sudan', 'DO': 'Den dominikanske republikk', 'DM': 'Dominica', 'DJ': 'Djibouti', 'DK': 'Danmark', 'VG': u'Jomfru\xf8yene (britisk)', 'DE': 'Tyskland', 'YE': 'Yemen', 'DZ': 'Algerie', 'US': 'Sambandsstatane', 'UY': 'Uruguay', 'YU': 'Jugoslavia', 'YT': 'Mayotte', 'UM': u'USAs mindre \xf8yer', 'LB': 'Libanon', 'LC': 'St. Lucia', 'LA': 'Laos, Den folkedemokratiske republikken', 'TV': 'Tuvalu', 'TW': 'Taiwan', 'TT': 'Trinidad og Tobago', 'TR': 'Tyrkia', 'LK': 'Sri Lanka', 'LI': 'Liechtenstein', 'LV': 'Latvia', 'TO': 'Tonga', 'LT': 'Litauen', 'LU': 'Luxembourg', 'LR': 'Liberia', 'LS': 'Lesotho', 'TH': 'Thailand', 'TF': u'Franske s\xf8romr\xe5der', 'TG': 'Togo', 'TD': 'Tchad', 'TC': u'Turks- og Caicos\xf8yene', 'LY': 'Libya', 'VA': 'Vatikanstaten', 'VC': 'St. Vincent og Grenadinene', 'AE': 'De forente arabiske emiratene', 'AD': 'Andorra', 'AG': 'Antigua og Barbuda', 'AF': 'Afghanistan', 'AI': 'Anguilla', 'VI': 'U.S. Virgin Islands', 'IS': 'Island', 'IR': 'Iran', 'AM': 'Armenia', 'AL': 'Albania', 'AO': 'Angola', 'AN': 'De nederlandske antiller', 'AQ': 'Antarktis', 'AS': 'Amerikansk Samoa', 'AR': 'Argentina', 'AU': 'Australia', 'AT': u'\xd8sterrike', 'AW': 'Aruba', 'IN': 'India', 'TZ': 'Tanzania', 'AZ': 'Aserbajdsjan', 'IE': 'Irland', 'ID': 'Indonesia', 'UA': 'Ukraina', 'QA': 'Qatar', 'MZ': 'Mosambik'} months=['januar', 'februar', 'mars', 'april', 'mai', 'juni', 'juli', 'august', 'september', 'oktober', 'november', 'desember'] abbrMonths=['jan', 'feb', 'mar', 'apr', 'mai', 'jun', 'jul', 'aug', 'sep', 'okt', 'nov', 'des'] days=['mandag', 'tirsdag', 'onsdag', 'torsdag', 'fredag', u'l\xf8rdag', u's\xf8ndag'] abbrDays=['ma', 'ti', 'on', 'to', 'fr', u'l\xf8', u's\xf8'] dateFormats={'medium': '%d. %%(abbrmonthname)s. %Y', 'full': '%%(dayname)s %d. %%(monthname)s %Y', 'long': '%d. %%(monthname)s %Y', 'short': '%d.%m.%y'} numericSymbols={'group': u'\xa0', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': ',', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'} PKA>m*m*turbogears/i18n/data/nb.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh@1Xp*p*turbogears/i18n/data/nb_NO.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdhJK)K)turbogears/i18n/data/nl.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdgd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdHB™AN)N)turbogears/i18n/data/nl_BE.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdgd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdHEWxN)N)turbogears/i18n/data/nl_NL.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdgd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdHqturbogears/i18n/data/nn.pyc; ȸHIc @sZhdd<dd<dd<d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdLRturbogears/i18n/data/nn_NO.pyc; ȸHIc @sZhdd<dd<dd<d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdLXbm*m*turbogears/i18n/data/no.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdhsp*p*turbogears/i18n/data/no_NO.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh,Jturbogears/i18n/data/om.pyc; ȸHIc @sQhddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdKzturbogears/i18n/data/om_ET.pyc; ȸHIc @sQhddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdKturbogears/i18n/data/om_KE.pyc; ȸHIc @sQhddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdKG_;eeturbogears/i18n/data/pa.pyc; ȸHIc @sHhddS(?spauਪੰਜਾਬੀsINu ਭਾਰਤuਜਨਵਰੀuਫ਼ਰਵਰੀu ਮਾਰਚuਅਪ੍ਰੈਲuਮਈu ਜੂਨuਜੁਲਾਈu ਅਗਸਤuਸਤੰਬਰuਅਕਤੂਬਰuਨਵੰਬਰuਦਸੰਬਰuਸੋਮਵਾਰuਮੰਗਲਵਾਰuਬੁਧਵਾਰuਵੀਰਵਾਰuਸ਼ੁੱਕਰਵਾਰuਸ਼ਨੀਚਰਵਾਰuਐਤਵਾਰu ਸੋਮ.u ਮੰਗਲ.u ਬੁਧ.u ਵੀਰ.u ਸ਼ੁਕਰ.u ਸ਼ਨੀ.uਐਤ.smediums%Y %%(abbrmonthname)s %d sfulls#%%(dayname)s, %Y %%(monthname)s %d slongs%Y %%(monthname)s %d sshorts%y/%m/%dsgroups,snativeZeroDigitu੦s exponentialsEsperMilleu‰snanu�sdecimals.s percentSigns%slists;s patternDigits#splusSigns+sinfinityu∞s minusSigns-N(s languagess countriessmonthss abbrMonthssdayssabbrDayss dateFormatssnumericSymbols(sabbrDayssnumericSymbolss countriessmonthssdayss abbrMonthss languagess dateFormats((s0build\bdist.win32\egg\turbogears\i18n\data\pa.pys?s***PKK9e=//turbogears/i18n/data/pa_IN.py# Formatting configuration for locale pa_IN languages={'pa': u'\u0a2a\u0a70\u0a1c\u0a3e\u0a2c\u0a40'} countries={'IN': u'\u0a2d\u0a3e\u0a30\u0a24'} months=[u'\u0a1c\u0a28\u0a35\u0a30\u0a40', u'\u0a5e\u0a30\u0a35\u0a30\u0a40', u'\u0a2e\u0a3e\u0a30\u0a1a', u'\u0a05\u0a2a\u0a4d\u0a30\u0a48\u0a32', u'\u0a2e\u0a08', u'\u0a1c\u0a42\u0a28', u'\u0a1c\u0a41\u0a32\u0a3e\u0a08', u'\u0a05\u0a17\u0a38\u0a24', u'\u0a38\u0a24\u0a70\u0a2c\u0a30', u'\u0a05\u0a15\u0a24\u0a42\u0a2c\u0a30', u'\u0a28\u0a35\u0a70\u0a2c\u0a30', u'\u0a26\u0a38\u0a70\u0a2c\u0a30'] abbrMonths=[u'\u0a1c\u0a28\u0a35\u0a30\u0a40', u'\u0a5e\u0a30\u0a35\u0a30\u0a40', u'\u0a2e\u0a3e\u0a30\u0a1a', u'\u0a05\u0a2a\u0a4d\u0a30\u0a48\u0a32', u'\u0a2e\u0a08', u'\u0a1c\u0a42\u0a28', u'\u0a1c\u0a41\u0a32\u0a3e\u0a08', u'\u0a05\u0a17\u0a38\u0a24', u'\u0a38\u0a24\u0a70\u0a2c\u0a30', u'\u0a05\u0a15\u0a24\u0a42\u0a2c\u0a30', u'\u0a28\u0a35\u0a70\u0a2c\u0a30', u'\u0a26\u0a38\u0a70\u0a2c\u0a30'] days=[u'\u0a38\u0a4b\u0a2e\u0a35\u0a3e\u0a30', u'\u0a2e\u0a70\u0a17\u0a32\u0a35\u0a3e\u0a30', u'\u0a2c\u0a41\u0a27\u0a35\u0a3e\u0a30', u'\u0a35\u0a40\u0a30\u0a35\u0a3e\u0a30', u'\u0a36\u0a41\u0a71\u0a15\u0a30\u0a35\u0a3e\u0a30', u'\u0a36\u0a28\u0a40\u0a1a\u0a30\u0a35\u0a3e\u0a30', u'\u0a10\u0a24\u0a35\u0a3e\u0a30'] abbrDays=[u'\u0a38\u0a4b\u0a2e.', u'\u0a2e\u0a70\u0a17\u0a32.', u'\u0a2c\u0a41\u0a27.', u'\u0a35\u0a40\u0a30.', u'\u0a36\u0a41\u0a15\u0a30.', u'\u0a36\u0a28\u0a40.', u'\u0a10\u0a24.'] dateFormats={'medium': '%d-%m-%Y', 'full': '%%(dayname)s %d %%(monthname)s %Y', 'long': '%d %%(monthname)s %Y', 'short': '%d-%m-%y'} numericSymbols={'group': ',', 'nativeZeroDigit': u'\u0a66', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': '.', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'} PKA><TTturbogears/i18n/data/pa_IN.pyc; ȸHIc @sHhddS(?spauਪੰਜਾਬੀsINu ਭਾਰਤuਜਨਵਰੀuਫ਼ਰਵਰੀu ਮਾਰਚuਅਪ੍ਰੈਲuਮਈu ਜੂਨuਜੁਲਾਈu ਅਗਸਤuਸਤੰਬਰuਅਕਤੂਬਰuਨਵੰਬਰuਦਸੰਬਰuਸੋਮਵਾਰuਮੰਗਲਵਾਰuਬੁਧਵਾਰuਵੀਰਵਾਰuਸ਼ੁੱਕਰਵਾਰuਸ਼ਨੀਚਰਵਾਰuਐਤਵਾਰu ਸੋਮ.u ਮੰਗਲ.u ਬੁਧ.u ਵੀਰ.u ਸ਼ੁਕਰ.u ਸ਼ਨੀ.uਐਤ.smediums%d-%m-%Ysfulls!%%(dayname)s %d %%(monthname)s %Yslongs%d %%(monthname)s %Ysshorts%d-%m-%ysgroups,snativeZeroDigitu੦s exponentialsEsperMilleu‰snanu�sdecimals.s percentSigns%slists;s patternDigits#splusSigns+sinfinityu∞s minusSigns-N(s languagess countriessmonthss abbrMonthssdayssabbrDayss dateFormatssnumericSymbols(sabbrDayssnumericSymbolss countriessmonthssdayss abbrMonthss languagess dateFormats((s3build\bdist.win32\egg\turbogears\i18n\data\pa_IN.pys?s***PKK9)"oturbogears/i18n/data/pl.py# Formatting configuration for locale pl languages={'el': 'grecki', 'en': 'angielski', 'zh': u'chi\u0144ski', 'it': u'w\u0142oski', 'ar': 'arabski', 'cs': 'czeski', 'et': u'esto\u0144ski', 'es': u'hiszpa\u0144ski', 'ru': 'rosyjski', 'nl': 'holenderski', 'pt': 'portugalski', 'no': 'norweski', 'tr': 'turecki', 'lv': u'\u0142otewski', 'lt': 'litewski', 'ro': u'rumu\u0144ski', 'pl': 'polski', 'fr': 'francuski', 'bg': u'bu\u0142garski', 'hr': 'chorwacki', 'de': 'niemiecki', 'da': u'du\u0144ski', 'fi': u'fi\u0144ski', 'hu': u'w\u0119gierski', 'ja': u'japo\u0144ski', 'he': 'hebrajski', 'ko': u'korea\u0144ski', 'sv': 'szwedzki', 'sk': u's\u0142owacki', 'sl': u's\u0142owe\u0144ski'} countries={'BD': 'Bangladesz', 'BE': 'Belgia', 'BF': 'Burkina Faso', 'BG': u'Bu\u0142garia', 'BA': u'Bo\u015bnia i Hercegowina', 'BB': 'Barbados', 'WF': 'Wallis i Futuna', 'BM': 'Bermudy', 'BN': 'Brunei Darussalam', 'BO': 'Boliwia', 'BH': 'Bahrajn', 'BI': 'Burundi', 'BJ': 'Benin', 'BT': 'Bhutan', 'JM': 'Jamajka', 'BV': 'Wyspa Bouveta', 'BW': 'Botswana', 'WS': 'Samoa', 'BR': 'Brazylia', 'BS': 'Bahamy', 'BY': u'Bia\u0142oru\u015b', 'BZ': 'Belize', 'RU': 'Federacja Rosyjska', 'RW': 'Rwanda', 'TL': 'Timor Wschodni', 'RE': 'Reunion', 'TM': 'Turkmenia', 'TJ': u'Tad\u017cykistan', 'RO': 'Rumunia', 'TK': 'Tokelau', 'GW': 'Gwinea Bissau', 'GU': 'Guam', 'GT': 'Gwatemala', 'GS': u'Wyspy Georgia Po\u0142udniowa i Sandwich Po\u0142udniowy', 'GR': 'Grecja', 'GQ': u'Gwinea R\xf3wnikowa', 'GP': 'Gwadelupa', 'JP': 'Japonia', 'GY': 'Gujana', 'GF': 'Gujana Francuska', 'GE': 'Gruzja', 'GD': 'Grenada', 'GB': 'Wielka Brytania', 'GA': 'Gabon', 'SV': 'Salwador', 'GN': 'Gwinea', 'GM': 'Gambia', 'GL': 'Grenlandia', 'GI': 'Gibraltar', 'GH': 'Ghana', 'OM': 'Oman', 'TN': 'Tunezja', 'JO': 'Jordania', 'SP': 'Serbia', 'HR': 'Chorwacja', 'HT': 'Haiti', 'HU': u'W\u0119gry', 'HK': 'Hongkong, Specjalny Region Administracyjny Chin', 'HN': 'Honduras', 'HM': 'Wyspy Heard i McDonald', 'VE': 'Wenezuela', 'PR': 'Puerto Rico', 'PS': u'Terytoria Palesty\u0144skie', 'PW': 'Palau', 'PT': 'Portugalia', 'SJ': 'Svalbard i Wyspy Jan Mayen', 'PY': 'Paragwaj', 'IQ': 'Irak', 'PA': 'Panama', 'PF': 'Polinezja Francuska', 'PG': 'Papua Nowa Gwinea', 'PE': 'Peru', 'PK': 'Pakistan', 'PH': 'Filipiny', 'PN': 'Pitcairn', 'PL': 'Polska', 'PM': 'St. Pierre i Miquelon', 'ZM': 'Zambia', 'EH': 'Sahara Zachodnia', 'EE': 'Estonia', 'EG': 'Egipt', 'ZA': u'Afryka Po\u0142udniowa', 'EC': 'Ekwador', 'IT': u'W\u0142ochy', 'VN': 'Wietnam', 'SB': 'Wyspy Salomona', 'ET': 'Etiopia', 'SO': 'Somalia', 'ZW': 'Zimbabwe', 'SA': 'Arabia Saudyjska', 'ES': 'Hiszpania', 'ER': 'Erytrea', 'MD': u'Mo\u0142dawia, Republika', 'MG': 'Madagaskar', 'MA': 'Maroko', 'MC': 'Monako', 'UZ': 'Uzbekistan', 'MM': 'Birma', 'ML': 'Mali', 'MO': 'Makau, Specjalny Region Administracyjny Chin', 'MN': 'Mongolia', 'MH': 'Wyspy Marshalla', 'MK': 'Macedonia, Republika', 'MU': 'Mauritius', 'MT': 'Malta', 'MW': 'Malawi', 'MV': 'Malediwy', 'MQ': 'Martynika', 'MP': u'Wsp\xf3lnota Marian\xf3w P\xf3\u0142nocnych', 'MS': 'Montserrat', 'MR': 'Mauretania', 'UG': 'Uganda', 'MY': 'Malezja', 'MX': 'Meksyk', 'IL': 'Izrael', 'FR': 'Francja', 'IO': 'Terytorium Brytyjskie Oceanu Indyjskiego', 'SH': u'Wyspa \u015awi\u0119tej Heleny', 'FI': 'Finlandia', 'FJ': u'Fid\u017ci', 'FK': 'Falklandy (Malwiny)', 'FM': 'Mikronezja, Stany Sfederowane', 'FO': 'Wyspy Owcze', 'NI': 'Nikaragua', 'NL': 'Holandia', 'NO': 'Norwegia', 'NA': 'Namibia', 'VU': 'Vanuatu', 'NC': 'Nowa Kaledonia', 'NE': 'Niger', 'NF': 'Wyspa Norfolk', 'NG': 'Nigeria', 'NZ': 'Nowa Zelandia', 'NP': 'Nepal', 'NR': 'Nauru', 'NU': 'Niue', 'CK': 'Wyspy Cooka', 'CI': u'Wybrze\u017ce Ko\u015bci S\u0142oniowej', 'CH': 'Szwajcaria', 'CO': 'Kolumbia', 'CN': 'Chiny', 'CM': 'Kamerun', 'CL': 'Chile', 'CC': 'Wyspy Kokosowe (Keelinga)', 'CA': 'Kanada', 'CG': 'Kongo', 'CF': u'Republika \u015arodkowej Afryki', 'CD': 'Kongo, Republika Demokratyczna', 'CZ': 'Republika Czeska', 'CY': 'Cypr', 'CX': u'Wyspa Bo\u017cego Narodzenia', 'CR': 'Kostaryka', 'Fallback': 'en', 'CV': u'Wyspy Zielonego Przyl\u0105dka', 'CU': 'Kuba', 'SZ': 'Suazi', 'SY': 'Syria', 'KG': 'Kirgistan', 'KE': 'Kenia', 'SR': 'Surinam', 'KI': 'Kiribati', 'KH': u'Kambod\u017ca', 'KN': 'Saint Kitts i Nevis', 'KM': 'Komory', 'ST': u'Wyspy \u015awi\u0119tego Tomasza i Ksi\u0105\u017c\u0119ca', 'SK': u'S\u0142owacja', 'KR': u'Korea Po\u0142udniowa', 'SI': u'S\u0142owenia', 'KP': u'Korea P\xf3\u0142nocna', 'KW': 'Kuwejt', 'SN': 'Senegal', 'SM': 'San Marino', 'SL': 'Sierra Leone', 'SC': 'Seszele', 'KZ': 'Kazachstan', 'KY': 'Kajmany', 'SG': 'Singapur', 'SE': 'Szwecja', 'SD': 'Sudan', 'DO': u'Republika Dominika\u0144ska', 'DM': 'Dominika', 'DJ': u'D\u017cibuti', 'DK': 'Dania', 'VG': 'Brytyjskie Wyspy Dziewicze', 'DE': 'Niemcy', 'YE': 'Jemen', 'DZ': 'Algieria', 'US': 'Stany Zjednoczone', 'UY': 'Urugwaj', 'YU': u'Jugos\u0142awia', 'YT': 'Majotta', 'UM': 'United States Minor Outlying Islands', 'LB': 'Liban', 'LC': 'Saint Lucia', 'LA': 'Laos (Demokratyczna Republika Ludowa)', 'TV': 'Tuvalu', 'TW': 'Tajwan', 'TT': 'Trinidad i Tobago', 'TR': 'Turcja', 'LK': 'Sri Lanka', 'LI': 'Liechtenstein', 'LV': u'\u0141otwa', 'TO': 'Tonga', 'LT': 'Litwa', 'LU': 'Luksemburg', 'LR': 'Liberia', 'LS': 'Lesotho', 'TH': 'Tajlandia', 'TF': u'Francuskie Terytoria Po\u0142udniowe', 'TG': 'Togo', 'TD': 'Czad', 'TC': 'Turks i Caicos', 'LY': 'Libijska', 'VA': u'Stolica Apostolska (Pa\u0144stwo Watyka\u0144skie)', 'VC': 'Saint Vincent and the Grenadines', 'AE': 'Zjednoczone Emiraty Arabskie', 'AD': 'Andora', 'AG': 'Antigua i Barbuda', 'AF': 'Afganistan', 'AI': 'Anguilla', 'VI': u'Wyspy Dziewicze, Stan\xf3w Zjednoczonych', 'IS': 'Islandia', 'IR': 'Iran', 'AM': 'Armenia', 'AL': 'Albania', 'AO': 'Angola', 'AN': 'Antyle Holenderskie', 'AQ': 'Antarktyka', 'AS': u'Samoa Ameryka\u0144skie', 'AR': 'Argentyna', 'AU': 'Australia', 'AT': 'Austria', 'AW': 'Aruba', 'IN': 'Indie', 'TZ': 'Tanzania', 'AZ': u'Azerbejd\u017can', 'IE': 'Irlandia', 'ID': 'Indonezja', 'UA': 'Ukraina', 'QA': 'Katar', 'MZ': 'Mozambik'} months=[u'stycze\u0144', 'luty', 'marzec', u'kwiecie\u0144', 'maj', 'czerwiec', 'lipiec', u'sierpie\u0144', u'wrzesie\u0144', u'pa\u017adziernik', 'listopad', u'grudzie\u0144'] abbrMonths=['sty', 'lut', 'mar', 'kwi', 'maj', 'cze', 'lip', 'sie', 'wrz', u'pa\u017a', 'lis', 'gru'] days=[u'poniedzia\u0142ek', 'wtorek', u'\u015broda', 'czwartek', u'pi\u0105tek', 'sobota', 'niedziela'] abbrDays=['Pn', 'Wt', u'\u015ar', 'Cz', 'Pt', 'So', 'N'] dateFormats={'medium': '%Y-%m-%d', 'full': '%%(dayname)s, %d %%(monthname)s %Y', 'long': '%d %%(monthname)s %Y', 'short': '%y-%m-%d'} numericSymbols={'group': u'\xa0', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': ',', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'} PKA>['['turbogears/i18n/data/pl.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dld<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<ddd?d@dAgZhdBdC<dDdE<dFdG<dHdI5^'^'turbogears/i18n/data/pl_PL.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dld<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<ddd?d@dAgZhdBdC<dDdE<dFdG<dHdIdfhhturbogears/i18n/data/ps.pyc; ȸHIc @shdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?Rwwturbogears/i18n/data/ps_AF.pyc; ȸHIc @shdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?,,turbogears/i18n/data/pt.pyc; ȸHIc @sd hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydzVmmturbogears/i18n/data/pt_BR.py# Formatting configuration for locale pt_BR languages={'vi': 'vietnamita', 'el': 'grego', 'eo': 'esperanto', 'en': u'ingl\xeas', 'zh': u'chin\xeas', 'af': u'afric\xe2ner', 'sw': u'sua\xedli', 'ca': u'catal\xe3o', 'am': u'am\xe1rico', 'gu': 'guzarate', 'sv': 'sueco', 'cs': 'tcheco', 'ar': u'ar\xe1bico', 'mk': u'maced\xf4nio', 'ga': u'irland\xeas', 'eu': 'basco', 'et': 'estoniano', 'az': u'azerbaij\xe3o', 'id': u'indon\xe9sio', 'es': 'espanhol', 'ru': 'russo', 'gl': 'galego', 'nl': u'holand\xeas', 'nn': u'nynorsk noruegu\xeas', 'la': 'latino', 'nb': u'bokm\xe5l noruegu\xeas', 'tr': 'turco', 'lv': 'latviano', 'lt': 'lituano', 'tk': 'tagalo', 'th': u'tailand\xeas', 'ti': u'tigr\xednia', 'it': 'italiano', 'so': 'somali', 'he': 'hebraico', 'is': u'island\xeas', 'pl': u'polon\xeas', 'haw': 'havaiano', 'be': 'bielo-russo', 'fr': u'franc\xeas', 'bg': u'b\xfalgaro', 'uk': 'ucraniano', 'sl': u'eslov\xeanio', 'hr': 'croata', 'iu': 'inuktitut', 'bn': 'bengala', 'de': u'alem\xe3o', 'om': 'oromo', 'da': u'dinamarqu\xeas', 'fa': 'farsi', 'hi': 'hindi', 'fi': u'finland\xeas', 'hy': u'arm\xeanio', 'hu': u'h\xfangaro', 'ja': u'japon\xeas', 'fo': 'faroense', 'ka': 'georgiano', 'ro': 'romeno', 'gv': 'manx', 'pt': u'portugu\xeas', 'uz': 'usbeque', 'sr': u's\xe9rvio', 'sq': u'alban\xeas', 'no': u'noruegu\xeas', 'ko': 'coreano', 'kn': u'canad\xe1', 'km': 'cmer', 'kl': 'kalaallisut', 'sk': 'eslovaco', 'mt': u'malt\xeas', 'sh': 'servo-croata', 'kw': u'c\xf3rnico', 'ku': 'curdo', 'mr': 'marati', 'te': u't\xe9lugu', 'ta': u't\xe2mil', 'my': u'birman\xeas'} countries={'BD': 'Bangladesh', 'BE': u'B\xe9lgica', 'BF': 'Burkina Fasso', 'BG': u'Bulg\xe1ria', 'BA': u'B\xf3snia-Herzeg\xf3vina', 'BB': 'Barbados', 'WF': 'Wallis e Futuna', 'BM': 'Bermudas', 'BN': 'Brunei', 'BO': u'Bol\xedvia', 'BH': u'Bar\xe1in', 'BI': 'Burundi', 'BJ': 'Benin', 'BT': u'But\xe3o', 'JM': 'Jamaica', 'BV': 'Ilha Bouvet', 'BW': 'Botsuana', 'WS': 'Samoa', 'BR': 'Brasil', 'BS': 'Bahamas', 'BY': 'Belarus', 'BZ': 'Belize', 'RU': u'R\xfassia', 'RW': 'Ruanda', 'TL': 'Timor Leste', 'RE': u'Reuni\xe3o', 'TM': u'Turcomenist\xe3o', 'TJ': u'Tadjiquist\xe3o', 'RO': u'Rom\xeania', 'TK': 'Tokelau', 'GW': u'Guin\xe9 Bissau', 'GU': 'Guam', 'GT': 'Guatemala', 'GS': u'Ge\xf3rgia do Sul e Ilhas Sandwich do Sul', 'GR': u'Gr\xe9cia', 'GQ': u'Guin\xe9 Equatorial', 'GP': 'Guadalupe', 'JP': u'Jap\xe3o', 'GY': 'Guiana', 'GF': 'Guiana Francesa', 'GE': u'Ge\xf3rgia', 'GD': 'Granada', 'GB': 'Reino Unido', 'GA': u'Gab\xe3o', 'SV': 'El Salvador', 'GN': u'Guin\xe9', 'GM': u'G\xe2mbia', 'GL': u'Gro\xeanlandia', 'GI': 'Gibraltar', 'GH': 'Gana', 'OM': u'Om\xe3', 'TN': u'Tun\xedsia', 'JO': u'Jord\xe2nia', 'SP': u'S\xe9rvia', 'HR': u'Cro\xe1cia', 'HT': 'Haiti', 'HU': 'Hungria', 'HK': 'Hong Kong S.A.R. da China', 'HN': 'Honduras', 'HM': 'Ilha Heard e Ilhas McDonald', 'VE': 'Venezuela', 'PR': 'Porto Rico', 'PS': u'Territ\xf3rio da Palestina', 'PW': 'Palau', 'PT': 'Portugal', 'SJ': 'Svalbard e Jan Mayen', 'PY': 'Paraguai', 'IQ': 'Iraque', 'PA': u'Panam\xe1', 'PF': u'Polin\xe9sia Francesa', 'PG': u'Papua-Nova Guin\xe9', 'PE': 'Peru', 'PK': u'Paquist\xe3o', 'PH': 'Filipinas', 'PN': 'Pitcairn', 'PL': u'Pol\xf4nia', 'PM': 'Saint Pierre e Miquelon', 'ZM': u'Z\xe2mbia', 'EH': 'Saara Ocidental', 'EE': u'Est\xf4nia', 'EG': 'Egito', 'ZA': u'\xc1frica do Sul', 'EC': 'Equador', 'IT': u'It\xe1lia', 'VN': u'Vietn\xe3', 'SB': u'Ilhas Salom\xe3o', 'ET': u'Eti\xf3pia', 'SO': u'Som\xe1lia', 'ZW': u'Zimb\xe1bue', 'SA': u'Ar\xe1bia Saudita', 'ES': 'Espanha', 'ER': u'Eritr\xe9ia', 'MD': u'Moldova, Rep\xfablica de', 'MG': 'Madagascar', 'MA': 'Marrocos', 'MC': u'M\xf4naco', 'UZ': u'Uzbequist\xe3o', 'MM': 'Myanma', 'ML': 'Mali', 'MO': 'Macao S.A.R. da China', 'MN': u'Mong\xf3lia', 'MH': 'Ilhas Marshall', 'MK': u'Maced\xf4nia, Rep\xfablica da', 'MU': u'Maur\xedcio', 'MT': 'Malta', 'MW': 'Malavi', 'MV': 'Maldivas', 'MQ': 'Martinica', 'MP': 'Ilhas Marianas do Norte', 'MS': 'Montserrat', 'MR': u'Maurit\xe2nia', 'UG': 'Uganda', 'MY': u'Mal\xe1sia', 'MX': u'M\xe9xico', 'IL': 'Israel', 'FR': u'Fran\xe7a', 'IO': u'Territ\xf3rio Brit\xe2nico do Oceano \xcdndico', 'SH': 'Santa Helena', 'FI': u'Finl\xe2ndia', 'FJ': 'Fiji', 'FK': 'Ilhas Falkland', 'FM': u'Micron\xe9sia, Estados Federados da', 'FO': 'Ilhas Faroe', 'NI': u'Nicar\xe1gua', 'NL': u'Pa\xedses Baixos', 'NO': 'Noruega', 'NA': u'Nam\xedbia', 'VU': 'Vanuatu', 'NC': u'Nova Caled\xf4nia', 'NE': u'N\xedger', 'NF': 'Ilha Norfolk', 'NG': u'Nig\xe9ria', 'NZ': u'Nova Zel\xe2ndia', 'NP': 'Nepal', 'NR': 'Nauru', 'NU': 'Niue', 'CK': 'Ilhas Cook', 'CI': 'Costa do Marfim', 'CH': u'Su\xed\xe7a', 'CO': u'Col\xf4mbia', 'CN': 'China', 'CM': u'Rep\xfablica dos Camar\xf5es', 'CL': 'Chile', 'CC': 'Ilhas Cocos (Keeling)', 'CA': u'Canad\xe1', 'CG': 'Congo', 'CF': u'Rep\xfablica Centro-Africana', 'CD': u'Congo, Rep\xfablica Democr\xe1tica do', 'CZ': u'Rep\xfablica Tcheca', 'CY': 'Chipre', 'CX': 'Ilhas Christmas', 'CR': 'Costa Rica', 'Fallback': 'en', 'CV': 'Cabo Verde', 'CU': 'Cuba', 'SZ': u'Suazil\xe2ndia', 'SY': u'S\xedria', 'KG': u'Quirguist\xe3o', 'KE': u'Qu\xeania', 'SR': 'Suriname', 'KI': 'Kiribati', 'KH': 'Cambodja', 'KN': u'S\xe3o Cristov\xe3o e Nevis', 'KM': 'Comores', 'ST': u'S\xe3o Tom\xe9 e Pr\xedncipe', 'SK': u'Eslov\xe1quia', 'KR': u'Cor\xe9ia, Sul', 'SI': u'Eslov\xeania', 'KP': u'Cor\xe9ia, Norte', 'KW': 'Kuwait', 'SN': 'Senegal', 'SM': 'San Marino', 'SL': 'Serra Leoa', 'SC': 'Seychelles', 'KZ': u'Casaquist\xe3o', 'KY': 'Ilhas Cayman', 'SG': 'Cingapura', 'SE': u'Su\xe9cia', 'SD': u'Sud\xe3o', 'DO': u'Rep\xfablica Dominicana', 'DM': 'Dominica', 'DJ': 'Djibuti', 'DK': 'Dinamarca', 'VG': u'Ilhas Virgens Brit\xe2nicas', 'DE': 'Alemanha', 'YE': u'I\xeamen', 'DZ': u'Arg\xe9lia', 'US': 'Estados Unidos', 'UY': 'Uruguai', 'YU': u'Iugosl\xe1via', 'YT': 'Mayotte', 'UM': 'Ilhas Menores Distantes dos Estados Unidos', 'LB': u'L\xedbano', 'LC': u'Santa L\xfacia', 'LA': u'Rep\xfablica Democr\xe1tica Popular de Lao', 'TV': 'Tuvalu', 'TW': 'Taiwan', 'TT': 'Trinidad e Tobago', 'TR': 'Turquia', 'LK': 'Sri Lanka', 'LI': 'Liechtenstein', 'LV': u'Let\xf4nia', 'TO': 'Tonga', 'LT': u'Litu\xe2nia', 'LU': 'Luxemburgo', 'LR': u'Lib\xe9ria', 'LS': 'Lesoto', 'TH': u'Tail\xe2ndia', 'TF': u'Territ\xf3rios Franceses do Sul', 'TG': 'Togo', 'TD': 'Chade', 'TC': 'Ilhas Turks e Caicos', 'LY': u'Jamahiriya \xc1rabe L\xedbia', 'VA': u'Santa S\xe9 (Cidade Estado do Vaticano)', 'VC': 'Saint Vincent e Grenadinas', 'AE': u'Emirados \xc1rabes Unidos', 'AD': 'Andorra', 'AG': 'Antigua e Barbuda', 'AF': u'Afeganist\xe3o', 'AI': 'Anguilla', 'VI': 'Ilhas Virgens dos EUA', 'IS': u'Isl\xe2ndia', 'IR': u'Ir\xe3', 'AM': u'Arm\xeania', 'AL': u'Alb\xe2nia', 'AO': 'Angola', 'AN': 'Antilhas Holandesas', 'AQ': u'Ant\xe1rtida', 'AS': 'Samoa Americana', 'AR': 'Argentina', 'AU': u'Austr\xe1lia', 'AT': u'\xc1ustria', 'AW': 'Aruba', 'IN': u'\xcdndia', 'TZ': u'Tanz\xe2nia', 'AZ': u'Azerbaij\xe3o', 'IE': 'Irlanda', 'ID': u'Indon\xe9sia', 'UA': u'Ucr\xe2nia', 'QA': 'Catar', 'MZ': u'Mo\xe7ambique'} months=['janeiro', 'fevereiro', u'mar\xe7o', 'abril', 'maio', 'junho', 'julho', 'agosto', 'setembro', 'outubro', 'novembro', 'dezembro'] abbrMonths=['jan', 'fev', 'mar', 'abr', 'mai', 'jun', 'jul', 'ago', 'set', 'out', 'nov', 'dez'] days=['segunda-feira', u'ter\xe7a-feira', 'quarta-feira', 'quinta-feira', 'sexta-feira', u's\xe1bado', 'domingo'] abbrDays=['seg', 'ter', 'qua', 'qui', 'sex', u's\xe1b', 'dom'] dateFormats={'medium': '%d/%m/%Y', 'full': '%%(dayname)s, %d de %%(monthname)s de %Y', 'long': '%d de %%(monthname)s de %Y', 'short': '%d/%m/%y'} numericSymbols={'group': '.', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': ',', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'} PKA>,,turbogears/i18n/data/pt_BR.pyc; ȸHIc @sd hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydzWWturbogears/i18n/data/pt_PT.pyc; ȸHIc @shdd<dd<dd<dd<dd <d d d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd&&turbogears/i18n/data/ro.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dld<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<ddd?d@dAdBgZhdCdD<dEdF<dGdF<dHdD+&&turbogears/i18n/data/ro_RO.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dld<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<ddd?d@dAdBgZhdCdD<dEdF<dGdF<dHdD0EBBturbogears/i18n/data/ru.pyc; ȸHIc @shdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddBBturbogears/i18n/data/ru_RU.pyc; ȸHIc @shdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddc/BBturbogears/i18n/data/ru_UA.pyc; ȸHIc @shdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddN))turbogears/i18n/data/sh.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drdsd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdTo ))turbogears/i18n/data/sh_YU.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drdsd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT|{'{'turbogears/i18n/data/sk.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dld<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<ddd?gZhd@dA<dBdC<dDdE<dFdAVw9~'~'turbogears/i18n/data/sk_SK.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dld<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<ddd?gZhd@dA<dBdC<dDdE<dFdAe+%&&turbogears/i18n/data/sl.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBd?<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkd<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<ddd?d@gZhdAdB<dCdD<dEdF<dGdH԰u]&&turbogears/i18n/data/sl_SI.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBd?<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkd<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<ddd?d@gZhdAdB<dCdD<dEdF<dGdH$*turbogears/i18n/data/so.pyc; ȸHIc @shddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd #{turbogears/i18n/data/so_DJ.pyc; ȸHIc @shddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddMOMturbogears/i18n/data/so_ET.pyc; ȸHIc @shddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd xturbogears/i18n/data/so_KE.pyc; ȸHIc @shddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd%turbogears/i18n/data/so_SO.pyc; ȸHIc @shddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dditurbogears/i18n/data/sq.pyc; ȸHIc @sHhddd?<d@dA<dBdC<dDdE<dFdGqmSturbogears/i18n/data/sq_AL.pyc; ȸHIc @sHhddd?<d@dA<dBdC<dDdE<dFdGlz*z*turbogears/i18n/data/sr.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdwd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd(Zt}*}*turbogears/i18n/data/sr_YU.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdwd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddm>JJturbogears/i18n/data/sv.pyc; ȸHIc @shdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dud<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdK<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddoJJturbogears/i18n/data/sv_FI.pyc; ȸHIc @shdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dud<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdK<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd?~JJturbogears/i18n/data/sv_SE.pyc; ȸHIc @shdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dud<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdK<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd=wbbturbogears/i18n/data/sw.pyc; ȸHIc @shddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddĢq/eeturbogears/i18n/data/sw_KE.pyc; ȸHIc @shddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddReeturbogears/i18n/data/sw_TZ.pyc; ȸHIc @shddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddP>Pturbogears/i18n/data/ta.py# Formatting configuration for locale ta languages={'gu': u'\u0b95\u0bc1\u0b9c\u0bb0\u0bbe\u0ba4\u0bcd\u0ba4\u0bbf', 'gd': u'\u0bb8\u0bcd\u0b95\u0bbe\u0b9f\u0bcd\u0bb8\u0bcd \u0b95\u0bbe\u0bb2\u0bc6\u0b95\u0bcd', 'ga': u'\u0b90\u0bb0\u0bbf\u0bb7\u0bcd', 'gn': u'\u0b95\u0bc1\u0bb0\u0bbe\u0ba9\u0bbf', 'gl': u'\u0b95\u0bc6\u0bb2\u0bbf\u0bb8\u0bbf\u0baf\u0ba9\u0bcd', 'la': u'\u0bb2\u0bbe\u0ba4\u0bbf\u0ba9\u0bcd', 'ln': u'\u0bb2\u0bbf\u0b99\u0bcd\u0b95\u0bbe\u0bb2\u0bbe', 'lo': u'\u0bb2\u0bcb\u0ba4\u0bcd\u0ba4\u0bbf\u0baf\u0ba9\u0bcd', 'tt': u'\u0b9f\u0bbe\u0b9f\u0bb0\u0bcd', 'tr': u'\u0b9f\u0bb0\u0bcd\u0b95\u0bbf\u0bb7\u0bcd', 'ts': u'\u0bb8\u0bcb\u0b99\u0bcd\u0b95\u0bbe', 'lv': u'\u0bb2\u0bc7\u0b9f\u0bcd\u0bb5\u0bbf\u0baf\u0ba9\u0bcd (\u0bb2\u0bc7\u0b9f\u0bcd\u0b9f\u0bbf\u0bb7\u0bcd)', 'to': u'\u0b9f\u0bcb\u0b99\u0bcd\u0b95\u0bbe', 'lt': u'\u0bb2\u0bc1\u0ba4\u0bcd\u0ba4\u0bc7\u0ba9\u0bbf\u0baf\u0ba9\u0bcd', 'tk': u'\u0b9f\u0bb0\u0bcd\u0b95\u0bcd\u0bae\u0bc6\u0ba9\u0bcd', 'th': u'\u0ba4\u0bbe\u0baf\u0bcd', 'ti': u'\u0b9f\u0bbf\u0b95\u0bcd\u0bb0\u0bbf\u0ba9\u0bcd\u0baf\u0bbe', 'tg': u'\u0ba4\u0bbe\u0b9c\u0bbf\u0b95\u0bcd', 'te': u'\u0ba4\u0bc6\u0bb2\u0bc1\u0b99\u0bcd\u0b95\u0bc1', 'ta': u'\u0ba4\u0bae\u0bbf\u0bb4\u0bcd', 'yi': u'\u0b88\u0ba4\u0bcd\u0ba4\u0bbf\u0bb7', 'yo': u'\u0baf\u0bcb\u0bb0\u0bc1\u0baa\u0bcd\u0baa\u0bbe', 'de': u'\u0b9c\u0bc6\u0bb0\u0bcd\u0bae\u0ba9\u0bcd', 'da': u'\u0b9f\u0bbe\u0ba9\u0bbf\u0bb7\u0bcd', 'dz': u'\u0baa\u0bc1\u0b9f\u0bbe\u0ba9\u0bbf', 'st': u'\u0bb7\u0bc6\u0bb8\u0bcd\u0bb8\u0bcb\u0ba4\u0bcb', 'qu': u'\u0b95\u0bbf\u0baf\u0bc1\u0b9a\u0bbe', 'el': u'\u0b95\u0bbf\u0bb0\u0bc7\u0b95\u0bcd\u0b95\u0bae\u0bcd', 'eo': u'\u0b8e\u0bb8\u0bcd\u0baa\u0bb0\u0bc7\u0ba9\u0bcd\u0b9f\u0bcb', 'en': u'\u0b86\u0b99\u0bcd\u0b95\u0bbf\u0bb2\u0bae\u0bcd', 'zh': u'\u0b9a\u0bc0\u0ba9\u0bae\u0bcd', 'za': u'\u0b9c\u0bc1\u0bb5\u0bbe\u0b99\u0bcd', 'uk': u'\u0b89\u0b95\u0bcd\u0bb0\u0bc7\u0ba9\u0bbf\u0baf\u0ba9\u0bcd', 'eu': u'\u0baa\u0bb8\u0bcd\u0b95\u0bcd', 'et': u'\u0b8e\u0bb8\u0bcd\u0b9f\u0bcb\u0ba9\u0bbf\u0baf\u0ba9\u0bcd', 'es': u'\u0bb8\u0bcd\u0baa\u0bc7\u0ba9\u0bbf\u0bb7\u0bcd', 'ru': u'\u0bb0\u0bb7\u0bbf\u0baf\u0ba9\u0bcd', 'rw': u'\u0b95\u0bbf\u0ba9\u0bcd\u0baf\u0bb0\u0bcd\u0bb5\u0bc6\u0ba9\u0bcd\u0b9f\u0bbe', 'rm': u'\u0bb0\u0bc8\u0b9f\u0bcd\u0b9f\u0bcb-\u0bb0\u0bcb\u0bae\u0bc6\u0ba9\u0bcd\u0bb8\u0bcd', 'rn': u'\u0b95\u0bbf\u0bb0\u0bc1\u0ba8\u0bcd\u0ba4\u0bbf', 'ro': u'\u0bb0\u0bcb\u0bae\u0bc7\u0ba9\u0bbf\u0baf\u0ba9\u0bcd', 'bn': u'\u0bb5\u0b99\u0bcd\u0b95\u0bbe\u0bb3\u0bae\u0bcd', 'be': u'\u0baa\u0bc8\u0bb2\u0bcb\u0bb0\u0bc1\u0bb7\u0bcd\u0ba9\u0bcd', 'bg': u'\u0baa\u0bb2\u0bcd\u0b95\u0bc7\u0bb0\u0bbf\u0baf\u0ba9\u0bcd', 'ba': u'\u0baa\u0bbe\u0bb7\u0bcd\u0b95\u0bbf\u0bb0\u0bcd0', 'wo': u'\u0b92\u0bb2\u0bcb\u0baa\u0bcd', 'jv': u'\u0b9c\u0bbe\u0bb5\u0bbe\u0ba9\u0bc0\u0bb8\u0bcd', 'bo': u'\u0ba4\u0bbf\u0baa\u0bc6\u0ba4\u0bcd\u0ba4\u0bc1', 'bh': u'\u0baa\u0bbf\u0bb9\u0bbe\u0bb0\u0bbf', 'bi': u'\u0baa\u0bbf\u0bb8\u0bcd\u0bb2\u0bbe\u0bae\u0bbe', 'br': u'\u0baa\u0bbf\u0bb0\u0bbf\u0b9f\u0ba9\u0bcd', 'ja': u'\u0b9c\u0baa\u0bcd\u0baa\u0bbe\u0ba9\u0bc0\u0bb8\u0bcd', 'om': u'\u0b92\u0bb0\u0bcb\u0bae (\u0b85\u0baa\u0ba9\u0bcd)', 'root': u'\u0ba4\u0bae\u0bbf\u0bb4\u0bcd', 'oc': u'\u0b86\u0b95\u0bbf\u0b9f\u0bbf\u0baf\u0ba9\u0bcd', 'tw': u'\u0ba4\u0bcd\u0ba4\u0bbf\u0bb5\u0bbf', 'or': u'\u0b92\u0bb0\u0bbf\u0baf\u0bbe', 'xh': u'\u0bb9\u0bcb\u0bb7\u0bbe', 'co': u'\u0b95\u0bbe\u0bb0\u0bcd\u0b9a\u0bbf\u0baf\u0ba9\u0bcd', 'ca': u'\u0b95\u0bbe\u0b9f\u0bb2\u0bbe\u0ba9\u0bcd', 'cy': u'\u0bb5\u0bc6\u0bb2\u0bcd\u0bb7\u0bcd', 'cs': u'\u0b9a\u0bc6\u0b95\u0bcd', 'ps': u'\u0baa\u0bc7\u0bb7\u0bcd\u0b9f\u0bcb (\u0baa\u0bc1\u0bb7\u0bcd\u0b9f\u0bcb)', 'kok': u'\u0b95\u0bca\u0b99\u0bcd\u0b95\u0ba9\u0bbf', 'pt': u'\u0baa\u0bcb\u0bb0\u0bcd\u0ba4\u0bcd\u0ba4\u0bc1\u0b95\u0bc0\u0bb8\u0bcd', 'tl': u'\u0b9f\u0bbe\u0b95\u0bbe\u0bb2\u0bcb\u0b95\u0bcd', 'pa': u'\u0baa\u0b9e\u0bcd\u0b9a\u0bbe\u0baa\u0bbf', 'vi': u'\u0bb5\u0bbf\u0baf\u0b9f\u0bcd\u0ba8\u0bbe\u0bae\u0bbf\u0bb8\u0bcd', 'pl': u'\u0baa\u0bcb\u0bb2\u0bbf\u0bb7\u0bcd', 'hy': u'\u0b86\u0bb0\u0bcd\u0bae\u0bc7\u0ba9\u0bbf\u0baf\u0ba9\u0bcd', 'hr': u'\u0b95\u0bb0\u0bcb\u0bb7\u0bbf\u0baf\u0ba9\u0bcd', 'iu': u'\u0b87\u0ba9\u0bc1\u0b95\u0bbf\u0b9f\u0b9f\u0bcd', 'hu': u'\u0bb9\u0b99\u0bcd\u0b95\u0bc7\u0bb0\u0bbf\u0baf\u0ba9\u0bcd', 'hi': u'\u0b87\u0ba8\u0bcd\u0ba4\u0bbf', 'ha': u'\u0bb9\u0bca\u0bb8\u0bbe', 'he': u'\u0bb9\u0bc1\u0baa\u0bcd\u0bb0\u0bc1', 'mg': u'\u0bae\u0bb2\u0b95\u0bc6\u0bb8\u0bbf', 'uz': u'\u0b89\u0bb8\u0bcd\u0baa\u0bc6\u0b95\u0bcd', 'ml': u'\u0bae\u0bb2\u0bc8\u0baf\u0bbe\u0bb3\u0bae\u0bcd', 'mo': u'\u0bae\u0bcb\u0bb2\u0bcd\u0b9f\u0bc7\u0bb5\u0bbf\u0baf\u0ba9\u0bcd', 'mn': u'\u0bae\u0b99\u0bcd\u0b95\u0bcb\u0bb2\u0bbf\u0baf\u0ba9\u0bcd', 'mi': u'\u0bae\u0bcb\u0bb0\u0bbf', 'ik': u'\u0b87\u0ba9\u0bc1\u0baa\u0bc6\u0b95\u0bcd', 'mk': u'\u0bae\u0bc6\u0b95\u0bcd\u0b95\u0b9f\u0bcb\u0ba9\u0bbf\u0baf\u0ba9\u0bcd', 'ur': u'\u0b89\u0bb0\u0bc1\u0ba4\u0bc1', 'mt': u'\u0bae\u0bbe\u0bb2\u0bcd\u0b9f\u0bbf\u0bb8\u0bcd', 'ms': u'\u0bae\u0bb2\u0bbe\u0baf\u0bcd', 'mr': u'\u0bae\u0bb0\u0bbe\u0ba4\u0bcd\u0ba4\u0bbf', 'ug': u'\u0baf\u0bc1\u0b95\u0bc1\u0bb0\u0bcd', 'my': u'\u0baa\u0bb0\u0bcd\u0bae\u0bbf\u0bb8\u0bcd', 'aa': u'\u0b85\u0baa\u0bbe\u0bb0\u0bcd', 'ab': u'\u0b85\u0baa\u0bcd\u0b95\u0bbe\u0bb8\u0bbf\u0ba9\u0bcd', 'ss': u'\u0bb7\u0bbf\u0bb8\u0bcd\u0bb5\u0bbe\u0ba4\u0bbf', 'af': u'\u0b86\u0baa\u0bcd\u0bb0\u0bbf\u0b95\u0ba9\u0bcd\u0bb8\u0bcd', 'tn': u'\u0bb8\u0bc6\u0b9f\u0bcd\u0bb8\u0bcd\u0bb5\u0bbe\u0ba9\u0bbe', 'sw': u'\u0b9a\u0bc1\u0bb5\u0bbe\u0bb9\u0bbf\u0bb2\u0bbf', 'is': u'\u0b90\u0bb8\u0bcd\u0bb2\u0bc6\u0ba9\u0bcd\u0b9f\u0bbf\u0b95\u0bcd', 'am': u'\u0b85\u0bae\u0bcd\u0bb9\u0bbe\u0bb0\u0bbf\u0b95\u0bcd', 'it': u'\u0b87\u0ba4\u0bcd\u0ba4\u0bbe\u0bb2\u0bbf\u0baf\u0ba9\u0bcd', 'sv': u'\u0bb7\u0bc0\u0bb5\u0bbf\u0b9f\u0bbf\u0bb8\u0bcd', 'ia': u'\u0b87\u0ba9\u0bcd\u0b9f\u0bb0\u0bcd\u0bb2\u0bbf\u0b99\u0bcd\u0b95\u0bc1\u0bb5\u0bbe', 'as': u'\u0b85\u0bb8\u0bcd\u0bb8\u0bbe\u0bae\u0bbf', 'ar': u'\u0b85\u0bb0\u0baa\u0bc1', 'su': u'\u0b9a\u0bc1\u0b9f\u0bbe\u0ba9\u0bc0\u0bb8\u0bcd', 'zu': u'\u0b9c\u0bc2\u0bb2\u0bc2', 'ay': u'\u0b85\u0baf\u0bae\u0bb0\u0bbe', 'az': u'\u0b85\u0b9a\u0bb0\u0bcd\u0baa\u0bbe\u0baf\u0bcd\u0b9c\u0bbe\u0ba9\u0bbf', 'ie': u'\u0b87\u0ba9\u0bcd\u0b9f\u0bb0\u0bcd\u0bb2\u0bbf\u0b99\u0bcd\u0b95\u0bc1\u0bb5\u0bbe', 'id': u'\u0b87\u0ba8\u0bcd\u0ba4\u0bcb\u0ba9\u0bc7\u0bb7\u0bbf\u0baf\u0ba9\u0bcd', 'sk': u'\u0bb8\u0bcd\u0bb2\u0bcb\u0bb5\u0bc6\u0b95\u0bcd', 'nl': u'\u0b9f\u0b9a\u0bcd\u0b9a\u0bc1', 'no': u'\u0ba8\u0bbe\u0bb0\u0bcd\u0bb5\u0bc7\u0b95\u0bbf\u0baf\u0ba9\u0bcd', 'na': u'\u0ba8\u0bbe\u0bb0\u0bc2', 'ne': u'\u0ba8\u0bc7\u0baa\u0bcd\u0baa\u0bbe\u0bb2\u0bbf', 'vo': u'\u0b92\u0bb2\u0baa\u0bc1\u0b95\u0bcd', 'fr': u'\u0baa\u0bbf\u0bb0\u0bc6\u0b9e\u0bcd\u0b9a\u0bc1', 'sm': u'\u0bb8\u0bc6\u0bae\u0bcb\u0ba9\u0bcd', 'fy': u'\u0baa\u0bbf\u0bb0\u0bbf\u0bb7\u0bbf\u0baf\u0ba9\u0bcd', 'fa': u'\u0baa\u0bb0\u0bcd\u0bb8\u0bbf\u0baf\u0ba9\u0bcd', 'fi': u'\u0baa\u0bbf\u0ba9\u0bcd\u0ba9\u0bbf\u0bb7\u0bcd', 'fj': u'\u0baa\u0bbf\u0b9c\u0bbf', 'sa': u'\u0b9a\u0bae\u0bb8\u0bcd\u0b95\u0bbf\u0bb0\u0bc1\u0ba4\u0bae\u0bcd', 'fo': u'\u0baa\u0bc8\u0bb0\u0bcb\u0bb8\u0bbf', 'ka': u'\u0b95\u0ba9\u0bcd\u0ba9\u0b9f\u0bae\u0bcd', 'kk': u'\u0b95\u0b9a\u0bbe\u0b95\u0bcd', 'sr': u'\u0b9a\u0bb0\u0bcd\u0baa\u0bbf\u0baf\u0ba9\u0bcd', 'sq': u'\u0b85\u0bb2\u0bcd\u0baa\u0bc6\u0ba9\u0bbf\u0baf\u0ba9\u0bcd', 'ko': u'\u0b95\u0bca\u0bb0\u0bbf\u0baf\u0ba9\u0bcd', 'kn': u'\u0b95\u0ba9\u0bcd\u0ba9\u0b9f\u0bbe', 'km': u'\u0b95\u0bae\u0bcd\u0baa\u0bcb\u0b9f\u0bbf\u0baf\u0ba9\u0bcd', 'kl': u'\u0b95\u0bbf\u0bb0\u0bbf\u0ba9\u0bcd\u0bb2\u0bc6\u0ba9\u0bcd\u0b9f\u0bbf\u0b95\u0bcd', 'ks': u'\u0b95\u0bbe\u0bb7\u0bcd\u0bae\u0bbf\u0bb0\u0bbf', 'si': u'\u0b9a\u0bbf\u0b99\u0bcd\u0b95\u0bb3\u0bae\u0bcd', 'sh': u'\u0b9a\u0bc6\u0bb0\u0bcd\u0baa\u0bcb-\u0b95\u0bcd\u0bb0\u0bcb\u0bb7\u0bbf\u0baf\u0ba9\u0bcd', 'so': u'\u0b9a\u0bcb\u0bae\u0bbe\u0bb2\u0bbf', 'sn': u'\u0bb7\u0bcb\u0ba9\u0bbe', 'ku': u'\u0b95\u0bc1\u0bb0\u0bcd\u0ba4\u0bbf\u0bb7\u0bcd', 'sl': u'\u0bb8\u0bcd\u0bb2\u0bcb\u0bb5\u0bbf\u0ba9\u0bc7\u0baf\u0bbf\u0ba9\u0bcd', 'ky': u'\u0b95\u0bbf\u0bb0\u0bcd\u0b95\u0bbf\u0bb7\u0bcd', 'sg': u'\u0b9a\u0bc6\u0ba9\u0bcd\u0b95\u0bcd\u0bb0\u0bcb', 'sd': u'\u0b9a\u0bbf\u0ba8\u0bcd\u0ba4\u0bbf'} countries={'BD': u'\u0baa\u0b99\u0bcd\u0b95\u0bb3\u0bbe\u0ba4\u0bc7\u0bb7\u0bcd', 'BE': u'\u0baa\u0bc6\u0bb2\u0bcd\u0b9c\u0bbf\u0baf\u0bae\u0bcd', 'BF': u'\u0baa\u0bb0\u0bcd\u0b95\u0bbf\u0ba9\u0bcb \u0baa\u0bbe\u0bb8\u0bcb', 'BG': u'\u0baa\u0bb2\u0bcd\u0b95\u0bc7\u0bb0\u0bbf\u0baf\u0bbe', 'BA': u'\u0baa\u0bcb\u0bb8\u0bcd\u0ba9\u0bbf\u0baf\u0bbe \u0bb9\u0bc6\u0bb0\u0bcd\u0bb8\u0bbf\u0b95\u0bcb\u0bb5\u0bbf\u0ba9\u0bbe', 'BB': u'\u0baa\u0bbe\u0bb0\u0bcd\u0baa\u0b9f\u0bcb\u0bb8\u0bcd', 'BN': u'\u0baa\u0bc1\u0bb0\u0bc2\u0ba9\u0bc7\u0baf\u0bcd', 'BO': u'\u0baa\u0bca\u0bb2\u0bbf\u0bb5\u0bbf\u0baf\u0bbe', 'BH': u'\u0baa\u0bb9\u0bcd\u0bb0\u0bc8\u0ba9\u0bcd', 'BI': u'\u0baa\u0bc1\u0bb0\u0bc1\u0ba3\u0bcd\u0b9f\u0bbf', 'BJ': u'\u0baa\u0bc6\u0ba9\u0bbf\u0ba9\u0bcd', 'BT': u'\u0baa\u0bc2\u0b9f\u0bbe\u0ba9\u0bcd', 'JM': u'\u0b9c\u0bae\u0bbe\u0baf\u0bcd\u0b95\u0bcd\u0b95\u0bbe', 'BW': u'\u0baa\u0bcb\u0b9f\u0bcd\u0bb8\u0bcd\u0bb5\u0bbe\u0ba9\u0bbe', 'WS': u'\u0b9a\u0bae\u0bcb\u0bb5\u0bbe', 'BR': u'\u0baa\u0bbf\u0bb0\u0bc7\u0bb8\u0bbf\u0bb2\u0bcd', 'BS': u'\u0baa\u0bb9\u0bbe\u0bae\u0bbe\u0bb8\u0bcd', 'BY': u'\u0baa\u0bc6\u0bb2\u0bbe\u0bb0\u0bc2\u0bb8\u0bcd', 'BZ': u'\u0baa\u0bc6\u0bb2\u0bbf\u0bb8\u0bcd', 'RU': u'\u0bb0\u0bb7\u0bcd\u0baf\u0bbe', 'TM': u'\u0ba4\u0bc1\u0bb0\u0bcd\u0b95\u0bcd\u0bae\u0bc6\u0ba9\u0bbf\u0bb8\u0bcd\u0ba4\u0bbe\u0ba9\u0bcd', 'TJ': u'\u0ba4\u0bbe\u0b9c\u0bbf\u0b95\u0bbf\u0bb8\u0bcd\u0ba4\u0bbe\u0ba9\u0bcd', 'RO': u'\u0bb0\u0bc1\u0bae\u0bc7\u0ba9\u0bbf\u0baf\u0bbe', 'GW': u'\u0b95\u0bbf\u0ba9\u0bbf-\u0baa\u0bbf\u0bb8\u0bcd\u0bb8\u0bbe\u0bb5\u0bcd', 'GT': u'\u0b95\u0bc1\u0bb5\u0bbe\u0ba4\u0bcd\u0ba4\u0bbe\u0bae\u0bbe\u0bb2\u0bbe', 'GR': u'\u0b95\u0bbf\u0bb0\u0bc0\u0bb8\u0bcd', 'GQ': u'\u0b88\u0b95\u0bcd\u0b95\u0bc1\u0bb5\u0bbf\u0b9f\u0bcb\u0bb0\u0bbf\u0baf\u0bb2\u0bcd \u0b95\u0bbf\u0ba9\u0bbf', 'JP': u'\u0b9c\u0baa\u0bcd\u0baa\u0bbe\u0ba9\u0bcd', 'GY': u'\u0b95\u0baf\u0bbe\u0ba9\u0bbe', 'GE': u'\u0b9c\u0bbe\u0bb0\u0bcd\u0b9c\u0bbf\u0baf\u0bbe', 'GD': u'\u0b95\u0bbf\u0bb0\u0ba9\u0bc6\u0b9f\u0bbe', 'GB': u'\u0baa\u0bbf\u0bb0\u0bbf\u0b9f\u0bbf\u0bb7\u0bcd \u0b95\u0bc2\u0b9f\u0bcd\u0b9f\u0bb0\u0b9a\u0bc1', 'GA': u'\u0b95\u0bbe\u0baa\u0bcb\u0ba9\u0bcd', 'GN': u'\u0b95\u0bbf\u0ba9\u0bbf', 'GM': u'\u0b95\u0bbe\u0bae\u0bcd\u0baa\u0bbf\u0baf\u0bbe', 'GH': u'\u0b95\u0bbe\u0ba9\u0bbe', 'OM': u'\u0b93\u0bae\u0bbe\u0ba9\u0bcd', 'TN': u'\u0ba4\u0bc1\u0ba9\u0bbf\u0b9a\u0bbf\u0baf\u0bbe', 'JO': u'\u0b9c\u0bca\u0bb0\u0bcd\u0b9f\u0bbe\u0ba9\u0bcd', 'HR': u'\u0b95\u0bc1\u0bb0\u0bcb\u0b9a\u0bbf\u0baf\u0bbe', 'HT': u'\u0bb9\u0bc6\u0baf\u0bcd\u0ba4\u0bbf', 'HU': u'\u0bb9\u0b99\u0bcd\u0b95\u0bc7\u0bb0\u0bbf', 'HN': u'\u0bb9\u0bbe\u0ba3\u0bcd\u0b9f\u0bc1\u0bb0\u0bbe\u0bb8\u0bcd', 'VE': u'\u0bb5\u0bc6\u0ba9\u0b9c\u0bc1\u0bb5\u0bc7\u0bb2\u0bbe', 'PT': u'\u0baa\u0bcb\u0bb0\u0bcd\u0b9a\u0bcd\u0b9a\u0bc1\u0b95\u0bcd\u0b95\u0bb2\u0bcd', 'PY': u'\u0baa\u0bbe\u0bb0\u0b95\u0bc1\u0bb5\u0bc7', 'PA': u'\u0baa\u0ba3\u0bbe\u0bae\u0bbe', 'PG': u'\u0baa\u0bbe\u0baa\u0bcd\u0baa\u0bc1\u0bb5\u0bbe-\u0ba8\u0bbf\u0baf\u0bc2\u0b95\u0bbf\u0ba9\u0bbf', 'PE': u'\u0baa\u0bc6\u0bb0\u0bc1', 'PK': u'\u0baa\u0bbe\u0b95\u0bbf\u0bb8\u0bcd\u0ba4\u0bbe\u0ba9\u0bcd', 'PH': u'\u0baa\u0bbf\u0bb2\u0bbf\u0baa\u0bcd\u0baa\u0bc8\u0ba9\u0bcd\u0bb8\u0bcd', 'PL': u'\u0baa\u0bcb\u0bb2\u0ba8\u0bcd\u0ba4\u0bc1', 'EE': u'\u0b8e\u0bb8\u0bcd\u0b9f\u0bcb\u0ba9\u0bbf\u0baf\u0bbe', 'EG': u'\u0b8e\u0b95\u0bbf\u0baa\u0bcd\u0ba4\u0bc1', 'ZA': u'\u0ba4\u0bc6\u0ba9\u0bcd \u0b86\u0baa\u0bcd\u0bb0\u0bbf\u0b95\u0bcd\u0b95\u0bbe', 'EC': u'\u0b88\u0b95\u0bcd\u0bb5\u0b9f\u0bbe\u0bb0\u0bcd', 'IT': u'\u0b87\u0ba4\u0bcd\u0ba4\u0bbe\u0bb2\u0bbf', 'VN': u'\u0bb5\u0bbf\u0baf\u0b9f\u0bcd\u0ba8\u0bbe\u0bae\u0bcd', 'SB': u'\u0b9a\u0bbe\u0bb2\u0bae\u0ba9\u0bcd \u0ba4\u0bc0\u0bb5\u0bc1\u0b95\u0bb3\u0bcd', 'ET': u'\u0b8e\u0ba4\u0bbf\u0baf\u0bcb\u0baa\u0bcd\u0baa\u0bbf\u0baf\u0bbe', 'ZW': u'\u0b9c\u0bbf\u0bae\u0bcd\u0baa\u0bbe\u0baa\u0bcd\u0bb5\u0bc7', 'ES': u'\u0bb8\u0bcd\u0baa\u0bc6\u0baf\u0bbf\u0ba9\u0bcd', 'MD': u'\u0bae\u0bbe\u0bb2\u0bcd\u0b9f\u0bcb\u0bb5\u0bbe', 'MA': u'\u0bae\u0bca\u0bb0\u0bcb\u0b95\u0bcd\u0b95\u0bcb', 'MC': u'\u0bae\u0bca\u0ba9\u0bbe\u0b95\u0bcd\u0b95\u0bcb', 'UZ': u'\u0b89\u0bb8\u0bcd\u0baa\u0bc6\u0b95\u0bbf\u0bb8\u0bcd\u0ba4\u0bbe\u0ba9\u0bcd', 'MM': u'\u0bae\u0bbf\u0baf\u0bbe\u0ba9\u0bcd\u0bae\u0bbe\u0bb0\u0bcd', 'ML': u'\u0bae\u0bbe\u0bb2\u0bc0', 'MN': u'\u0bae\u0b99\u0bcd\u0b95\u0bcb\u0bb2\u0bbf\u0baf\u0bbe', 'MK': u'\u0bae\u0b9a\u0bc6\u0b9f\u0bcb\u0ba3\u0bbf\u0baf\u0bbe', 'MT': u'\u0bae\u0bbe\u0bb2\u0bcd\u0b9f\u0bbe', 'MW': u'\u0bae\u0bb2\u0bbe\u0bb5\u0bc0', 'MV': u'\u0bae\u0bbe\u0bb2\u0ba4\u0bcd\u0ba4\u0bc0\u0bb5\u0bc1', 'MY': u'\u0bae\u0bb2\u0bc7\u0bb7\u0bbf\u0baf\u0bbe', 'MX': u'\u0bae\u0bc6\u0b95\u0bcd\u0b9a\u0bbf\u0b95\u0bcb', 'IL': u'\u0b87\u0bb8\u0bcd\u0bb0\u0bc7\u0bb2\u0bcd', 'FR': u'\u0baa\u0bbf\u0bb0\u0bbe\u0ba9\u0bcd\u0bb8\u0bcd', 'FI': u'\u0baa\u0bbf\u0ba9\u0bcd\u0bb2\u0bbe\u0ba8\u0bcd\u0ba4\u0bc1', 'FJ': u'\u0baa\u0bbf\u0b9c\u0bbf', 'NI': u'\u0ba8\u0bbf\u0b95\u0bbe\u0bb0\u0bbe\u0b95\u0bc1\u0bb5\u0bbe', 'NL': u'\u0ba8\u0bc6\u0ba4\u0bb0\u0bcd\u0bb2\u0bbe\u0ba8\u0bcd\u0ba4\u0bc1', 'NO': u'\u0ba8\u0bbe\u0bb0\u0bcd\u0bb5\u0bc7', 'NA': u'\u0ba9\u0bbe\u0bae\u0bc0\u0baa\u0bbf\u0baf\u0bbe', 'VU': u'\u0bb5\u0ba9\u0bc1\u0bb5\u0bbe\u0b9f\u0bcd\u0b9f\u0bc1', 'NZ': u'\u0ba8\u0bbf\u0baf\u0bc2\u0b9a\u0bbf\u0bb2\u0bbe\u0ba8\u0bcd\u0ba4\u0bc1', 'NP': u'\u0ba8\u0bc7\u0baa\u0bbe\u0bb3\u0bae\u0bcd', 'NR': u'\u0ba8\u0bcc\u0bb0\u0bc1', 'CI': u'\u0b90\u0bb5\u0bb0\u0bbf \u0b95\u0bcb\u0bb8\u0bcd\u0b9f\u0bcd', 'CH': u'\u0bb8\u0bcd\u0bb5\u0bbf\u0b9f\u0bcd\u0b9a\u0bb0\u0bcd\u0bb2\u0bbe\u0ba8\u0bcd\u0ba4\u0bc1', 'CO': u'\u0b95\u0bca\u0bb2\u0bae\u0bcd\u0baa\u0bbf\u0baf\u0bbe', 'CN': u'\u0b9a\u0bc0\u0ba9', 'CM': u'\u0b95\u0bc7\u0bae\u0bb0\u0bc2\u0ba9\u0bcd', 'CL': u'\u0b9a\u0bbf\u0bb2\u0bbf', 'CA': u'\u0b95\u0ba9\u0b9f\u0bbe', 'CG': u'\u0b95\u0bbe\u0b99\u0bcd\u0b95\u0bcb', 'CF': u'\u0bae\u0ba4\u0bcd\u0ba4\u0bbf\u0baf \u0b86\u0baa\u0bcd\u0bb0\u0bbf\u0b95\u0bcd\u0b95\u0b95\u0bcd \u0b95\u0bc1\u0b9f\u0bbf\u0baf\u0bb0\u0b9a\u0bc1', 'CZ': u'\u0b9a\u0bc6\u0b95\u0bcd \u0b95\u0bc1\u0b9f\u0bbf\u0baf\u0bb0\u0b9a\u0bc1', 'CY': u'\u0b9a\u0bc8\u0baa\u0bcd\u0bb0\u0bb8\u0bcd', 'CR': u'\u0b95\u0bcb\u0bb8\u0bcd\u0b9f\u0bbe\u0bb0\u0bbf\u0b95\u0bbe', 'CV': u'\u0b95\u0bc7\u0baa\u0bcd \u0bb5\u0bc6\u0bb0\u0bcd\u0b9f\u0bc7', 'CU': u'\u0b95\u0bbf\u0baf\u0bc2\u0baa\u0bbe', 'SY': u'\u0b9a\u0bbf\u0bb0\u0bbf\u0baf\u0bbe', 'KG': u'\u0b95\u0bbf\u0bb0\u0bcd\u0b95\u0bbf\u0bb8\u0bcd\u0ba4\u0bbe\u0ba9\u0bcd', 'KE': u'\u0b95\u0bc6\u0ba9\u0bcd\u0baf\u0bbe', 'SR': u'\u0b9a\u0bc2\u0bb0\u0bbf\u0ba9\u0bbe\u0bae\u0bcd', 'KI': u'\u0b95\u0bbf\u0bb0\u0bbf\u0baa\u0b9f\u0bbf', 'KH': u'\u0b95\u0bae\u0bcd\u0baa\u0bcb\u0b9f\u0bbf\u0baf\u0bbe', 'SV': u'\u0b8e\u0bb2\u0bcd \u0b9a\u0bbe\u0bb2\u0bcd\u0bb5\u0b9f\u0bbe\u0bb0\u0bcd', 'KM': u'\u0b95\u0bcb\u0bae\u0bb0\u0bcb\u0bb8\u0bcd', 'SK': u'\u0bb8\u0bcd\u0bb2\u0bcb\u0bb5\u0bbe\u0b95\u0bbf\u0baf\u0bbe', 'KR': u'\u0ba4\u0bc6\u0ba9\u0bcd \u0b95\u0bca\u0bb0\u0bbf\u0baf\u0bbe', 'SI': u'\u0bb8\u0bcd\u0bb2\u0bcb\u0bb5\u0bc7\u0ba9\u0bbf\u0baf\u0bbe', 'KP': u'\u0bb5\u0b9f \u0b95\u0bca\u0bb0\u0bbf\u0baf\u0bbe', 'KW': u'\u0b95\u0bc1\u0bb5\u0bc8\u0ba4\u0bcd\u0ba4\u0bc1', 'SM': u'\u0b9a\u0bbe\u0ba9\u0bcd\u0bae\u0bc6\u0bb0\u0bbf\u0ba9\u0bcb', 'KZ': u'\u0b95\u0b9c\u0b95\u0bb8\u0bcd\u0ba4\u0bbe\u0ba9\u0bcd', 'SA': u'\u0b9a\u0bb5\u0bc2\u0ba4\u0bbf \u0b85\u0bb0\u0bc7\u0baa\u0bbf\u0baf\u0bbe', 'SG': u'\u0b9a\u0bbf\u0b99\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0bc2\u0bb0\u0bcd', 'SE': u'\u0bb8\u0bcd\u0bb5\u0bc0\u0b9f\u0ba9\u0bcd', 'DO': u'\u0b9f\u0bca\u0bae\u0bbf\u0ba9\u0bbf\u0b95\u0ba9\u0bcd \u0b95\u0bc1\u0b9f\u0bbf\u0baf\u0bb0\u0b9a\u0bc1', 'DM': u'\u0b9f\u0bca\u0bae\u0bbf\u0ba9\u0bbf\u0b95\u0bbe', 'DJ': u'\u0b9c\u0bbf\u0baa\u0bcc\u0b9f\u0bbf', 'DK': u'\u0b9f\u0bc6\u0ba9\u0bcd\u0bae\u0bbe\u0bb0\u0bcd\u0b95\u0bcd', 'DE': u'\u0b9c\u0bc6\u0bb0\u0bcd\u0bae\u0ba9\u0bcd', 'YE': u'\u0baf\u0bc7\u0bae\u0ba9\u0bcd', 'DZ': u'\u0b85\u0bb2\u0bcd\u0b9c\u0bc0\u0bb0\u0bbf\u0baf\u0bbe', 'US': u'\u0b90\u0b95\u0bcd\u0b95\u0bbf\u0baf \u0b85\u0bae\u0bc6\u0bb0\u0bbf\u0b95\u0bcd\u0b95\u0bbe \u0b95\u0bc1\u0b9f\u0bbf\u0baf\u0bb0\u0b9a\u0bc1', 'UY': u'\u0b89\u0bb0\u0bc1\u0b95\u0bc1\u0bb5\u0bc7', 'LB': u'\u0bb2\u0bc6\u0baa\u0ba9\u0bbe\u0ba9\u0bcd', 'LA': u'\u0bb2\u0bbe\u0bb5\u0bcb\u0bb8\u0bcd', 'TV': u'\u0ba4\u0bc1\u0bb5\u0bbe\u0bb2\u0bc2', 'TW': u'\u0ba4\u0bc8\u0bb5\u0bbe\u0ba9\u0bcd', 'TT': u'\u0ba4\u0bbf\u0bb0\u0bbf\u0ba9\u0bbf\u0b9f\u0bbe\u0b9f\u0bcd \u0ba4\u0bca\u0baa\u0bbe\u0b95\u0bcb', 'TR': u'\u0ba4\u0bc1\u0bb0\u0bc1\u0b95\u0bcd\u0b95\u0bbf', 'LK': u'\u0b87\u0bb2\u0b99\u0bcd\u0b95\u0bc8', 'LI': u'\u0bb2\u0bbf\u0b9a\u0bcd\u0b9f\u0bc6\u0ba3\u0bcd\u0bb8\u0bcd\u0b9f\u0bc0\u0ba9\u0bcd', 'LV': u'\u0bb2\u0bbe\u0b9f\u0bcd\u0bb5\u0bbf\u0baf\u0bbe', 'TO': u'\u0ba4\u0bca\u0b99\u0bcd\u0b95\u0bbe', 'LT': u'\u0bb2\u0bbf\u0ba4\u0bc1\u0bb5\u0bc7\u0ba9\u0bbf\u0baf\u0bbe', 'LU': u'\u0bb2\u0b95\u0bcd\u0bb8\u0bcd\u0b9a\u0bae\u0bcd\u0baa\u0bb0\u0bcd\u0b95\u0bcd', 'LR': u'\u0bb2\u0bc8\u0baa\u0bc0\u0bb0\u0bbf\u0baf\u0bbe', 'LS': u'\u0bb2\u0bc6\u0b9a\u0bcb\u0ba4\u0bcb', 'TH': u'\u0ba4\u0bbe\u0baf\u0bcd\u0bb2\u0bbe\u0ba8\u0bcd\u0ba4\u0bc1', 'TD': u'\u0b9a\u0bbe\u0b9f\u0bcd', 'LY': u'\u0bb2\u0bbf\u0baa\u0bcd\u0baf\u0bbe', 'VA': u'\u0bb5\u0bbe\u0b9f\u0bbf\u0b95\u0ba9\u0bcd', 'AE': u'\u0b90\u0b95\u0bcd\u0b95\u0bbf\u0baf \u0b85\u0bb0\u0baa\u0bc1 \u0b95\u0bc2\u0b9f\u0bcd\u0b9f\u0bbe\u0b9f\u0bcd\u0b9a\u0bbf', 'AD': u'\u0b85\u0ba9\u0bcd\u0b9f\u0bcb\u0bb0\u0bbe', 'AG': u'\u0b86\u0ba9\u0bcd\u0b9f\u0bbf\u0b95\u0bc1\u0bb5\u0bbe \u0baa\u0bbe\u0bb0\u0bcd\u0baa\u0bc1\u0b9f\u0bbe', 'AF': u'\u0b86\u0baa\u0bcd\u0b95\u0bbe\u0ba9\u0bbf\u0bb8\u0bcd\u0ba4\u0bbe\u0ba9\u0bcd', 'IQ': u'\u0b87\u0bb0\u0bbe\u0b95\u0bcd', 'IS': u'\u0b90\u0bb8\u0bcd\u0bb2\u0bbe\u0ba8\u0bcd\u0ba4\u0bc1', 'IR': u'\u0b88\u0bb0\u0bbe\u0ba9\u0bcd', 'AM': u'\u0b86\u0bb0\u0bcd\u0bae\u0bc0\u0ba9\u0bbf\u0baf\u0bbe', 'AL': u'\u0b85\u0bb2\u0bcd\u0baa\u0bc7\u0ba9\u0bbf\u0baf\u0bbe', 'AO': u'\u0b85\u0b99\u0bcd\u0b95\u0bcb\u0bb2\u0bbe', 'AR': u'\u0b85\u0bb0\u0bcd\u0b9c\u0bc6\u0ba3\u0bcd\u0b9f\u0bbf\u0ba9\u0bbe', 'AU': u'\u0b86\u0bb8\u0bcd\u0ba4\u0bbf\u0bb0\u0bc7\u0bb2\u0bbf\u0baf\u0bbe', 'AT': u'\u0b86\u0bb8\u0bcd\u0ba4\u0bbf\u0bb0\u0bbf\u0baf\u0bbe', 'IN': u'\u0b87\u0ba8\u0bcd\u0ba4\u0bbf\u0baf\u0bbe', 'AZ': u'\u0b85\u0b9c\u0bb0\u0bcd\u0baa\u0bc8\u0b9c\u0bbe\u0ba9\u0bcd', 'IE': u'\u0b85\u0baf\u0bb0\u0bcd\u0bb2\u0bbe\u0ba8\u0bcd\u0ba4\u0bc1', 'ID': u'\u0b87\u0ba8\u0bcd\u0ba4\u0bcb\u0ba9\u0bc7\u0bb7\u0bbf\u0baf\u0bbe', 'UA': u'\u0b89\u0b95\u0bcd\u0bb0\u0bc8\u0ba9\u0bcd', 'QA': u'\u0b95\u0bbe\u0b9f\u0bbe\u0bb0\u0bcd'} months=[u'\u0b9c\u0ba9\u0bb5\u0bb0\u0bbf', u'\u0baa\u0bbf\u0baa\u0bcd\u0bb0\u0bb5\u0bb0\u0bbf', u'\u0bae\u0bbe\u0bb0\u0bcd\u0b9a\u0bcd', u'\u0b8f\u0baa\u0bcd\u0bb0\u0bb2\u0bcd', u'\u0bae\u0bc7', u'\u0b9c\u0bc2\u0ba9\u0bcd', u'\u0b9c\u0bc2\u0bb2\u0bc8', u'\u0b86\u0b95\u0bb8\u0bcd\u0b9f\u0bcd', u'\u0b9a\u0bc6\u0baa\u0bcd\u0b9f\u0bae\u0bcd\u0baa\u0bb0\u0bcd', u'\u0b85\u0b95\u0bcd\u0b9f\u0bcb\u0baa\u0bb0\u0bcd', u'\u0ba8\u0bb5\u0bae\u0bcd\u0baa\u0bb0\u0bcd', u'\u0b9f\u0bbf\u0b9a\u0bae\u0bcd\u0baa\u0bb0\u0bcd'] abbrMonths=[u'\u0b9c\u0ba9.', u'\u0baa\u0bbf\u0baa\u0bcd.', u'\u0bae\u0bbe\u0bb0\u0bcd.', u'\u0b8f\u0baa\u0bcd.', u'\u0bae\u0bc7', u'\u0b9c\u0bc2\u0ba9\u0bcd', u'\u0b9c\u0bc2\u0bb2\u0bc8', u'\u0b86\u0b95.', u'\u0b9a\u0bc6\u0baa\u0bcd.', u'\u0b85\u0b95\u0bcd.', u'\u0ba8\u0bb5.', u'\u0b9f\u0bbf\u0b9a.'] days=[u'\u0ba4\u0bbf\u0b99\u0bcd\u0b95\u0bb3\u0bcd', u'\u0b9a\u0bc6\u0bb5\u0bcd\u0bb5\u0bbe\u0baf\u0bcd', u'\u0baa\u0bc1\u0ba4\u0ba9\u0bcd', u'\u0bb5\u0bbf\u0baf\u0bbe\u0bb4\u0ba9\u0bcd', u'\u0bb5\u0bc6\u0bb3\u0bcd\u0bb3\u0bbf', u'\u0b9a\u0ba9\u0bbf', u'\u0b9e\u0bbe\u0baf\u0bbf\u0bb1\u0bc1'] abbrDays=[u'\u0ba4\u0bbf', u'\u0b9a\u0bc6', u'\u0baa\u0bc1', u'\u0bb5\u0bbf', u'\u0bb5\u0bc6', u'\u0b9a', u'\u0b9e\u0bbe'] dateFormats={'medium': '%Y %%(abbrmonthname)s %d ', 'full': '%%(dayname)s, %Y %%(monthname)s %d ', 'long': '%Y %%(monthname)s %d ', 'short': '%y/%m/%d'} numericSymbols={'group': ',', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': '.', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'} PKA>64==turbogears/i18n/data/ta.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djd'<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d-<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_ஐக்கிய அரபு கூட்டாட்சிsADuஅன்டோராsAGu4ஆன்டிகுவா பார்புடாsAFu'ஆப்கானிஸ்தான்sIQuஇராக்sISuஐஸ்லாந்துsIRuஈரான்sAMuஆர்மீனியாsALuஅல்பேனியாsAOuஅங்கோலாsARu!அர்ஜெண்டினாsAUu!ஆஸ்திரேலியாsATuஆஸ்திரியாsINuஇந்தியாsAZuஅஜர்பைஜான்sIEuஅயர்லாந்துsIDu!இந்தோனேஷியாsUAuஉக்ரைன்sQAuகாடார்uஜனவரிuபிப்ரவரிuமார்ச்uஏப்ரல்uமேu ஜூன்u ஜூலைuஆகஸ்ட்uசெப்டம்பர்uஅக்டோபர்uநவம்பர்uடிசம்பர்uஜன.u பிப்.u மார்.u ஏப்.uஆக.u செப்.u அக்.uநவ.u டிச.uதிங்கள்uசெவ்வாய்uபுதன்uவியாழன்uவெள்ளிu சனிuஞாயிறுuதிuசெuபுuவிuவெuசuஞாsmediums%Y %%(abbrmonthname)s %d sfulls#%%(dayname)s, %Y %%(monthname)s %d slongs%Y %%(monthname)s %d sshorts%y/%m/%dsgroups,snativeZeroDigits0s exponentialsEsperMilleu‰snanu�sdecimals.s percentSigns%slists;s patternDigits#splusSigns+sinfinityu∞s minusSigns-N(s languagess countriessmonthss abbrMonthssdayssabbrDayss dateFormatssnumericSymbols(sabbrDayssnumericSymbolss countriessmonthssdayss abbrMonthss languagess dateFormats((s0build\bdist.win32\egg\turbogears\i18n\data\ta.pys?s ***PKK9w-P-Pturbogears/i18n/data/ta_IN.py# Formatting configuration for locale ta_IN languages={'gu': u'\u0b95\u0bc1\u0b9c\u0bb0\u0bbe\u0ba4\u0bcd\u0ba4\u0bbf', 'gd': u'\u0bb8\u0bcd\u0b95\u0bbe\u0b9f\u0bcd\u0bb8\u0bcd \u0b95\u0bbe\u0bb2\u0bc6\u0b95\u0bcd', 'ga': u'\u0b90\u0bb0\u0bbf\u0bb7\u0bcd', 'gn': u'\u0b95\u0bc1\u0bb0\u0bbe\u0ba9\u0bbf', 'gl': u'\u0b95\u0bc6\u0bb2\u0bbf\u0bb8\u0bbf\u0baf\u0ba9\u0bcd', 'la': u'\u0bb2\u0bbe\u0ba4\u0bbf\u0ba9\u0bcd', 'ln': u'\u0bb2\u0bbf\u0b99\u0bcd\u0b95\u0bbe\u0bb2\u0bbe', 'lo': u'\u0bb2\u0bcb\u0ba4\u0bcd\u0ba4\u0bbf\u0baf\u0ba9\u0bcd', 'tt': u'\u0b9f\u0bbe\u0b9f\u0bb0\u0bcd', 'tr': u'\u0b9f\u0bb0\u0bcd\u0b95\u0bbf\u0bb7\u0bcd', 'ts': u'\u0bb8\u0bcb\u0b99\u0bcd\u0b95\u0bbe', 'lv': u'\u0bb2\u0bc7\u0b9f\u0bcd\u0bb5\u0bbf\u0baf\u0ba9\u0bcd (\u0bb2\u0bc7\u0b9f\u0bcd\u0b9f\u0bbf\u0bb7\u0bcd)', 'to': u'\u0b9f\u0bcb\u0b99\u0bcd\u0b95\u0bbe', 'lt': u'\u0bb2\u0bc1\u0ba4\u0bcd\u0ba4\u0bc7\u0ba9\u0bbf\u0baf\u0ba9\u0bcd', 'tk': u'\u0b9f\u0bb0\u0bcd\u0b95\u0bcd\u0bae\u0bc6\u0ba9\u0bcd', 'th': u'\u0ba4\u0bbe\u0baf\u0bcd', 'ti': u'\u0b9f\u0bbf\u0b95\u0bcd\u0bb0\u0bbf\u0ba9\u0bcd\u0baf\u0bbe', 'tg': u'\u0ba4\u0bbe\u0b9c\u0bbf\u0b95\u0bcd', 'te': u'\u0ba4\u0bc6\u0bb2\u0bc1\u0b99\u0bcd\u0b95\u0bc1', 'ta': u'\u0ba4\u0bae\u0bbf\u0bb4\u0bcd', 'yi': u'\u0b88\u0ba4\u0bcd\u0ba4\u0bbf\u0bb7', 'yo': u'\u0baf\u0bcb\u0bb0\u0bc1\u0baa\u0bcd\u0baa\u0bbe', 'de': u'\u0b9c\u0bc6\u0bb0\u0bcd\u0bae\u0ba9\u0bcd', 'da': u'\u0b9f\u0bbe\u0ba9\u0bbf\u0bb7\u0bcd', 'dz': u'\u0baa\u0bc1\u0b9f\u0bbe\u0ba9\u0bbf', 'st': u'\u0bb7\u0bc6\u0bb8\u0bcd\u0bb8\u0bcb\u0ba4\u0bcb', 'qu': u'\u0b95\u0bbf\u0baf\u0bc1\u0b9a\u0bbe', 'el': u'\u0b95\u0bbf\u0bb0\u0bc7\u0b95\u0bcd\u0b95\u0bae\u0bcd', 'eo': u'\u0b8e\u0bb8\u0bcd\u0baa\u0bb0\u0bc7\u0ba9\u0bcd\u0b9f\u0bcb', 'en': u'\u0b86\u0b99\u0bcd\u0b95\u0bbf\u0bb2\u0bae\u0bcd', 'zh': u'\u0b9a\u0bc0\u0ba9\u0bae\u0bcd', 'za': u'\u0b9c\u0bc1\u0bb5\u0bbe\u0b99\u0bcd', 'uk': u'\u0b89\u0b95\u0bcd\u0bb0\u0bc7\u0ba9\u0bbf\u0baf\u0ba9\u0bcd', 'eu': u'\u0baa\u0bb8\u0bcd\u0b95\u0bcd', 'et': u'\u0b8e\u0bb8\u0bcd\u0b9f\u0bcb\u0ba9\u0bbf\u0baf\u0ba9\u0bcd', 'es': u'\u0bb8\u0bcd\u0baa\u0bc7\u0ba9\u0bbf\u0bb7\u0bcd', 'ru': u'\u0bb0\u0bb7\u0bbf\u0baf\u0ba9\u0bcd', 'rw': u'\u0b95\u0bbf\u0ba9\u0bcd\u0baf\u0bb0\u0bcd\u0bb5\u0bc6\u0ba9\u0bcd\u0b9f\u0bbe', 'rm': u'\u0bb0\u0bc8\u0b9f\u0bcd\u0b9f\u0bcb-\u0bb0\u0bcb\u0bae\u0bc6\u0ba9\u0bcd\u0bb8\u0bcd', 'rn': u'\u0b95\u0bbf\u0bb0\u0bc1\u0ba8\u0bcd\u0ba4\u0bbf', 'ro': u'\u0bb0\u0bcb\u0bae\u0bc7\u0ba9\u0bbf\u0baf\u0ba9\u0bcd', 'bn': u'\u0bb5\u0b99\u0bcd\u0b95\u0bbe\u0bb3\u0bae\u0bcd', 'be': u'\u0baa\u0bc8\u0bb2\u0bcb\u0bb0\u0bc1\u0bb7\u0bcd\u0ba9\u0bcd', 'bg': u'\u0baa\u0bb2\u0bcd\u0b95\u0bc7\u0bb0\u0bbf\u0baf\u0ba9\u0bcd', 'ba': u'\u0baa\u0bbe\u0bb7\u0bcd\u0b95\u0bbf\u0bb0\u0bcd0', 'wo': u'\u0b92\u0bb2\u0bcb\u0baa\u0bcd', 'jv': u'\u0b9c\u0bbe\u0bb5\u0bbe\u0ba9\u0bc0\u0bb8\u0bcd', 'bo': u'\u0ba4\u0bbf\u0baa\u0bc6\u0ba4\u0bcd\u0ba4\u0bc1', 'bh': u'\u0baa\u0bbf\u0bb9\u0bbe\u0bb0\u0bbf', 'bi': u'\u0baa\u0bbf\u0bb8\u0bcd\u0bb2\u0bbe\u0bae\u0bbe', 'br': u'\u0baa\u0bbf\u0bb0\u0bbf\u0b9f\u0ba9\u0bcd', 'ja': u'\u0b9c\u0baa\u0bcd\u0baa\u0bbe\u0ba9\u0bc0\u0bb8\u0bcd', 'om': u'\u0b92\u0bb0\u0bcb\u0bae (\u0b85\u0baa\u0ba9\u0bcd)', 'root': u'\u0ba4\u0bae\u0bbf\u0bb4\u0bcd', 'oc': u'\u0b86\u0b95\u0bbf\u0b9f\u0bbf\u0baf\u0ba9\u0bcd', 'tw': u'\u0ba4\u0bcd\u0ba4\u0bbf\u0bb5\u0bbf', 'or': u'\u0b92\u0bb0\u0bbf\u0baf\u0bbe', 'xh': u'\u0bb9\u0bcb\u0bb7\u0bbe', 'co': u'\u0b95\u0bbe\u0bb0\u0bcd\u0b9a\u0bbf\u0baf\u0ba9\u0bcd', 'ca': u'\u0b95\u0bbe\u0b9f\u0bb2\u0bbe\u0ba9\u0bcd', 'cy': u'\u0bb5\u0bc6\u0bb2\u0bcd\u0bb7\u0bcd', 'cs': u'\u0b9a\u0bc6\u0b95\u0bcd', 'ps': u'\u0baa\u0bc7\u0bb7\u0bcd\u0b9f\u0bcb (\u0baa\u0bc1\u0bb7\u0bcd\u0b9f\u0bcb)', 'kok': u'\u0b95\u0bca\u0b99\u0bcd\u0b95\u0ba9\u0bbf', 'pt': u'\u0baa\u0bcb\u0bb0\u0bcd\u0ba4\u0bcd\u0ba4\u0bc1\u0b95\u0bc0\u0bb8\u0bcd', 'tl': u'\u0b9f\u0bbe\u0b95\u0bbe\u0bb2\u0bcb\u0b95\u0bcd', 'pa': u'\u0baa\u0b9e\u0bcd\u0b9a\u0bbe\u0baa\u0bbf', 'vi': u'\u0bb5\u0bbf\u0baf\u0b9f\u0bcd\u0ba8\u0bbe\u0bae\u0bbf\u0bb8\u0bcd', 'pl': u'\u0baa\u0bcb\u0bb2\u0bbf\u0bb7\u0bcd', 'hy': u'\u0b86\u0bb0\u0bcd\u0bae\u0bc7\u0ba9\u0bbf\u0baf\u0ba9\u0bcd', 'hr': u'\u0b95\u0bb0\u0bcb\u0bb7\u0bbf\u0baf\u0ba9\u0bcd', 'iu': u'\u0b87\u0ba9\u0bc1\u0b95\u0bbf\u0b9f\u0b9f\u0bcd', 'hu': u'\u0bb9\u0b99\u0bcd\u0b95\u0bc7\u0bb0\u0bbf\u0baf\u0ba9\u0bcd', 'hi': u'\u0b87\u0ba8\u0bcd\u0ba4\u0bbf', 'ha': u'\u0bb9\u0bca\u0bb8\u0bbe', 'he': u'\u0bb9\u0bc1\u0baa\u0bcd\u0bb0\u0bc1', 'mg': u'\u0bae\u0bb2\u0b95\u0bc6\u0bb8\u0bbf', 'uz': u'\u0b89\u0bb8\u0bcd\u0baa\u0bc6\u0b95\u0bcd', 'ml': u'\u0bae\u0bb2\u0bc8\u0baf\u0bbe\u0bb3\u0bae\u0bcd', 'mo': u'\u0bae\u0bcb\u0bb2\u0bcd\u0b9f\u0bc7\u0bb5\u0bbf\u0baf\u0ba9\u0bcd', 'mn': u'\u0bae\u0b99\u0bcd\u0b95\u0bcb\u0bb2\u0bbf\u0baf\u0ba9\u0bcd', 'mi': u'\u0bae\u0bcb\u0bb0\u0bbf', 'ik': u'\u0b87\u0ba9\u0bc1\u0baa\u0bc6\u0b95\u0bcd', 'mk': u'\u0bae\u0bc6\u0b95\u0bcd\u0b95\u0b9f\u0bcb\u0ba9\u0bbf\u0baf\u0ba9\u0bcd', 'ur': u'\u0b89\u0bb0\u0bc1\u0ba4\u0bc1', 'mt': u'\u0bae\u0bbe\u0bb2\u0bcd\u0b9f\u0bbf\u0bb8\u0bcd', 'ms': u'\u0bae\u0bb2\u0bbe\u0baf\u0bcd', 'mr': u'\u0bae\u0bb0\u0bbe\u0ba4\u0bcd\u0ba4\u0bbf', 'ug': u'\u0baf\u0bc1\u0b95\u0bc1\u0bb0\u0bcd', 'my': u'\u0baa\u0bb0\u0bcd\u0bae\u0bbf\u0bb8\u0bcd', 'aa': u'\u0b85\u0baa\u0bbe\u0bb0\u0bcd', 'ab': u'\u0b85\u0baa\u0bcd\u0b95\u0bbe\u0bb8\u0bbf\u0ba9\u0bcd', 'ss': u'\u0bb7\u0bbf\u0bb8\u0bcd\u0bb5\u0bbe\u0ba4\u0bbf', 'af': u'\u0b86\u0baa\u0bcd\u0bb0\u0bbf\u0b95\u0ba9\u0bcd\u0bb8\u0bcd', 'tn': u'\u0bb8\u0bc6\u0b9f\u0bcd\u0bb8\u0bcd\u0bb5\u0bbe\u0ba9\u0bbe', 'sw': u'\u0b9a\u0bc1\u0bb5\u0bbe\u0bb9\u0bbf\u0bb2\u0bbf', 'is': u'\u0b90\u0bb8\u0bcd\u0bb2\u0bc6\u0ba9\u0bcd\u0b9f\u0bbf\u0b95\u0bcd', 'am': u'\u0b85\u0bae\u0bcd\u0bb9\u0bbe\u0bb0\u0bbf\u0b95\u0bcd', 'it': u'\u0b87\u0ba4\u0bcd\u0ba4\u0bbe\u0bb2\u0bbf\u0baf\u0ba9\u0bcd', 'sv': u'\u0bb7\u0bc0\u0bb5\u0bbf\u0b9f\u0bbf\u0bb8\u0bcd', 'ia': u'\u0b87\u0ba9\u0bcd\u0b9f\u0bb0\u0bcd\u0bb2\u0bbf\u0b99\u0bcd\u0b95\u0bc1\u0bb5\u0bbe', 'as': u'\u0b85\u0bb8\u0bcd\u0bb8\u0bbe\u0bae\u0bbf', 'ar': u'\u0b85\u0bb0\u0baa\u0bc1', 'su': u'\u0b9a\u0bc1\u0b9f\u0bbe\u0ba9\u0bc0\u0bb8\u0bcd', 'zu': u'\u0b9c\u0bc2\u0bb2\u0bc2', 'ay': u'\u0b85\u0baf\u0bae\u0bb0\u0bbe', 'az': u'\u0b85\u0b9a\u0bb0\u0bcd\u0baa\u0bbe\u0baf\u0bcd\u0b9c\u0bbe\u0ba9\u0bbf', 'ie': u'\u0b87\u0ba9\u0bcd\u0b9f\u0bb0\u0bcd\u0bb2\u0bbf\u0b99\u0bcd\u0b95\u0bc1\u0bb5\u0bbe', 'id': u'\u0b87\u0ba8\u0bcd\u0ba4\u0bcb\u0ba9\u0bc7\u0bb7\u0bbf\u0baf\u0ba9\u0bcd', 'sk': u'\u0bb8\u0bcd\u0bb2\u0bcb\u0bb5\u0bc6\u0b95\u0bcd', 'nl': u'\u0b9f\u0b9a\u0bcd\u0b9a\u0bc1', 'no': u'\u0ba8\u0bbe\u0bb0\u0bcd\u0bb5\u0bc7\u0b95\u0bbf\u0baf\u0ba9\u0bcd', 'na': u'\u0ba8\u0bbe\u0bb0\u0bc2', 'ne': u'\u0ba8\u0bc7\u0baa\u0bcd\u0baa\u0bbe\u0bb2\u0bbf', 'vo': u'\u0b92\u0bb2\u0baa\u0bc1\u0b95\u0bcd', 'fr': u'\u0baa\u0bbf\u0bb0\u0bc6\u0b9e\u0bcd\u0b9a\u0bc1', 'sm': u'\u0bb8\u0bc6\u0bae\u0bcb\u0ba9\u0bcd', 'fy': u'\u0baa\u0bbf\u0bb0\u0bbf\u0bb7\u0bbf\u0baf\u0ba9\u0bcd', 'fa': u'\u0baa\u0bb0\u0bcd\u0bb8\u0bbf\u0baf\u0ba9\u0bcd', 'fi': u'\u0baa\u0bbf\u0ba9\u0bcd\u0ba9\u0bbf\u0bb7\u0bcd', 'fj': u'\u0baa\u0bbf\u0b9c\u0bbf', 'sa': u'\u0b9a\u0bae\u0bb8\u0bcd\u0b95\u0bbf\u0bb0\u0bc1\u0ba4\u0bae\u0bcd', 'fo': u'\u0baa\u0bc8\u0bb0\u0bcb\u0bb8\u0bbf', 'ka': u'\u0b95\u0ba9\u0bcd\u0ba9\u0b9f\u0bae\u0bcd', 'kk': u'\u0b95\u0b9a\u0bbe\u0b95\u0bcd', 'sr': u'\u0b9a\u0bb0\u0bcd\u0baa\u0bbf\u0baf\u0ba9\u0bcd', 'sq': u'\u0b85\u0bb2\u0bcd\u0baa\u0bc6\u0ba9\u0bbf\u0baf\u0ba9\u0bcd', 'ko': u'\u0b95\u0bca\u0bb0\u0bbf\u0baf\u0ba9\u0bcd', 'kn': u'\u0b95\u0ba9\u0bcd\u0ba9\u0b9f\u0bbe', 'km': u'\u0b95\u0bae\u0bcd\u0baa\u0bcb\u0b9f\u0bbf\u0baf\u0ba9\u0bcd', 'kl': u'\u0b95\u0bbf\u0bb0\u0bbf\u0ba9\u0bcd\u0bb2\u0bc6\u0ba9\u0bcd\u0b9f\u0bbf\u0b95\u0bcd', 'ks': u'\u0b95\u0bbe\u0bb7\u0bcd\u0bae\u0bbf\u0bb0\u0bbf', 'si': u'\u0b9a\u0bbf\u0b99\u0bcd\u0b95\u0bb3\u0bae\u0bcd', 'sh': u'\u0b9a\u0bc6\u0bb0\u0bcd\u0baa\u0bcb-\u0b95\u0bcd\u0bb0\u0bcb\u0bb7\u0bbf\u0baf\u0ba9\u0bcd', 'so': u'\u0b9a\u0bcb\u0bae\u0bbe\u0bb2\u0bbf', 'sn': u'\u0bb7\u0bcb\u0ba9\u0bbe', 'ku': u'\u0b95\u0bc1\u0bb0\u0bcd\u0ba4\u0bbf\u0bb7\u0bcd', 'sl': u'\u0bb8\u0bcd\u0bb2\u0bcb\u0bb5\u0bbf\u0ba9\u0bc7\u0baf\u0bbf\u0ba9\u0bcd', 'ky': u'\u0b95\u0bbf\u0bb0\u0bcd\u0b95\u0bbf\u0bb7\u0bcd', 'sg': u'\u0b9a\u0bc6\u0ba9\u0bcd\u0b95\u0bcd\u0bb0\u0bcb', 'sd': u'\u0b9a\u0bbf\u0ba8\u0bcd\u0ba4\u0bbf'} countries={'BD': u'\u0baa\u0b99\u0bcd\u0b95\u0bb3\u0bbe\u0ba4\u0bc7\u0bb7\u0bcd', 'BE': u'\u0baa\u0bc6\u0bb2\u0bcd\u0b9c\u0bbf\u0baf\u0bae\u0bcd', 'BF': u'\u0baa\u0bb0\u0bcd\u0b95\u0bbf\u0ba9\u0bcb \u0baa\u0bbe\u0bb8\u0bcb', 'BG': u'\u0baa\u0bb2\u0bcd\u0b95\u0bc7\u0bb0\u0bbf\u0baf\u0bbe', 'BA': u'\u0baa\u0bcb\u0bb8\u0bcd\u0ba9\u0bbf\u0baf\u0bbe \u0bb9\u0bc6\u0bb0\u0bcd\u0bb8\u0bbf\u0b95\u0bcb\u0bb5\u0bbf\u0ba9\u0bbe', 'BB': u'\u0baa\u0bbe\u0bb0\u0bcd\u0baa\u0b9f\u0bcb\u0bb8\u0bcd', 'BN': u'\u0baa\u0bc1\u0bb0\u0bc2\u0ba9\u0bc7\u0baf\u0bcd', 'BO': u'\u0baa\u0bca\u0bb2\u0bbf\u0bb5\u0bbf\u0baf\u0bbe', 'BH': u'\u0baa\u0bb9\u0bcd\u0bb0\u0bc8\u0ba9\u0bcd', 'BI': u'\u0baa\u0bc1\u0bb0\u0bc1\u0ba3\u0bcd\u0b9f\u0bbf', 'BJ': u'\u0baa\u0bc6\u0ba9\u0bbf\u0ba9\u0bcd', 'BT': u'\u0baa\u0bc2\u0b9f\u0bbe\u0ba9\u0bcd', 'JM': u'\u0b9c\u0bae\u0bbe\u0baf\u0bcd\u0b95\u0bcd\u0b95\u0bbe', 'BW': u'\u0baa\u0bcb\u0b9f\u0bcd\u0bb8\u0bcd\u0bb5\u0bbe\u0ba9\u0bbe', 'WS': u'\u0b9a\u0bae\u0bcb\u0bb5\u0bbe', 'BR': u'\u0baa\u0bbf\u0bb0\u0bc7\u0bb8\u0bbf\u0bb2\u0bcd', 'BS': u'\u0baa\u0bb9\u0bbe\u0bae\u0bbe\u0bb8\u0bcd', 'BY': u'\u0baa\u0bc6\u0bb2\u0bbe\u0bb0\u0bc2\u0bb8\u0bcd', 'BZ': u'\u0baa\u0bc6\u0bb2\u0bbf\u0bb8\u0bcd', 'RU': u'\u0bb0\u0bb7\u0bcd\u0baf\u0bbe', 'TM': u'\u0ba4\u0bc1\u0bb0\u0bcd\u0b95\u0bcd\u0bae\u0bc6\u0ba9\u0bbf\u0bb8\u0bcd\u0ba4\u0bbe\u0ba9\u0bcd', 'TJ': u'\u0ba4\u0bbe\u0b9c\u0bbf\u0b95\u0bbf\u0bb8\u0bcd\u0ba4\u0bbe\u0ba9\u0bcd', 'RO': u'\u0bb0\u0bc1\u0bae\u0bc7\u0ba9\u0bbf\u0baf\u0bbe', 'GW': u'\u0b95\u0bbf\u0ba9\u0bbf-\u0baa\u0bbf\u0bb8\u0bcd\u0bb8\u0bbe\u0bb5\u0bcd', 'GT': u'\u0b95\u0bc1\u0bb5\u0bbe\u0ba4\u0bcd\u0ba4\u0bbe\u0bae\u0bbe\u0bb2\u0bbe', 'GR': u'\u0b95\u0bbf\u0bb0\u0bc0\u0bb8\u0bcd', 'GQ': u'\u0b88\u0b95\u0bcd\u0b95\u0bc1\u0bb5\u0bbf\u0b9f\u0bcb\u0bb0\u0bbf\u0baf\u0bb2\u0bcd \u0b95\u0bbf\u0ba9\u0bbf', 'JP': u'\u0b9c\u0baa\u0bcd\u0baa\u0bbe\u0ba9\u0bcd', 'GY': u'\u0b95\u0baf\u0bbe\u0ba9\u0bbe', 'GE': u'\u0b9c\u0bbe\u0bb0\u0bcd\u0b9c\u0bbf\u0baf\u0bbe', 'GD': u'\u0b95\u0bbf\u0bb0\u0ba9\u0bc6\u0b9f\u0bbe', 'GB': u'\u0baa\u0bbf\u0bb0\u0bbf\u0b9f\u0bbf\u0bb7\u0bcd \u0b95\u0bc2\u0b9f\u0bcd\u0b9f\u0bb0\u0b9a\u0bc1', 'GA': u'\u0b95\u0bbe\u0baa\u0bcb\u0ba9\u0bcd', 'GN': u'\u0b95\u0bbf\u0ba9\u0bbf', 'GM': u'\u0b95\u0bbe\u0bae\u0bcd\u0baa\u0bbf\u0baf\u0bbe', 'GH': u'\u0b95\u0bbe\u0ba9\u0bbe', 'OM': u'\u0b93\u0bae\u0bbe\u0ba9\u0bcd', 'TN': u'\u0ba4\u0bc1\u0ba9\u0bbf\u0b9a\u0bbf\u0baf\u0bbe', 'JO': u'\u0b9c\u0bca\u0bb0\u0bcd\u0b9f\u0bbe\u0ba9\u0bcd', 'HR': u'\u0b95\u0bc1\u0bb0\u0bcb\u0b9a\u0bbf\u0baf\u0bbe', 'HT': u'\u0bb9\u0bc6\u0baf\u0bcd\u0ba4\u0bbf', 'HU': u'\u0bb9\u0b99\u0bcd\u0b95\u0bc7\u0bb0\u0bbf', 'HN': u'\u0bb9\u0bbe\u0ba3\u0bcd\u0b9f\u0bc1\u0bb0\u0bbe\u0bb8\u0bcd', 'VE': u'\u0bb5\u0bc6\u0ba9\u0b9c\u0bc1\u0bb5\u0bc7\u0bb2\u0bbe', 'PT': u'\u0baa\u0bcb\u0bb0\u0bcd\u0b9a\u0bcd\u0b9a\u0bc1\u0b95\u0bcd\u0b95\u0bb2\u0bcd', 'PY': u'\u0baa\u0bbe\u0bb0\u0b95\u0bc1\u0bb5\u0bc7', 'PA': u'\u0baa\u0ba3\u0bbe\u0bae\u0bbe', 'PG': u'\u0baa\u0bbe\u0baa\u0bcd\u0baa\u0bc1\u0bb5\u0bbe-\u0ba8\u0bbf\u0baf\u0bc2\u0b95\u0bbf\u0ba9\u0bbf', 'PE': u'\u0baa\u0bc6\u0bb0\u0bc1', 'PK': u'\u0baa\u0bbe\u0b95\u0bbf\u0bb8\u0bcd\u0ba4\u0bbe\u0ba9\u0bcd', 'PH': u'\u0baa\u0bbf\u0bb2\u0bbf\u0baa\u0bcd\u0baa\u0bc8\u0ba9\u0bcd\u0bb8\u0bcd', 'PL': u'\u0baa\u0bcb\u0bb2\u0ba8\u0bcd\u0ba4\u0bc1', 'EE': u'\u0b8e\u0bb8\u0bcd\u0b9f\u0bcb\u0ba9\u0bbf\u0baf\u0bbe', 'EG': u'\u0b8e\u0b95\u0bbf\u0baa\u0bcd\u0ba4\u0bc1', 'ZA': u'\u0ba4\u0bc6\u0ba9\u0bcd \u0b86\u0baa\u0bcd\u0bb0\u0bbf\u0b95\u0bcd\u0b95\u0bbe', 'EC': u'\u0b88\u0b95\u0bcd\u0bb5\u0b9f\u0bbe\u0bb0\u0bcd', 'IT': u'\u0b87\u0ba4\u0bcd\u0ba4\u0bbe\u0bb2\u0bbf', 'VN': u'\u0bb5\u0bbf\u0baf\u0b9f\u0bcd\u0ba8\u0bbe\u0bae\u0bcd', 'SB': u'\u0b9a\u0bbe\u0bb2\u0bae\u0ba9\u0bcd \u0ba4\u0bc0\u0bb5\u0bc1\u0b95\u0bb3\u0bcd', 'ET': u'\u0b8e\u0ba4\u0bbf\u0baf\u0bcb\u0baa\u0bcd\u0baa\u0bbf\u0baf\u0bbe', 'ZW': u'\u0b9c\u0bbf\u0bae\u0bcd\u0baa\u0bbe\u0baa\u0bcd\u0bb5\u0bc7', 'ES': u'\u0bb8\u0bcd\u0baa\u0bc6\u0baf\u0bbf\u0ba9\u0bcd', 'MD': u'\u0bae\u0bbe\u0bb2\u0bcd\u0b9f\u0bcb\u0bb5\u0bbe', 'MA': u'\u0bae\u0bca\u0bb0\u0bcb\u0b95\u0bcd\u0b95\u0bcb', 'MC': u'\u0bae\u0bca\u0ba9\u0bbe\u0b95\u0bcd\u0b95\u0bcb', 'UZ': u'\u0b89\u0bb8\u0bcd\u0baa\u0bc6\u0b95\u0bbf\u0bb8\u0bcd\u0ba4\u0bbe\u0ba9\u0bcd', 'MM': u'\u0bae\u0bbf\u0baf\u0bbe\u0ba9\u0bcd\u0bae\u0bbe\u0bb0\u0bcd', 'ML': u'\u0bae\u0bbe\u0bb2\u0bc0', 'MN': u'\u0bae\u0b99\u0bcd\u0b95\u0bcb\u0bb2\u0bbf\u0baf\u0bbe', 'MK': u'\u0bae\u0b9a\u0bc6\u0b9f\u0bcb\u0ba3\u0bbf\u0baf\u0bbe', 'MT': u'\u0bae\u0bbe\u0bb2\u0bcd\u0b9f\u0bbe', 'MW': u'\u0bae\u0bb2\u0bbe\u0bb5\u0bc0', 'MV': u'\u0bae\u0bbe\u0bb2\u0ba4\u0bcd\u0ba4\u0bc0\u0bb5\u0bc1', 'MY': u'\u0bae\u0bb2\u0bc7\u0bb7\u0bbf\u0baf\u0bbe', 'MX': u'\u0bae\u0bc6\u0b95\u0bcd\u0b9a\u0bbf\u0b95\u0bcb', 'IL': u'\u0b87\u0bb8\u0bcd\u0bb0\u0bc7\u0bb2\u0bcd', 'FR': u'\u0baa\u0bbf\u0bb0\u0bbe\u0ba9\u0bcd\u0bb8\u0bcd', 'FI': u'\u0baa\u0bbf\u0ba9\u0bcd\u0bb2\u0bbe\u0ba8\u0bcd\u0ba4\u0bc1', 'FJ': u'\u0baa\u0bbf\u0b9c\u0bbf', 'NI': u'\u0ba8\u0bbf\u0b95\u0bbe\u0bb0\u0bbe\u0b95\u0bc1\u0bb5\u0bbe', 'NL': u'\u0ba8\u0bc6\u0ba4\u0bb0\u0bcd\u0bb2\u0bbe\u0ba8\u0bcd\u0ba4\u0bc1', 'NO': u'\u0ba8\u0bbe\u0bb0\u0bcd\u0bb5\u0bc7', 'NA': u'\u0ba9\u0bbe\u0bae\u0bc0\u0baa\u0bbf\u0baf\u0bbe', 'VU': u'\u0bb5\u0ba9\u0bc1\u0bb5\u0bbe\u0b9f\u0bcd\u0b9f\u0bc1', 'NZ': u'\u0ba8\u0bbf\u0baf\u0bc2\u0b9a\u0bbf\u0bb2\u0bbe\u0ba8\u0bcd\u0ba4\u0bc1', 'NP': u'\u0ba8\u0bc7\u0baa\u0bbe\u0bb3\u0bae\u0bcd', 'NR': u'\u0ba8\u0bcc\u0bb0\u0bc1', 'CI': u'\u0b90\u0bb5\u0bb0\u0bbf \u0b95\u0bcb\u0bb8\u0bcd\u0b9f\u0bcd', 'CH': u'\u0bb8\u0bcd\u0bb5\u0bbf\u0b9f\u0bcd\u0b9a\u0bb0\u0bcd\u0bb2\u0bbe\u0ba8\u0bcd\u0ba4\u0bc1', 'CO': u'\u0b95\u0bca\u0bb2\u0bae\u0bcd\u0baa\u0bbf\u0baf\u0bbe', 'CN': u'\u0b9a\u0bc0\u0ba9', 'CM': u'\u0b95\u0bc7\u0bae\u0bb0\u0bc2\u0ba9\u0bcd', 'CL': u'\u0b9a\u0bbf\u0bb2\u0bbf', 'CA': u'\u0b95\u0ba9\u0b9f\u0bbe', 'CG': u'\u0b95\u0bbe\u0b99\u0bcd\u0b95\u0bcb', 'CF': u'\u0bae\u0ba4\u0bcd\u0ba4\u0bbf\u0baf \u0b86\u0baa\u0bcd\u0bb0\u0bbf\u0b95\u0bcd\u0b95\u0b95\u0bcd \u0b95\u0bc1\u0b9f\u0bbf\u0baf\u0bb0\u0b9a\u0bc1', 'CZ': u'\u0b9a\u0bc6\u0b95\u0bcd \u0b95\u0bc1\u0b9f\u0bbf\u0baf\u0bb0\u0b9a\u0bc1', 'CY': u'\u0b9a\u0bc8\u0baa\u0bcd\u0bb0\u0bb8\u0bcd', 'CR': u'\u0b95\u0bcb\u0bb8\u0bcd\u0b9f\u0bbe\u0bb0\u0bbf\u0b95\u0bbe', 'CV': u'\u0b95\u0bc7\u0baa\u0bcd \u0bb5\u0bc6\u0bb0\u0bcd\u0b9f\u0bc7', 'CU': u'\u0b95\u0bbf\u0baf\u0bc2\u0baa\u0bbe', 'SY': u'\u0b9a\u0bbf\u0bb0\u0bbf\u0baf\u0bbe', 'KG': u'\u0b95\u0bbf\u0bb0\u0bcd\u0b95\u0bbf\u0bb8\u0bcd\u0ba4\u0bbe\u0ba9\u0bcd', 'KE': u'\u0b95\u0bc6\u0ba9\u0bcd\u0baf\u0bbe', 'SR': u'\u0b9a\u0bc2\u0bb0\u0bbf\u0ba9\u0bbe\u0bae\u0bcd', 'KI': u'\u0b95\u0bbf\u0bb0\u0bbf\u0baa\u0b9f\u0bbf', 'KH': u'\u0b95\u0bae\u0bcd\u0baa\u0bcb\u0b9f\u0bbf\u0baf\u0bbe', 'SV': u'\u0b8e\u0bb2\u0bcd \u0b9a\u0bbe\u0bb2\u0bcd\u0bb5\u0b9f\u0bbe\u0bb0\u0bcd', 'KM': u'\u0b95\u0bcb\u0bae\u0bb0\u0bcb\u0bb8\u0bcd', 'SK': u'\u0bb8\u0bcd\u0bb2\u0bcb\u0bb5\u0bbe\u0b95\u0bbf\u0baf\u0bbe', 'KR': u'\u0ba4\u0bc6\u0ba9\u0bcd \u0b95\u0bca\u0bb0\u0bbf\u0baf\u0bbe', 'SI': u'\u0bb8\u0bcd\u0bb2\u0bcb\u0bb5\u0bc7\u0ba9\u0bbf\u0baf\u0bbe', 'KP': u'\u0bb5\u0b9f \u0b95\u0bca\u0bb0\u0bbf\u0baf\u0bbe', 'KW': u'\u0b95\u0bc1\u0bb5\u0bc8\u0ba4\u0bcd\u0ba4\u0bc1', 'SM': u'\u0b9a\u0bbe\u0ba9\u0bcd\u0bae\u0bc6\u0bb0\u0bbf\u0ba9\u0bcb', 'KZ': u'\u0b95\u0b9c\u0b95\u0bb8\u0bcd\u0ba4\u0bbe\u0ba9\u0bcd', 'SA': u'\u0b9a\u0bb5\u0bc2\u0ba4\u0bbf \u0b85\u0bb0\u0bc7\u0baa\u0bbf\u0baf\u0bbe', 'SG': u'\u0b9a\u0bbf\u0b99\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0bc2\u0bb0\u0bcd', 'SE': u'\u0bb8\u0bcd\u0bb5\u0bc0\u0b9f\u0ba9\u0bcd', 'DO': u'\u0b9f\u0bca\u0bae\u0bbf\u0ba9\u0bbf\u0b95\u0ba9\u0bcd \u0b95\u0bc1\u0b9f\u0bbf\u0baf\u0bb0\u0b9a\u0bc1', 'DM': u'\u0b9f\u0bca\u0bae\u0bbf\u0ba9\u0bbf\u0b95\u0bbe', 'DJ': u'\u0b9c\u0bbf\u0baa\u0bcc\u0b9f\u0bbf', 'DK': u'\u0b9f\u0bc6\u0ba9\u0bcd\u0bae\u0bbe\u0bb0\u0bcd\u0b95\u0bcd', 'DE': u'\u0b9c\u0bc6\u0bb0\u0bcd\u0bae\u0ba9\u0bcd', 'YE': u'\u0baf\u0bc7\u0bae\u0ba9\u0bcd', 'DZ': u'\u0b85\u0bb2\u0bcd\u0b9c\u0bc0\u0bb0\u0bbf\u0baf\u0bbe', 'US': u'\u0b90\u0b95\u0bcd\u0b95\u0bbf\u0baf \u0b85\u0bae\u0bc6\u0bb0\u0bbf\u0b95\u0bcd\u0b95\u0bbe \u0b95\u0bc1\u0b9f\u0bbf\u0baf\u0bb0\u0b9a\u0bc1', 'UY': u'\u0b89\u0bb0\u0bc1\u0b95\u0bc1\u0bb5\u0bc7', 'LB': u'\u0bb2\u0bc6\u0baa\u0ba9\u0bbe\u0ba9\u0bcd', 'LA': u'\u0bb2\u0bbe\u0bb5\u0bcb\u0bb8\u0bcd', 'TV': u'\u0ba4\u0bc1\u0bb5\u0bbe\u0bb2\u0bc2', 'TW': u'\u0ba4\u0bc8\u0bb5\u0bbe\u0ba9\u0bcd', 'TT': u'\u0ba4\u0bbf\u0bb0\u0bbf\u0ba9\u0bbf\u0b9f\u0bbe\u0b9f\u0bcd \u0ba4\u0bca\u0baa\u0bbe\u0b95\u0bcb', 'TR': u'\u0ba4\u0bc1\u0bb0\u0bc1\u0b95\u0bcd\u0b95\u0bbf', 'LK': u'\u0b87\u0bb2\u0b99\u0bcd\u0b95\u0bc8', 'LI': u'\u0bb2\u0bbf\u0b9a\u0bcd\u0b9f\u0bc6\u0ba3\u0bcd\u0bb8\u0bcd\u0b9f\u0bc0\u0ba9\u0bcd', 'LV': u'\u0bb2\u0bbe\u0b9f\u0bcd\u0bb5\u0bbf\u0baf\u0bbe', 'TO': u'\u0ba4\u0bca\u0b99\u0bcd\u0b95\u0bbe', 'LT': u'\u0bb2\u0bbf\u0ba4\u0bc1\u0bb5\u0bc7\u0ba9\u0bbf\u0baf\u0bbe', 'LU': u'\u0bb2\u0b95\u0bcd\u0bb8\u0bcd\u0b9a\u0bae\u0bcd\u0baa\u0bb0\u0bcd\u0b95\u0bcd', 'LR': u'\u0bb2\u0bc8\u0baa\u0bc0\u0bb0\u0bbf\u0baf\u0bbe', 'LS': u'\u0bb2\u0bc6\u0b9a\u0bcb\u0ba4\u0bcb', 'TH': u'\u0ba4\u0bbe\u0baf\u0bcd\u0bb2\u0bbe\u0ba8\u0bcd\u0ba4\u0bc1', 'TD': u'\u0b9a\u0bbe\u0b9f\u0bcd', 'LY': u'\u0bb2\u0bbf\u0baa\u0bcd\u0baf\u0bbe', 'VA': u'\u0bb5\u0bbe\u0b9f\u0bbf\u0b95\u0ba9\u0bcd', 'AE': u'\u0b90\u0b95\u0bcd\u0b95\u0bbf\u0baf \u0b85\u0bb0\u0baa\u0bc1 \u0b95\u0bc2\u0b9f\u0bcd\u0b9f\u0bbe\u0b9f\u0bcd\u0b9a\u0bbf', 'AD': u'\u0b85\u0ba9\u0bcd\u0b9f\u0bcb\u0bb0\u0bbe', 'AG': u'\u0b86\u0ba9\u0bcd\u0b9f\u0bbf\u0b95\u0bc1\u0bb5\u0bbe \u0baa\u0bbe\u0bb0\u0bcd\u0baa\u0bc1\u0b9f\u0bbe', 'AF': u'\u0b86\u0baa\u0bcd\u0b95\u0bbe\u0ba9\u0bbf\u0bb8\u0bcd\u0ba4\u0bbe\u0ba9\u0bcd', 'IQ': u'\u0b87\u0bb0\u0bbe\u0b95\u0bcd', 'IS': u'\u0b90\u0bb8\u0bcd\u0bb2\u0bbe\u0ba8\u0bcd\u0ba4\u0bc1', 'IR': u'\u0b88\u0bb0\u0bbe\u0ba9\u0bcd', 'AM': u'\u0b86\u0bb0\u0bcd\u0bae\u0bc0\u0ba9\u0bbf\u0baf\u0bbe', 'AL': u'\u0b85\u0bb2\u0bcd\u0baa\u0bc7\u0ba9\u0bbf\u0baf\u0bbe', 'AO': u'\u0b85\u0b99\u0bcd\u0b95\u0bcb\u0bb2\u0bbe', 'AR': u'\u0b85\u0bb0\u0bcd\u0b9c\u0bc6\u0ba3\u0bcd\u0b9f\u0bbf\u0ba9\u0bbe', 'AU': u'\u0b86\u0bb8\u0bcd\u0ba4\u0bbf\u0bb0\u0bc7\u0bb2\u0bbf\u0baf\u0bbe', 'AT': u'\u0b86\u0bb8\u0bcd\u0ba4\u0bbf\u0bb0\u0bbf\u0baf\u0bbe', 'IN': u'\u0b87\u0ba8\u0bcd\u0ba4\u0bbf\u0baf\u0bbe', 'AZ': u'\u0b85\u0b9c\u0bb0\u0bcd\u0baa\u0bc8\u0b9c\u0bbe\u0ba9\u0bcd', 'IE': u'\u0b85\u0baf\u0bb0\u0bcd\u0bb2\u0bbe\u0ba8\u0bcd\u0ba4\u0bc1', 'ID': u'\u0b87\u0ba8\u0bcd\u0ba4\u0bcb\u0ba9\u0bc7\u0bb7\u0bbf\u0baf\u0bbe', 'UA': u'\u0b89\u0b95\u0bcd\u0bb0\u0bc8\u0ba9\u0bcd', 'QA': u'\u0b95\u0bbe\u0b9f\u0bbe\u0bb0\u0bcd'} months=[u'\u0b9c\u0ba9\u0bb5\u0bb0\u0bbf', u'\u0baa\u0bbf\u0baa\u0bcd\u0bb0\u0bb5\u0bb0\u0bbf', u'\u0bae\u0bbe\u0bb0\u0bcd\u0b9a\u0bcd', u'\u0b8f\u0baa\u0bcd\u0bb0\u0bb2\u0bcd', u'\u0bae\u0bc7', u'\u0b9c\u0bc2\u0ba9\u0bcd', u'\u0b9c\u0bc2\u0bb2\u0bc8', u'\u0b86\u0b95\u0bb8\u0bcd\u0b9f\u0bcd', u'\u0b9a\u0bc6\u0baa\u0bcd\u0b9f\u0bae\u0bcd\u0baa\u0bb0\u0bcd', u'\u0b85\u0b95\u0bcd\u0b9f\u0bcb\u0baa\u0bb0\u0bcd', u'\u0ba8\u0bb5\u0bae\u0bcd\u0baa\u0bb0\u0bcd', u'\u0b9f\u0bbf\u0b9a\u0bae\u0bcd\u0baa\u0bb0\u0bcd'] abbrMonths=[u'\u0b9c\u0ba9.', u'\u0baa\u0bbf\u0baa\u0bcd.', u'\u0bae\u0bbe\u0bb0\u0bcd.', u'\u0b8f\u0baa\u0bcd.', u'\u0bae\u0bc7', u'\u0b9c\u0bc2\u0ba9\u0bcd', u'\u0b9c\u0bc2\u0bb2\u0bc8', u'\u0b86\u0b95.', u'\u0b9a\u0bc6\u0baa\u0bcd.', u'\u0b85\u0b95\u0bcd.', u'\u0ba8\u0bb5.', u'\u0b9f\u0bbf\u0b9a.'] days=[u'\u0ba4\u0bbf\u0b99\u0bcd\u0b95\u0bb3\u0bcd', u'\u0b9a\u0bc6\u0bb5\u0bcd\u0bb5\u0bbe\u0baf\u0bcd', u'\u0baa\u0bc1\u0ba4\u0ba9\u0bcd', u'\u0bb5\u0bbf\u0baf\u0bbe\u0bb4\u0ba9\u0bcd', u'\u0bb5\u0bc6\u0bb3\u0bcd\u0bb3\u0bbf', u'\u0b9a\u0ba9\u0bbf', u'\u0b9e\u0bbe\u0baf\u0bbf\u0bb1\u0bc1'] abbrDays=[u'\u0ba4\u0bbf', u'\u0b9a\u0bc6', u'\u0baa\u0bc1', u'\u0bb5\u0bbf', u'\u0bb5\u0bc6', u'\u0b9a', u'\u0b9e\u0bbe'] dateFormats={'medium': '%d-%m-%Y', 'full': '%%(dayname)s %d %%(monthname)s %Y', 'long': '%d %%(monthname)s %Y', 'short': '%d-%m-%y'} numericSymbols={'group': ',', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': '.', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'} PKA>h==turbogears/i18n/data/ta_IN.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djd'<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d-<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_ஐக்கிய அரபு கூட்டாட்சிsADuஅன்டோராsAGu4ஆன்டிகுவா பார்புடாsAFu'ஆப்கானிஸ்தான்sIQuஇராக்sISuஐஸ்லாந்துsIRuஈரான்sAMuஆர்மீனியாsALuஅல்பேனியாsAOuஅங்கோலாsARu!அர்ஜெண்டினாsAUu!ஆஸ்திரேலியாsATuஆஸ்திரியாsINuஇந்தியாsAZuஅஜர்பைஜான்sIEuஅயர்லாந்துsIDu!இந்தோனேஷியாsUAuஉக்ரைன்sQAuகாடார்uஜனவரிuபிப்ரவரிuமார்ச்uஏப்ரல்uமேu ஜூன்u ஜூலைuஆகஸ்ட்uசெப்டம்பர்uஅக்டோபர்uநவம்பர்uடிசம்பர்uஜன.u பிப்.u மார்.u ஏப்.uஆக.u செப்.u அக்.uநவ.u டிச.uதிங்கள்uசெவ்வாய்uபுதன்uவியாழன்uவெள்ளிu சனிuஞாயிறுuதிuசெuபுuவிuவெuசuஞாsmediums%d-%m-%Ysfulls!%%(dayname)s %d %%(monthname)s %Yslongs%d %%(monthname)s %Ysshorts%d-%m-%ysgroups,snativeZeroDigits0s exponentialsEsperMilleu‰snanu�sdecimals.s percentSigns%slists;s patternDigits#splusSigns+sinfinityu∞s minusSigns-N(s languagess countriessmonthss abbrMonthssdayssabbrDayss dateFormatssnumericSymbols(sabbrDayssnumericSymbolss countriessmonthssdayss abbrMonthss languagess dateFormats((s3build\bdist.win32\egg\turbogears\i18n\data\ta_IN.pys?s ***PKK9;&rrturbogears/i18n/data/te.py# Formatting configuration for locale te languages={'te': u'\u0c24\u0c46\u0c32\u0c41\u0c17\u0c41'} countries={'IN': u'\u0c2d\u0c3e\u0c30\u0c24 \u0c26\u0c47\u0c33\u0c66'} months=[u'\u0c1c\u0c28\u0c35\u0c30\u0c3f', u'\u0c2b\u0c3f\u0c2c\u0c4d\u0c30\u0c35\u0c30\u0c3f', u'\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f', u'\u0c0f\u0c2a\u0c4d\u0c30\u0c3f\u0c32\u0c4d', u'\u0c2e\u0c47', u'\u0c1c\u0c42\u0c28\u0c4d', u'\u0c1c\u0c42\u0c32\u0c48', u'\u0c06\u0c17\u0c38\u0c4d\u0c1f\u0c41', u'\u0c38\u0c46\u0c2a\u0c4d\u0c1f\u0c46\u0c02\u0c2c\u0c30\u0c4d', u'\u0c05\u0c15\u0c4d\u0c1f\u0c4b\u0c2c\u0c30\u0c4d', u'\u0c28\u0c35\u0c02\u0c2c\u0c30\u0c4d', u'\u0c21\u0c3f\u0c38\u0c46\u0c02\u0c2c\u0c30\u0c4d'] abbrMonths=[u'\u0c1c\u0c28\u0c35\u0c30\u0c3f', u'\u0c2b\u0c3f\u0c2c\u0c4d\u0c30\u0c35\u0c30\u0c3f', u'\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f', u'\u0c0f\u0c2a\u0c4d\u0c30\u0c3f\u0c32\u0c4d', u'\u0c2e\u0c47', u'\u0c1c\u0c42\u0c28\u0c4d', u'\u0c1c\u0c42\u0c32\u0c48', u'\u0c06\u0c17\u0c38\u0c4d\u0c1f\u0c41', u'\u0c38\u0c46\u0c2a\u0c4d\u0c1f\u0c46\u0c02\u0c2c\u0c30\u0c4d', u'\u0c05\u0c15\u0c4d\u0c1f\u0c4b\u0c2c\u0c30\u0c4d', u'\u0c28\u0c35\u0c02\u0c2c\u0c30\u0c4d', u'\u0c21\u0c3f\u0c38\u0c46\u0c02\u0c2c\u0c30\u0c4d'] days=[u'\u0c38\u0c4b\u0c2e\u0c35\u0c3e\u0c30\u0c02', u'\u0c2e\u0c02\u0c17\u0c33\u0c35\u0c3e\u0c30\u0c02', u'\u0c2c\u0c41\u0c27\u0c35\u0c3e\u0c30\u0c02', u'\u0c17\u0c41\u0c30\u0c41\u0c35\u0c3e\u0c30\u0c02', u'\u0c36\u0c41\u0c15\u0c4d\u0c30\u0c35\u0c3e\u0c30\u0c02', u'\u0c36\u0c28\u0c3f\u0c35\u0c3e\u0c30\u0c02', u'\u0c06\u0c26\u0c3f\u0c35\u0c3e\u0c30\u0c02'] abbrDays=[u'\u0c38\u0c4b\u0c2e', u'\u0c2e\u0c02\u0c17\u0c33', u'\u0c2c\u0c41\u0c27', u'\u0c17\u0c41\u0c30\u0c41', u'\u0c36\u0c41\u0c15\u0c4d\u0c30', u'\u0c36\u0c28\u0c3f', u'\u0c06\u0c26\u0c3f'] dateFormats={'medium': '%Y %%(abbrmonthname)s %d ', 'full': '%%(dayname)s, %Y %%(monthname)s %d ', 'long': '%Y %%(monthname)s %d ', 'short': '%y/%m/%d'} numericSymbols={'group': ',', 'nativeZeroDigit': u'\u0c66', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': '.', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'} PKA>e(vturbogears/i18n/data/te.pyc; ȸHIc @sHhddS(?steuతెలుగుsINuభారత దేళ౦uజనవరిuఫిబ్రవరిuమార్చిuఏప్రిల్uమేu జూన్u జూలైuఆగస్టుuసెప్టెంబర్uఅక్టోబర్uనవంబర్uడిసెంబర్uసోమవారంuమంగళవారంuబుధవారంuగురువారంuశుక్రవారంuశనివారంuఆదివారంu సోమu మంగళu బుధu గురుuశుక్రu శనిu ఆదిsmediums%Y %%(abbrmonthname)s %d sfulls#%%(dayname)s, %Y %%(monthname)s %d slongs%Y %%(monthname)s %d sshorts%y/%m/%dsgroups,snativeZeroDigitu౦s exponentialsEsperMilleu‰snanu�sdecimals.s percentSigns%slists;s patternDigits#splusSigns+sinfinityu∞s minusSigns-N(s languagess countriessmonthss abbrMonthssdayssabbrDayss dateFormatssnumericSymbols(sabbrDayssnumericSymbolss countriessmonthssdayss abbrMonthss languagess dateFormats((s0build\bdist.win32\egg\turbogears\i18n\data\te.pys?s***PKK9J aaturbogears/i18n/data/te_IN.py# Formatting configuration for locale te_IN languages={'te': u'\u0c24\u0c46\u0c32\u0c41\u0c17\u0c41'} countries={'IN': u'\u0c2d\u0c3e\u0c30\u0c24 \u0c26\u0c47\u0c33\u0c66'} months=[u'\u0c1c\u0c28\u0c35\u0c30\u0c3f', u'\u0c2b\u0c3f\u0c2c\u0c4d\u0c30\u0c35\u0c30\u0c3f', u'\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f', u'\u0c0f\u0c2a\u0c4d\u0c30\u0c3f\u0c32\u0c4d', u'\u0c2e\u0c47', u'\u0c1c\u0c42\u0c28\u0c4d', u'\u0c1c\u0c42\u0c32\u0c48', u'\u0c06\u0c17\u0c38\u0c4d\u0c1f\u0c41', u'\u0c38\u0c46\u0c2a\u0c4d\u0c1f\u0c46\u0c02\u0c2c\u0c30\u0c4d', u'\u0c05\u0c15\u0c4d\u0c1f\u0c4b\u0c2c\u0c30\u0c4d', u'\u0c28\u0c35\u0c02\u0c2c\u0c30\u0c4d', u'\u0c21\u0c3f\u0c38\u0c46\u0c02\u0c2c\u0c30\u0c4d'] abbrMonths=[u'\u0c1c\u0c28\u0c35\u0c30\u0c3f', u'\u0c2b\u0c3f\u0c2c\u0c4d\u0c30\u0c35\u0c30\u0c3f', u'\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f', u'\u0c0f\u0c2a\u0c4d\u0c30\u0c3f\u0c32\u0c4d', u'\u0c2e\u0c47', u'\u0c1c\u0c42\u0c28\u0c4d', u'\u0c1c\u0c42\u0c32\u0c48', u'\u0c06\u0c17\u0c38\u0c4d\u0c1f\u0c41', u'\u0c38\u0c46\u0c2a\u0c4d\u0c1f\u0c46\u0c02\u0c2c\u0c30\u0c4d', u'\u0c05\u0c15\u0c4d\u0c1f\u0c4b\u0c2c\u0c30\u0c4d', u'\u0c28\u0c35\u0c02\u0c2c\u0c30\u0c4d', u'\u0c21\u0c3f\u0c38\u0c46\u0c02\u0c2c\u0c30\u0c4d'] days=[u'\u0c38\u0c4b\u0c2e\u0c35\u0c3e\u0c30\u0c02', u'\u0c2e\u0c02\u0c17\u0c33\u0c35\u0c3e\u0c30\u0c02', u'\u0c2c\u0c41\u0c27\u0c35\u0c3e\u0c30\u0c02', u'\u0c17\u0c41\u0c30\u0c41\u0c35\u0c3e\u0c30\u0c02', u'\u0c36\u0c41\u0c15\u0c4d\u0c30\u0c35\u0c3e\u0c30\u0c02', u'\u0c36\u0c28\u0c3f\u0c35\u0c3e\u0c30\u0c02', u'\u0c06\u0c26\u0c3f\u0c35\u0c3e\u0c30\u0c02'] abbrDays=[u'\u0c38\u0c4b\u0c2e', u'\u0c2e\u0c02\u0c17\u0c33', u'\u0c2c\u0c41\u0c27', u'\u0c17\u0c41\u0c30\u0c41', u'\u0c36\u0c41\u0c15\u0c4d\u0c30', u'\u0c36\u0c28\u0c3f', u'\u0c06\u0c26\u0c3f'] dateFormats={'medium': '%d-%m-%Y', 'full': '%%(dayname)s %d %%(monthname)s %Y', 'long': '%d %%(monthname)s %Y', 'short': '%d-%m-%y'} numericSymbols={'group': ',', 'nativeZeroDigit': u'\u0c66', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': '.', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'} PKA>turbogears/i18n/data/te_IN.pyc; ȸHIc @sHhddS(?steuతెలుగుsINuభారత దేళ౦uజనవరిuఫిబ్రవరిuమార్చిuఏప్రిల్uమేu జూన్u జూలైuఆగస్టుuసెప్టెంబర్uఅక్టోబర్uనవంబర్uడిసెంబర్uసోమవారంuమంగళవారంuబుధవారంuగురువారంuశుక్రవారంuశనివారంuఆదివారంu సోమu మంగళu బుధu గురుuశుక్రu శనిu ఆదిsmediums%d-%m-%Ysfulls!%%(dayname)s %d %%(monthname)s %Yslongs%d %%(monthname)s %Ysshorts%d-%m-%ysgroups,snativeZeroDigitu౦s exponentialsEsperMilleu‰snanu�sdecimals.s percentSigns%slists;s patternDigits#splusSigns+sinfinityu∞s minusSigns-N(s languagess countriessmonthss abbrMonthssdayssabbrDayss dateFormatssnumericSymbols(sabbrDayssnumericSymbolss countriessmonthssdayss abbrMonthss languagess dateFormats((s3build\bdist.win32\egg\turbogears\i18n\data\te_IN.pys?s***PKK9-NUUturbogears/i18n/data/th.py# Formatting configuration for locale th languages={'gu': u'\u0e01\u0e39\u0e08\u0e32\u0e23\u0e32\u0e15\u0e34', 'gd': u'\u0e2a\u0e01\u0e47\u0e2d\u0e15\u0e2a\u0e4c\u0e40\u0e01\u0e25\u0e34\u0e04', 'ga': u'\u0e44\u0e2d\u0e23\u0e34\u0e0a', 'gn': u'\u0e01\u0e31\u0e27\u0e23\u0e32\u0e19\u0e35', 'gl': u'\u0e01\u0e30\u0e25\u0e35\u0e40\u0e0a\u0e35\u0e22', 'la': u'\u0e25\u0e30\u0e15\u0e34\u0e19', 'ln': u'\u0e25\u0e34\u0e07\u0e01\u0e32\u0e25\u0e32', 'lo': u'\u0e25\u0e32\u0e27', 'tt': u'\u0e15\u0e32\u0e14', 'tr': u'\u0e15\u0e38\u0e23\u0e01\u0e35', 'ts': u'\u0e0b\u0e2d\u0e07\u0e01\u0e32', 'lv': u'\u0e41\u0e25\u0e15\u0e40\u0e27\u0e35\u0e22 (\u0e40\u0e25\u0e17\u0e17\u0e34\u0e2a\u0e0a\u0e4c)', 'to': u'\u0e17\u0e2d\u0e07\u0e01\u0e49\u0e32', 'lt': u'\u0e25\u0e34\u0e18\u0e31\u0e27\u0e40\u0e19\u0e35\u0e22', 'tk': u'\u0e40\u0e15\u0e34\u0e23\u0e4c\u0e01\u0e40\u0e21\u0e19', 'th': u'\u0e44\u0e17\u0e22', 'ti': u'\u0e17\u0e34\u0e01\u0e23\u0e34\u0e19\u0e22\u0e32', 'tg': u'\u0e17\u0e32\u0e08\u0e34\u0e04', 'te': u'\u0e17\u0e34\u0e25\u0e39\u0e01\u0e39', 'ta': u'\u0e17\u0e21\u0e34\u0e2c', 'yi': u'\u0e22\u0e35\u0e14\u0e34\u0e0a', 'yo': u'\u0e42\u0e22\u0e23\u0e39\u0e1a\u0e32', 'de': u'\u0e40\u0e22\u0e2d\u0e23\u0e21\u0e31\u0e19', 'da': u'\u0e40\u0e14\u0e19\u0e21\u0e32\u0e23\u0e4c\u0e01', 'dz': u'\u0e20\u0e39\u0e10\u0e32\u0e19\u0e35', 'st': u'\u0e40\u0e0b\u0e42\u0e2a\u0e42\u0e17', 'qu': u'\u0e04\u0e34\u0e27\u0e0a\u0e31\u0e27', 'el': u'\u0e01\u0e23\u0e35\u0e01', 'eo': u'\u0e40\u0e2d\u0e2a\u0e40\u0e1b\u0e2d\u0e23\u0e31\u0e19\u0e42\u0e15', 'en': u'\u0e2d\u0e31\u0e07\u0e01\u0e24\u0e29', 'zh': u'\u0e08\u0e35\u0e19', 'za': u'\u0e08\u0e27\u0e07', 'uk': u'\u0e22\u0e39\u0e40\u0e04\u0e23\u0e19', 'eu': u'\u0e41\u0e1a\u0e2a\u0e01\u0e4c', 'et': u'\u0e40\u0e2d\u0e2a\u0e42\u0e15\u0e40\u0e19\u0e35\u0e22', 'es': u'\u0e2a\u0e40\u0e1b\u0e19', 'ru': u'\u0e23\u0e31\u0e2a\u0e40\u0e0b\u0e35\u0e22', 'rw': u'\u0e04\u0e34\u0e19\u0e22\u0e32\u0e27\u0e31\u0e19\u0e14\u0e32', 'rm': u'\u0e40\u0e23\u0e42\u0e15-\u0e42\u0e23\u0e41\u0e21\u0e19\u0e0b\u0e4c', 'rn': u'\u0e04\u0e34\u0e23\u0e31\u0e19\u0e14\u0e35', 'ro': u'\u0e42\u0e23\u0e21\u0e31\u0e19', 'bn': u'\u0e40\u0e1a\u0e19\u0e01\u0e32\u0e23\u0e35', 'be': u'\u0e1a\u0e32\u0e22\u0e42\u0e25\u0e23\u0e31\u0e2a\u0e40\u0e0b\u0e35\u0e22', 'bg': u'\u0e1a\u0e31\u0e25\u0e41\u0e01\u0e40\u0e23\u0e35\u0e22', 'ba': u'\u0e1a\u0e32\u0e2a\u0e0a\u0e4c\u0e01\u0e35\u0e23\u0e4c', 'wo': u'\u0e27\u0e39\u0e25\u0e2d\u0e1f', 'jv': u'\u0e0a\u0e27\u0e32', 'bo': u'\u0e17\u0e34\u0e40\u0e1a\u0e15', 'bh': u'\u0e1a\u0e34\u0e2e\u0e32\u0e23\u0e35', 'bi': u'\u0e1a\u0e34\u0e2a\u0e25\u0e32\u0e21\u0e32', 'br': u'\u0e1a\u0e23\u0e35\u0e17\u0e31\u0e19', 'ja': u'\u0e0d\u0e35\u0e48\u0e1b\u0e38\u0e48\u0e19', 'om': u'\u0e42\u0e2d\u0e42\u0e23\u0e42\u0e21 (\u0e2d\u0e32\u0e1f\u0e32\u0e19)', 'oc': u'\u0e2d\u0e2d\u0e01\u0e0b\u0e34\u0e17\u0e31\u0e19', 'tw': u'\u0e17\u0e27\u0e35', 'or': u'\u0e42\u0e2d\u0e23\u0e34\u0e22\u0e32', 'xh': u'\u0e42\u0e0b\u0e2a\u0e32', 'co': u'\u0e04\u0e2d\u0e23\u0e4c\u0e0b\u0e34\u0e01\u0e32', 'ca': u'\u0e41\u0e04\u0e15\u0e32\u0e41\u0e25\u0e19', 'cy': u'\u0e40\u0e27\u0e25\u0e2a\u0e4c', 'cs': u'\u0e40\u0e0a\u0e47\u0e04', 'ps': u'\u0e1e\u0e32\u0e2a\u0e0a\u0e4c\u0e42\u0e15 (\u0e1e\u0e38\u0e2a\u0e0a\u0e4c\u0e42\u0e15)', 'pt': u'\u0e42\u0e1b\u0e23\u0e15\u0e38\u0e40\u0e01\u0e2a', 'tl': u'\u0e15\u0e32\u0e01\u0e32\u0e25\u0e47\u0e2d\u0e01', 'pa': u'\u0e1b\u0e31\u0e0d\u0e08\u0e32\u0e1b', 'vi': u'\u0e40\u0e27\u0e35\u0e22\u0e14\u0e19\u0e32\u0e21', 'pl': u'\u0e42\u0e1b\u0e41\u0e25\u0e19\u0e14\u0e4c', 'hy': u'\u0e2d\u0e32\u0e23\u0e4c\u0e21\u0e35\u0e40\u0e19\u0e35\u0e22', 'hr': u'\u0e42\u0e04\u0e23\u0e40\u0e2d\u0e40\u0e17\u0e35\u0e22', 'iu': u'\u0e44\u0e2d\u0e19\u0e38\u0e01\u0e15\u0e34\u0e15\u0e31\u0e17', 'hu': u'\u0e2e\u0e31\u0e07\u0e01\u0e32\u0e23\u0e35', 'hi': u'\u0e2e\u0e35\u0e19\u0e14\u0e34', 'ha': u'\u0e42\u0e2e\u0e0b\u0e32', 'he': u'\u0e22\u0e34\u0e27', 'mg': u'\u0e21\u0e32\u0e25\u0e32\u0e01\u0e32\u0e0b\u0e35', 'uz': u'\u0e2d\u0e38\u0e2a\u0e40\u0e1a\u0e04', 'ml': u'\u0e41\u0e21\u0e25\u0e30\u0e22\u0e32\u0e25\u0e31\u0e21', 'mo': u'\u0e42\u0e21\u0e14\u0e32\u0e40\u0e27\u0e35\u0e22', 'mn': u'\u0e21\u0e2d\u0e07\u0e42\u0e01\u0e25', 'mi': u'\u0e40\u0e21\u0e32\u0e23\u0e35', 'ik': u'\u0e44\u0e2d\u0e19\u0e39\u0e40\u0e1b\u0e35\u0e22\u0e01', 'mk': u'\u0e41\u0e21\u0e0b\u0e35\u0e42\u0e14\u0e40\u0e19\u0e35\u0e22', 'ur': u'\u0e2d\u0e34\u0e23\u0e14\u0e39', 'mt': u'\u0e21\u0e2d\u0e25\u0e15\u0e32', 'ms': u'\u0e21\u0e25\u0e32\u0e22\u0e39', 'mr': u'\u0e21\u0e32\u0e23\u0e32\u0e17\u0e35', 'ug': u'\u0e2d\u0e38\u0e22\u0e01\u0e31\u0e27', 'my': u'\u0e1e\u0e21\u0e48\u0e32', 'aa': u'\u0e2d\u0e32\u0e1f\u0e32', 'ab': u'\u0e41\u0e2d\u0e1a\u0e01\u0e32\u0e40\u0e0b\u0e35\u0e22', 'ss': u'\u0e0b\u0e35\u0e2a\u0e27\u0e32\u0e15\u0e34', 'af': u'\u0e41\u0e2d\u0e1f\u0e23\u0e34\u0e01\u0e31\u0e19', 'tn': u'\u0e40\u0e0b\u0e15\u0e2a\u0e27\u0e32\u0e19\u0e32', 'sw': u'\u0e0b\u0e27\u0e32\u0e2e\u0e34\u0e23\u0e35', 'is': u'\u0e44\u0e2d\u0e0b\u0e4c\u0e41\u0e25\u0e19\u0e14\u0e4c\u0e14\u0e34\u0e04', 'am': u'\u0e2d\u0e31\u0e21\u0e2e\u0e32\u0e23\u0e34\u0e04', 'it': u'\u0e2d\u0e34\u0e15\u0e32\u0e25\u0e35', 'sv': u'\u0e2a\u0e27\u0e35\u0e40\u0e14\u0e19', 'ia': u'\u0e2d\u0e34\u0e19\u0e40\u0e15\u0e2d\u0e23\u0e4c\u0e25\u0e34\u0e07\u0e01\u0e27\u0e32', 'as': u'\u0e2d\u0e31\u0e2a\u0e2a\u0e31\u0e21\u0e21\u0e34\u0e2a', 'ar': u'\u0e2d\u0e32\u0e23\u0e30\u0e1a\u0e34\u0e04', 'su': u'\u0e0b\u0e31\u0e19\u0e14\u0e32\u0e19\u0e35\u0e2a', 'zu': u'\u0e0b\u0e39\u0e25\u0e39', 'ay': u'\u0e44\u0e2d\u0e21\u0e32\u0e23\u0e32', 'az': u'\u0e2d\u0e32\u0e40\u0e0b\u0e2d\u0e23\u0e4c\u0e44\u0e1a\u0e08\u0e32\u0e19\u0e35', 'ie': u'\u0e2d\u0e34\u0e19\u0e40\u0e15\u0e2d\u0e23\u0e4c\u0e25\u0e34\u0e07\u0e04\u0e4c', 'id': u'\u0e2d\u0e34\u0e19\u0e42\u0e14\u0e19\u0e35\u0e40\u0e0a\u0e35\u0e22', 'sk': u'\u0e2a\u0e42\u0e25\u0e27\u0e31\u0e04', 'nl': u'\u0e2e\u0e2d\u0e25\u0e31\u0e19\u0e14\u0e32', 'no': u'\u0e19\u0e2d\u0e23\u0e4c\u0e40\u0e27\u0e22\u0e4c', 'na': u'\u0e19\u0e2d\u0e23\u0e39', 'ne': u'\u0e40\u0e19\u0e1b\u0e32\u0e25', 'vo': u'\u0e42\u0e27\u0e25\u0e32\u0e1e\u0e38\u0e01', 'fr': u'\u0e1d\u0e23\u0e31\u0e48\u0e07\u0e40\u0e28\u0e2a', 'sm': u'\u0e0b\u0e32\u0e21\u0e31\u0e27', 'fy': u'\u0e1f\u0e23\u0e35\u0e2a\u0e41\u0e25\u0e19\u0e14\u0e4c', 'fa': u'\u0e40\u0e1b\u0e2d\u0e23\u0e4c\u0e40\u0e0b\u0e35\u0e22', 'fi': u'\u0e1f\u0e34\u0e19', 'fj': u'\u0e1f\u0e34\u0e08\u0e34', 'sa': u'\u0e2a\u0e31\u0e19\u0e2a\u0e01\u0e24\u0e15', 'fo': u'\u0e1f\u0e32\u0e42\u0e23\u0e2a', 'ka': u'\u0e08\u0e2d\u0e23\u0e4c\u0e40\u0e08\u0e35\u0e22\u0e19', 'kk': u'\u0e04\u0e32\u0e0b\u0e31\u0e04', 'sr': u'\u0e40\u0e0b\u0e2d\u0e23\u0e4c\u0e40\u0e1a\u0e35\u0e22', 'sq': u'\u0e41\u0e2d\u0e25\u0e40\u0e1a\u0e40\u0e19\u0e35\u0e22', 'ko': u'\u0e40\u0e01\u0e32\u0e2b\u0e25\u0e35', 'kn': u'\u0e01\u0e32\u0e19\u0e32\u0e14\u0e32', 'km': u'\u0e40\u0e02\u0e21\u0e23', 'kl': u'\u0e01\u0e23\u0e35\u0e19\u0e41\u0e25\u0e19\u0e14\u0e4c\u0e14\u0e34\u0e04', 'ks': u'\u0e04\u0e31\u0e0a\u0e21\u0e35\u0e23\u0e35', 'si': u'\u0e2a\u0e34\u0e07\u0e2b\u0e25', 'sh': u'\u0e40\u0e0b\u0e2d\u0e23\u0e4c\u0e42\u0e1a-\u0e42\u0e04\u0e23\u0e40\u0e2d\u0e40\u0e17\u0e35\u0e22\u0e19', 'so': u'\u0e42\u0e0b\u0e21\u0e32\u0e25\u0e35', 'sn': u'\u0e42\u0e0b\u0e19\u0e32', 'ku': u'\u0e40\u0e04\u0e34\u0e14', 'sl': u'\u0e2a\u0e42\u0e25\u0e40\u0e27\u0e40\u0e19\u0e35\u0e22', 'ky': u'\u0e40\u0e04\u0e2d\u0e23\u0e4c\u0e01\u0e34\u0e0b', 'sg': u'\u0e2a\u0e31\u0e19\u0e42\u0e04', 'sd': u'\u0e0b\u0e34\u0e19\u0e14\u0e34'} countries={'BD': u'\u0e1a\u0e31\u0e07\u0e04\u0e25\u0e32\u0e40\u0e17\u0e28', 'BE': u'\u0e40\u0e1a\u0e25\u0e40\u0e22\u0e35\u0e48\u0e22\u0e21', 'BF': u'\u0e40\u0e1a\u0e2d\u0e23\u0e4c\u0e01\u0e34\u0e19\u0e32\u0e1f\u0e32\u0e42\u0e0b', 'BG': u'\u0e1a\u0e31\u0e25\u0e41\u0e01\u0e40\u0e23\u0e35\u0e22', 'BA': u'\u0e1a\u0e2d\u0e2a\u0e40\u0e19\u0e35\u0e22 \u0e41\u0e25\u0e30 \u0e40\u0e2e\u0e34\u0e23\u0e4c\u0e0b\u0e42\u0e01\u0e27\u0e34\u0e40\u0e19\u0e35\u0e22', 'BB': u'\u0e1a\u0e32\u0e23\u0e4c\u0e1a\u0e32\u0e14\u0e2d\u0e2a', 'BM': u'\u0e40\u0e1a\u0e2d\u0e23\u0e4c\u0e21\u0e34\u0e27\u0e14\u0e49\u0e32', 'BN': u'\u0e1a\u0e23\u0e39\u0e44\u0e19', 'BO': u'\u0e42\u0e1a\u0e25\u0e34\u0e40\u0e27\u0e35\u0e22', 'BH': u'\u0e1a\u0e32\u0e2b\u0e4c\u0e40\u0e23\u0e19', 'BI': u'\u0e1a\u0e39\u0e23\u0e31\u0e19\u0e14\u0e34', 'BJ': u'\u0e40\u0e1a\u0e19\u0e34\u0e19', 'BT': u'\u0e20\u0e39\u0e10\u0e32\u0e19', 'JM': u'\u0e08\u0e32\u0e44\u0e21\u0e01\u0e49\u0e32', 'BW': u'\u0e1a\u0e2d\u0e15\u0e2a\u0e27\u0e32\u0e19\u0e32', 'BR': u'\u0e1a\u0e23\u0e32\u0e0b\u0e34\u0e25', 'BS': u'\u0e1a\u0e32\u0e2e\u0e32\u0e21\u0e32\u0e2a', 'BY': u'\u0e40\u0e1a\u0e25\u0e25\u0e32\u0e23\u0e31\u0e2a', 'BZ': u'\u0e40\u0e1a\u0e25\u0e34\u0e0b', 'RU': u'\u0e23\u0e31\u0e2a\u0e40\u0e0b\u0e35\u0e22', 'RW': u'\u0e23\u0e32\u0e27\u0e31\u0e25\u0e14\u0e32', 'TL': u'\u0e15\u0e34\u0e21\u0e2d\u0e23\u0e4c\u0e15\u0e30\u0e27\u0e31\u0e19\u0e2d\u0e2d\u0e01', 'TM': u'\u0e40\u0e15\u0e34\u0e23\u0e4c\u0e01\u0e40\u0e21\u0e19\u0e34\u0e2a\u0e16\u0e32\u0e19', 'TJ': u'\u0e17\u0e32\u0e08\u0e34\u0e01\u0e34\u0e2a\u0e16\u0e32\u0e19', 'RO': u'\u0e23\u0e39\u0e40\u0e21\u0e40\u0e19\u0e35\u0e22', 'TK': u'\u0e42\u0e17\u0e01\u0e34\u0e42\u0e25', 'GW': u'\u0e01\u0e34\u0e27\u0e19\u0e35-\u0e1a\u0e34\u0e2a\u0e42\u0e0b', 'GT': u'\u0e01\u0e31\u0e27\u0e40\u0e15\u0e21\u0e32\u0e25\u0e32', 'GR': u'\u0e01\u0e23\u0e35\u0e0b', 'GQ': u'\u0e40\u0e2d\u0e04\u0e27\u0e32\u0e42\u0e17\u0e40\u0e23\u0e35\u0e22\u0e25\u0e01\u0e34\u0e19\u0e35', 'GP': u'\u0e01\u0e31\u0e27\u0e40\u0e14\u0e2d\u0e25\u0e39\u0e1b', 'JP': u'\u0e0d\u0e35\u0e48\u0e1b\u0e38\u0e48\u0e19', 'GY': u'\u0e01\u0e39\u0e22\u0e32\u0e19\u0e48\u0e32', 'GF': u'\u0e40\u0e1f\u0e23\u0e47\u0e19\u0e0a\u0e01\u0e34\u0e27\u0e19\u0e48\u0e32', 'GE': u'\u0e08\u0e2d\u0e23\u0e4c\u0e40\u0e08\u0e35\u0e22', 'GB': u'\u0e2a\u0e2b\u0e23\u0e32\u0e0a\u0e2d\u0e32\u0e13\u0e32\u0e08\u0e31\u0e01\u0e23', 'GA': u'\u0e01\u0e32\u0e1a\u0e2d\u0e19', 'GN': u'\u0e01\u0e34\u0e27\u0e19\u0e35', 'GM': u'\u0e41\u0e01\u0e21\u0e40\u0e1a\u0e35\u0e22', 'GH': u'\u0e01\u0e32\u0e19\u0e48\u0e32', 'OM': u'\u0e42\u0e2d\u0e21\u0e32\u0e19', 'TN': u'\u0e15\u0e39\u0e19\u0e34\u0e40\u0e0b\u0e35\u0e22', 'JO': u'\u0e08\u0e2d\u0e23\u0e4c\u0e41\u0e14\u0e19', 'SP': u'\u0e40\u0e0b\u0e2d\u0e23\u0e4c\u0e40\u0e1a\u0e35\u0e22', 'HR': u'\u0e42\u0e04\u0e23\u0e40\u0e2d\u0e40\u0e0a\u0e35\u0e22', 'HT': u'\u0e44\u0e2e\u0e15\u0e35', 'HU': u'\u0e2e\u0e31\u0e07\u0e01\u0e32\u0e23\u0e35', 'HK': u'\u0e2e\u0e48\u0e2d\u0e07\u0e01\u0e07', 'HN': u'\u0e2e\u0e2d\u0e19\u0e14\u0e39\u0e23\u0e31\u0e2a', 'VE': u'\u0e40\u0e27\u0e40\u0e19\u0e0b\u0e39\u0e40\u0e2d\u0e25\u0e48\u0e32', 'PR': u'\u0e40\u0e1b\u0e2d\u0e23\u0e4c\u0e42\u0e15\u0e23\u0e34\u0e42\u0e01', 'PT': u'\u0e42\u0e1b\u0e15\u0e38\u0e01\u0e31\u0e25', 'PY': u'\u0e1b\u0e32\u0e23\u0e32\u0e01\u0e27\u0e31\u0e22', 'IQ': u'\u0e2d\u0e34\u0e23\u0e31\u0e01', 'PA': u'\u0e1b\u0e32\u0e19\u0e32\u0e21\u0e32', 'PF': u'\u0e40\u0e1f\u0e23\u0e47\u0e19\u0e0a\u0e42\u0e1e\u0e25\u0e34\u0e19\u0e35\u0e40\u0e0b\u0e35\u0e22', 'PG': u'\u0e1b\u0e32\u0e1b\u0e31\u0e27\u0e19\u0e34\u0e27\u0e01\u0e35\u0e19\u0e35', 'PE': u'\u0e40\u0e1b\u0e23\u0e39', 'PK': u'\u0e1b\u0e32\u0e01\u0e35\u0e2a\u0e16\u0e32\u0e19', 'PH': u'\u0e1f\u0e34\u0e25\u0e34\u0e1b\u0e1b\u0e34\u0e19\u0e2a\u0e4c', 'PL': u'\u0e42\u0e1b\u0e41\u0e25\u0e19\u0e14\u0e4c', 'ZM': u'\u0e41\u0e0b\u0e21\u0e40\u0e1a\u0e35\u0e22', 'EH': u'\u0e0b\u0e32\u0e2e\u0e32\u0e23\u0e48\u0e32\u0e15\u0e30\u0e27\u0e31\u0e19\u0e15\u0e01', 'EE': u'\u0e40\u0e2d\u0e2a\u0e42\u0e15\u0e40\u0e19\u0e35\u0e22', 'EG': u'\u0e2d\u0e35\u0e22\u0e34\u0e1b\u0e15\u0e4c', 'ZA': u'\u0e41\u0e2d\u0e1f\u0e23\u0e34\u0e01\u0e32\u0e43\u0e15\u0e49', 'EC': u'\u0e40\u0e2d\u0e01\u0e27\u0e32\u0e14\u0e2d\u0e23\u0e4c', 'IT': u'\u0e2d\u0e34\u0e15\u0e32\u0e25\u0e35', 'VN': u'\u0e40\u0e27\u0e35\u0e22\u0e14\u0e19\u0e32\u0e21', 'ET': u'\u0e40\u0e2d\u0e18\u0e34\u0e42\u0e2d\u0e40\u0e1b\u0e35\u0e22', 'SO': u'\u0e42\u0e0b\u0e21\u0e32\u0e40\u0e25\u0e35\u0e22', 'ZW': u'\u0e0b\u0e34\u0e21\u0e1a\u0e32\u0e1a\u0e40\u0e27', 'ES': u'\u0e2a\u0e40\u0e1b\u0e19', 'ER': u'\u0e2d\u0e34\u0e23\u0e34\u0e17\u0e23\u0e35', 'MD': u'\u0e42\u0e21\u0e25\u0e42\u0e14\u0e27\u0e32', 'MG': u'\u0e21\u0e32\u0e14\u0e32\u0e01\u0e32\u0e2a\u0e01\u0e49\u0e32', 'MA': u'\u0e42\u0e21\u0e23\u0e2d\u0e04\u0e42\u0e04', 'MC': u'\u0e42\u0e21\u0e19\u0e32\u0e42\u0e04', 'UZ': u'\u0e2d\u0e38\u0e0b\u0e40\u0e1a\u0e01\u0e34\u0e2a\u0e16\u0e32\u0e19', 'MM': u'\u0e2a\u0e2b\u0e20\u0e32\u0e1e\u0e1e\u0e21\u0e48\u0e32', 'ML': u'\u0e21\u0e32\u0e25\u0e35', 'MO': u'\u0e21\u0e32\u0e40\u0e01\u0e4a\u0e32', 'MN': u'\u0e21\u0e2d\u0e07\u0e42\u0e01\u0e40\u0e25\u0e35\u0e22', 'MK': u'\u0e41\u0e21\u0e0b\u0e35\u0e42\u0e14\u0e40\u0e19\u0e35\u0e22', 'MU': u'\u0e21\u0e2d\u0e23\u0e34\u0e40\u0e15\u0e35\u0e22\u0e2a', 'MT': u'\u0e21\u0e31\u0e25\u0e15\u0e49\u0e32', 'MQ': u'\u0e21\u0e32\u0e23\u0e4c\u0e15\u0e34\u0e19\u0e34\u0e01', 'MS': u'\u0e21\u0e2d\u0e19\u0e15\u0e4c\u0e40\u0e0b\u0e2d\u0e23\u0e32\u0e15', 'MR': u'\u0e21\u0e2d\u0e23\u0e34\u0e17\u0e32\u0e40\u0e19\u0e35\u0e22', 'UG': u'\u0e2d\u0e39\u0e01\u0e32\u0e19\u0e14\u0e32', 'MY': u'\u0e21\u0e32\u0e40\u0e25\u0e40\u0e0b\u0e35\u0e22', 'MX': u'\u0e41\u0e21\u0e47\u0e01\u0e0b\u0e34\u0e42\u0e01', 'IL': u'\u0e2d\u0e34\u0e2a\u0e23\u0e32\u0e40\u0e2d\u0e25', 'FR': u'\u0e1d\u0e23\u0e31\u0e48\u0e07\u0e40\u0e28\u0e2a', 'FI': u'\u0e1f\u0e34\u0e19\u0e41\u0e25\u0e19\u0e14\u0e4c', 'FJ': u'\u0e1f\u0e34\u0e08\u0e34', 'FM': u'\u0e44\u0e21\u0e42\u0e04\u0e23\u0e19\u0e34\u0e40\u0e0b\u0e35\u0e22', 'NI': u'\u0e19\u0e34\u0e04\u0e32\u0e23\u0e32\u0e01\u0e31\u0e27', 'NL': u'\u0e40\u0e19\u0e40\u0e18\u0e2d\u0e23\u0e4c\u0e41\u0e25\u0e19\u0e14\u0e4c', 'NO': u'\u0e19\u0e2d\u0e23\u0e4c\u0e40\u0e27\u0e22\u0e4c', 'NA': u'\u0e19\u0e32\u0e21\u0e34\u0e40\u0e1a\u0e35\u0e22', 'VU': u'\u0e27\u0e32\u0e19\u0e31\u0e27\u0e15\u0e39', 'NC': u'\u0e19\u0e34\u0e27\u0e04\u0e32\u0e25\u0e34\u0e42\u0e14\u0e40\u0e19\u0e35\u0e22', 'NE': u'\u0e44\u0e19\u0e40\u0e08\u0e2d\u0e23\u0e4c', 'NG': u'\u0e44\u0e19\u0e08\u0e35\u0e40\u0e23\u0e35\u0e22', 'NZ': u'\u0e19\u0e34\u0e27\u0e0b\u0e35\u0e41\u0e25\u0e19\u0e14\u0e4c', 'NP': u'\u0e40\u0e19\u0e1b\u0e32\u0e25', 'NU': u'\u0e19\u0e35\u0e22\u0e39', 'CI': u'\u0e1d\u0e31\u0e48\u0e07\u0e17\u0e30\u0e40\u0e25\u0e44\u0e2d\u0e27\u0e2d\u0e23\u0e34', 'CH': u'\u0e2a\u0e27\u0e34\u0e2a\u0e40\u0e0b\u0e2d\u0e23\u0e4c\u0e41\u0e25\u0e19\u0e14\u0e4c', 'CO': u'\u0e42\u0e04\u0e25\u0e31\u0e21\u0e40\u0e1a\u0e35\u0e22', 'CN': u'\u0e08\u0e35\u0e19', 'CM': u'\u0e04\u0e32\u0e40\u0e21\u0e23\u0e39\u0e19', 'CL': u'\u0e0a\u0e34\u0e25\u0e35', 'CA': u'\u0e41\u0e04\u0e19\u0e32\u0e14\u0e32', 'CG': u'\u0e04\u0e2d\u0e07\u0e42\u0e01', 'CF': u'\u0e2a\u0e32\u0e18\u0e32\u0e23\u0e13\u0e23\u0e31\u0e10\u0e41\u0e2d\u0e1f\u0e23\u0e34\u0e01\u0e32\u0e01\u0e25\u0e32\u0e07', 'CZ': u'\u0e2a\u0e32\u0e18\u0e32\u0e23\u0e13\u0e23\u0e31\u0e10\u0e40\u0e0a\u0e47\u0e04', 'CY': u'\u0e44\u0e0b\u0e1b\u0e23\u0e31\u0e2a', 'CR': u'\u0e04\u0e2d\u0e2a\u0e15\u0e32\u0e23\u0e34\u0e01\u0e49\u0e32', 'CV': u'\u0e40\u0e04\u0e1e\u0e40\u0e27\u0e2d\u0e23\u0e4c\u0e14', 'CU': u'\u0e04\u0e34\u0e27\u0e1a\u0e32', 'SZ': u'\u0e2a\u0e27\u0e32\u0e0b\u0e34\u0e41\u0e25\u0e19\u0e14\u0e4c', 'SY': u'\u0e0b\u0e35\u0e40\u0e23\u0e35\u0e22', 'KG': u'\u0e40\u0e04\u0e2d\u0e23\u0e4c\u0e01\u0e34\u0e2a\u0e16\u0e32\u0e19', 'KE': u'\u0e40\u0e04\u0e19\u0e22\u0e48\u0e32', 'SR': u'\u0e0b\u0e39\u0e23\u0e34\u0e19\u0e32\u0e21\u0e34', 'KI': u'\u0e04\u0e34\u0e23\u0e35\u0e1a\u0e32\u0e15\u0e34', 'KH': u'\u0e01\u0e31\u0e21\u0e1e\u0e39\u0e0a\u0e32', 'SV': u'\u0e40\u0e2d\u0e25\u0e0b\u0e32\u0e27\u0e32\u0e14\u0e2d\u0e23\u0e4c', 'KM': u'\u0e42\u0e04\u0e42\u0e21\u0e23\u0e2d\u0e2a', 'SK': u'\u0e2a\u0e42\u0e25\u0e27\u0e32\u0e40\u0e01\u0e35\u0e22', 'KR': u'\u0e40\u0e01\u0e32\u0e2b\u0e25\u0e35\u0e43\u0e15\u0e49', 'SI': u'\u0e2a\u0e42\u0e25\u0e27\u0e34\u0e40\u0e19\u0e35\u0e22', 'KP': u'\u0e40\u0e01\u0e32\u0e2b\u0e25\u0e35\u0e40\u0e2b\u0e19\u0e37\u0e2d', 'KW': u'\u0e04\u0e39\u0e40\u0e27\u0e15', 'SN': u'\u0e0b\u0e34\u0e19\u0e35\u0e01\u0e31\u0e25', 'SL': u'\u0e40\u0e0b\u0e35\u0e22\u0e23\u0e4c\u0e23\u0e48\u0e32\u0e25\u0e35\u0e2d\u0e2d\u0e19', 'SC': u'\u0e40\u0e0b\u0e22\u0e4c\u0e41\u0e0a\u0e25\u0e25\u0e4c', 'KZ': u'\u0e04\u0e32\u0e0b\u0e31\u0e04\u0e2a\u0e16\u0e32\u0e19', 'SA': u'\u0e0b\u0e32\u0e2d\u0e38\u0e14\u0e34\u0e2d\u0e32\u0e23\u0e30\u0e40\u0e1a\u0e35\u0e22', 'SG': u'\u0e2a\u0e34\u0e07\u0e04\u0e42\u0e1b\u0e23\u0e4c', 'SE': u'\u0e2a\u0e27\u0e35\u0e40\u0e14\u0e19', 'SD': u'\u0e0b\u0e39\u0e14\u0e32\u0e19', 'DO': u'\u0e2a\u0e32\u0e18\u0e32\u0e23\u0e13\u0e23\u0e31\u0e10\u0e42\u0e14\u0e21\u0e34\u0e19\u0e34\u0e01\u0e31\u0e19', 'DM': u'\u0e42\u0e14\u0e21\u0e34\u0e19\u0e34\u0e01\u0e49\u0e32', 'DJ': u'\u0e14\u0e34\u0e42\u0e1a\u0e15\u0e34', 'DK': u'\u0e40\u0e14\u0e19\u0e21\u0e32\u0e23\u0e4c\u0e01', 'VG': u'\u0e1a\u0e23\u0e34\u0e17\u0e34\u0e0a\u0e40\u0e27\u0e2d\u0e23\u0e4c\u0e08\u0e34\u0e19\u0e44\u0e2d\u0e2a\u0e4c\u0e41\u0e25\u0e19\u0e14\u0e4c', 'DE': u'\u0e40\u0e22\u0e2d\u0e23\u0e21\u0e19\u0e35', 'YE': u'\u0e40\u0e22\u0e40\u0e21\u0e19', 'DZ': u'\u0e41\u0e2d\u0e25\u0e08\u0e35\u0e40\u0e23\u0e35\u0e22', 'US': u'\u0e2a\u0e2b\u0e23\u0e31\u0e10\u0e2d\u0e40\u0e21\u0e23\u0e34\u0e01\u0e32', 'UY': u'\u0e2d\u0e38\u0e23\u0e39\u0e01\u0e27\u0e31\u0e22', 'YU': u'\u0e22\u0e39\u0e42\u0e01\u0e2a\u0e25\u0e32\u0e40\u0e27\u0e35\u0e22', 'YT': u'\u0e21\u0e32\u0e22\u0e2d\u0e15', 'LB': u'\u0e40\u0e25\u0e1a\u0e32\u0e19\u0e2d\u0e19', 'LA': u'\u0e25\u0e32\u0e27', 'TW': u'\u0e44\u0e15\u0e49\u0e2b\u0e27\u0e31\u0e19', 'TT': u'\u0e17\u0e23\u0e34\u0e19\u0e34\u0e41\u0e14\u0e14 \u0e41\u0e25\u0e30\u0e42\u0e17\u0e1a\u0e32\u0e42\u0e01', 'TR': u'\u0e15\u0e38\u0e23\u0e01\u0e35', 'LK': u'\u0e28\u0e23\u0e35\u0e25\u0e31\u0e07\u0e01\u0e32', 'LI': u'\u0e44\u0e25\u0e40\u0e17\u0e19\u0e2a\u0e44\u0e15\u0e19\u0e4c', 'LV': u'\u0e25\u0e32\u0e15\u0e40\u0e27\u0e35\u0e22', 'TO': u'\u0e17\u0e2d\u0e07\u0e01\u0e49\u0e32', 'LT': u'\u0e25\u0e34\u0e40\u0e17\u0e2d\u0e23\u0e4c\u0e40\u0e19\u0e35\u0e22', 'LU': u'\u0e25\u0e31\u0e01\u0e0b\u0e4c\u0e40\u0e0b\u0e21\u0e40\u0e1a\u0e2d\u0e23\u0e4c\u0e01', 'LR': u'\u0e25\u0e34\u0e40\u0e1a\u0e2d\u0e23\u0e4c\u0e40\u0e25\u0e35\u0e22', 'LS': u'\u0e40\u0e25\u0e42\u0e0b\u0e42\u0e17', 'TH': u'\u0e1b\u0e23\u0e30\u0e40\u0e17\u0e28\u0e44\u0e17\u0e22', 'TF': u'\u0e2d\u0e32\u0e13\u0e32\u0e40\u0e02\u0e15\u0e17\u0e32\u0e07\u0e43\u0e15\u0e49\u0e02\u0e2d\u0e07\u0e1d\u0e23\u0e31\u0e48\u0e07\u0e40\u0e28\u0e2a', 'TG': u'\u0e42\u0e15\u0e42\u0e01', 'TD': u'\u0e0a\u0e32\u0e14', 'LY': u'\u0e25\u0e34\u0e40\u0e1a\u0e35\u0e22', 'VA': u'\u0e27\u0e32\u0e15\u0e34\u0e01\u0e31\u0e19', 'AE': u'\u0e2a\u0e2b\u0e23\u0e31\u0e10\u0e2d\u0e32\u0e2b\u0e23\u0e31\u0e1a\u0e40\u0e2d\u0e21\u0e34\u0e40\u0e23\u0e15\u0e2a\u0e4c', 'AD': u'\u0e2d\u0e31\u0e19\u0e14\u0e2d\u0e23\u0e4c\u0e23\u0e32', 'AF': u'\u0e2d\u0e31\u0e1f\u0e01\u0e32\u0e19\u0e34\u0e2a\u0e16\u0e32\u0e19', 'AI': u'\u0e2d\u0e31\u0e19\u0e01\u0e34\u0e25\u0e48\u0e32', 'VI': u'\u0e22\u0e39\u0e40\u0e2d\u0e2a\u0e40\u0e27\u0e2d\u0e23\u0e4c\u0e08\u0e34\u0e19\u0e44\u0e2d\u0e2a\u0e4c\u0e41\u0e25\u0e19\u0e14\u0e4c', 'IS': u'\u0e44\u0e2d\u0e0b\u0e41\u0e25\u0e19\u0e14\u0e4c', 'IR': u'\u0e2d\u0e34\u0e2b\u0e23\u0e48\u0e32\u0e19', 'AM': u'\u0e2d\u0e32\u0e23\u0e4c\u0e21\u0e35\u0e40\u0e19\u0e35\u0e22', 'AL': u'\u0e41\u0e2d\u0e25\u0e40\u0e1a\u0e40\u0e19\u0e35\u0e22', 'AO': u'\u0e2d\u0e31\u0e19\u0e42\u0e01\u0e25\u0e32', 'AN': u'\u0e40\u0e19\u0e40\u0e18\u0e2d\u0e23\u0e4c\u0e41\u0e25\u0e19\u0e14\u0e4c\u0e41\u0e2d\u0e19\u0e17\u0e34\u0e25\u0e25\u0e4c', 'AR': u'\u0e2d\u0e32\u0e23\u0e4c\u0e40\u0e08\u0e19\u0e15\u0e34\u0e19\u0e48\u0e32', 'AU': u'\u0e2d\u0e2d\u0e2a\u0e40\u0e15\u0e23\u0e40\u0e25\u0e35\u0e22', 'AT': u'\u0e2d\u0e2d\u0e2a\u0e40\u0e15\u0e23\u0e35\u0e22', 'AW': u'\u0e2d\u0e32\u0e23\u0e39\u0e1a\u0e32', 'IN': u'\u0e2d\u0e34\u0e19\u0e40\u0e14\u0e35\u0e22', 'TZ': u'\u0e17\u0e32\u0e19\u0e0b\u0e32\u0e40\u0e19\u0e35\u0e22', 'AZ': u'\u0e2d\u0e32\u0e40\u0e0b\u0e2d\u0e23\u0e4c\u0e44\u0e1a\u0e08\u0e31\u0e19', 'IE': u'\u0e44\u0e2d\u0e23\u0e4c\u0e41\u0e25\u0e19\u0e14\u0e4c', 'ID': u'\u0e2d\u0e34\u0e19\u0e42\u0e14\u0e19\u0e35\u0e40\u0e0b\u0e35\u0e22', 'UA': u'\u0e22\u0e39\u0e40\u0e04\u0e23\u0e19', 'QA': u'\u0e01\u0e32\u0e15\u0e32\u0e23\u0e4c', 'MZ': u'\u0e42\u0e21\u0e41\u0e0b\u0e21\u0e1a\u0e34\u0e04'} months=[u'\u0e21\u0e01\u0e23\u0e32\u0e04\u0e21', u'\u0e01\u0e38\u0e21\u0e20\u0e32\u0e1e\u0e31\u0e19\u0e18\u0e4c', u'\u0e21\u0e35\u0e19\u0e32\u0e04\u0e21', u'\u0e40\u0e21\u0e29\u0e32\u0e22\u0e19', u'\u0e1e\u0e24\u0e29\u0e20\u0e32\u0e04\u0e21', u'\u0e21\u0e34\u0e16\u0e38\u0e19\u0e32\u0e22\u0e19', u'\u0e01\u0e23\u0e01\u0e0e\u0e32\u0e04\u0e21', u'\u0e2a\u0e34\u0e07\u0e2b\u0e32\u0e04\u0e21', u'\u0e01\u0e31\u0e19\u0e22\u0e32\u0e22\u0e19', u'\u0e15\u0e38\u0e25\u0e32\u0e04\u0e21', u'\u0e1e\u0e24\u0e28\u0e08\u0e34\u0e01\u0e32\u0e22\u0e19', u'\u0e18\u0e31\u0e19\u0e27\u0e32\u0e04\u0e21'] abbrMonths=[u'\u0e21.\u0e04.', u'\u0e01.\u0e1e.', u'\u0e21\u0e35.\u0e04.', u'\u0e40\u0e21.\u0e22.', u'\u0e1e.\u0e04.', u'\u0e21\u0e34.\u0e22.', u'\u0e01.\u0e04.', u'\u0e2a.\u0e04.', u'\u0e01.\u0e22.', u'\u0e15.\u0e04.', u'\u0e1e.\u0e22.', u'\u0e18.\u0e04.'] days=[u'\u0e27\u0e31\u0e19\u0e08\u0e31\u0e19\u0e17\u0e23\u0e4c', u'\u0e27\u0e31\u0e19\u0e2d\u0e31\u0e07\u0e04\u0e32\u0e23', u'\u0e27\u0e31\u0e19\u0e1e\u0e38\u0e18', u'\u0e27\u0e31\u0e19\u0e1e\u0e24\u0e2b\u0e31\u0e2a\u0e1a\u0e14\u0e35', u'\u0e27\u0e31\u0e19\u0e28\u0e38\u0e01\u0e23\u0e4c', u'\u0e27\u0e31\u0e19\u0e40\u0e2a\u0e32\u0e23\u0e4c', u'\u0e27\u0e31\u0e19\u0e2d\u0e32\u0e17\u0e34\u0e15\u0e22\u0e4c'] abbrDays=[u'\u0e08.', u'\u0e2d.', u'\u0e1e.', u'\u0e1e\u0e24.', u'\u0e28.', u'\u0e2a.', u'\u0e2d\u0e32.'] dateFormats={'medium': '%d %%(abbrmonthname)s %Y', 'full': u'%%(dayname)s\u0e17\u0e35\u0e48 %d %%(monthname)s G %Y', 'long': '%d %%(monthname)s %Y', 'short': '%d/%m/%Y'} numericSymbols={'group': ',', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': '.', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'} PKA>Y 4@4@turbogears/i18n/data/th.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdg<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<did<djdk<dldm<dnd<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<ddE<dd<dd<dd<dd<dd<dd<dd<dd<ddG<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd=<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d<d#d$<d%d&<d'd(<d)d*<d+d/<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d<d?d@<dAdB<dCd<dDdE<dFdG<dHdI<dJd<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmd<dnd<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<ddA<dd<dd7@7@turbogears/i18n/data/th_TH.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdg<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<did<djdk<dldm<dnd<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<ddE<dd<dd<dd<dd<dd<dd<dd<dd<ddG<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd=<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d<d#d$<d%d&<d'd(<d)d*<d+d/<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d<d?d@<dAdB<dCd<dDdE<dFdG<dHdI<dJd<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmd<dnd<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<ddA<dd<ddO}++turbogears/i18n/data/ti.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd/<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<d?d@<dAdBC++turbogears/i18n/data/ti_ER.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd/<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dAR++turbogears/i18n/data/ti_ET.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd/<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<d?d@<dAdB633turbogears/i18n/data/tr.pyc; ȸHIc @shdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDd:<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd;T[ے33turbogears/i18n/data/tr_TR.pyc; ȸHIc @shdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDd:<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd, YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: 2006-10-03 10:24+CEST\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: ENCODING\n" "Generated-By: pygettext.py 1.5\n" #: validators.py:29 msgid "Invalid number format" msgstr "" #: validators.py:30 validators.py:80 msgid "Empty values not allowed" msgstr "" #: validators.py:79 msgid "Invalid datetime format" msgstr "" #: validators.py:125 msgid "Invalid data or incorrect encoding" msgstr "" #: validators.py:169 msgid "Please select at least a value" msgstr "" PKK9iiturbogears/i18n/data/uk.py# Formatting configuration for locale uk languages={'gu': u'\u0413\u0443\u044f\u0440\u0430\u0442\u0456', 'gd': u'\u0413\u0430\u0435\u043b\u044c\u0441\u044c\u043a\u0430', 'ga': u'\u0406\u0440\u043b\u0430\u043d\u0434\u0441\u044c\u043a\u0430', 'gn': u'\u0413\u0443\u0430\u0440\u0430\u043d\u0456', 'gl': u'\u0413\u0430\u043b\u0456\u0441\u0456\u0439\u0441\u044c\u043a\u0430', 'la': u'\u041b\u0430\u0442\u0438\u043d\u0441\u044c\u043a\u0430', 'ln': u'\u041b\u0456\u043d\u0433\u0430\u043b\u0430', 'lo': u'\u041b\u0430\u043e\u0441\u044c\u043a\u0430', 'tt': u'\u0422\u0430\u0442\u0430\u0440\u0441\u044c\u043a\u0430', 'tr': u'\u0422\u0443\u0440\u0435\u0446\u044c\u043a\u0430', 'ts': u'\u0422\u0441\u043e\u043d\u0433\u043e', 'lv': u'\u041b\u0430\u0442\u0432\u0456\u0439\u0441\u044c\u043a\u0430', 'to': u'\u0422\u043e\u043d\u0433\u0430', 'lt': u'\u041b\u0438\u0442\u043e\u0432\u0441\u044c\u043a\u0430', 'tk': u'\u0422\u0443\u0440\u043a\u043c\u0435\u043d\u0441\u044c\u043a\u0430', 'th': u'\u0422\u0430\u0439\u0441\u044c\u043a\u0430', 'ti': u'\u0422\u0438\u0433\u0440\u0456\u043d\u0456', 'tg': u'\u0422\u0430\u0434\u0436\u0438\u0446\u044c\u043a\u0430', 'te': u'\u0422\u0435\u043b\u0443\u0433\u0443', 'ta': u'\u0422\u0430\u043c\u0456\u043b\u044c\u0441\u044c\u043a\u0430', 'yi': u'\u0406\u0434\u0438\u0448', 'yo': u'\u0419\u043e\u0440\u0443\u0431\u0430', 'de': u'\u041d\u0456\u043c\u0435\u0446\u044c\u043a\u0430', 'da': u'\u0414\u0430\u0442\u0441\u044c\u043a\u0430', 'dz': u'\u0411\u0445\u0443\u0442\u0430\u043d\u0456', 'st': u'\u0421\u0435\u0441\u043e\u0442\u0445\u043e', 'qu': u'\u041a\u0435\u0447\u0443\u0430', 'el': u'\u0413\u0440\u0435\u0446\u044c\u043a\u0430', 'eo': u'\u0415\u0441\u043f\u0435\u0440\u0430\u043d\u0442\u043e', 'en': u'\u0410\u043d\u0433\u043b\u0456\u0439\u0441\u044c\u043a\u0430', 'zh': u'\u041a\u0438\u0442\u0430\u0439\u0441\u044c\u043a\u0430', 'za': u'\u0417\u0443\u0430\u043d\u0433', 'uk': u'\u0423\u043a\u0440\u0430\u0457\u043d\u0441\u044c\u043a\u0430', 'eu': u'\u0411\u0430\u0441\u043a\u0432\u0430', 'et': u'\u0415\u0441\u0442\u043e\u043d\u0441\u044c\u043a\u0430', 'es': u'\u0406\u0441\u043f\u0430\u043d\u0441\u044c\u043a\u0430', 'ru': u'\u0420\u043e\u0441\u0456\u0439\u0441\u044c\u043a\u0430', 'rw': u'\u041a\u0456\u043d\u0430\u0440\u0443\u0430\u043d\u0434\u0430', 'rm': u'\u0420\u0435\u0442\u043e\u0440\u043e\u043c\u0430\u043d\u0441\u044c\u043a\u0430', 'rn': u'\u041a\u0456\u0440\u0443\u043d\u0434\u0456\u0439\u0441\u044c\u043a\u0430', 'ro': u'\u0420\u0443\u043c\u0443\u043d\u0441\u044c\u043a\u0430', 'bn': u'\u0411\u0435\u043d\u0433\u0430\u043b\u044c\u0441\u044c\u043a\u0430', 'be': u'\u0411\u0456\u043b\u043e\u0440\u0443\u0441\u044c\u043a\u0430', 'bg': u'\u0411\u043e\u043b\u0433\u0430\u0440\u0441\u044c\u043a\u0430', 'ba': u'\u0411\u0430\u0448\u043a\u0438\u0440\u0441\u044c\u043a\u0430', 'wo': u'\u0412\u043e\u043b\u043e\u0444', 'jv': u'\u042f\u0432\u0430\u043d\u0441\u044c\u043a\u0430', 'bo': u'\u0422\u0456\u0431\u0435\u0442\u0441\u044c\u043a\u0430', 'bh': u'\u0411\u0456\u0445\u0430\u0440\u0456\u0439\u0441\u044c\u043a\u0430', 'bi': u'\u0411\u0456\u0441\u043b\u0430\u043c\u0456\u0439\u0441\u044c\u043a\u0430', 'br': u'\u0411\u0440\u0435\u0442\u043e\u043d\u0441\u044c\u043a\u0430', 'ja': u'\u042f\u043f\u043e\u043d\u0441\u044c\u043a\u0430', 'om': u'\u041e\u0440\u043e\u043c\u043e', 'oc': u'\u041e\u043a\u0438\u0442\u0430\u043d', 'tw': u'\u0422\u0432\u0456', 'or': u'\u041e\u0440\u0456\u044f', 'xh': u'\u041a\u0445\u043e\u0441\u0430', 'co': u'\u041a\u043e\u0440\u0441\u0438\u043a\u0430\u043d\u0441\u044c\u043a\u0430', 'ca': u'\u041a\u0430\u0442\u0430\u043b\u043e\u043d\u0441\u044c\u043a\u0430', 'cy': u'\u0412\u0430\u043b\u043b\u0456\u0439\u0441\u044c\u043a\u0430', 'cs': u'\u0427\u0435\u0441\u044c\u043a\u0430', 'ps': u'\u041f\u0430\u0448\u0442\u043e', 'pt': u'\u041f\u043e\u0440\u0442\u0443\u0433\u0430\u043b\u044c\u0441\u044c\u043a\u0430', 'tl': u'\u0422\u0430\u0433\u0430\u043b\u044c\u0441\u044c\u043a\u0430', 'pa': u'\u041f\u0430\u043d\u0434\u0436\u0430\u0431\u0456', 'vi': u"\u0412'\u0454\u0442\u043d\u0430\u043c\u0441\u044c\u043a\u0430", 'pl': u'\u041f\u043e\u043b\u044c\u0441\u044c\u043a\u0430', 'hy': u'\u0412\u0456\u0440\u043c\u0435\u043d\u0441\u044c\u043a\u0430', 'hr': u'\u0425\u043e\u0440\u0432\u0430\u0442\u0441\u044c\u043a\u0430', 'hu': u'\u0423\u0433\u043e\u0440\u0441\u044c\u043a\u0430', 'hi': u'\u0425\u0456\u043d\u0434\u0456', 'ha': u'\u0425\u0430\u0443\u0441\u0430', 'he': u'\u0406\u0432\u0440\u0438\u0442', 'mg': u'\u041c\u0430\u043b\u0430\u0433\u0430\u0441\u0456\u0439\u0441\u044c\u043a\u0430', 'uz': u'\u0423\u0437\u0431\u0435\u0446\u044c\u043a\u0430', 'ml': u'\u041c\u0430\u043b\u0430\u0439\u044f\u043b\u0430\u043c', 'mo': u'\u041c\u043e\u043b\u0434\u0430\u0432\u0441\u044c\u043a\u0430', 'mn': u'\u041c\u043e\u043d\u0433\u043e\u043b\u044c\u0441\u044c\u043a\u0430', 'mi': u'\u041c\u0430\u043e\u0440\u0456', 'ik': u'\u0406\u043d\u0443\u043f\u0456\u0430\u043a', 'mk': u'\u041c\u0430\u043a\u0435\u0434\u043e\u043d\u0441\u044c\u043a\u0430', 'ur': u'\u0423\u0440\u0434\u0443', 'mt': u'\u041c\u0430\u043b\u044c\u0442\u0456\u0439\u0441\u044c\u043a\u0430', 'ms': u'\u041c\u0430\u043b\u0430\u0439\u0441\u044c\u043a\u0430', 'mr': u'\u041c\u0430\u0440\u0430\u0442\u0445\u0456', 'ug': u'\u0423\u0439\u0433\u0443\u0440\u0441\u044c\u043a\u0430', 'my': u'\u0411\u0443\u0440\u043c\u0456\u0441\u0456\u0439\u0441\u044c\u043a\u0430', 'aa': u'\u0410\u0444\u0430\u0440\u0441\u044c\u043a\u0430', 'ab': u'\u0410\u0431\u0445\u0430\u0437\u044c\u043a\u0430', 'ss': u'\u0421\u0456\u0441\u0432\u0430\u0442\u0456', 'af': u'\u0410\u0444\u0440\u0438\u043a\u0430\u043d\u0441', 'tn': u'\u0421\u0435\u0442\u0441\u0432\u0430\u043d\u0441\u044c\u043a\u0430', 'sw': u'\u0421\u0443\u0430\u0445\u0456\u043b\u0456', 'is': u'\u0406\u0441\u043b\u0430\u043d\u0434\u0441\u044c\u043a\u0430', 'am': u'\u0410\u043c\u0445\u0430\u0440\u0456\u043a', 'it': u'\u0406\u0442\u0430\u043b\u0456\u0439\u0441\u044c\u043a\u0430', 'sv': u'\u0428\u0432\u0435\u0434\u0441\u044c\u043a\u0430', 'ia': u'\u0406\u043d\u0442\u0435\u0440\u043b\u0456\u043d\u0433\u0432\u0430', 'as': u'\u0410\u0441\u0441\u0430\u043c\u0441\u044c\u043a\u0430', 'ar': u'\u0410\u0440\u0430\u0431\u0441\u044c\u043a\u0430', 'su': u'\u0421\u0443\u0434\u0430\u043d\u0441\u044c\u043a\u0430', 'zu': u'\u0417\u0443\u043b\u0443\u0441\u044c\u043a\u0430', 'ay': u'\u0410\u0443\u043c\u0430\u0440\u0430', 'az': u'\u0410\u0437\u0435\u0440\u0431\u0430\u0439\u0434\u0436\u0430\u043d\u0441\u044c\u043a\u0430', 'ie': u'\u0406\u043d\u0442\u0435\u0440\u043b\u0456\u043d\u0433\u0432\u0430', 'id': u'\u0406\u043d\u0434\u043e\u043d\u0435\u0437\u0456\u0439\u0441\u044c\u043a\u0430', 'sk': u'\u0421\u043b\u043e\u0432\u0430\u0446\u044c\u043a\u0430', 'nl': u'\u0413\u043e\u043b\u043b\u0430\u043d\u0434\u0441\u044c\u043a\u0430', 'no': u'\u041d\u043e\u0440\u0432\u0435\u0437\u044c\u043a\u0430', 'na': u'\u041d\u0430\u0443\u0440\u0443', 'ne': u'\u041d\u0435\u043f\u0430\u043b\u044c\u0441\u044c\u043a\u0430', 'vo': u'\u0412\u043e\u043b\u0430\u043f\u0430\u043a', 'fr': u'\u0424\u0440\u0430\u043d\u0446\u0443\u0437\u044c\u043a\u0430', 'sm': u'\u0421\u0430\u043c\u043e\u0430\u043d\u0441\u044c\u043a\u0430', 'fy': u'\u0424\u0440\u0438\u0437\u044c\u043a\u0430', 'fa': u'\u041f\u0435\u0440\u0441\u044c\u043a\u0430', 'fi': u'\u0424\u0456\u043d\u0441\u044c\u043a\u0430', 'fj': u'\u0424\u0456\u0434\u0436\u0456', 'sa': u'\u0421\u0430\u043d\u0441\u043a\u0440\u0438\u0442', 'fo': u'\u0424\u0430\u0440\u0435\u0440\u0441\u044c\u043a\u0430', 'ka': u'\u0413\u0440\u0443\u0437\u0438\u043d\u0441\u044c\u043a\u0430', 'kk': u'\u041a\u0430\u0437\u0430\u0445\u0441\u044c\u043a\u0430', 'sr': u'\u0421\u0435\u0440\u0431\u0441\u044c\u043a\u0430', 'sq': u'\u0410\u043b\u0431\u0430\u043d\u0441\u044c\u043a\u0430', 'ko': u'\u041a\u043e\u0440\u0435\u0439\u0441\u044c\u043a\u0430', 'kn': u'\u0414\u0440\u0430\u0432\u0456\u0434\u0456\u0439\u0441\u044c\u043a\u0430', 'km': u'\u041a\u0430\u043c\u043f\u0443\u0447\u0456\u0439\u0441\u044c\u043a\u0430', 'kl': u'\u0413\u0440\u0438\u043d\u043b\u0430\u043d\u0434\u0456\u043a', 'ks': u'\u041a\u0430\u0448\u043c\u0456\u0440\u0441\u044c\u043a\u0430', 'si': u'\u0421\u0438\u043d\u0433\u0430\u043b\u044c\u0441\u044c\u043a\u0430', 'sh': u'\u0421\u0435\u0440\u0431\u0441\u044c\u043a\u043e-\u0445\u043e\u0440\u0432\u0430\u0442\u0441\u044c\u043a\u0430', 'so': u'\u0421\u043e\u043c\u0430\u043b\u0456', 'sn': u'\u0428\u043e\u043d\u0430', 'ku': u'\u041a\u0443\u0440\u0434\u0441\u044c\u043a\u0430', 'sl': u'\u0421\u043b\u043e\u0432\u0435\u043d\u0441\u044c\u043a\u0430', 'ky': u'\u041a\u0438\u0440\u0433\u0438\u0437\u044c\u043a\u0430', 'sg': u'\u0421\u0430\u043d\u0433\u0440\u043e', 'sd': u'\u0421\u0456\u043d\u0434\u0442\u0445\u0456'} countries={'BD': u'\u0411\u0430\u043d\u0433\u043b\u0430\u0434\u0435\u0448', 'BE': u'\u0411\u0435\u043b\u044c\u0433\u0456\u044f', 'BF': u'\u0411\u0443\u0440\u043a\u0456\u043d\u0430-\u0424\u0430\u0441\u043e', 'BG': u'\u0411\u043e\u043b\u0433\u0430\u0440\u0456\u044f', 'BA': u'\u0411\u043e\u0441\u043d\u0456\u044f \u0456 \u0413\u0435\u0440\u0446\u0435\u0433\u043e\u0432\u0438\u043d\u0430', 'BB': u'\u0411\u0430\u0440\u0431\u0430\u0434\u043e\u0441', 'WF': u'\u0412\u0430\u043b\u043b\u0456\u0441 \u0456 \u0424\u0443\u0442\u0443\u043d\u0430, \u043e\u0441\u0442\u0440\u043e\u0432\u0438', 'BM': u'\u0411\u0435\u0440\u043c\u0443\u0434\u0438', 'BN': u'\u0411\u0440\u0443\u043d\u0435\u0439', 'BO': u'\u0411\u043e\u043b\u0456\u0432\u0456\u044f', 'BH': u'\u0411\u0430\u0445\u0440\u0435\u0439\u043d', 'BI': u'\u0411\u0443\u0440\u0443\u043d\u0434\u0456', 'BJ': u'\u0411\u0435\u043d\u0456\u043d', 'BT': u'\u0411\u0443\u0442\u0430\u043d', 'JM': u'\u042f\u043c\u0430\u0439\u043a\u0430', 'BV': u'\u0411\u0443\u0432\u0435, \u043e\u0441\u0442\u0440\u0456\u0432', 'BW': u'\u0411\u043e\u0442\u0441\u0432\u0430\u043d\u0430', 'WS': u'\u0421\u0430\u043c\u043e\u0430', 'BR': u'\u0411\u0440\u0430\u0437\u0438\u043b\u0456\u044f', 'BS': u'\u0411\u0430\u0433\u0430\u043c\u0438', 'BY': u'\u0411\u0456\u043b\u043e\u0440\u0443\u0441\u044c', 'BZ': u'\u0411\u0435\u043b\u0456\u0437', 'RU': u'\u0420\u043e\u0441\u0456\u044f', 'RW': u'\u0420\u0443\u0430\u043d\u0434\u0430', 'TL': u'\u0421\u0445\u0456\u0434\u043d\u0438\u0439 \u0422\u0438\u043c\u043e\u0440', 'RE': u'\u0420\u0435\u044e\u043d\u044c\u0439\u043e\u043d', 'TM': u'\u0422\u0443\u0440\u043a\u043c\u0435\u043d\u0438\u0441\u0442\u0430\u043d', 'TJ': u'\u0422\u0430\u0434\u0436\u0438\u043a\u0438\u0441\u0442\u0430\u043d', 'RO': u'\u0420\u0443\u043c\u0443\u043d\u0456\u044f', 'TK': u'\u0422\u043e\u043a\u0435\u043b\u0430\u0443', 'GW': u'\u0413\u0432\u0456\u043d\u0435\u044f-\u0411\u0456\u0441\u0441\u0430\u0443', 'GU': u'\u0413\u0443\u0430\u043c', 'GT': u'\u0413\u0432\u0430\u0442\u0435\u043c\u0430\u043b\u0430', 'GS': u'\u041f\u0456\u0432\u0434\u0435\u043d\u043d\u0430 \u0414\u0436\u043e\u0440\u0436\u0456\u044f \u0442\u0430 \u041e\u0441\u0442\u0440\u043e\u0432\u0438 \u041f\u0456\u0432\u0434\u0435\u043d\u043d\u0438\u0439 \u0421\u0430\u043d\u0434\u0432\u0456\u0447', 'GR': u'\u0413\u0440\u0435\u0446\u0456\u044f', 'GQ': u'\u0415\u043a\u0432\u0430\u0442\u043e\u0440\u0456\u0430\u043b\u044c\u043d\u0430 \u0413\u0432\u0456\u043d\u0435\u044f', 'GP': u'\u0413\u0432\u0430\u0434\u0435\u043b\u0443\u043f\u0430', 'JP': u'\u042f\u043f\u043e\u043d\u0456\u044f', 'GY': u'\u0413\u0443\u0430\u043d\u0430', 'GF': u'\u0424\u0440\u0430\u043d\u0446\u0443\u0437\u044c\u043a\u0430 \u0413\u0432\u0456\u0430\u043d\u0430', 'GE': u'\u0413\u0440\u0443\u0437\u0456\u044f', 'GD': u'\u0413\u0440\u0435\u043d\u0430\u0434\u0430', 'GB': u'\u0412\u0435\u043b\u0438\u043a\u043e\u0431\u0440\u0438\u0442\u0430\u043d\u0456\u044f', 'GA': u'\u0413\u0430\u0431\u043e\u043d', 'SV': u'\u0421\u0430\u043b\u044c\u0432\u0430\u0434\u043e\u0440', 'GN': u'\u0413\u0432\u0456\u043d\u0435\u044f', 'GM': u'\u0413\u0430\u043c\u0431\u0456\u044f', 'GL': u'\u0413\u0440\u0435\u043d\u043b\u0430\u043d\u0434\u0456\u044f', 'GI': u'\u0413\u0456\u0431\u0440\u0430\u043b\u0442\u0430\u0440', 'GH': u'\u0413\u0430\u043d\u0430', 'OM': u'\u041e\u043c\u0430\u043d', 'TN': u'\u0422\u0443\u043d\u0456\u0441', 'JO': u'\u0419\u043e\u0440\u0434\u0430\u043d\u0456\u044f', 'HR': u'\u0425\u043e\u0440\u0432\u0430\u0442\u0456\u044f', 'HT': u'\u0413\u0430\u0457\u0442\u0456', 'HU': u'\u0423\u0433\u043e\u0440\u0449\u0438\u043d\u0430', 'HK': u'\u0413\u043e\u043d\u043a\u043e\u043d\u0433', 'HN': u'\u0413\u043e\u043d\u0434\u0443\u0440\u0430\u0441', 'HM': u'\u041e\u0441\u0442\u0440\u043e\u0432\u0438 \u0425\u0435\u0440\u0434\u0430 \u0456 \u041c\u0430\u043a\u0434\u043e\u043d\u0430\u043b\u044c\u0434\u0441\u0430', 'VE': u'\u0412\u0435\u043d\u0435\u0441\u0443\u0435\u043b\u0430', 'PR': u'\u041f\u0443\u0435\u0440\u0442\u043e-\u0420\u0456\u043a\u043e', 'PS': u'\u041f\u0430\u043b\u0435\u0441\u0442\u0438\u043d\u0430', 'PW': u'\u041f\u0430\u043b\u0430\u0443', 'PT': u'\u041f\u043e\u0440\u0442\u0443\u0433\u0430\u043b\u0456\u044f', 'SJ': u'\u0421\u0432\u0430\u043b\u0431\u0430\u0440\u0434 \u0456 \u042f\u043d \u041c\u0430\u0439\u0454\u043d, \u043e\u0441\u0442\u0440\u043e\u0432\u0438', 'PY': u'\u041f\u0430\u0440\u0430\u0433\u0432\u0430\u0439', 'IQ': u'\u0406\u0440\u0430\u043a', 'PA': u'\u041f\u0430\u043d\u0430\u043c\u0430', 'PF': u'\u0424\u0440\u0430\u043d\u0446\u0443\u0437\u044c\u043a\u0430 \u041f\u043e\u043b\u0456\u043d\u0435\u0437\u0456\u044f', 'PG': u'\u041f\u0430\u043f\u0443\u0430 \u041d\u043e\u0432\u0430 \u0413\u0432\u0456\u043d\u0435\u044f', 'PE': u'\u041f\u0435\u0440\u0443', 'PK': u'\u041f\u0430\u043a\u0438\u0441\u0442\u0430\u043d', 'PH': u'\u0424\u0456\u043b\u0456\u043f\u043f\u0456\u043d\u0438', 'PN': u'\u041f\u0456\u0442\u043a\u0430\u0457\u0440\u043d', 'PL': u'\u041f\u043e\u043b\u044c\u0449\u0430', 'PM': u"\u0421\u0432. \u041f'\u0454\u0440 \u0456 \u041c\u0456\u043a\u0443\u043b\u043e\u043d", 'ZM': u'\u0417\u0430\u043c\u0431\u0456\u044f', 'EH': u'\u0417\u0430\u0445\u0456\u0434\u043d\u0430 \u0421\u0430\u0445\u0430\u0440\u0430', 'EE': u'\u0415\u0441\u0442\u043e\u043d\u0456\u044f', 'EG': u'\u0404\u0433\u0438\u043f\u0435\u0442', 'ZA': u'\u041f\u0410\u0420', 'EC': u'\u0415\u043a\u0432\u0430\u0434\u043e\u0440', 'IT': u'\u0406\u0442\u0430\u043b\u0456\u044f', 'VN': u"\u0412'\u0454\u0442\u043d\u0430\u043c", 'SB': u'\u0421\u043e\u043b\u043e\u043c\u043e\u043d\u043e\u0432\u0456 \u041e\u0441\u0442\u0440\u043e\u0432\u0438', 'ET': u'\u0415\u0444\u0456\u043e\u043f\u0456\u044f', 'SO': u'\u0421\u043e\u043c\u0430\u043b\u0456', 'ZW': u'\u0417\u0456\u043c\u0431\u0430\u0431\u0432\u0435', 'SA': u'\u0421\u0430\u0443\u0434\u0456\u0432\u0441\u044c\u043a\u0430 \u0410\u0440\u0430\u0432\u0456\u044f', 'ES': u'\u0406\u0441\u043f\u0430\u043d\u0456\u044f', 'ER': u'\u0415\u0440\u0456\u0442\u0440\u0435\u044f', 'MD': u'\u041c\u043e\u043b\u0434\u043e\u0432\u0430', 'MG': u'\u041c\u0430\u0434\u0430\u0433\u0430\u0441\u043a\u0430\u0440', 'MA': u'\u041c\u0430\u0440\u043e\u043a\u043a\u043e', 'MC': u'\u041c\u043e\u043d\u0430\u043a\u043e', 'UZ': u'\u0423\u0437\u0431\u0435\u043a\u0438\u0441\u0442\u0430\u043d', 'MM': u"\u041c'\u044f\u043d\u043c\u0430\u0440", 'ML': u'\u041c\u0430\u043b\u0456', 'MO': u'\u041c\u0430\u043a\u0430\u043e', 'MN': u'\u041c\u043e\u043d\u0433\u043e\u043b\u0456\u044f', 'MH': u'\u041c\u0430\u0440\u0448\u0430\u043b\u043e\u0432\u0456 \u041e\u0441\u0442\u0440\u043e\u0432\u0438', 'MK': u'\u041c\u0430\u043a\u0435\u0434\u043e\u043d\u0456\u044f', 'MU': u'\u041c\u0430\u0432\u0440\u0438\u043a\u0456\u0439', 'MT': u'\u041c\u0430\u043b\u044c\u0442\u0430', 'MW': u'\u041c\u0430\u043b\u0430\u0432\u0438', 'MV': u'\u041c\u0430\u043b\u044c\u0434\u0456\u0432\u0438', 'MQ': u'\u041c\u0430\u0440\u0442\u0438\u043d\u0456\u043a\u0430', 'MP': u'\u041f\u0456\u0432\u043d\u0456\u0447\u043d\u0430 \u041c\u0430\u0440\u0456\u0430\u043d\u0430, \u043e\u0441\u0442\u0440\u043e\u0432\u0438', 'MS': u'\u041c\u043e\u043d\u0441\u0435\u0440\u0440\u0430\u0442', 'MR': u'\u041c\u0430\u0432\u0440\u0438\u0442\u0430\u043d\u0456\u044f', 'UG': u'\u0423\u0433\u0430\u043d\u0434\u0430', 'MY': u'\u041c\u0430\u043b\u0430\u0439\u0437\u0456\u044f', 'MX': u'\u041c\u0435\u043a\u0441\u0438\u043a\u0430', 'IL': u'\u0406\u0437\u0440\u0430\u0457\u043b\u044c', 'FR': u'\u0424\u0440\u0430\u043d\u0446\u0456\u044f', 'IO': u'\u0411\u0440\u0438\u0442\u0430\u043d\u0441\u044c\u043a\u0456 \u0442\u0435\u0440\u0438\u0442\u043e\u0440\u0456\u0457 \u0406\u043d\u0434\u0456\u0439\u0441\u044c\u043a\u043e\u0433\u043e \u043e\u043a\u0435\u0430\u043d\u0443', 'SH': u'\u0421\u0432. \u0404\u043b\u0435\u043d\u0430', 'FI': u'\u0424\u0456\u043d\u043b\u044f\u043d\u0434\u0456\u044f', 'FJ': u'\u0424\u0456\u0434\u0436\u0456', 'FK': u'\u0424\u043e\u043b\u043a\u043b\u0435\u043d\u0434\u0441\u044c\u043a\u0456 \u041e\u0441\u0442\u0440\u043e\u0432\u0438 (\u041c\u0430\u043b\u044c\u0432\u0456\u043d\u0438)', 'FM': u'\u041c\u0456\u043a\u0440\u043e\u043d\u0435\u0437\u0456\u044f', 'FO': u'\u0424\u0430\u0440\u043e, \u043e\u0441\u0442\u0440\u043e\u0432\u0438', 'NI': u'\u041d\u0456\u043a\u0430\u0440\u0430\u0433\u0443\u0430', 'NL': u'\u041d\u0456\u0434\u0435\u0440\u043b\u0430\u043d\u0434\u0438', 'NO': u'\u041d\u043e\u0440\u0432\u0435\u0433\u0456\u044f', 'NA': u'\u041d\u0430\u043c\u0456\u0431\u0456\u044f', 'VU': u'\u0412\u0430\u043d\u0443\u0430\u0442\u0443', 'NC': u'\u041d\u043e\u0432\u0430 \u041a\u0430\u043b\u0435\u0434\u043e\u043d\u0456\u044f', 'NE': u'\u041d\u0456\u0433\u0435\u0440\u0456\u044f', 'NF': u'\u041d\u043e\u0440\u0444\u043e\u043b\u044c\u043a\u0441\u044c\u043a\u0456 \u041e\u0441\u0442\u0440\u043e\u0432\u0438', 'NG': u'\u041d\u0456\u0433\u0435\u0440\u0456\u044f', 'NZ': u'\u041d\u043e\u0432\u0430 \u0417\u0435\u043b\u0430\u043d\u0434\u0456\u044f', 'NP': u'\u041d\u0435\u043f\u0430\u043b', 'NR': u'\u041d\u0430\u0443\u0440\u0443', 'NU': u'\u041d\u0456\u044f', 'CK': u'\u041a\u0443\u043a\u0430, \u043e\u0441\u0442\u0440\u043e\u0432\u0438', 'CI': u"\u041a\u043e\u0442-\u0434'\u0406\u0432\u0443\u0430\u0440", 'CH': u'\u0428\u0432\u0435\u0439\u0446\u0430\u0440\u0456\u044f', 'CO': u'\u041a\u043e\u043b\u0443\u043c\u0431\u0456\u044f', 'CN': u'\u041a\u0438\u0442\u0430\u0439', 'CM': u'\u041a\u0430\u043c\u0435\u0440\u0443\u043d', 'CL': u'\u0427\u0438\u043b\u0456', 'CC': u'\u041a\u043e\u043a\u043e\u0441\u043e\u0432\u0456 \u043e\u0441\u0442\u0440\u043e\u0432\u0438', 'CA': u'\u041a\u0430\u043d\u0430\u0434\u0430', 'CG': u'\u041a\u043e\u043d\u0433\u043e', 'CF': u'\u0426\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e-\u0410\u0444\u0440\u0438\u043a\u0430\u043d\u0441\u044c\u043a\u0430 \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0456\u043a\u0430', 'CD': u'\u041a\u043e\u043d\u0433\u043e', 'CZ': u'\u0427\u0435\u0445\u0456\u044f', 'CY': u'\u041a\u0456\u043f\u0440', 'CX': u'\u0420\u0456\u0437\u0434\u0432\u044f\u043d\u0456 \u041e\u0441\u0442\u0440\u043e\u0432\u0438', 'CR': u'\u041a\u043e\u0441\u0442\u0430-\u0420\u0438\u043a\u0430', 'CV': u'\u0417\u0435\u043b\u0435\u043d\u043e\u0433\u043e \u041c\u0438\u0441\u0443, \u043e\u0441\u0442\u0440\u043e\u0432\u0438', 'CU': u'\u041a\u0443\u0431\u0430', 'SZ': u'\u0421\u0432\u0430\u0437\u0456\u043b\u0435\u043d\u0434', 'SY': u'\u0421\u0438\u0440\u0456\u0439\u0441\u044c\u043a\u0430 \u0410\u0440\u0430\u0431\u0441\u044c\u043a\u0430 \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0456\u043a\u0430', 'KG': u'\u041a\u0438\u0440\u0433\u0438\u0437\u0441\u0442\u0430\u043d', 'KE': u'\u041a\u0435\u043d\u0456\u044f', 'SR': u'\u0421\u0443\u0440\u0456\u043d\u0430\u043c', 'KI': u'\u041a\u0456\u0440\u0438\u0431\u0430\u0442\u0456', 'KH': u'\u041a\u0430\u043c\u0431\u043e\u0434\u0436\u0430', 'KN': u'\u0421\u0432. \u041a\u0456\u0442\u0442\u0441 \u0456 \u041d\u0435\u0432\u0456\u0441', 'KM': u'\u041a\u043e\u043c\u043e\u0440\u043e\u0441', 'ST': u'\u0421\u0430\u043e \u0422\u043e\u043c \u0456 \u041f\u0440\u0456\u043d\u0441\u0456\u043f', 'SK': u'\u0421\u043b\u043e\u0432\u0430\u043a\u0456\u044f', 'KR': u'\u041a\u043e\u0440\u0435\u044f, \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0456\u043a\u0430', 'SI': u'\u0421\u043b\u043e\u0432\u0435\u043d\u0456\u044f', 'KP': u'\u041a\u043e\u0440\u0435\u044f, \u0414\u0435\u043c\u043e\u043a\u0440\u0430\u0442\u0438\u0447\u043d\u0430 \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0456\u043a\u0430', 'KW': u'\u041a\u0443\u0432\u0435\u0439\u0442', 'SN': u'\u0421\u0435\u043d\u0435\u0433\u0430\u043b', 'SM': u'\u0421\u0430\u043d-\u041c\u0430\u0440\u0456\u043d\u043e', 'SL': u'\u0421\u044c\u0454\u0440\u0440\u0430-\u041b\u0435\u043e\u043d\u0435', 'SC': u'\u0421\u0435\u0439\u0448\u0435\u043b\u0438', 'KZ': u'\u041a\u0430\u0437\u0430\u0445\u0441\u0442\u0430\u043d', 'KY': u'\u041a\u0430\u0439\u043c\u0430\u043d\u043e\u0432\u0456 \u043e\u0441\u0442\u0440\u043e\u0432\u0438', 'SG': u'\u0421\u0456\u043d\u0433\u0430\u043f\u0443\u0440', 'SE': u'\u0428\u0432\u0435\u0446\u0456\u044f', 'SD': u'\u0421\u0443\u0434\u0430\u043d', 'DO': u'\u0414\u043e\u043c\u0456\u043d\u0456\u043a\u0430\u043d\u0441\u044c\u043a\u0430 \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0456\u043a\u0430', 'DM': u'\u0414\u043e\u043c\u0456\u043d\u0456\u043a', 'DJ': u'\u0414\u0436\u0438\u0431\u0443\u0442\u0456', 'DK': u'\u0414\u0430\u043d\u0456\u044f', 'VG': u'\u0412\u0456\u0440\u0433\u0456\u043d\u0441\u044c\u043a\u0456 \u043e\u0441\u0442\u0440\u043e\u0432\u0438 (\u0411\u0440\u0438\u0442\u0430\u043d\u0456\u044f)', 'DE': u'\u041d\u0456\u043c\u0435\u0447\u0447\u0438\u043d\u0430', 'YE': u'\u0419\u0454\u043c\u0435\u043d', 'DZ': u'\u0410\u043b\u0436\u0438\u0440', 'US': u'\u0421\u0428\u0410', 'UY': u'\u0423\u0440\u0443\u0433\u0432\u0430\u0439', 'YU': u'\u042e\u0433\u043e\u0441\u043b\u0430\u0432\u0456\u044f', 'YT': u'\u041c\u0430\u0439\u043e\u0442', 'UM': u'\u0412\u0456\u0434\u0434\u0430\u043b\u0435\u043d\u0456 \u041e\u0441\u0442\u0440\u043e\u0432\u0438 \u0421\u0428\u0410', 'LB': u'\u041b\u0456\u0432\u0430\u043d', 'LC': u'\u0421\u0430\u043d\u0442\u0430 \u041b\u044e\u0447\u0456\u044f', 'LA': u'\u041b\u0430\u043e\u0441\u044c\u043a\u0430 \u041d\u0430\u0440\u043e\u0434\u043d\u043e-\u0414\u0435\u043c\u043e\u043a\u0440\u0430\u0442\u0438\u0447\u043d\u0430 \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0456\u043a\u0430', 'TV': u'\u0422\u0443\u0432\u0430\u043b\u0443', 'TW': u'\u0422\u0430\u0439\u0432\u0430\u043d\u044c', 'TT': u'\u0422\u0440\u0438\u043d\u0456\u0434\u0430\u0434 \u0456 \u0422\u0430\u0431\u0430\u0433\u043e', 'TR': u'\u0422\u0443\u0440\u0435\u0447\u0447\u0438\u043d\u0430', 'LK': u'\u0428\u0440\u0456-\u041b\u0430\u043d\u043a\u0430', 'LI': u'\u041b\u0456\u0445\u0442\u0435\u043d\u0448\u0442\u0435\u0439\u043d', 'LV': u'\u041b\u0430\u0442\u0432\u0456\u044f', 'TO': u'\u0422\u043e\u043d\u0433\u0430', 'LT': u'\u041b\u0438\u0442\u0432\u0430', 'LU': u'\u041b\u044e\u043a\u0441\u0435\u043c\u0431\u0443\u0440\u0433', 'LR': u'\u041b\u0456\u0431\u0435\u0440\u0456\u044f', 'LS': u'\u041b\u0435\u0441\u043e\u0442\u043e', 'TH': u'\u0422\u0430\u0439\u043b\u0430\u043d\u0434', 'TF': u'\u0424\u0440\u0430\u043d\u0446\u0443\u0437\u044c\u043a\u0456 \u041f\u0456\u0432\u0434\u0435\u043d\u043d\u0456 \u0422\u0435\u0440\u0438\u0442\u043e\u0440\u0456\u0457', 'TG': u'\u0422\u043e\u0433\u043e', 'TD': u'\u0427\u0430\u0434', 'TC': u'\u0422\u0443\u0440\u043e\u043a \u0442\u0430 \u041a\u0430\u043a\u0456\u043e\u0441, \u043e\u0441\u0442\u0440\u043e\u0432\u0438', 'LY': u'\u041b\u0456\u0432\u0456\u0439\u0441\u044c\u043a\u0430 \u0410\u0440\u0430\u0431\u0441\u044c\u043a\u0430 \u0414\u0436\u0430\u043c\u0430\u0445\u0456\u0440\u0456\u044f', 'VA': u'\u0412\u0430\u0442\u0438\u043a\u0430\u043d', 'VC': u'\u0421\u0432. \u0412\u0456\u043d\u0441\u0435\u043d\u0442 \u0456 \u0413\u0440\u0435\u043d\u0430\u0434\u0438\u043d\u0438', 'AE': u'\u0421\u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0456 \u0410\u0440\u0430\u0431\u0441\u044c\u043a\u0456 \u0415\u043c\u0456\u0440\u0430\u0442\u0438', 'AD': u'\u0410\u043d\u0434\u043e\u0440\u0440\u0430', 'AG': u'\u0410\u043d\u0442\u0438\u0433\u0443\u0430 \u0456 \u0411\u0430\u0440\u0431\u0443\u0434\u0430', 'AF': u'\u0410\u0444\u0433\u0430\u043d\u0456\u0441\u0442\u0430\u043d', 'AI': u'\u0410\u043d\u0433\u0456\u043b\u044c\u044f', 'VI': u'\u0412\u0456\u0440\u0433\u0456\u043d\u0441\u044c\u043a\u0456 \u043e\u0441\u0442\u0440\u043e\u0432\u0438 (\u0421\u0428\u0410)', 'IS': u'\u0406\u0441\u043b\u0430\u043d\u0434\u0456\u044f', 'IR': u'\u0406\u0440\u0430\u043d', 'AM': u'\u0412\u0456\u0440\u043c\u0435\u043d\u0456\u044f', 'AL': u'\u0410\u043b\u0431\u0430\u043d\u0456\u044f', 'AO': u'\u0410\u043d\u0433\u043e\u043b\u0430', 'AN': u'\u041d\u0456\u0434\u0435\u0440\u043b\u0430\u043d\u0434\u0441\u044c\u043a\u0456 \u0410\u043d\u0442\u0456\u043b\u0438', 'AQ': u'\u0410\u043d\u0442\u0430\u0440\u043a\u0442\u0438\u043a\u0430', 'AS': u'\u0410\u043c\u0435\u0440\u0438\u043a\u0430\u043d\u0441\u044c\u043a\u0456 \u0421\u0430\u043c\u043e\u0430', 'AR': u'\u0410\u0440\u0433\u0435\u043d\u0442\u0438\u043d\u0430', 'AU': u'\u0410\u0432\u0441\u0442\u0440\u0430\u043b\u0456\u044f', 'AT': u'\u0410\u0432\u0441\u0442\u0440\u0456\u044f', 'AW': u'\u0410\u0440\u0443\u0431\u0430', 'IN': u'\u0406\u043d\u0434\u0456\u044f', 'TZ': u"\u0422\u0430\u043d\u0437\u0430\u043d\u0456\u044f, \u041e\u0431'\u0454\u0434\u043d\u0430\u043d\u0430 \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0456\u043a\u0430", 'AZ': u'\u0410\u0437\u0435\u0440\u0431\u0430\u0439\u0434\u0436\u0430\u043d', 'IE': u'\u0406\u0440\u043b\u0430\u043d\u0434\u0456\u044f', 'ID': u'\u0406\u043d\u0434\u043e\u043d\u0435\u0437\u0456\u044f', 'UA': u'\u0423\u043a\u0440\u0430\u0457\u043d\u0430', 'QA': u'\u041a\u0430\u0442\u0430\u0440', 'MZ': u'\u041c\u043e\u0437\u0430\u043c\u0431\u0456\u043a'} months=[u'\u0441\u0456\u0447\u043d\u044f', u'\u043b\u044e\u0442\u043e\u0433\u043e', u'\u0431\u0435\u0440\u0435\u0437\u043d\u044f', u'\u043a\u0432\u0456\u0442\u043d\u044f', u'\u0442\u0440\u0430\u0432\u043d\u044f', u'\u0447\u0435\u0440\u0432\u043d\u044f', u'\u043b\u0438\u043f\u043d\u044f', u'\u0441\u0435\u0440\u043f\u043d\u044f', u'\u0432\u0435\u0440\u0435\u0441\u043d\u044f', u'\u0436\u043e\u0432\u0442\u043d\u044f', u'\u043b\u0438\u0441\u0442\u043e\u043f\u0430\u0434\u0430', u'\u0433\u0440\u0443\u0434\u043d\u044f'] abbrMonths=[u'\u0441\u0456\u0447', u'\u043b\u044e\u0442', u'\u0431\u0435\u0440', u'\u043a\u0432\u0456\u0442', u'\u0442\u0440\u0430\u0432', u'\u0447\u0435\u0440\u0432', u'\u043b\u0438\u043f', u'\u0441\u0435\u0440\u043f', u'\u0432\u0435\u0440', u'\u0436\u043e\u0432\u0442', u'\u043b\u0438\u0441\u0442', u'\u0433\u0440\u0443\u0434'] days=[u'\u041f\u043e\u043d\u0435\u0434\u0456\u043b\u043e\u043a', u'\u0412\u0456\u0432\u0442\u043e\u0440\u043e\u043a', u'\u0421\u0435\u0440\u0435\u0434\u0430', u'\u0427\u0435\u0442\u0432\u0435\u0440', u"\u041f'\u044f\u0442\u043d\u0438\u0446\u044f", u'\u0421\u0443\u0431\u043e\u0442\u0430', u'\u041d\u0435\u0434\u0456\u043b\u044f'] abbrDays=[u'\u041f\u043d', u'\u0412\u0442', u'\u0421\u0440', u'\u0427\u0442', u'\u041f\u0442', u'\u0421\u0431', u'\u041d\u0434'] dateFormats={'medium': '%d %%(abbrmonthname)s %Y', 'full': u'%%(dayname)s, %d %%(monthname)s %Y \u0440.', 'long': '%d %%(monthname)s %Y', 'short': '%d.%m.%y'} numericSymbols={'group': u'\xa0', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': ',', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'} PKA>J@@turbogears/i18n/data/uk.pyc; ȸHIc @swhdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d0<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddGF@@turbogears/i18n/data/uk_UA.pyc; ȸHIc @swhdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d0<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddǶQ Q turbogears/i18n/data/vi.pyc; ȸHIc @sthdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddT T turbogears/i18n/data/vi_VN.pyc; ȸHIc @sthdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd:H7К66turbogears/i18n/data/zh.pyc; ȸHIc @shdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd6 ~6~6turbogears/i18n/data/zh_CN.pyc; ȸHIc @shdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd C,C,turbogears/i18n/data/zh_HK.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO*4C,C,turbogears/i18n/data/zh_MO.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdOppturbogears/i18n/data/zh_SG.pyc; ȸHIc @shdd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdMj++turbogears/i18n/data/zh_TW.pyc; ȸHIc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO=!turbogears/i18n/data/__init__.pyc; ȸHIc@sdS(N((((s6build\bdist.win32\egg\turbogears\i18n\data\__init__.pys?sPKK9&&1turbogears/i18n/data/de/LC_MESSAGES/TurboGears.moL |"K2~.&Empty values not allowedInvalid data or incorrect encodingInvalid datetime formatInvalid number formatPlease select at least a valueProject-Id-Version: PACKAGE VERSION POT-Creation-Date: 2006-10-03 10:24+CEST PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE Last-Translator: Gregor Horvath Language-Team: LANGUAGE MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: utf-8 Generated-By: pygettext.py 1.5 Leere Werte sind nicht erlaubtUngültige Daten oder falsche ZeichenkodierungUngültiges DatumsformatUngültiges NummernformatBitte mindestens einen Wert auswählenPKK9nh1turbogears/i18n/data/de/LC_MESSAGES/TurboGears.po# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR ORGANIZATION # FIRST AUTHOR , 2006. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: 2006-10-03 10:24+CEST\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Gregor Horvath \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: utf-8\n" "Generated-By: pygettext.py 1.5\n" #: validators.py:29 msgid "Invalid number format" msgstr "Ungültiges Nummernformat" #: validators.py:30 validators.py:80 msgid "Empty values not allowed" msgstr "Leere Werte sind nicht erlaubt" #: validators.py:79 msgid "Invalid datetime format" msgstr "Ungültiges Datumsformat" #: validators.py:125 msgid "Invalid data or incorrect encoding" msgstr "Ungültige Daten oder falsche Zeichenkodierung" #: validators.py:169 msgid "Please select at least a value" msgstr "Bitte mindestens einen Wert auswählen" PKK9h  1turbogears/i18n/data/sl/LC_MESSAGES/TurboGears.moL |"H2{'"Empty values not allowedInvalid data or incorrect encodingInvalid datetime formatInvalid number formatPlease select at least a valueProject-Id-Version: 1.0 POT-Creation-Date: 2006-10-03 10:24+CET PO-Revision-Date: 2006-12-11 20:48+CET Last-Translator: Matej Barič Language-Team: Slovenian MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: utf-8 Generated-By: pygettext.py 1.5 Prazne vrednosti niso dovoljeneNeveljaven podatek ali napačna abecedaNeveljavna oblika datuma/časaNeveljavna oblika številaProsim, izberite vsaj eno vrednostPKK9L1turbogears/i18n/data/sl/LC_MESSAGES/TurboGears.po# SOME DESCRIPTIVE TITLE. # Copyright (C) 2006 Matej Barič # Matej Barič , 2006. # msgid "" msgstr "" "Project-Id-Version: 1.0\n" "POT-Creation-Date: 2006-10-03 10:24+CET\n" "PO-Revision-Date: 2006-12-11 20:48+CET\n" "Last-Translator: Matej Barič \n" "Language-Team: Slovenian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: utf-8\n" "Generated-By: pygettext.py 1.5\n" #: validators.py:29 msgid "Invalid number format" msgstr "Neveljavna oblika števila" #: validators.py:30 validators.py:80 msgid "Empty values not allowed" msgstr "Prazne vrednosti niso dovoljene" #: validators.py:79 msgid "Invalid datetime format" msgstr "Neveljavna oblika datuma/časa" #: validators.py:125 msgid "Invalid data or incorrect encoding" msgstr "Neveljaven podatek ali napačna abeceda" #: validators.py:169 msgid "Please select at least a value" msgstr "Prosim, izberite vsaj eno vrednost" PKK9֫"turbogears/i18n/sogettext/model.pytry: from sqlobject import * from datetime import * from turbogears.database import PackageHub # create a PackageHub hub = PackageHub("turbogears.i18n.sogettext") __connection__ = hub class TG_Domain(SQLObject): name = StringCol(alternateID=True) messages = MultipleJoin("TG_Message") class sqlmeta: table="tg_i18n_domain" defaultOrder="name" class TG_Message(SQLObject): name = UnicodeCol() text = UnicodeCol(default="") domain = ForeignKey("TG_Domain") locale = StringCol(length=15) created= DateTimeCol(default=datetime.now) updated=DateTimeCol(default=None) def _set_text(self, text): self._SO_set_text(text) self.updated = datetime.now() class sqlmeta: table="tg_i18n_message" defaultOrder="name" except ImportError: pass PKA>"#turbogears/i18n/sogettext/model.pyc; HIc@swy]dkTdkTdklZedZeZdefdYZdefdYZWne j onXdS((s*(s PackageHubsturbogears.i18n.sogettexts TG_DomaincBs6tZedeZedZdfdYZRS(Ns alternateIDs TG_MessagessqlmetacBstZdZdZRS(Nstg_i18n_domainsname(s__name__s __module__stables defaultOrder(((s8build\bdist.win32\egg\turbogears\i18n\sogettext\model.pyssqlmetas(s__name__s __module__s StringColsTruesnames MultipleJoinsmessagesssqlmeta(((s8build\bdist.win32\egg\turbogears\i18n\sogettext\model.pys TG_Domain s s TG_MessagecBsxtZeZeddZedZeddZe de i Z e de ZdZdfdYZRS( Nsdefaultss TG_DomainslengthicCs |i|ti|_dS(N(sselfs _SO_set_textstextsdatetimesnowsupdated(sselfstext((s8build\bdist.win32\egg\turbogears\i18n\sogettext\model.pys _set_texts ssqlmetacBstZdZdZRS(Nstg_i18n_messagesname(s__name__s __module__stables defaultOrder(((s8build\bdist.win32\egg\turbogears\i18n\sogettext\model.pyssqlmeta"s(s__name__s __module__s UnicodeColsnamestexts ForeignKeysdomains StringColslocales DateTimeColsdatetimesnowscreatedsNonesupdateds _set_textssqlmeta(((s8build\bdist.win32\egg\turbogears\i18n\sogettext\model.pys TG_Messages   N( s sqlobjectsdatetimesturbogears.databases PackageHubshubs__connection__s SQLObjects TG_Domains TG_Messages ImportError(shubs PackageHubs TG_Messages TG_Domains__connection__((s8build\bdist.win32\egg\turbogears\i18n\sogettext\model.pys?s   PKK97 %turbogears/i18n/sogettext/__init__.py""" SQLObject-based version of gettext """ import turbogears from turbogears.i18n.sogettext.model import TG_Message, TG_Domain from turbogears.i18n.utils import get_locale try: from sqlobject import SQLObjectNotFound except ImportError: pass from gettext import translation import codecs _catalogs = {} def so_gettext(key, locale=None, domain=None): """ SQLObject-based version of gettext. Messages are stored in database instead. """ locale = get_locale(locale) messages = get_so_catalog(domain).get(locale) if not messages: messages = get_so_catalog(domain).get(locale[:2], {}) return unicode(messages.get(key, key)) def get_so_catalog(domain): """ Retrieves all translations for locale and domain from database and stores in thread data. """ if domain is None:domain = turbogears.config.get("i18n.domain", "messages") catalog = _catalogs.get(domain) if not catalog: catalog = {} try: domain = TG_Domain.byName(domain) except SQLObjectNotFound: return catalog results = TG_Message.selectBy(domain=domain) for message in results: locale = message.locale messages = catalog.get(locale, {}) messages[message.name] = message.text catalog[locale] = messages _catalogs[domain.name] = catalog return catalog def create_so_catalog(locales, domain): """ Creates a message catalog based on list of locales from existing GNU message catalog """ TG_Message.dropTable(ifExists=True) TG_Domain.dropTable(ifExists=True) TG_Domain.createTable(ifNotExists=True) TG_Message.createTable(ifNotExists=True) localedir = turbogears.config.get("i18n.locale_dir", "locales") try: domain = TG_Domain.byName(domain) return except SQLObjectNotFound: domain = TG_Domain(name=domain) for locale in locales: translations = translation( domain=domain.name, localedir=localedir, languages=[locale]) catalog = translations._catalog for k, v in catalog.items(): TG_Message(domain=domain, locale=locale, name=k, text=v) def dump_so_catalogs(locales): """Takes all domains and messages and creates message catalogs """ localedir = turbogears.config.get("i18n.locale_dir", "locales") for locale in locales: messages_dir = os.path.join(localedir, locale, "LC_MESSAGES") for domain in TG_Domain.select(): pofile=os.path.join(messages_dir, "%s.po" %domain.name) f = codecs.open(pofile, "w", "UTF-8") f.write(""" # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR ORGANIZATION # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\\n" "POT-Creation-Date: CREATION_DATE\\n" "PO-Revision-Date: REVISION_DATE\\n" "Last-Translator: TRANSLATOR \\n" "Language-Team: LANGUAGE \\n" "MIME-Version: 1.0\\n" "Content-Type: text/plain; charset=UTF-8\\n" "Content-Transfer-Encoding: 8bit\\n" "Generated-By: turbogears\\n" """) for message in TG_Message.selectBy(domain=domain, locale=locale): if message.name == "":continue # descriptive text f.write(u""" msgid "%s" msgstr "%s" """%(message.name, message.text)) f.close() PKA>^)&turbogears/i18n/sogettext/__init__.pyc; HIc@sdZdkZdklZlZdklZydklZWne j onXdk l Z dk Z hZ eedZdZdZd ZdS( s$ SQLObject-based version of gettext N(s TG_Messages TG_Domain(s get_locale(sSQLObjectNotFound(s translationcCsct|}t|i|}| o t|i|d h}nt|i||SdS(sZ SQLObject-based version of gettext. Messages are stored in database instead. iN(s get_localeslocalesget_so_catalogsdomainsgetsmessagessunicodeskey(skeyslocalesdomainsmessages((s;build\bdist.win32\egg\turbogears\i18n\sogettext\__init__.pys so_gettexts   cCs|tjotiidd}nti|}| oh}yti|}Wnt j o |SnXt i d|}xC|D];}|i}|i|h}|i||i<|||, YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: CREATION_DATE\n" "PO-Revision-Date: REVISION_DATE\n" "Last-Translator: TRANSLATOR \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: turbogears\n" sdomainslocalesu( msgid "%s" msgstr "%s" N(s turbogearssconfigsgets localedirslocalesslocalesosspathsjoins messages_dirs TG_Domainsselectsdomainsnamespofilescodecssopensfswrites TG_MessagesselectBysmessagestextsclose(slocalessdomains messages_dirsfslocalespofiles localedirsmessage((s;build\bdist.win32\egg\turbogears\i18n\sogettext\__init__.pysdump_so_catalogsYs   !(s__doc__s turbogearssturbogears.i18n.sogettext.models TG_Messages TG_Domainsturbogears.i18n.utilss get_locales sqlobjectsSQLObjectNotFounds ImportErrorsgettexts translationscodecss _catalogssNones so_gettextsget_so_catalogscreate_so_catalogsdump_so_catalogs( screate_so_catalogsSQLObjectNotFounds get_locales turbogearssget_so_catalogs _catalogss TG_Messages TG_Domainsdump_so_catalogsscodecss translations so_gettext((s;build\bdist.win32\egg\turbogears\i18n\sogettext\__init__.pys?s      PKK9) $turbogears/i18n/tests/test_format.py from datetime import datetime from turbogears.i18n.format import * dt = datetime(2005, 2, 5) # Saturday, 5rd Feb 2005 def test_get_countries(): print get_countries() print get_countries("eo") print get_countries("en_US") def test_get_languages(): print get_languages() print get_languages("eo") print get_countries("en_US") def test_get_month_names(): print get_month_names() print get_abbr_month_names() print get_month_names("eo") print get_abbr_month_names("eo") print get_month_names("en_US") print get_abbr_month_names("en_US") def test_get_weekday_names(): print get_weekday_names() print get_abbr_weekday_names() print get_weekday_names("eo") print get_abbr_weekday_names("eo") print get_weekday_names("en_US") print get_abbr_weekday_names("en_US") def test_format_numbers(): assert format_decimal(4.9, 0, "en") == "5" assert format_decimal(4.9, 1, "en") == "4.9" assert format_decimal(5.0, 1, "en") == "5.0" assert format_decimal(5.1, 1, "de") == "5,1" assert format_number(50, "en_US") == "50" assert format_number(50, "de") == "50" assert format_number(500, "en_US") == "500" assert format_number(500, "de") == "500" assert format_number(5000, "en_US") == "5,000" assert format_number(5000, "de") == "5.000" assert format_number(50000, "en_US") == "50,000" assert format_number(50000, "de") == "50.000" assert format_number(500000, "en_US") == "500,000" assert format_number(500000, "de") == "500.000" assert format_number(5000000, "en_US") == "5,000,000" assert format_number(5000000, "de") == "5.000.000" assert format_decimal(5000000.78781, 5, "en_US") == "5,000,000.78781" assert format_decimal(5000000.78781, 5, "de") == "5.000.000,78781" assert format_currency(5000000.78781, "en_US") == "5,000,000.79" assert format_currency(5000000.78781, "de") == "5.000.000,79" def test_format_date(): assert format_date(dt, "long", "eo") == u"2005-februaro-05" assert format_date(dt, "medium", "eo") == u"2005-feb-05" assert format_date(dt, "short", "eo") == u"05-02-05" assert format_date(dt, "full", "eo") == u"sabato, 05-a de februaro 2005" assert format_date(dt, "long", "de") == u"05. Februar 2005" assert format_date(dt, "medium", "de") == u"05.02.2005" assert format_date(dt, "short", "de") == u"05.02.05" assert format_date(dt, "full", "de") == u"Samstag, 05. Februar 2005" assert format_date(dt, "short", "en", date_format='day %d of %%(monthname)s') == u"day 05 of February" def test_parse_numbers(): assert parse_number("5,000,000", "en_US") == 5000000 assert parse_number("5.000.000", "de") == 5000000 assert parse_decimal("5,000,000.78781", "en_US") == 5000000.78781 assert parse_decimal("5.000.000,78781", "de") == 5000000.78781 assert parse_decimal("5,000,000.78781", "xx") == 5000000.78781 try: parse_number("5.000.000", "en_US") parse_number("5.000.000,78781", "en_US") assert False except ValueError: assert True def test_diff_locale_format_date(): assert format_date(dt, "short", "en_US") == "02/05/05" assert format_date(dt, "short", "en_GB") == "05/02/2005" def test_invalid_locale_format(): assert get_abbr_weekday_names("fubar")==[] PKA>A(%turbogears/i18n/tests/test_format.pyc; HIc@s{dklZdkTedddZdZdZdZdZd Zd Zd Z d Z d Z dS((sdatetime(s*iiicCs"tGHtdGHtdGHdS(Nseosen_US(s get_countries(((s:build\bdist.win32\egg\turbogears\i18n\tests\test_format.pystest_get_countriess cCs"tGHtdGHtdGHdS(Nseosen_US(s get_languagess get_countries(((s:build\bdist.win32\egg\turbogears\i18n\tests\test_format.pystest_get_languages s cCs@tGHtGHtdGHtdGHtdGHtdGHdS(Nseosen_US(sget_month_namessget_abbr_month_names(((s:build\bdist.win32\egg\turbogears\i18n\tests\test_format.pystest_get_month_namess    cCs@tGHtGHtdGHtdGHtdGHtdGHdS(Nseosen_US(sget_weekday_namessget_abbr_weekday_names(((s:build\bdist.win32\egg\turbogears\i18n\tests\test_format.pystest_get_weekday_namess    cCsZtddddjpttddddjpttddddjpttd dd d jpttd d djpttd d djpttdd djpttdd djpttdd djpttdd djpttdd djpttdd djpttdd djpttdd djpttdd djpttdd djpttddd djpttddd d jpttdd d!jpttdd d"jptdS(#Nf4.9000000000000004isens5is4.9f5.0s5.0f5.0999999999999996sdes5,1i2sen_USs50is500is5,000s5.000iPs50,000s50.000i s500,000s500.000i@KLs 5,000,000s 5.000.000f5000000.7878099997is5,000,000.78781s5.000.000,78781s 5,000,000.79s 5.000.000,79(sformat_decimalsAssertionErrors format_numbersformat_currency(((s:build\bdist.win32\egg\turbogears\i18n\tests\test_format.pystest_format_numbers&s(      cCs*ttdddjptttdddjptttdddjptttddd jptttdd d jptttdd d jptttdd d jptttdd djptttdddddjptdS(Nslongseou2005-februaro-05smediumu 2005-feb-05sshortu05-02-05sfullusabato, 05-a de februaro 2005sdeu05. Februar 2005u 05.02.2005u05.02.05uSamstag, 05. Februar 2005sens date_formatsday %d of %%(monthname)suday 05 of February(s format_datesdtsAssertionError(((s:build\bdist.win32\egg\turbogears\i18n\tests\test_format.pystest_format_dateDs         cCstdddjpttdddjpttdddjpttdddjpttdd djpty,tddtddtptWn!tj otptnXdS( Ns 5,000,000sen_USi@KLs 5.000.000sdes5,000,000.78781f5000000.7878099997s5.000.000,78781sxx(s parse_numbersAssertionErrors parse_decimalsFalses ValueErrorsTrue(((s:build\bdist.win32\egg\turbogears\i18n\tests\test_format.pystest_parse_numbersRs  cCsDttdddjptttdddjptdS(Nsshortsen_USs02/05/05sen_GBs 05/02/2005(s format_datesdtsAssertionError(((s:build\bdist.win32\egg\turbogears\i18n\tests\test_format.pystest_diff_locale_format_date`s cCstdgjptdS(Nsfubar(sget_abbr_weekday_namessAssertionError(((s:build\bdist.win32\egg\turbogears\i18n\tests\test_format.pystest_invalid_locale_formatdsN( sdatetimesturbogears.i18n.formatsdtstest_get_countriesstest_get_languagesstest_get_month_namesstest_get_weekday_namesstest_format_numbersstest_format_datestest_parse_numbersstest_diff_locale_format_datestest_invalid_locale_format( stest_parse_numberssdatetimestest_diff_locale_format_datestest_format_datestest_get_languagesstest_get_weekday_namesstest_format_numbersstest_invalid_locale_formatstest_get_countriessdtstest_get_month_names((s:build\bdist.win32\egg\turbogears\i18n\tests\test_format.pys?s       PKK9[<&turbogears/i18n/tests/test_kidutils.py import kid from turbogears.i18n.kidutils import * from turbogears.i18n.tests import setup_module def test_match_template(): template = """ Welcome

Welcome

Welcome

Welcome

""" t = kid.Template(source = template) output = t.serialize() print output assert '

Welcome

' in output assert '

Tervetuloa

' in output def test_i18n_filter(): template = """ Welcome, guest!

Welcome

Welcome

WelcomeWelcome

""" t = kid.Template(source = template) t._filters+=[i18n_filter] output = t.serialize() print output PKA>wBB'turbogears/i18n/tests/test_kidutils.pyc; HIc@s3dkZdkTdklZdZdZdS(N(s*(s setup_modulecCsUd}tid|}|i}|GHd|jptd|jptdS(Ns Welcome

Welcome

Welcome

Welcome

ssources

Welcome

s

Tervetuloa

(stemplateskidsTemplatests serializesoutputsAssertionError(soutputststemplate((s<build\bdist.win32\egg\turbogears\i18n\tests\test_kidutils.pystest_match_templates  cCs?d}tid|}|itg7_|i}|GHdS(Ns Welcome, guest!

Welcome

Welcome

WelcomeWelcome

ssource(stemplateskidsTemplatests_filterss i18n_filters serializesoutput(soutputststemplate((s<build\bdist.win32\egg\turbogears\i18n\tests\test_kidutils.pystest_i18n_filters   (skidsturbogears.i18n.kidutilssturbogears.i18n.testss setup_modulestest_match_templatestest_i18n_filter(stest_i18n_filters setup_modulestest_match_templateskid((s<build\bdist.win32\egg\turbogears\i18n\tests\test_kidutils.pys?s   PKK9'(turbogears/i18n/tests/test_so_gettext.py import turbogears from turbogears.i18n import sogettext from turbogears.i18n.tg_gettext import tg_gettext from turbogears.i18n.tests import setup_module as basic_setup_module from turbogears.i18n.tests.test_tg_gettext import test_gettext, test_ngettext from turbogears.i18n.tests.test_tg_gettext import test_invalid_domain from turbogears.i18n.tests.test_kidutils import test_match_template, test_i18n_filter def setup_module(): turbogears.config.update({"i18n.gettext":sogettext.so_gettext}) basic_setup_module() def teardown_module(): turbogears.config.update({"i18n.gettext":tg_gettext}) def test_so_gettext(): test_gettext() test_ngettext() test_match_template() test_i18n_filter() test_invalid_domain() PKA>cZxx)turbogears/i18n/tests/test_so_gettext.pyc; HIc@sdkZdklZdklZdklZdkl Z l Z dkl Z dk l Z lZdZdZd ZdS( N(s sogettext(s tg_gettext(s setup_module(s test_gettexts test_ngettext(stest_invalid_domain(stest_match_templatestest_i18n_filtercCs'tiihdti<tdS(Ns i18n.gettext(s turbogearssconfigsupdates sogettexts so_gettextsbasic_setup_module(((s>build\bdist.win32\egg\turbogears\i18n\tests\test_so_gettext.pys setup_module scCstiihdt<dS(Ns i18n.gettext(s turbogearssconfigsupdates tg_gettext(((s>build\bdist.win32\egg\turbogears\i18n\tests\test_so_gettext.pysteardown_modulescCs'tttttdS(N(s test_gettexts test_ngettextstest_match_templatestest_i18n_filterstest_invalid_domain(((s>build\bdist.win32\egg\turbogears\i18n\tests\test_so_gettext.pystest_so_gettexts (s turbogearssturbogears.i18ns sogettextsturbogears.i18n.tg_gettexts tg_gettextsturbogears.i18n.testss setup_modulesbasic_setup_modules%turbogears.i18n.tests.test_tg_gettexts test_gettexts test_ngettextstest_invalid_domains#turbogears.i18n.tests.test_kidutilsstest_match_templatestest_i18n_filtersteardown_modulestest_so_gettext( s test_gettexts turbogearss sogettextstest_i18n_filtersbasic_setup_modules setup_modulestest_match_templates tg_gettextsteardown_modules test_ngettextstest_invalid_domainstest_so_gettext((s>build\bdist.win32\egg\turbogears\i18n\tests\test_so_gettext.pys?s       PKK9PxBB(turbogears/i18n/tests/test_tg_gettext.py from turbogears.i18n.tg_gettext import * from turbogears.i18n.tests import setup_module def test_gettext(): assert unicode(gettext("Welcome")) == "Welcome" assert unicode(gettext("Welcome", "en")) == "Welcome" assert unicode(gettext("Welcome", "fi")) == "Tervetuloa" assert unicode(gettext("Welcome", "fi_FI")) == "Tervetuloa" def test_invalid_domain(): assert gettext("Welcome", "fi", "fubar") != "Tervetuloa" def test_is_unsupported_locale(): assert is_locale_supported("en") == True assert is_locale_supported("en-gb") == False assert is_locale_supported("de") == False assert is_locale_supported("en", "fubar") == False def test_gettext_unsupported_locale(): assert unicode(gettext("Welcome", "en-gb")) == "Welcome" assert unicode(gettext("Welcome", "de")) == "Welcome" def test_ngettext(): assert ngettext("You have %i apple", \ "You have %i apples", 1) %1 == "You have 1 apple" assert ngettext("You have %i apple", \ "You have %i apples", 1, "fi") %1 == "Sinulla on 1 omena" assert ngettext("You have %i apple", \ "You have %i apples", 3) %3 == "You have 3 apples" assert ngettext("You have %i apple", \ "You have %i apples", 3, "fi") %3== "Sinulla on 3 omenaa" def test_lazystring(): s1 = lazystring("simple".upper) assert s1 == 'SIMPLE' assert s1 != 'HARD' assert s1 > 'HARD' or s1 < 'HARD' # should lazystring support string concatenation? # assert s1 + '!' == 'SIMPLE!' # assert 'TOO ' + s1 == 'TOO SIMPLE' PKA>*F )turbogears/i18n/tests/test_tg_gettext.pyc; HIc@sNdkTdklZdZdZdZdZdZdZdS( (s*(s setup_modulecCsttddjptttdddjptttdddjptttdddjptdS(NsWelcomesensfis Tervetuloasfi_FI(sunicodesgettextsAssertionError(((s>build\bdist.win32\egg\turbogears\i18n\tests\test_tg_gettext.pys test_gettexts ##cCs$tddddjptdS(NsWelcomesfisfubars Tervetuloa(sgettextsAssertionError(((s>build\bdist.win32\egg\turbogears\i18n\tests\test_tg_gettext.pystest_invalid_domain scCsotdtjpttdtjpttdtjpttddtjptdS(Nsensen-gbsdesfubar(sis_locale_supportedsTruesAssertionErrorsFalse(((s>build\bdist.win32\egg\turbogears\i18n\tests\test_tg_gettext.pystest_is_unsupported_localescCsJttdddjptttdddjptdS(NsWelcomesen-gbsde(sunicodesgettextsAssertionError(((s>build\bdist.win32\egg\turbogears\i18n\tests\test_tg_gettext.pystest_gettext_unsupported_locales#cCstdddddjpttddddddjpttdddddjpttdddddd jptdS( NsYou have %i applesYou have %i applesisYou have 1 applesfisSinulla on 1 omenaisYou have 3 applessSinulla on 3 omenaa(sngettextsAssertionError(((s>build\bdist.win32\egg\turbogears\i18n\tests\test_tg_gettext.pys test_ngettexts!cCs\tdi}|djpt|djpt|djp |djptdS(NssimplesSIMPLEsHARD(s lazystringsupperss1sAssertionError(ss1((s>build\bdist.win32\egg\turbogears\i18n\tests\test_tg_gettext.pystest_lazystring"sN( sturbogears.i18n.tg_gettextsturbogears.i18n.testss setup_modules test_gettextstest_invalid_domainstest_is_unsupported_localestest_gettext_unsupported_locales test_ngettextstest_lazystring(s test_gettextstest_is_unsupported_localestest_gettext_unsupported_locales setup_modulestest_lazystrings test_ngettextstest_invalid_domain((s>build\bdist.win32\egg\turbogears\i18n\tests\test_tg_gettext.pys?s      PKK9;S,turbogears/i18n/tests/test_toolboxadmi18n.py# -*- coding: utf-8 -*- from turbogears.toolbox.admi18n import pygettext def test_support_explicit_lang(): """the coma should not make the extractor bork """ assert _('Something', 'en') == u'Something' assert _('New', 'en') == u'New' PKA>J-turbogears/i18n/tests/test_toolboxadmi18n.pyc; HIc@sdklZdZdS((s pygettextcCs>tdddjpttdddjptdS(s0the coma should not make the extractor bork s Somethingsenu SomethingsNewuNewN(s_sAssertionError(((sBbuild\bdist.win32\egg\turbogears\i18n\tests\test_toolboxadmi18n.pystest_support_explicit_langsN(sturbogears.toolbox.admi18ns pygettextstest_support_explicit_lang(s pygettextstest_support_explicit_lang((sBbuild\bdist.win32\egg\turbogears\i18n\tests\test_toolboxadmi18n.pys?s PKK9q#turbogears/i18n/tests/test_utils.py from turbogears.i18n.utils import * def test_get_accept_languages(): assert get_accept_languages("da, en-gb;q=0.8, en;q=0.7") == ["da", "en_GB", "en"] assert get_accept_languages("da;q=0.6, en-gb;q=1.0, en;q=0.7") == ["en_GB", "en", "da"] PKA>Mee$turbogears/i18n/tests/test_utils.pyc; HIc@sdkTdZdS((s*cCsJtddddgjpttddddgjptdS(Nsda, en-gb;q=0.8, en;q=0.7sdasen_GBsensda;q=0.6, en-gb;q=1.0, en;q=0.7(sget_accept_languagessAssertionError(((s9build\bdist.win32\egg\turbogears\i18n\tests\test_utils.pystest_get_accept_languagess#N(sturbogears.i18n.utilsstest_get_accept_languages(stest_get_accept_languages((s9build\bdist.win32\egg\turbogears\i18n\tests\test_utils.pys?sPKK9èuu!turbogears/i18n/tests/__init__.py import os.path from turbogears import config from turbogears.i18n import sogettext def setup_module(): basedir = os.path.join(os.path.dirname(os.path.dirname( os.path.dirname(os.path.abspath(__file__)))), "tests") locale_dir = os.path.join(basedir, 'locale') config.update({ 'i18n.locale_dir': locale_dir, 'i18n.domain': 'messages', 'i18n.default_locale': 'en', 'i18n.get_locale': lambda: 'en', 'i18n.run_template_filter': False, 'sqlobject.dburi': "sqlite:///:memory:" }) sogettext.create_so_catalog(["en", "fi"], "messages") PKA>U"turbogears/i18n/tests/__init__.pyc; HIc@s0dkZdklZdklZdZdS(N(sconfig(s sogettextcCstiitiitiitiitiitd}tii|d}ti hd|<dd<dd<dd <d t <d d <t i dd gddS(Nstestsslocalesi18n.locale_dirs i18n.domainsmessagessi18n.default_localesensi18n.get_localecCsdS(Nsen((((s7build\bdist.win32\egg\turbogears\i18n\tests\__init__.pysssi18n.run_template_filterssqlobject.dburissqlite:///:memory:sfi( sosspathsjoinsdirnamesabspaths__file__sbasedirs locale_dirsconfigsupdatesFalses sogettextscreate_so_catalog(sbasedirs locale_dir((s7build\bdist.win32\egg\turbogears\i18n\tests\__init__.pys setup_modules < F(sos.pathsoss turbogearssconfigsturbogears.i18ns sogettexts setup_module(sconfigs setup_modulesoss sogettext((s7build\bdist.win32\egg\turbogears\i18n\tests\__init__.pys?s   PKK9 BJ(J(!turbogears/identity/conditions.py"""Definition of the identity predicates.""" import socket import struct import threading import types from turbogears import config from cherrypy import request from turbogears.identity.exceptions import * from turbogears.identity import * from turbogears.decorator import weak_signature_decorator class Predicate(object): """Generic base class for testing true or false for a condition.""" def eval_with_object(self, obj, errors=None): """Determine whether predicate is True or False for the given object.""" raise NotImplementedError def append_error_message(self, errors=None): if errors is None: return errors.append(self.error_message % self.__dict__) class CompoundPredicate(Predicate): """A predicate composed of other predicates.""" def __init__(self, *predicates): self.predicates = predicates class All(CompoundPredicate): """Logical and of all sub-predicates. This compound predicate evaluates to true only if all of its sub-predicates evaluate to true for the given input. """ def eval_with_object(self, obj, errors=None): """Return true if all sub-predicates evaluate to true.""" for p in self.predicates: if not p.eval_with_object(obj, errors): return False return True class Any(CompoundPredicate): """Logical or of all sub-predicates. This compound predicate evaluates to true if any one of its sub-predicates evaluates to true for the given input. """ error_message = "No predicates were able to grant access" def eval_with_object(self, obj, errors=None): """Return true if any sub-predicate evaluates to true. """ for p in self.predicates: if p.eval_with_object(obj, None): return True self.append_error_message(errors) return False class IdentityPredicateHelper(object): """A mix-in helper class for Identity Predicates.""" def __nonzero__(self): return self.eval_with_object(current) class in_group(Predicate, IdentityPredicateHelper): """Predicate for requiring a group.""" error_message = "Not member of group: %(group_name)s" def __init__(self, group_name): self.group_name = group_name def eval_with_object(self, identity, errors=None): if self.group_name in identity.groups: return True self.append_error_message(errors) return False class in_all_groups(All, IdentityPredicateHelper): """Predicate for requiring membership in a number of groups.""" def __init__(self, *groups): group_predicates = [in_group(g) for g in groups] super(in_all_groups,self).__init__(*group_predicates) class in_any_group(Any, IdentityPredicateHelper): """Predicate for requiring membership in at least one group.""" error_message = "Not member of any group: %(group_list)s" def __init__(self, *groups): self.group_list = ", ".join(groups) group_predicates = [in_group(g) for g in groups] super(in_any_group,self).__init__(*group_predicates) class not_anonymous(Predicate, IdentityPredicateHelper): """Predicate for checking whether current visitor is anonymous.""" error_message = "Anonymous access denied" def eval_with_object(self, identity, errors=None): if identity.anonymous: self.append_error_message(errors) return False return True class has_permission(Predicate, IdentityPredicateHelper): """Predicate for checking whether visitor has a particular permission.""" error_message = "Permission denied: %(permission_name)s" def __init__(self, permission_name): self.permission_name = permission_name def eval_with_object(self, identity, errors=None): """Determine whether the visitor has the specified permission.""" if self.permission_name in identity.permissions: return True self.append_error_message(errors) return False class has_all_permissions(All, IdentityPredicateHelper): """Predicate for checking whether the visitor has all permissions.""" def __init__(self, *permissions): permission_predicates = [has_permission(p) for p in permissions] super(has_all_permissions,self).__init__(*permission_predicates) class has_any_permission(Any, IdentityPredicateHelper): """Predicate for checking whether visitor has at least one permission.""" error_message = "No matching permissions: %(permission_list)s" def __init__(self, *permissions): self.permission_list = ', '.join(permissions) permission_predicates = [has_permission(p) for p in permissions] super(has_any_permission,self).__init__(*permission_predicates) def _remoteHost(): return request.headers.get('X-Forwarded-For', request.headers.get( 'Remote-Addr', '')).split(',')[-1].strip() def _match_ip(cidr, ip): if not '/' in cidr: return cidr == ip try: b, m = cidr.split('/') shift = 32 - int(m) a1 = struct.unpack('!L', socket.inet_aton(b))[0] >> shift a2 = struct.unpack('!L', socket.inet_aton(ip))[0] >> shift return a1 == a2 except Exception: return False class from_host(Predicate, IdentityPredicateHelper): """Predicate for checking whether the visitor's host is a permitted host. Note: We never want to announce what the list of allowed hosts is, because it is way too easy to spoof an IP address in a TCP/IP packet. """ error_message = "Access from this host is not permitted." def __init__(self, host): self.host = host def eval_with_object(self, obj, errors=None): """Match the visitor's host against the criteria.""" ip = _remoteHost() if _match_ip(self.host, ip): return True self.append_error_message(errors) return False class from_any_host(Any, IdentityPredicateHelper): """Predicate for checking the visitor against a number of allowed hosts.""" error_message = "Access from this host is not permitted." def __init__(self, hosts): host_predicates = [from_host(h) for h in hosts] super(from_any_host, self).__init__(*host_predicates) def require(predicate, obj=None): """Function decorator checking requirements for the current user. This function decorator checks whether the current user is a member of the groups specified and has the permissions required. """ def entangle(fn): def require(func, self, *args, **kwargs): try: errors = [] if predicate is None or \ predicate.eval_with_object(current, errors): return fn(self, *args, **kwargs) except IdentityException, e: errors = [str(e)] raise IdentityFailure(errors) fn._require = predicate return require return weak_signature_decorator(entangle) def _secureResourceDecorator(fn): """A decorator function used by the SecureResourceMeta metaclass.""" def _wrapper(self, *args, **kwargs): predicate = getattr(self.__class__, 'require', None) try: errors = [] if (predicate is None or predicate.eval_with_object(current, errors)): return fn(self, *args, **kwargs) except IdentityException, e: errors = [str(e)] raise IdentityFailure(errors) try: _wrapper.func_name = fn.func_name except TypeError: pass if hasattr(fn, 'exposed'): _wrapper.exposed = fn.exposed return _wrapper def _check_method(obj, fn, predicate): def _wrapper(*args, **kw): errors= [] if predicate.eval_with_object(current, errors): return fn(*args, **kw) else: raise IdentityFailure(errors) _wrapper.exposed = True return _wrapper class SecureResource(object): def __getattribute__(self, name): from turbogears import controllers if name[:3] == '_cp' or name == 'require': return object.__getattribute__(self,name) try: value = object.__getattribute__(self,name) try: predicate = object.__getattribute__(self, 'require') except AttributeError: predicate = config.get('identity.require', None) if predicate is None: raise AttributeError("SecureResource requires a 'require'" " attribute either on the controller class itself" " or in the config file") errors = [] if (isinstance(value, types.MethodType) and hasattr(value, 'exposed')): return _check_method(self, value, predicate) if isinstance(value, controllers.Controller): return SecureObject(value, predicate) # Some other property return value except IdentityException, e: errors= [str(e)] raise IdentityFailure(errors) class SecureObject(object): def __init__(self, obj, require, exclude=[]): self._exclude = exclude self._object = obj self._require = require def __getattribute__(self, name): from turbogears import controllers if name[:3] == '_cp' or name in ('_object', '_require', '_exclude'): return object.__getattribute__(self,name) try: obj = object.__getattribute__(self, '_object') value = getattr(obj, name) errors = [] predicate = object.__getattribute__(self, '_require') if name in object.__getattribute__(self, '_exclude'): return value if (isinstance(value, types.MethodType) and hasattr(value, 'exposed')): return _check_method(obj, value, predicate) if isinstance(value, controllers.Controller): return SecureObject(value, predicate) # Some other property return value except IdentityException, e: errors = [str(e)] raise IdentityFailure(errors) PKA>*=L=L"turbogears/identity/conditions.pyc; ޸HIc@sdZdkZdkZdkZdkZdklZdklZdk Tdk Tdk l Z de fdYZdefd YZd efd YZd efd YZde fdYZdeefdYZdeefdYZdeefdYZdeefdYZdeefdYZdeefdYZdeefdYZdZdZd eefd!YZd"eefd#YZed$Zd%Z d&Z!d'e fd(YZ"d)e fd*YZ#dS(+s&Definition of the identity predicates.N(sconfig(srequest(s*(sweak_signature_decorators PredicatecBs&tZdZedZedZRS(s=Generic base class for testing true or false for a condition.cCs tdS(sBDetermine whether predicate is True or False for the given object.N(sNotImplementedError(sselfsobjserrors((s7build\bdist.win32\egg\turbogears\identity\conditions.pyseval_with_objectscCs0|tjodSn|i|i|idS(N(serrorssNonesappendsselfs error_messages__dict__(sselfserrors((s7build\bdist.win32\egg\turbogears\identity\conditions.pysappend_error_messages (s__name__s __module__s__doc__sNoneseval_with_objectsappend_error_message(((s7build\bdist.win32\egg\turbogears\identity\conditions.pys Predicates  sCompoundPredicatecBstZdZdZRS(s)A predicate composed of other predicates.cGs ||_dS(N(s predicatessself(sselfs predicates((s7build\bdist.win32\egg\turbogears\identity\conditions.pys__init__s(s__name__s __module__s__doc__s__init__(((s7build\bdist.win32\egg\turbogears\identity\conditions.pysCompoundPredicates sAllcBstZdZedZRS(sLogical and of all sub-predicates. This compound predicate evaluates to true only if all of its sub-predicates evaluate to true for the given input. cCs8x-|iD]"}|i|| otSq q WtSdS(s3Return true if all sub-predicates evaluate to true.N(sselfs predicatesspseval_with_objectsobjserrorssFalsesTrue(sselfsobjserrorssp((s7build\bdist.win32\egg\turbogears\identity\conditions.pyseval_with_object's   (s__name__s __module__s__doc__sNoneseval_with_object(((s7build\bdist.win32\egg\turbogears\identity\conditions.pysAll s sAnycBs tZdZdZedZRS(sLogical or of all sub-predicates. This compound predicate evaluates to true if any one of its sub-predicates evaluates to true for the given input. s'No predicates were able to grant accesscCsDx,|iD]!}|i|totSq q W|i|t SdS(s<Return true if any sub-predicate evaluates to true. N( sselfs predicatesspseval_with_objectsobjsNonesTruesappend_error_messageserrorssFalse(sselfsobjserrorssp((s7build\bdist.win32\egg\turbogears\identity\conditions.pyseval_with_object8s   (s__name__s __module__s__doc__s error_messagesNoneseval_with_object(((s7build\bdist.win32\egg\turbogears\identity\conditions.pysAny/s sIdentityPredicateHelpercBstZdZdZRS(s.A mix-in helper class for Identity Predicates.cCs|itSdS(N(sselfseval_with_objectscurrent(sself((s7build\bdist.win32\egg\turbogears\identity\conditions.pys __nonzero__Ds(s__name__s __module__s__doc__s __nonzero__(((s7build\bdist.win32\egg\turbogears\identity\conditions.pysIdentityPredicateHelperBs sin_groupcBs)tZdZdZdZedZRS(s Predicate for requiring a group.s#Not member of group: %(group_name)scCs ||_dS(N(s group_namesself(sselfs group_name((s7build\bdist.win32\egg\turbogears\identity\conditions.pys__init__LscCs0|i|ijotSn|i|tSdS(N(sselfs group_namesidentitysgroupssTruesappend_error_messageserrorssFalse(sselfsidentityserrors((s7build\bdist.win32\egg\turbogears\identity\conditions.pyseval_with_objectOs (s__name__s __module__s__doc__s error_messages__init__sNoneseval_with_object(((s7build\bdist.win32\egg\turbogears\identity\conditions.pysin_groupHs  s in_all_groupscBstZdZdZRS(s9Predicate for requiring membership in a number of groups.cGsGgi}|D]}|t|q~}tt|i |dS(N( sappends_[1]sgroupssgsin_groupsgroup_predicatesssupers in_all_groupssselfs__init__(sselfsgroupssgs_[1]sgroup_predicates((s7build\bdist.win32\egg\turbogears\identity\conditions.pys__init__Xs-(s__name__s __module__s__doc__s__init__(((s7build\bdist.win32\egg\turbogears\identity\conditions.pys in_all_groupsVs s in_any_groupcBstZdZdZdZRS(s9Predicate for requiring membership in at least one group.s'Not member of any group: %(group_list)scGsYdi||_gi}|D]}|t|q ~}t t |i |dS(Ns, ( sjoinsgroupssselfs group_listsappends_[1]sgsin_groupsgroup_predicatesssupers in_any_groups__init__(sselfsgroupssgs_[1]sgroup_predicates((s7build\bdist.win32\egg\turbogears\identity\conditions.pys__init__as-(s__name__s __module__s__doc__s error_messages__init__(((s7build\bdist.win32\egg\turbogears\identity\conditions.pys in_any_group]s s not_anonymouscBs tZdZdZedZRS(s<Predicate for checking whether current visitor is anonymous.sAnonymous access deniedcCs'|io|i|tSntSdS(N(sidentitys anonymoussselfsappend_error_messageserrorssFalsesTrue(sselfsidentityserrors((s7build\bdist.win32\egg\turbogears\identity\conditions.pyseval_with_objectks  (s__name__s __module__s__doc__s error_messagesNoneseval_with_object(((s7build\bdist.win32\egg\turbogears\identity\conditions.pys not_anonymousgs shas_permissioncBs)tZdZdZdZedZRS(sCPredicate for checking whether visitor has a particular permission.s&Permission denied: %(permission_name)scCs ||_dS(N(spermission_namesself(sselfspermission_name((s7build\bdist.win32\egg\turbogears\identity\conditions.pys__init__vscCs0|i|ijotSn|i|tSdS(s;Determine whether the visitor has the specified permission.N(sselfspermission_namesidentitys permissionssTruesappend_error_messageserrorssFalse(sselfsidentityserrors((s7build\bdist.win32\egg\turbogears\identity\conditions.pyseval_with_objectys  (s__name__s __module__s__doc__s error_messages__init__sNoneseval_with_object(((s7build\bdist.win32\egg\turbogears\identity\conditions.pyshas_permissionrs  shas_all_permissionscBstZdZdZRS(s?Predicate for checking whether the visitor has all permissions.cGsGgi}|D]}|t|q~}tt|i |dS(N( sappends_[1]s permissionsspshas_permissionspermission_predicatesssupershas_all_permissionssselfs__init__(sselfs permissionsspermission_predicatess_[1]sp((s7build\bdist.win32\egg\turbogears\identity\conditions.pys__init__s-(s__name__s __module__s__doc__s__init__(((s7build\bdist.win32\egg\turbogears\identity\conditions.pyshas_all_permissionss shas_any_permissioncBstZdZdZdZRS(sCPredicate for checking whether visitor has at least one permission.s,No matching permissions: %(permission_list)scGsYdi||_gi}|D]}|t|q ~}t t |i |dS(Ns, ( sjoins permissionssselfspermission_listsappends_[1]spshas_permissionspermission_predicatesssupershas_any_permissions__init__(sselfs permissionsspermission_predicatess_[1]sp((s7build\bdist.win32\egg\turbogears\identity\conditions.pys__init__s-(s__name__s __module__s__doc__s error_messages__init__(((s7build\bdist.win32\egg\turbogears\identity\conditions.pyshas_any_permissions cCs9tiidtiiddiddiSdS(NsX-Forwarded-Fors Remote-Addrss,i(srequestsheaderssgetssplitsstrip(((s7build\bdist.win32\egg\turbogears\identity\conditions.pys _remoteHostscCsd|j o||jSnyy|id\}}dt|}tidt i |d|?}tidt i |d|?}||jSWnt j o tSnXdS(Ns/i s!Li(scidrsipssplitsbsmsintsshiftsstructsunpackssockets inet_atonsa1sa2s ExceptionsFalse(scidrsipsbsmsa1sa2sshift((s7build\bdist.win32\egg\turbogears\identity\conditions.pys _match_ips##s from_hostcBs)tZdZdZdZedZRS(sPredicate for checking whether the visitor's host is a permitted host. Note: We never want to announce what the list of allowed hosts is, because it is way too easy to spoof an IP address in a TCP/IP packet. s'Access from this host is not permitted.cCs ||_dS(N(shostsself(sselfshost((s7build\bdist.win32\egg\turbogears\identity\conditions.pys__init__scCs9t}t|i|otSn|i|tSdS(s.Match the visitor's host against the criteria.N( s _remoteHostsips _match_ipsselfshostsTruesappend_error_messageserrorssFalse(sselfsobjserrorssip((s7build\bdist.win32\egg\turbogears\identity\conditions.pyseval_with_objects   (s__name__s __module__s__doc__s error_messages__init__sNoneseval_with_object(((s7build\bdist.win32\egg\turbogears\identity\conditions.pys from_hosts  s from_any_hostcBstZdZdZdZRS(sEPredicate for checking the visitor against a number of allowed hosts.s'Access from this host is not permitted.cCsGgi}|D]}|t|q~}tt|i |dS(N( sappends_[1]shostsshs from_hostshost_predicatesssupers from_any_hostsselfs__init__(sselfshostss_[1]shshost_predicates((s7build\bdist.win32\egg\turbogears\identity\conditions.pys__init__s-(s__name__s __module__s__doc__s error_messages__init__(((s7build\bdist.win32\egg\turbogears\identity\conditions.pys from_any_hosts csd}t|SdS(sFunction decorator checking requirements for the current user. This function decorator checks whether the current user is a member of the groups specified and has the permissions required. cs d}_|SdS(Ncsuy>g}tjpit|o|||SnWn$t j o}t |g}nXt |dS(N( serrorss predicatesNoneseval_with_objectscurrentsfnsselfsargsskwargssIdentityExceptionsesstrsIdentityFailure(sfuncsselfsargsskwargsserrorsse(s predicatesfn(s7build\bdist.win32\egg\turbogears\identity\conditions.pysrequires (srequires predicatesfns_require(sfnsrequire(s predicate(sfns7build\bdist.win32\egg\turbogears\identity\conditions.pysentangles N(sentanglesweak_signature_decorator(s predicatesobjsentangle((s predicates7build\bdist.win32\egg\turbogears\identity\conditions.pysrequires csZd}yi|_Wntj onXtdoi|_n|SdS(s>A decorator function used by the SecureResourceMeta metaclass.cst|idt}y>g}|tjp|it|o|||SnWn$t j o}t |g}nXt|dS(Nsrequire(sgetattrsselfs __class__sNones predicateserrorsseval_with_objectscurrentsfnsargsskwargssIdentityExceptionsesstrsIdentityFailure(sselfsargsskwargss predicateserrorsse(sfn(s7build\bdist.win32\egg\turbogears\identity\conditions.pys_wrappers sexposedN(s_wrappersfns func_names TypeErrorshasattrsexposed(sfns_wrapper((sfns7build\bdist.win32\egg\turbogears\identity\conditions.pys_secureResourceDecorators cs d}t|_|SdS(Ncs:g}it|o||Sn t|dS(N(serrorss predicateseval_with_objectscurrentsfnsargsskwsIdentityFailure(sargsskwserrors(s predicatesfn(s7build\bdist.win32\egg\turbogears\identity\conditions.pys_wrappers(s_wrappersTruesexposed(sobjsfns predicates_wrapper((sfns predicates7build\bdist.win32\egg\turbogears\identity\conditions.pys _check_methods sSecureResourcecBstZdZRS(NcCsLdkl}|d djp |djoti||Snyti||}yti|d}Wn%tj ot i dt }nX|t jotdng}t |tio t|dot|||Snt ||iot||Sn|SWn$tj o}t|g}nXt|dS(N(s controllersis_cpsrequiresidentity.requiresiSecureResource requires a 'require' attribute either on the controller class itself or in the config filesexposed(s turbogearss controllerssnamesobjects__getattribute__sselfsvalues predicatesAttributeErrorsconfigsgetsNoneserrorss isinstancestypess MethodTypeshasattrs _check_methods Controllers SecureObjectsIdentityExceptionsesstrsIdentityFailure(sselfsnames predicateserrorssvalues controllersse((s7build\bdist.win32\egg\turbogears\identity\conditions.pys__getattribute__s(  #(s__name__s __module__s__getattribute__(((s7build\bdist.win32\egg\turbogears\identity\conditions.pysSecureResourcess SecureObjectcBstZgdZdZRS(NcCs||_||_||_dS(N(sexcludesselfs_excludesobjs_objectsrequires_require(sselfsobjsrequiresexclude((s7build\bdist.win32\egg\turbogears\identity\conditions.pys__init__s  cCs<dkl}|d djp|dddfjoti||Snyti|d}t||}g}ti|d}|ti|djo|Snt |t i o t|dot|||Snt ||iot||Sn|SWn$tj o}t|g}nXt|dS(N(s controllersis_cps_objects_requires_excludesexposed(s turbogearss controllerssnamesobjects__getattribute__sselfsobjsgetattrsvalueserrorss predicates isinstancestypess MethodTypeshasattrs _check_methods Controllers SecureObjectsIdentityExceptionsesstrsIdentityFailure(sselfsnames predicateserrorssobjsvalues controllersse((s7build\bdist.win32\egg\turbogears\identity\conditions.pys__getattribute__s$ '#(s__name__s __module__s__init__s__getattribute__(((s7build\bdist.win32\egg\turbogears\identity\conditions.pys SecureObjects ($s__doc__ssocketsstructs threadingstypess turbogearssconfigscherrypysrequeststurbogears.identity.exceptionssturbogears.identitysturbogears.decoratorsweak_signature_decoratorsobjects PredicatesCompoundPredicatesAllsAnysIdentityPredicateHelpersin_groups in_all_groupss in_any_groups not_anonymousshas_permissionshas_all_permissionsshas_any_permissions _remoteHosts _match_ips from_hosts from_any_hostsNonesrequires_secureResourceDecorators _check_methodsSecureResources SecureObject(s _check_methods _remoteHostsSecureResourceshas_any_permissions_secureResourceDecorators Predicatesstructs _match_ips in_any_groups not_anonymouss SecureObjects in_all_groupssconfigshas_all_permissionssin_groups from_any_hoststypessweak_signature_decoratorsAllssocketsrequiresrequests threadingsCompoundPredicates from_hostshas_permissionsAnysIdentityPredicateHelper((s7build\bdist.win32\egg\turbogears\identity\conditions.pys?s<               PKK9{ 4 4 !turbogears/identity/exceptions.py"""Identity management exceptions.""" import cherrypy import turbogears def set_identity_errors(errors): if isinstance(errors, basestring): errors = [errors] cherrypy.request.identity_errors = list(errors) def get_identity_errors(): return getattr(cherrypy.request, 'identity_errors', []) def get_failure_url(errors=None): url = turbogears.config.get('identity.failure_url', None) if url is None: msg = "Missing URL for identity failure. Please fix this in app.cfg." raise IdentityConfigurationException(msg) if callable(url): url = url(errors) return url class IdentityException(Exception): """Base class for all Identity exceptions.""" pass class RequestRequiredException(IdentityException): """No request present. An attempt was made to use a facility of Identity that requires the presence of an HTTP request. """ def __str__(self): return "An attempt was made to use a facility of the TurboGears " \ "Identity Management framework that relies on an HTTP request " \ "outside of a request." class IdentityManagementNotEnabledException(IdentityException): """User forgot to enable Identity management.""" def __str__(self): return "An attempt was made to use a facility of the TurboGears " \ "Identity Management framework, but identity management hasn't " \ "been enabled in the config file [via identity.on]." class IdentityConfigurationException(IdentityException): """Incorrect configuration. Exception thrown when the Identity management system hasn't been configured correctly. Mostly, when failure_url is not specified. """ args = () def __init__(self, message): self.message = message def __str__(self): return self.message class IdentityFailure(cherrypy.InternalRedirect, IdentityException): """Identity failure. Exception thrown when an access control check fails. """ def __init__(self, errors): """Setup identity errors on the request and get URL from config.""" set_identity_errors(errors) url = get_failure_url(errors) if turbogears.config.get('identity.force_external_redirect', False): # We need to use external redirect for https since we are managed # by Apache/nginx or something else that CherryPy won't find. # We also need to set the forward_url, because the Referer header # won't work with an external redirect. params = cherrypy.request.params params['forward_url'] = cherrypy.request.path_info raise cherrypy.HTTPRedirect(turbogears.url(url, params)) else: # use internal redirect which is quicker cherrypy.InternalRedirect.__init__(self, url) PKA>A_"turbogears/identity/exceptions.pyc; ޸HIc@sdZdkZdkZdZdZedZdefdYZdefdYZ d efd YZ d efd YZ d ei efdYZ dS(sIdentity management exceptions.NcCs3t|to |g}nt|ti_dS(N(s isinstanceserrorss basestringslistscherrypysrequestsidentity_errors(serrors((s7build\bdist.win32\egg\turbogears\identity\exceptions.pysset_identity_errorss cCsttidgSdS(Nsidentity_errors(sgetattrscherrypysrequest(((s7build\bdist.win32\egg\turbogears\identity\exceptions.pysget_identity_errors scCs]tiidt}|tjod}t|nt|o||}n|SdS(Nsidentity.failure_urls=Missing URL for identity failure. Please fix this in app.cfg.( s turbogearssconfigsgetsNonesurlsmsgsIdentityConfigurationExceptionscallableserrors(serrorssurlsmsg((s7build\bdist.win32\egg\turbogears\identity\exceptions.pysget_failure_urls  sIdentityExceptioncBstZdZRS(s'Base class for all Identity exceptions.(s__name__s __module__s__doc__(((s7build\bdist.win32\egg\turbogears\identity\exceptions.pysIdentityExceptions sRequestRequiredExceptioncBstZdZdZRS(sNo request present. An attempt was made to use a facility of Identity that requires the presence of an HTTP request. cCsdSdS(NsAn attempt was made to use a facility of the TurboGears Identity Management framework that relies on an HTTP request outside of a request.((sself((s7build\bdist.win32\egg\turbogears\identity\exceptions.pys__str__&s(s__name__s __module__s__doc__s__str__(((s7build\bdist.win32\egg\turbogears\identity\exceptions.pysRequestRequiredExceptions s%IdentityManagementNotEnabledExceptioncBstZdZdZRS(s*User forgot to enable Identity management.cCsdSdS(NsAn attempt was made to use a facility of the TurboGears Identity Management framework, but identity management hasn't been enabled in the config file [via identity.on].((sself((s7build\bdist.win32\egg\turbogears\identity\exceptions.pys__str__/s(s__name__s __module__s__doc__s__str__(((s7build\bdist.win32\egg\turbogears\identity\exceptions.pys%IdentityManagementNotEnabledException,s sIdentityConfigurationExceptioncBs&tZdZfZdZdZRS(sIncorrect configuration. Exception thrown when the Identity management system hasn't been configured correctly. Mostly, when failure_url is not specified. cCs ||_dS(N(smessagesself(sselfsmessage((s7build\bdist.win32\egg\turbogears\identity\exceptions.pys__init__?scCs |iSdS(N(sselfsmessage(sself((s7build\bdist.win32\egg\turbogears\identity\exceptions.pys__str__Bs(s__name__s __module__s__doc__sargss__init__s__str__(((s7build\bdist.win32\egg\turbogears\identity\exceptions.pysIdentityConfigurationException5s  sIdentityFailurecBstZdZdZRS(sQIdentity failure. Exception thrown when an access control check fails. cCs~t|t|}tiidto;ti i }ti i |d\@9-9-"turbogears/identity/saprovider.pyc; ޸HIc@sdklZdklZlZdklZdklZdk Z e i dZ ye e fWn&ej odklZ lZ nXeaeaeaeadefdYZd efd YZdS( (s class_mapper(sconfigsidentity(ssession(s load_classNsturbogears.identity.saprovider(sSets ImmutableSetsSqlAlchemyIdentitycBstZdZeedZdZeeZdZeeZ dZ ee Z dZ ee Z dZeeZdZeeZdZeeZd ZeeZd ZeeZd Zd ZRS( s<Identity that uses a model from a database (via SQLAlchemy).cCs<||_|o(||_|tj o|iq8ndS(N(s visit_keysselfsusers_usersNoneslogin(sselfs visit_keysuser((s7build\bdist.win32\egg\turbogears\identity\saprovider.pys__init__s    cCsTy |iSWntj onX|i}|otii|i|_|iSdS(s$Get user instance for this identity.N( sselfs_usersAttributeErrors visit_linksvisits user_classsquerysgetsuser_id(sselfsvisit((s7build\bdist.win32\egg\turbogears\identity\saprovider.pys _get_user"s  cCs!|i otSn|iiSdS(sGet user name of this identity.N(sselfsusersNones user_name(sself((s7build\bdist.win32\egg\turbogears\identity\saprovider.pys_get_user_name0s cCs!|i otSn|iiSdS(sGet user id of this identity.N(sselfsusersNonesuser_id(sself((s7build\bdist.win32\egg\turbogears\identity\saprovider.pys _get_user_id7s cCs |i SdS(sReturn true if not logged in.N(sselfsuser(sself((s7build\bdist.win32\egg\turbogears\identity\saprovider.pys_get_anonymous>scCsy |iSWntj onX|i ot|_n:tgi}|iiD]}||i qS~|_|iSdS(s-Get set of permission names of this identity.N( sselfs _permissionssAttributeErrorsusers frozensetsappends_[1]s permissionsspspermission_name(sselfs_[1]sp((s7build\bdist.win32\egg\turbogears\identity\saprovider.pys_get_permissionsCs  9cCsy |iSWntj onX|i ot|_n:tgi}|iiD]}||i qS~|_|iSdS(s(Get set of group names of this identity.N( sselfs_groupssAttributeErrorsusers frozensetsappends_[1]sgroupssgs group_name(sselfs_[1]sg((s7build\bdist.win32\egg\turbogears\identity\saprovider.pys _get_groupsRs  9cCsy |iSWntj onX|i ot|_n:tgi}|iiD]}||i qS~|_|iSdS(s&Get set of group IDs of this identity.N( sselfs _group_idssAttributeErrorsusers frozensetsappends_[1]sgroupssgsgroup_id(sselfs_[1]sg((s7build\bdist.win32\egg\turbogears\identity\saprovider.pys_get_group_ids`s  9cCs8|itjotSntiid|iiSdS(s$Get the visit link to this identity.s visit_keyN(sselfs visit_keysNones visit_classsquerys filter_bysfirst(sself((s7build\bdist.win32\egg\turbogears\identity\saprovider.pys_get_visit_linknscCstiSdS(sGet the URL for the login page.N(sidentitysget_failure_url(sself((s7build\bdist.win32\egg\turbogears\identity\saprovider.pys_get_login_urluscCsU|i}|o|ii|_n%t}|i|_|ii|_tidS(s1Set the link between this identity and the visit.N( sselfs visit_linksvisits_usersuser_ids visit_classs visit_keyssessionsflush(sselfsvisit((s7build\bdist.win32\egg\turbogears\identity\saprovider.pysloginzs   cCs?|i}|oti|tintitdS(s4Remove the link between this identity and the visit.N( sselfs visit_linksvisitssessionsdeletesflushsidentitysset_current_identitysSqlAlchemyIdentity(sselfsvisit((s7build\bdist.win32\egg\turbogears\identity\saprovider.pyslogouts   (s__name__s __module__s__doc__sNones__init__s _get_userspropertysusers_get_user_names user_names _get_user_idsuser_ids_get_anonymouss anonymouss_get_permissionss permissionss _get_groupssgroupss_get_group_idss group_idss_get_visit_links visit_links_get_login_urls login_urlsloginslogout(((s7build\bdist.win32\egg\turbogears\identity\saprovider.pysSqlAlchemyIdentitys,                sSqlAlchemyIdentityProvidercBsMtZdZdZdZdZdZdZdZdZ RS(sDIdentityProvider that uses a model from a database (via SQLAlchemy).cstt|iti}|dt}t|a |dt}t|a |dt}t|a |dt}tid|t|a|dtd|_dS(Nsidentity.saprovider.model.usersidentity.saprovider.model.groups$identity.saprovider.model.permissionsidentity.saprovider.model.visits Loading: %ss(identity.saprovider.encryption_algorithmcsti|S(N(sidentitys_encrypt_passwords algorithmspw(spw(s algorithm(s7build\bdist.win32\egg\turbogears\identity\saprovider.pyss(ssupersSqlAlchemyIdentityProvidersselfs__init__sconfigsgetsNonesuser_class_paths load_classs user_classsgroup_class_paths group_classspermission_class_pathspermission_classsvisit_class_pathslogsinfos visit_classs algorithmsencrypt_password(sselfs algorithmsgetsvisit_class_pathsgroup_class_pathsuser_class_pathspermission_class_path((s algorithms7build\bdist.win32\egg\turbogears\identity\saprovider.pys__init__s     cCshttiidtttiidtttiidtttiidtdS(s7Create the database tables if they don't already exist.s checkfirstN(s class_mappers user_classs local_tablescreatesTrues group_classspermission_classs visit_class(sself((s7build\bdist.win32\egg\turbogears\identity\saprovider.pyscreate_provider_models cCstiid|i}| otid|tSn|i ||| oti d|tSnti d||t||SdS(sValidate the identity represented by user_name using the password. Must return either None if the credentials weren't valid or an object with the following properties: user_name: original user name user: a provider dependant object (TG_User or similar) groups: a set of group names permissions: a set of permission names s user_namesNo such user: %ss"Passwords don't match for user: %ss%Associating user (%s) with visit (%s)N(s user_classsquerys filter_bys user_namesfirstsuserslogswarningsNonesselfsvalidate_passwordspasswordsinfos visit_keysSqlAlchemyIdentity(sselfs user_namespasswords visit_keysuser((s7build\bdist.win32\egg\turbogears\identity\saprovider.pysvalidate_identitys   cCs|i|i|jSdS(sCheck the user_name and password against existing credentials. Note: user_name is not used here, but is required by external password validation schemes that might override this method. If you use SqlAlchemyIdentityProvider, but want to check the passwords against an external source (i.e. PAM, LDAP, Windows domain, etc), subclass SqlAlchemyIdentityProvider, and override this method. N(suserspasswordsselfsencrypt_password(sselfsusers user_namespassword((s7build\bdist.win32\egg\turbogears\identity\saprovider.pysvalidate_passwords cCst|SdS(sLookup the principal represented by user_name. Return None if there is no principal for the given user ID. Must return an object with the following properties: user_name: original user name user: a provider dependant object (TG_User or similar) groups: a set of group names permissions: a set of permission names N(sSqlAlchemyIdentitys visit_key(sselfs visit_key((s7build\bdist.win32\egg\turbogears\identity\saprovider.pys load_identitys cCs tSdS(s+Return anonymous identity. Must return an object with the following properties: user_name: original user name user: a provider dependant object (TG_User or similar) groups: a set of group names permissions: a set of permission names N(sSqlAlchemyIdentity(sself((s7build\bdist.win32\egg\turbogears\identity\saprovider.pysanonymous_identitys cCstd|SdS(s6Construct Identity object for users with no visit_key.suserN(sSqlAlchemyIdentitysuser(sselfsuser((s7build\bdist.win32\egg\turbogears\identity\saprovider.pysauthenticated_identitys( s__name__s __module__s__doc__s__init__screate_provider_modelsvalidate_identitysvalidate_passwords load_identitysanonymous_identitysauthenticated_identity(((s7build\bdist.win32\egg\turbogears\identity\saprovider.pysSqlAlchemyIdentityProviders      (ssqlalchemy.orms class_mappers turbogearssconfigsidentitysturbogears.databasessessionsturbogears.utils load_classsloggings getLoggerslogssets frozensets NameErrorssetssSets ImmutableSetsNones user_classs group_classspermission_classs visit_classsobjectsSqlAlchemyIdentitysSqlAlchemyIdentityProvider( ssetsloggingslogs load_classs class_mappersSqlAlchemyIdentityProviderssessions frozensetsconfigsidentitysSqlAlchemyIdentity((s7build\bdist.win32\egg\turbogears\identity\saprovider.pys?s    wPKK9oޠP==!turbogears/identity/soprovider.pyfrom datetime import datetime from sqlobject import SQLObject, SQLObjectNotFound, RelatedJoin, \ DateTimeCol, IntCol, StringCol, UnicodeCol from sqlobject.inheritance import InheritableSQLObject import warnings import logging log = logging.getLogger("turbogears.identity.soprovider") import turbogears from turbogears import identity from turbogears.database import PackageHub from turbogears.util import load_class from turbojson.jsonify import jsonify_sqlobject, jsonify hub = PackageHub("turbogears.identity") __connection__ = hub try: set, frozenset except NameError: # Python 2.3 from sets import Set as set, ImmutableSet as frozenset def to_db_encoding(s, encoding): if isinstance(s, str): pass elif hasattr(s, '__unicode__'): s = unicode(s) if isinstance(s, unicode): s = s.encode(encoding) return s class DeprecatedAttr(object): def __init__(self, old_name, new_name): self.old_name = old_name self.new_name = new_name def __get__(self, obj, type=None): warnings.warn("%s has been deprecated in favour of %s" % (self.old_name, self.new_name), DeprecationWarning) return getattr(obj, self.new_name) def __set__(self, obj, value): warnings.warn( "%s has been deprecated in favour of %s" % (self.old_name, self.new_name), DeprecationWarning) return setattr(obj, self.new_name, value) # Global class references -- # these will be set when the provider is initialised. user_class = None group_class = None permission_class = None visit_class = None class SqlObjectIdentity(object): """Identity that uses a model from a database (via SQLObject).""" def __init__(self, visit_key=None, user=None): self.visit_key = visit_key if user: self._user = user if visit_key is not None: self.login() def _get_user(self): """Get user instance for this identity.""" try: return self._user except AttributeError: # User hasn't already been set pass # Attempt to load the user. After this code executes, there *will* be # a _user attribute, even if the value is None. visit = self.visit_link if visit: try: self._user = user_class.get(visit.user_id) except SQLObjectNotFound: log.warning("No such user with ID: %s", visit.user_id) self._user = None else: self._user = None return self._user user = property(_get_user) def _get_user_name(self): """Get user name of this identity.""" if not self.user: return None return self.user.user_name user_name = property(_get_user_name) def _get_user_id(self): """Get user id of this identity.""" if not self.user: return None return self.user.id user_id = property(_get_user_id) def _get_anonymous(self): """Return true if not logged in.""" return not self.user anonymous = property(_get_anonymous) def _get_permissions(self): """Get set of permission names of this identity.""" try: return self._permissions except AttributeError: # Permissions haven't been computed yet pass if not self.user: self._permissions = frozenset() else: self._permissions = frozenset( [p.permission_name for p in self.user.permissions]) return self._permissions permissions = property(_get_permissions) def _get_groups(self): """Get set of group names of this identity.""" try: return self._groups except AttributeError: # Groups haven't been computed yet pass if not self.user: self._groups = frozenset() else: self._groups = frozenset([g.group_name for g in self.user.groups]) return self._groups groups = property(_get_groups) def _get_group_ids(self): """Get set of group IDs of this identity.""" try: return self._group_ids except AttributeError: # Groups haven't been computed yet pass if not self.user: self._group_ids = frozenset() else: self._group_ids = frozenset([g.id for g in self.user.groups]) return self._group_ids group_ids = property(_get_group_ids) def _get_visit_link(self): """Get the visit link to this identity.""" if self.visit_key is None: return None try: return visit_class.by_visit_key(self.visit_key) except SQLObjectNotFound: return None visit_link = property(_get_visit_link) def _get_login_url(self): """Get the URL for the login page.""" return identity.get_failure_url() login_url = property(_get_login_url) def login(self): """Set the link between this identity and the visit.""" visit = self.visit_link if visit: visit.user_id = self._user.id else: visit = visit_class(visit_key=self.visit_key, user_id=self._user.id) def logout(self): """Remove the link between this identity and the visit.""" visit = self.visit_link if visit: visit.destroySelf() # Clear the current identity identity.set_current_identity(SqlObjectIdentity()) class SqlObjectIdentityProvider(object): """IdentityProvider that uses a model from a database (via SQLObject).""" def __init__(self): super(SqlObjectIdentityProvider, self).__init__() get = turbogears.config.get global user_class, group_class, permission_class, visit_class user_class_path = get("identity.soprovider.model.user", __name__ + ".TG_User") user_class = load_class(user_class_path) if user_class: log.info("Succesfully loaded \"%s\"" % user_class_path) try: self.user_class_db_encoding = \ user_class.sqlmeta.columns['user_name'].dbEncoding except (KeyError, AttributeError): self.user_class_db_encoding = 'UTF-8' group_class_path = get("identity.soprovider.model.group", __name__ + ".TG_Group") group_class = load_class(group_class_path) if group_class: log.info("Succesfully loaded \"%s\"" % group_class_path) permission_class_path = get("identity.soprovider.model.permission", __name__ + ".TG_Permission") permission_class = load_class(permission_class_path) if permission_class: log.info("Succesfully loaded \"%s\"" % permission_class_path) visit_class_path = get("identity.soprovider.model.visit", __name__ + ".TG_VisitIdentity") visit_class = load_class(visit_class_path) if visit_class: log.info("Succesfully loaded \"%s\"" % visit_class_path) # Default encryption algorithm is to use plain text passwords algorithm = get("identity.soprovider.encryption_algorithm", None) self.encrypt_password = lambda pw: \ identity._encrypt_password(algorithm, pw) def create_provider_model(self): """Create the database tables if they don't already exist.""" try: hub.begin() user_class.createTable(ifNotExists=True) group_class.createTable(ifNotExists=True) permission_class.createTable(ifNotExists=True) visit_class.createTable(ifNotExists=True) hub.commit() hub.end() except KeyError: log.warning("No database is configured:" " SqlObjectIdentityProvider is disabled.") return def validate_identity(self, user_name, password, visit_key): """Validate the identity represented by user_name using the password. Must return either None if the credentials weren't valid or an object with the following properties: user_name: original user name user: a provider dependant object (TG_User or similar) groups: a set of group names permissions: a set of permission names """ try: user_name = to_db_encoding(user_name, self.user_class_db_encoding) user = user_class.by_user_name(user_name) if not self.validate_password(user, user_name, password): log.info("Passwords don't match for user: %s", user_name) return None log.info("Associating user (%s) with visit (%s)", user_name, visit_key) return SqlObjectIdentity(visit_key, user) except SQLObjectNotFound: log.warning("No such user: %s", user_name) return None def validate_password(self, user, user_name, password): """Check the user_name and password against existing credentials. Note: user_name is not used here, but is required by external password validation schemes that might override this method. If you use SqlObjectIdentityProvider, but want to check the passwords against an external source (i.e. PAM, a password file, Windows domain), subclass SqlObjectIdentityProvider, and override this method. """ return user.password == self.encrypt_password(password) def load_identity(self, visit_key): """Lookup the principal represented by user_name. Return None if there is no principal for the given user ID. Must return an object with the following properties: user_name: original user name user: a provider dependant object (TG_User or similar) groups: a set of group names permissions: a set of permission names """ return SqlObjectIdentity(visit_key) def anonymous_identity(self): """Return anonymous identity. Must return an object with the following properties: user_name: original user name user: a provider dependant object (TG_User or similar) groups: a set of group names permissions: a set of permission names """ return SqlObjectIdentity() def authenticated_identity(self, user): """Constructs Identity object for users with no visit_key.""" return SqlObjectIdentity(user=user) class TG_VisitIdentity(SQLObject): """A visit to your website.""" class sqlmeta: table = "tg_visit_identity" visit_key = StringCol(length=40, alternateID=True, alternateMethodName="by_visit_key") user_id = IntCol() class TG_Group(InheritableSQLObject): """An ultra-simple group definition.""" class sqlmeta: table = "tg_group" group_name = UnicodeCol(length=16, alternateID=True, alternateMethodName="by_group_name") display_name = UnicodeCol(length=255) created = DateTimeCol(default=datetime.now) # Old names groupId = DeprecatedAttr("groupId", "group_name") displayName = DeprecatedAttr("displayName", "display_name") # collection of all users belonging to this group users = RelatedJoin("TG_User", intermediateTable="tg_user_group", joinColumn="group_id", otherColumn="user_id") # collection of all permissions for this group permissions = RelatedJoin("TG_Permission", joinColumn="group_id", intermediateTable="tg_group_permission", otherColumn="permission_id") [jsonify.when('isinstance(obj, TG_Group)')] def jsonify_group(obj): """Convert group to JSON.""" result = jsonify_sqlobject(obj) result["users"] = [u.user_name for u in obj.users] result["permissions"] = [p.permission_name for p in obj.permissions] return result class TG_User(InheritableSQLObject): """Reasonably basic User definition.""" class sqlmeta: table = "tg_user" user_name = UnicodeCol(length=16, alternateID=True, alternateMethodName="by_user_name") email_address = UnicodeCol(length=255, alternateID=True, alternateMethodName="by_email_address") display_name = UnicodeCol(length=255) password = UnicodeCol(length=40) created = DateTimeCol(default=datetime.now) # Old attribute names userId = DeprecatedAttr("userId", "user_name") emailAddress = DeprecatedAttr("emailAddress", "email_address") displayName = DeprecatedAttr("displayName", "display_name") # groups this user belongs to groups = RelatedJoin("TG_Group", intermediateTable="tg_user_group", joinColumn="user_id", otherColumn="group_id") def _get_permissions(self): perms = set() for g in self.groups: perms = perms | set(g.permissions) return perms def _set_password(self, cleartext_password): """Run cleartext_password through the hash algorithm before saving.""" try: hash = identity.current_provider.encrypt_password(cleartext_password) except identity.exceptions.IdentityManagementNotEnabledException: # Creating identity provider just to encrypt password # (so we don't reimplement the encryption step). ip = SqlObjectIdentityProvider() hash = ip.encrypt_password(cleartext_password) if hash == cleartext_password: log.info("Identity provider not enabled," " and no encryption algorithm specified in config." " Setting password as plaintext.") self._SO_set_password(hash) def set_password_raw(self, password): """Save the password as-is to the database.""" self._SO_set_password(password) [jsonify.when('isinstance(obj, TG_User)')] def jsonify_user(obj): """Convert user to JSON.""" result = jsonify_sqlobject(obj) del result['password'] result["groups"] = [g.group_name for g in obj.groups] result["permissions"] = [p.permission_name for p in obj.permissions] return result class TG_Permission(InheritableSQLObject): """Permissions for a given group.""" class sqlmeta: table = "tg_permission" permission_name = UnicodeCol(length=16, alternateID=True, alternateMethodName="by_permission_name") description = UnicodeCol(length=255) # Old attributes permissionId = DeprecatedAttr("permissionId", "permission_name") groups = RelatedJoin("TG_Group", intermediateTable="tg_group_permission", joinColumn="permission_id", otherColumn="group_id") [jsonify.when('isinstance(obj, TG_Permission)')] def jsonify_permission(obj): """Convert permissions to JSON.""" result = jsonify_sqlobject(obj) result["groups"] = [g.group_name for g in obj.groups] return result def encrypt_password(cleartext_password): """Encrypt given cleartext password.""" try: hash = identity.current_provider.encrypt_password(cleartext_password) except identity.exceptions.RequestRequiredException: # Creating identity provider just to encrypt password # (so we don't reimplement the encryption step). ip = SqlObjectIdentityProvider() hash = ip.encrypt_password(cleartext_password) if hash == cleartext_password: log.info("Identity provider not enabled, and no encryption " "algorithm specified in config. Setting password as plaintext.") return hash PKA>YY"turbogears/identity/soprovider.pyc; ޸HIc@s dklZdklZlZlZlZlZlZlZdk l Z dk Z dk Z e i dZdkZdklZdklZdklZdklZlZed ZeZyeefWn&ej od klZlZnXd Z d e!fd YZ"e#a$e#a%e#a&e#a'de!fdYZ(de!fdYZ)defdYZ*de fdYZ+ei,dgdZ-de fdYZ.ei,dgdZ/de fdYZ0ei,dgdZ1d Z2dS(!(sdatetime(s SQLObjectsSQLObjectNotFounds RelatedJoins DateTimeColsIntCols StringCols UnicodeCol(sInheritableSQLObjectNsturbogears.identity.soprovider(sidentity(s PackageHub(s load_class(sjsonify_sqlobjectsjsonifysturbogears.identity(sSets ImmutableSetcCs_t|ton!t|dot|}nt|to|i|}n|SdS(Ns __unicode__(s isinstancesssstrshasattrsunicodesencodesencoding(sssencoding((s7build\bdist.win32\egg\turbogears\identity\soprovider.pysto_db_encodingssDeprecatedAttrcBs&tZdZedZdZRS(NcCs||_||_dS(N(sold_namesselfsnew_name(sselfsold_namesnew_name((s7build\bdist.win32\egg\turbogears\identity\soprovider.pys__init__%s cCs4tid|i|iftt||iSdS(Ns&%s has been deprecated in favour of %s(swarningsswarnsselfsold_namesnew_namesDeprecationWarningsgetattrsobj(sselfsobjstype((s7build\bdist.win32\egg\turbogears\identity\soprovider.pys__get__)scCs7tid|i|iftt||i|SdS(Ns&%s has been deprecated in favour of %s( swarningsswarnsselfsold_namesnew_namesDeprecationWarningssetattrsobjsvalue(sselfsobjsvalue((s7build\bdist.win32\egg\turbogears\identity\soprovider.pys__set__.s(s__name__s __module__s__init__sNones__get__s__set__(((s7build\bdist.win32\egg\turbogears\identity\soprovider.pysDeprecatedAttr$s  sSqlObjectIdentitycBstZdZeedZdZeeZdZeeZ dZ ee Z dZ ee Z dZeeZdZeeZdZeeZd ZeeZd ZeeZd Zd ZRS( s;Identity that uses a model from a database (via SQLObject).cCs<||_|o(||_|tj o|iq8ndS(N(s visit_keysselfsusers_usersNoneslogin(sselfs visit_keysuser((s7build\bdist.win32\egg\turbogears\identity\soprovider.pys__init__?s    cCsy |iSWntj onX|i}|oOyti|i|_Wqtj o#t i d|it |_qXn t |_|iSdS(s$Get user instance for this identity.sNo such user with ID: %sN( sselfs_usersAttributeErrors visit_linksvisits user_classsgetsuser_idsSQLObjectNotFoundslogswarningsNone(sselfsvisit((s7build\bdist.win32\egg\turbogears\identity\soprovider.pys _get_userFs   cCs!|i otSn|iiSdS(sGet user name of this identity.N(sselfsusersNones user_name(sself((s7build\bdist.win32\egg\turbogears\identity\soprovider.pys_get_user_name[s cCs!|i otSn|iiSdS(sGet user id of this identity.N(sselfsusersNonesid(sself((s7build\bdist.win32\egg\turbogears\identity\soprovider.pys _get_user_idbs cCs |i SdS(sReturn true if not logged in.N(sselfsuser(sself((s7build\bdist.win32\egg\turbogears\identity\soprovider.pys_get_anonymousiscCsy |iSWntj onX|i ot|_n:tgi}|iiD]}||i qS~|_|iSdS(s-Get set of permission names of this identity.N( sselfs _permissionssAttributeErrorsusers frozensetsappends_[1]s permissionsspspermission_name(sselfs_[1]sp((s7build\bdist.win32\egg\turbogears\identity\soprovider.pys_get_permissionsns  9cCsy |iSWntj onX|i ot|_n:tgi}|iiD]}||i qS~|_|iSdS(s(Get set of group names of this identity.N( sselfs_groupssAttributeErrorsusers frozensetsappends_[1]sgroupssgs group_name(sselfs_[1]sg((s7build\bdist.win32\egg\turbogears\identity\soprovider.pys _get_groups}s  9cCsy |iSWntj onX|i ot|_n:tgi}|iiD]}||i qS~|_|iSdS(s&Get set of group IDs of this identity.N( sselfs _group_idssAttributeErrorsusers frozensetsappends_[1]sgroupssgsid(sselfs_[1]sg((s7build\bdist.win32\egg\turbogears\identity\soprovider.pys_get_group_idss  9cCsJ|itjotSnyti|iSWntj o tSnXdS(s$Get the visit link to this identity.N(sselfs visit_keysNones visit_classs by_visit_keysSQLObjectNotFound(sself((s7build\bdist.win32\egg\turbogears\identity\soprovider.pys_get_visit_linkscCstiSdS(sGet the URL for the login page.N(sidentitysget_failure_url(sself((s7build\bdist.win32\egg\turbogears\identity\soprovider.pys_get_login_urlscCsE|i}|o|ii|_ntd|id|ii}dS(s1Set the link between this identity and the visit.s visit_keysuser_idN(sselfs visit_linksvisits_usersidsuser_ids visit_classs visit_key(sselfsvisit((s7build\bdist.win32\egg\turbogears\identity\soprovider.pyslogins  cCs2|i}|o|intitdS(s4Remove the link between this identity and the visit.N(sselfs visit_linksvisits destroySelfsidentitysset_current_identitysSqlObjectIdentity(sselfsvisit((s7build\bdist.win32\egg\turbogears\identity\soprovider.pyslogouts  (s__name__s __module__s__doc__sNones__init__s _get_userspropertysusers_get_user_names user_names _get_user_idsuser_ids_get_anonymouss anonymouss_get_permissionss permissionss _get_groupssgroupss_get_group_idss group_idss_get_visit_links visit_links_get_login_urls login_urlsloginslogout(((s7build\bdist.win32\egg\turbogears\identity\soprovider.pysSqlObjectIdentity<s,                 sSqlObjectIdentityProvidercBsMtZdZdZdZdZdZdZdZdZ RS(sCIdentityProvider that uses a model from a database (via SQLObject).csltt|itii}|dtd}t |a t ot i d|nyt i idi|_Wn"ttfj od|_nX|dtd}t |atot i d|n|dtd }t |atot i d|n|d td }t |atot i d|n|d td |_dS(Nsidentity.soprovider.model.users.TG_UsersSuccesfully loaded "%s"s user_namesUTF-8sidentity.soprovider.model.groups .TG_Groups$identity.soprovider.model.permissions.TG_Permissionsidentity.soprovider.model.visits.TG_VisitIdentitys(identity.soprovider.encryption_algorithmcsti|S(N(sidentitys_encrypt_passwords algorithmspw(spw(s algorithm(s7build\bdist.win32\egg\turbogears\identity\soprovider.pyss(ssupersSqlObjectIdentityProvidersselfs__init__s turbogearssconfigsgets__name__suser_class_paths load_classs user_classslogsinfossqlmetascolumnss dbEncodingsuser_class_db_encodingsKeyErrorsAttributeErrorsgroup_class_paths group_classspermission_class_pathspermission_classsvisit_class_paths visit_classsNones algorithmsencrypt_password(sselfsgetsvisit_class_pathsgroup_class_pathsuser_class_paths algorithmspermission_class_path((s algorithms7build\bdist.win32\egg\turbogears\identity\soprovider.pys__init__s:         cCsybtitidttidttidttidttiti Wn$t j ot i ddSnXdS(s7Create the database tables if they don't already exist.s ifNotExistssANo database is configured: SqlObjectIdentityProvider is disabled.N( shubsbegins user_classs createTablesTrues group_classspermission_classs visit_classscommitsendsKeyErrorslogswarning(sself((s7build\bdist.win32\egg\turbogears\identity\soprovider.pyscreate_provider_models   cCsytt||i}ti|}|i||| ot i d|t Snt i d||t ||SWn'tj ot id|t SnXdS(sValidate the identity represented by user_name using the password. Must return either None if the credentials weren't valid or an object with the following properties: user_name: original user name user: a provider dependant object (TG_User or similar) groups: a set of group names permissions: a set of permission names s"Passwords don't match for user: %ss%Associating user (%s) with visit (%s)sNo such user: %sN(sto_db_encodings user_namesselfsuser_class_db_encodings user_classs by_user_namesusersvalidate_passwordspasswordslogsinfosNones visit_keysSqlObjectIdentitysSQLObjectNotFoundswarning(sselfs user_namespasswords visit_keysuser((s7build\bdist.win32\egg\turbogears\identity\soprovider.pysvalidate_identitys   cCs|i|i|jSdS(sCheck the user_name and password against existing credentials. Note: user_name is not used here, but is required by external password validation schemes that might override this method. If you use SqlObjectIdentityProvider, but want to check the passwords against an external source (i.e. PAM, a password file, Windows domain), subclass SqlObjectIdentityProvider, and override this method. N(suserspasswordsselfsencrypt_password(sselfsusers user_namespassword((s7build\bdist.win32\egg\turbogears\identity\soprovider.pysvalidate_password s cCst|SdS(sLookup the principal represented by user_name. Return None if there is no principal for the given user ID. Must return an object with the following properties: user_name: original user name user: a provider dependant object (TG_User or similar) groups: a set of group names permissions: a set of permission names N(sSqlObjectIdentitys visit_key(sselfs visit_key((s7build\bdist.win32\egg\turbogears\identity\soprovider.pys load_identitys cCs tSdS(s+Return anonymous identity. Must return an object with the following properties: user_name: original user name user: a provider dependant object (TG_User or similar) groups: a set of group names permissions: a set of permission names N(sSqlObjectIdentity(sself((s7build\bdist.win32\egg\turbogears\identity\soprovider.pysanonymous_identity$s cCstd|SdS(s7Constructs Identity object for users with no visit_key.suserN(sSqlObjectIdentitysuser(sselfsuser((s7build\bdist.win32\egg\turbogears\identity\soprovider.pysauthenticated_identity0s( s__name__s __module__s__doc__s__init__screate_provider_modelsvalidate_identitysvalidate_passwords load_identitysanonymous_identitysauthenticated_identity(((s7build\bdist.win32\egg\turbogears\identity\soprovider.pysSqlObjectIdentityProviders  '    sTG_VisitIdentitycBsEtZdZdfdYZedddeddZeZRS(sA visit to your website.ssqlmetacBstZdZRS(Nstg_visit_identity(s__name__s __module__stable(((s7build\bdist.win32\egg\turbogears\identity\soprovider.pyssqlmeta7sslengthi(s alternateIDsalternateMethodNames by_visit_key( s__name__s __module__s__doc__ssqlmetas StringColsTrues visit_keysIntColsuser_id(((s7build\bdist.win32\egg\turbogears\identity\soprovider.pysTG_VisitIdentity5s  sTG_GroupcBstZdZdfdYZedddeddZeddZed e i Z e d d Z e d d ZedddddddZedddddddZRS(s!An ultra-simple group definition.ssqlmetacBstZdZRS(Nstg_group(s__name__s __module__stable(((s7build\bdist.win32\egg\turbogears\identity\soprovider.pyssqlmetaAsslengthis alternateIDsalternateMethodNames by_group_nameisdefaultsgroupIds group_names displayNames display_namesTG_UsersintermediateTables tg_user_groups joinColumnsgroup_ids otherColumnsuser_ids TG_Permissionstg_group_permissions permission_id(s__name__s __module__s__doc__ssqlmetas UnicodeColsTrues group_names display_names DateTimeColsdatetimesnowscreatedsDeprecatedAttrsgroupIds displayNames RelatedJoinsuserss permissions(((s7build\bdist.win32\egg\turbogears\identity\soprovider.pysTG_Group?s    sisinstance(obj, TG_Group)cCsvt|}gi}|iD]}||iq~|d!Bdturbogears/identity/visitor.pyc; ޸HIc@sdZdkZdklZy dkTWnej onXdkZdklZdkl Z dkl Z dkl Z dk Tdkl Z dkZeid Zd Zd Zd Zd efdYZdS(s=The visit and identity management *plugins* are defined here.N(srequest(s*(screate_default_provider(sset_current_identity(sset_current_provider(sset_login_attempted(svisitsturbogears.identitycCsntiidt odSntiidt otdntidtti t dS(Ns identity.onsvisit.ons)Visit tracking must be enabled (visit.on)sIdentity starting( s turbogearssconfigsgetsFalsesIdentityConfigurationExceptionslogsinfoscreate_extension_modelsvisitsenable_visit_pluginsIdentityVisitPlugin(((s4build\bdist.win32\egg\turbogears\identity\visitor.pysstart_extensions cCs0tiidt odSntiddS(Ns identity.onsIdentity shutting down(s turbogearssconfigsgetsFalseslogsinfo(((s4build\bdist.win32\egg\turbogears\identity\visitor.pysshutdown_extension+scCst}|idS(N(screate_default_providersproviderscreate_provider_model(sprovider((s4build\bdist.win32\egg\turbogears\identity\visitor.pyscreate_extension_model2s sIdentityVisitPlugincBsGtZdZdZdZdZdZdZdZRS(NcCstidtii}t|_|dd|_|dd|_ |dd|_ |dd i d }t |_x[|D]S}yt|d |}Wn#tj otd |nX|ii|qWdS( Ns!Identity visit plugin initialisedsidentity.form.user_names user_namesidentity.form.passwordspasswordsidentity.form.submitsloginsidentity.sourcesform,http_auth,visits,sidentity_from_sInvalid identity source: %s(slogsinfos turbogearssconfigsgetscreate_default_providersselfsprovidersuser_name_fieldspassword_fieldssubmit_button_namessplitssourcesslistsidentity_sourcessssgetattrs source_methodsAttributeErrorsIdentityConfigurationExceptionsappend(sselfsgetssourcessss source_method((s4build\bdist.win32\egg\turbogears\identity\visitor.pys__init__8s    cCsit}tid|x,|iD]!}||}|o|Sq q Wtid|ii }|SdS(sRetrieve identity information from the HTTP request. Checks first for form fields defining the identity then for a cookie. If no identity is found, returns an anonymous identity. s!Retrieving identity for visit: %ssNo identity foundN( sNonesidentityslogsdebugs visit_keysselfsidentity_sourcesssourcesprovidersanonymous_identity(sselfs visit_keyssourcesidentity((s4build\bdist.win32\egg\turbogears\identity\visitor.pysidentity_from_requestRs    cCs ti|iidSdS(sDecode base64 user_name:password credentials used in Basic Auth. Returned with username in element 0 and password in element 1. s:N(sbase64s decodestrings credentialssstripssplit(sselfs credentials((s4build\bdist.win32\egg\turbogears\identity\visitor.pysdecode_basic_credentialsescCsytid}Wntj o tSnX|idd\}}|idjot i dtSn|i |\}}tt|ii|||SdS(s)Only basic auth is handled at the moment.s Authorizations isbasicsHTTP Auth is not basicN(srequestsheaderss authorisationsKeyErrorsNonessplits authSchemes schemeDataslowerslogserrorsselfsdecode_basic_credentialss user_namespasswordsset_login_attemptedsTruesprovidersvalidate_identitys visit_key(sselfs visit_keys authSchemes authorisationspasswords user_names schemeData((s4build\bdist.win32\egg\turbogears\identity\visitor.pysidentity_from_http_authms   cCs|ii|SdS(N(sselfsproviders load_identitys visit_key(sselfs visit_key((s4build\bdist.win32\egg\turbogears\identity\visitor.pysidentity_from_visitsc Csti}|i|ioy|i|i}|i|i}|i|it }|id|it }|id|it }tt|ii|||}|t jotidt Sn|SWqtj otidt SqXnt SdS(sInspect the form to pull out identity information. Must have fields for user name, password, and a login submit button. Returns an identity dictionary or none if the form contained no identity information or the information was incorrect. s%s.xs%s.ys'The credentials specified weren't validsMissing fields in login formN(srequestsparamsshas_keysselfssubmit_button_namespopsuser_name_fields user_namespassword_fieldspwsNonessubmitssubmit_xssubmit_ysset_login_attemptedsTruesprovidersvalidate_identitys visit_keysidentityslogswarningsKeyErrorserror( sselfs visit_keyssubmit_yspwssubmitsparamss user_namesidentityssubmit_x((s4build\bdist.win32\egg\turbogears\identity\visitor.pysidentity_from_forms&      cCstiidt otidttdSny|i |i }Wn=t j o1}tidt|g}t|nXtidt|t|idS(Ns identity.ons9Identity is not enabled. Setting current identity to Nones4Caught exception while getting identity from requestsIdentity is available...(s turbogearssconfigsgetsTrueslogsdebugsset_current_identitysNonesselfsidentity_from_requestsvisitskeysidentitysIdentityExceptionses exceptionsstrserrorssIdentityFailuresset_current_providersprovider(sselfsvisitserrorssesidentity((s4build\bdist.win32\egg\turbogears\identity\visitor.pysrecord_requests     ( s__name__s __module__s__init__sidentity_from_requestsdecode_basic_credentialssidentity_from_http_authsidentity_from_visitsidentity_from_formsrecord_request(((s4build\bdist.win32\egg\turbogears\identity\visitor.pysIdentityVisitPlugin7s      (s__doc__sbase64scherrypysrequests sqlobjects ImportErrors turbogearssturbogears.identityscreate_default_providersset_current_identitysset_current_providersset_login_attemptedsturbogears.identity.exceptionssvisitsloggings getLoggerslogsstart_extensionsshutdown_extensionscreate_extension_modelsobjectsIdentityVisitPlugin(sloggingslogs turbogearssset_login_attemptedsshutdown_extensionsbase64srequestsstart_extensionscreate_default_providersset_current_providersset_current_identitysIdentityVisitPluginsvisitscreate_extension_model((s4build\bdist.win32\egg\turbogears\identity\visitor.pys?s&             PKK9qeturbogears/identity/__init__.py"""The TurboGears identity management package. @TODO: Laundry list of things yet to be done: * IdentityFilter should support HTTP Digest Auth * Also want to support Atom authentication (similar to digest) """ import md5 import sha import threading import cherrypy import pkg_resources import logging log = logging.getLogger('turbogears.identity') import turbogears from turbogears.util import request_available, load_class from turbogears.identity.exceptions import * def create_default_provider(): """Create default identity provider. Creates an identity provider according to what is found in the configuration file for the current TurboGears application Returns an identity provider instance or raises an IdentityConfigurationException. """ provider_plugin = turbogears.config.get('identity.provider', 'sqlobject') plugins = pkg_resources.iter_entry_points( 'turbogears.identity.provider', provider_plugin) log.debug("Loading provider from plugin: %s", provider_plugin) provider_class = None for entrypoint in plugins: provider_class = entrypoint.load() break if not provider_class: provider_class = load_class(provider_plugin) if not provider_class: raise IdentityConfigurationException( "IdentityProvider plugin missing: %s" % provider_plugin ) else: return provider_class() class IdentityWrapper(object): """A wrapper class for the thread local data. This allows developers to access the current user information via turbogears.identity.current and get the identity for the current request. """ def identity(self): try: identity = cherrypy.request.identity except AttributeError: identity = None if not identity: if not request_available(): raise RequestRequiredException() raise IdentityManagementNotEnabledException() return identity def __getattr__(self, name): """Return the named attribute of the global state.""" identity = self.identity() if name == '__str__': return identity.__str__ elif name == '__repr__': return identity.__repr__ else: return getattr(identity, name) def __setattr__(self, name, value): """Stash a value in the global state.""" identity = self.identity() setattr(identity, name, value) class ProviderWrapper(object): def __getattr__(self, name): try: provider = cherrypy.request.identityProvider except AttributeError: try: provider = create_default_provider() except Exception: provider = None if provider is None: if not request_available(): raise RequestRequiredException() raise IdentityManagementNotEnabledException() return getattr(provider, name) current = IdentityWrapper() current_provider = ProviderWrapper() def was_login_attempted(): try: return cherrypy.request.identity_login_attempted except AttributeError: return False def set_login_attempted( flag ): cherrypy.request.identity_login_attempted = flag def set_current_identity(identity): cherrypy.request.identity = identity try: cherrypy.request.user_name = identity.user_name except AttributeError: cherrypy.request.user_name = None def set_current_provider( provider ): cherrypy.request.identityProvider = provider from turbogears.identity.conditions import * def _encrypt_password(algorithm, password): """Hash the given password with the specified algorithm. Valid values for algorithm are 'md5' and 'sha1'. All other algorithm values will be essentially a no-op. """ hashed_password = password # The algorithms don't work with unicode objects, so decode first. if isinstance(password, unicode): password_8bit = password.encode('utf-8') else: password_8bit = password if algorithm == 'md5': hashed_password = md5.new(password_8bit).hexdigest() elif algorithm == 'sha1': hashed_password = sha.new(password_8bit).hexdigest() elif algorithm == 'custom': custom_encryption_path = turbogears.config.get( 'identity.custom_encryption', None) if custom_encryption_path: custom_encryption = turbogears.util.load_class( custom_encryption_path) if custom_encryption: hashed_password = custom_encryption(password_8bit) # Make sure the hashed password is a unicode object at the end of the # process, because SQLAlchemy _wants_ that for Unicode columns. if not isinstance(hashed_password, unicode): hashed_password = hashed_password.decode('utf-8') return hashed_password def encrypt_password(cleartext): return current_provider.encrypt_password(cleartext) # declare what should be exported __all__ = [ 'IdentityManagementNotEnabledException', 'IdentityConfigurationException', 'IdentityFailure', 'current', 'current_provider', 'set_current_identity', 'set_current_provider', 'set_identity_errors', 'get_identity_errors', 'was_login_attempted', 'encrypt_password', 'get_failure_url'] PKA>"3$$ turbogears/identity/__init__.pyc; ޸HIc @s dZdkZdkZdkZdkZdkZdkZeidZdk Z dk l Z l Z dk TdZdefdYZdefd YZeZeZd Zd Zd Zd ZdkTdZdZddddddddddddg ZdS(sThe TurboGears identity management package. @TODO: Laundry list of things yet to be done: * IdentityFilter should support HTTP Digest Auth * Also want to support Atom authentication (similar to digest) Nsturbogears.identity(srequest_availables load_class(s*cCstiidd}tid|}tid|t }x|D]}|i }PqDW| ot |}n| otd|n|SdS(sCreate default identity provider. Creates an identity provider according to what is found in the configuration file for the current TurboGears application Returns an identity provider instance or raises an IdentityConfigurationException. sidentity.providers sqlobjectsturbogears.identity.providers Loading provider from plugin: %ss#IdentityProvider plugin missing: %sN(s turbogearssconfigsgetsprovider_plugins pkg_resourcessiter_entry_pointsspluginsslogsdebugsNonesprovider_classs entrypointsloads load_classsIdentityConfigurationException(sprovider_pluginspluginss entrypointsprovider_class((s5build\bdist.win32\egg\turbogears\identity\__init__.pyscreate_default_providers  sIdentityWrappercBs)tZdZdZdZdZRS(sA wrapper class for the thread local data. This allows developers to access the current user information via turbogears.identity.current and get the identity for the current request. cCsaytii}Wntj o t}nX| o%t o tntn|SdS(N(scherrypysrequestsidentitysAttributeErrorsNonesrequest_availablesRequestRequiredExceptions%IdentityManagementNotEnabledException(sselfsidentity((s5build\bdist.win32\egg\turbogears\identity\__init__.pysidentity>s    cCsM|i}|djo |iSn&|djo |iSnt||SdS(s/Return the named attribute of the global state.s__str__s__repr__N(sselfsidentitysnames__str__s__repr__sgetattr(sselfsnamesidentity((s5build\bdist.win32\egg\turbogears\identity\__init__.pys __getattr__Is     cCs |i}t|||dS(s"Stash a value in the global state.N(sselfsidentityssetattrsnamesvalue(sselfsnamesvaluesidentity((s5build\bdist.win32\egg\turbogears\identity\__init__.pys __setattr__Ss (s__name__s __module__s__doc__sidentitys __getattr__s __setattr__(((s5build\bdist.win32\egg\turbogears\identity\__init__.pysIdentityWrapper6s  sProviderWrappercBstZdZRS(NcCsytii}Wn<tj o0y t}WqOtj o t}qOXnX|tjo%t o t nt nt ||SdS(N( scherrypysrequestsidentityProvidersprovidersAttributeErrorscreate_default_providers ExceptionsNonesrequest_availablesRequestRequiredExceptions%IdentityManagementNotEnabledExceptionsgetattrsname(sselfsnamesprovider((s5build\bdist.win32\egg\turbogears\identity\__init__.pys __getattr__[s     (s__name__s __module__s __getattr__(((s5build\bdist.win32\egg\turbogears\identity\__init__.pysProviderWrapperYscCs,ytiiSWntj o tSnXdS(N(scherrypysrequestsidentity_login_attemptedsAttributeErrorsFalse(((s5build\bdist.win32\egg\turbogears\identity\__init__.pyswas_login_attemptedpscCs|ti_dS(N(sflagscherrypysrequestsidentity_login_attempted(sflag((s5build\bdist.win32\egg\turbogears\identity\__init__.pysset_login_attemptedwscCsE|ti_y|iti_Wntj otti_nXdS(N(sidentityscherrypysrequests user_namesAttributeErrorsNone(sidentity((s5build\bdist.win32\egg\turbogears\identity\__init__.pysset_current_identity{s  cCs|ti_dS(N(sproviderscherrypysrequestsidentityProvider(sprovider((s5build\bdist.win32\egg\turbogears\identity\__init__.pysset_current_providerscCs|}t|to|id}n|}|djoti|i }n|djot i|i }n[|djoMt i i dt}|ot ii|}n|o||}qnt|t o|id}n|SdS(sHash the given password with the specified algorithm. Valid values for algorithm are 'md5' and 'sha1'. All other algorithm values will be essentially a no-op. sutf-8smd5ssha1scustomsidentity.custom_encryptionN(spasswordshashed_passwords isinstancesunicodesencodes password_8bits algorithmsmd5snews hexdigestsshas turbogearssconfigsgetsNonescustom_encryption_pathsutils load_classscustom_encryptionsdecode(s algorithmspasswordshashed_passwordscustom_encryption_paths password_8bitscustom_encryption((s5build\bdist.win32\egg\turbogears\identity\__init__.pys_encrypt_passwords$   cCsti|SdS(N(scurrent_providersencrypt_passwords cleartext(s cleartext((s5build\bdist.win32\egg\turbogears\identity\__init__.pysencrypt_passwordss%IdentityManagementNotEnabledExceptionsIdentityConfigurationExceptionsIdentityFailurescurrentscurrent_providersset_current_identitysset_current_providersset_identity_errorssget_identity_errorsswas_login_attemptedsencrypt_passwordsget_failure_url(s__doc__smd5sshas threadingscherrypys pkg_resourcessloggings getLoggerslogs turbogearssturbogears.utilsrequest_availables load_classsturbogears.identity.exceptionsscreate_default_providersobjectsIdentityWrappersProviderWrapperscurrentscurrent_providerswas_login_attemptedsset_login_attemptedsset_current_identitysset_current_providersturbogears.identity.conditionss_encrypt_passwordsencrypt_passwords__all__(scherrypyscurrent_providerslogs__all__sshas turbogearsscurrentscreate_default_providersmd5s load_classswas_login_attempteds_encrypt_passwordsset_current_providersset_current_identitysProviderWrappersencrypt_passwordsrequest_availablesloggingsIdentityWrappersset_login_attempteds pkg_resourcess threading((s5build\bdist.win32\egg\turbogears\identity\__init__.pys?s.        #        PKK9=.EUU*turbogears/identity/tests/test_identity.py# coding=UTF-8 import re import unittest import urllib import formencode import cherrypy from turbogears import testutil, database, identity, config, startup, expose from turbogears.controllers import Controller, RootController from turbogears.identity import SecureResource, \ has_permission, in_group, not_anonymous from turbogears.identity.soprovider import TG_User, TG_Group, TG_Permission #hub = database.AutoConnectHub("sqlite:///:memory:") hub = database.PackageHub("turbogears.identity") try: set except NameError: # Python 2.3 from sets import Set as set def mycustomencrypt(password): return password + '_custom' class RestrictedArea(Controller, SecureResource): require = in_group('peon') [expose()] def index(self): return "restricted_index" [expose()] [identity.require(in_group('admin'))] def in_admin_group(self): return 'in_admin_group' [expose()] [identity.require(in_group('other'))] def in_other_group(self): return 'in_other_group' [expose()] def in_admin_group_explicit_check(self): if 'admin' not in identity.current.groups: raise identity.IdentityFailure("You need to be an Admin") else: return 'in_admin_group' [expose()] def in_other_group_explicit_check(self): if 'other' not in identity.current.groups: raise identity.IdentityException else: return 'in_other_group' class IdentityRoot(RootController): [expose()] def index(self): pass [expose()] def identity_failed(self, **kw): cherrypy.response.status = 401 return 'identity_failed_answer' [expose()] [identity.require(not_anonymous())] def logged_in_only(self): return 'logged_in_only' [expose()] [identity.require(in_group('peon'))] def in_peon_group(self): return 'in_peon_group' [expose()] def test_exposed_require(self): if not hasattr(self.in_peon_group, '_require'): return 'no _require attr' if not isinstance(self.in_peon_group._require, in_group): return 'not correct class' if 'peon' != self.in_peon_group._require.group_name: return 'not correct group name' return '_require is exposed' [expose()] [identity.require(in_group('admin'))] def in_admin_group(self): return 'in_admin_group' [expose()] [identity.require(has_permission('chops_wood'))] def has_chopper_permission(self): return 'has_chopper_permission' [expose()] [identity.require(has_permission('bosses_people'))] def has_boss_permission(self): return "has_boss_permission" [expose()] def logout(self): identity.current.logout() return "logged out" [expose()] [identity.require(not_anonymous())] def user_email(self): return identity.current.user.email_address peon_area = RestrictedArea() [expose()] def new_user_setup(self, user_name, password): return '%s %s' % (user_name, password) _test_encoded_params = ('b=krümel&d.a=klöße1') [expose()] [identity.require(not_anonymous())] def test_params(self, **kwargs): params = self._test_encoded_params # formencode's variable_decode create a datastructure # but does not "decode" anything to_datastruct = formencode.variabledecode.variable_decode expected_params = to_datastruct( dict([p.split('=') for p in params.split('&')])) params_ok = True if not expected_params['b'].decode( 'utf8') == cherrypy.request.params['b']: params_ok = False if not expected_params['d']['a'].decode( 'utf8') == cherrypy.request.params['d']['a']: params_ok = False if params_ok: return 'params ok' else: return 'wrong params: %s\nexpected unicode objects' \ ' for all strings' % cherrypy.request.params class TestIdentity(unittest.TestCase): def setUp(self): # identity requires visit and a failure_url test_config = {'global': { 'visit.on': True, 'identity.on': True, 'identity.failure_url': '/identity_failed', 'identity.soprovider.encryption_algorithm': None}} original_config = dict() for key in test_config['global']: original_config[key] = config.get(key) self._original_config = original_config config.configure_loggers(test_config) config.update(test_config['global']) cherrypy.root = IdentityRoot() startup.startTurboGears() self.init_model() def tearDown(self): startup.stopTurboGears() config.update(self._original_config) def init_model(self): if TG_User.select().count() == 0: user = TG_User(user_name='samIam', email_address='samiam@example.com', display_name='Samuel Amicus', password='secret') admin_group = TG_Group(group_name="admin", display_name="Administrator") peon_group = TG_Group(group_name="peon", display_name="Regular Peon") other_group = TG_Group(group_name="other", display_name="Another Group") chopper_perm = TG_Permission(permission_name='chops_wood', description="Wood Chopper") boss_perm = TG_Permission(permission_name='bosses_people', description="Benevolent Dictator") peon_group.addTG_Permission(chopper_perm) admin_group.addTG_Permission(boss_perm) user.addTG_Group(peon_group) user.addTG_Group(other_group) def test_user_password_parameters(self): """Controller can receive user_name and password parameters.""" testutil.create_request('/new_user_setup?user_name=test&password=pw') firstline = cherrypy.response.body[0] assert 'test pw' in firstline, firstline def test_user_exists(self): u = TG_User.by_user_name('samIam') assert u.email_address == 'samiam@example.com' def test_user_password(self): """Test if we can set a user password (no encryption algorithm).""" hub.begin() u = TG_User.by_user_name('samIam') u.password='password' u.sync() assert u.password == 'password' hub.rollback() hub.end() def test_user_password_unicode(self): """Test if we can set a user password which is encoded as unicode (no encryption algorithm).""" config.update({'identity.soprovider.encryption_algorithm': None}) # force new config values to load startup.startTurboGears() testutil.create_request('/') hub.begin() u = TG_User.by_user_name('samIam') u.password = u'garçon' u.sync() assert u.password == u'garçon' hub.rollback() hub.end() def test_user_password_hashed_sha(self): """Test if a sha hashed password is stored in the database.""" config.update({'identity.soprovider.encryption_algorithm': 'sha1'}) # force new config values to load startup.startTurboGears() testutil.create_request('/') hub.begin() u = TG_User.by_user_name('samIam') u.password = 'password' u.sync() assert u.password =='5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8' hub.rollback() hub.end() def test_user_password_hashed_sha_unicode(self): """Test if a sha hashed password with unicode characters is stored in the database.""" config.update({'identity.soprovider.encryption_algorithm': 'sha1'}) # force new config values to load startup.startTurboGears() testutil.create_request('/') hub.begin() u = TG_User.by_user_name('samIam') u.password = u'garçon' u.sync() assert u.password == '442edb21c491a6e6f502eb79e98614f3c7edf43e' hub.rollback() hub.end() def test_user_password_hashed_md5(self): """Test if a md5 hashed password is stored in the database.""" config.update({'identity.soprovider.encryption_algorithm': 'md5'}) # force new config values to load startup.startTurboGears() testutil.create_request('/') hub.begin() u = TG_User.by_user_name('samIam') u.password = 'password' u.sync() assert u.password =='5f4dcc3b5aa765d61d8327deb882cf99' hub.rollback() hub.end() def test_user_password_hashed_md5_unicode(self): """Test if a md5 hashed password with unicode characters is stored in the database.""" config.update({'identity.soprovider.encryption_algorithm': 'md5'}) # force new config values to load startup.startTurboGears() testutil.create_request('/') hub.begin() u = TG_User.by_user_name('samIam') u.password = u'garçon' u.sync() assert u.password == 'c295c4bb2672ca8c432effc53b40bb1e' hub.rollback() hub.end() def test_user_password_hashed_md5_utf8string(self): """Test if a md5 hashed password with unicode characters is stored in the database if the password is entered as str (encoded in UTF-8). This test ensures that the encryption algorithm does handle non-unicode parameters gracefully.""" config.update({'identity.soprovider.encryption_algorithm': 'md5'}) # force new config values to load startup.startTurboGears() testutil.create_request('/') hub.begin() u = TG_User.by_user_name('samIam') u.password = u'garçon'.encode('UTF-8') u.sync() assert u.password == 'c295c4bb2672ca8c432effc53b40bb1e' hub.rollback() hub.end() def test_user_password_raw(self): """Test that we can store raw values in the password field (without being hashed).""" config.update({'identity.soprovider.encryption_algorithm':'sha1'}) # force new config values to load startup.startTurboGears() testutil.create_request('/') hub.begin() u = TG_User.by_user_name('samIam') u.set_password_raw('password') u.sync() assert u.password =='password' hub.rollback() hub.end() def test_user_password_raw_unicode(self): config.update({'identity.soprovider.encryption_algorithm':'sha1'}) # force new config values to load startup.startTurboGears() testutil.create_request('/') hub.begin() u = TG_User.by_user_name('samIam') u.set_password_raw(u'garçon') u.sync() assert u.password == u'garçon' hub.rollback() hub.end() def test_user_password_hashed_custom(self): """Test if a custom hashed password is stored in the database.""" config.update({'identity.soprovider.encryption_algorithm': 'custom', 'identity.custom_encryption': 'identity.tests.test_identity.mycustomencrypt'}) # force new config values to load startup.startTurboGears() testutil.create_request('/') hub.begin() u = TG_User.by_user_name('samIam') u.password = 'password' u.sync() assert u.password =='password_custom' hub.rollback() hub.end() def test_anonymous_browsing(self): """Test if we can show up anonymously.""" testutil.create_request('/') assert identity.current.anonymous def test_deny_anonymous(self): """Test that we have secured an url from anonymous users.""" testutil.create_request('/logged_in_only') firstline = cherrypy.response.body[0] assert 'identity_failed_answer' in firstline, firstline assert cherrypy.response.status == "401 Unauthorized" def test_deny_anonymous_viewable(self): """Test that a logged in user can see an resource blocked from anonymous users.""" testutil.create_request('/logged_in_only?' 'user_name=samIam&password=secret&login=Login') firstline = cherrypy.response.body[0] assert 'logged_in_only' in firstline, firstline def test_logout(self): """Test that logout works and session is gets invalid afterwards.""" testutil.create_request('/in_peon_group?' 'user_name=samIam&password=secret&login=Login') self.assertEquals("samIam", cherrypy.serving.request.identity.user_name) session_id = re.match("Set-Cookie: (.*?); Path.*", str(cherrypy.response.simple_cookie)).group(1) testutil.create_request('/logout', headers={'Cookie': session_id }) self.assertEquals(None, cherrypy.serving.request.identity.user_name) assert cherrypy.serving.request.identity.anonymous def test_logout_with_set_identity(self): """Test that logout works even when there is no visit_key (e.g. when testutils.set_identity_user is used).""" request = testutil.DummyRequest() old_user = testutil.test_user user = TG_User.by_user_name("samIam") testutil.set_identity_user(user) testutil.attach_identity(request) testutil.set_identity_user(old_user) testutil.call_with_request(cherrypy.root.logout, request) assert request.identity.anonymous def test_require_group(self): """Test that a anonymous user""" testutil.create_request('/in_peon_group') firstline = cherrypy.response.body[0] assert 'identity_failed_answer' in firstline, firstline assert cherrypy.response.status == "401 Unauthorized" def test_require_expose_required_permission(self): """Test that the decorator exposes the correct permissions via _require attribute on the actual method.""" testutil.create_request('/test_exposed_require') firstline = cherrypy.response.body[0] assert 'require is exposed' in firstline, firstline def test_require_group_viewable(self): """Test that a user with proper group membership can see a restricted url.""" testutil.create_request('/in_peon_group?' 'user_name=samIam&password=secret&login=Login') firstline = cherrypy.response.body[0] assert 'in_peon_group' in firstline, firstline user = TG_User.by_user_name("samIam") def test_require_group_viewable(self): """Test that the current user and group properties are set correctly.""" testutil.create_request('/in_peon_group?' 'user_name=samIam&password=secret&login=Login') user = TG_User.by_user_name("samIam") group_ids = set((TG_Group.by_group_name("peon").id, TG_Group.by_group_name("other").id)) assert identity.current.user == user assert identity.current.user_name == user.user_name assert identity.current.user_id == user.id assert identity.current.groups == set(('peon', 'other')) assert identity.current.group_ids == group_ids def test_user_not_in_right_group(self): """Test that a user is denied access if they aren't in the right group.""" testutil.create_request('/in_admin_group?' 'user_name=samIam&password=secret&login=Login') firstline = cherrypy.response.body[0] assert 'identity_failed_answer' in firstline, firstline assert cherrypy.response.status == "401 Unauthorized" def test_require_permission(self): """Test that an anonymous user is denied access to a permission restricted url.""" testutil.create_request('/has_chopper_permission') firstline = cherrypy.response.body[0] assert 'identity_failed_answer' in firstline, firstline assert cherrypy.response.status == "401 Unauthorized" def test_require_permission_viewable(self): """Test that a user with proper permissions can see a restricted url.""" testutil.create_request('/has_chopper_permission?' 'user_name=samIam&password=secret&login=Login') firstline = cherrypy.response.body[0] assert 'has_chopper_permission' in firstline, firstline def test_user_lacks_permission(self): """Test that a user is denied acces if they don't have the proper permission.""" testutil.create_request('/has_boss_permission?' 'user_name=samIam&password=secret&login=Login') firstline = cherrypy.response.body[0] assert 'identity_failed_answer' in firstline, firstline assert cherrypy.response.status == "401 Unauthorized" def test_user_info_available(self): """Test that we can see user information inside our controller.""" testutil.create_request('/user_email?' 'user_name=samIam&password=secret&login=Login') firstline = cherrypy.response.body[0] assert 'samiam@example.com' in firstline, firstline def test_bad_login(self): """Test that we are denied access if we provide a bad login.""" testutil.create_request('/logged_in_only?' 'user_name=samIam&password=wrong&login=Login') firstline = cherrypy.response.body[0] assert 'identity_failed_answer' in firstline, firstline assert cherrypy.response.status == "401 Unauthorized" def test_restricted_subdirectory(self): """Test that we can restrict access to a whole subdirectory.""" testutil.create_request('/peon_area/index') firstline = cherrypy.response.body[0] assert 'identity_failed_answer' in firstline, firstline assert cherrypy.response.status == "401 Unauthorized" def test_restricted_subdirectory_viewable(self): """Test that we can access a restricted subdirectory if we have proper credentials.""" testutil.create_request('/peon_area/index?' 'user_name=samIam&password=secret&login=Login') firstline = cherrypy.response.body[0] assert 'restricted_index' in firstline, firstline def test_decoratator_in_restricted_subdirectory(self): """Test that we can require a different permission in a protected subdirectory.""" testutil.create_request('/peon_area/in_other_group?' 'user_name=samIam&password=secret&login=Login') firstline = cherrypy.response.body[0] assert 'in_other_group' in firstline, firstline def test_decoratator_failure_in_restricted_subdirectory(self): """Test that we can get an identity failure from a decorator in a restricted subdirectory""" testutil.create_request('/peon_area/in_admin_group?' 'user_name=samIam&password=secret&login=Login') firstline = cherrypy.response.body[0] assert 'identity_failed_answer' in firstline, firstline assert cherrypy.response.status == "401 Unauthorized" def test_explicit_checks_in_restricted_subdirectory(self): """Test that explicit permission checks in a protected directory is handled as expected""" testutil.create_request('/peon_area/in_other_group_explicit_check?' 'user_name=samIam&password=secret&login=Login') firstline = cherrypy.response.body[0] assert 'in_other_group' in firstline, firstline def test_throwing_identity_exception_in_restricted_subdirectory(self): """Test that throwing an IdentityException in a protected directory is handled as expected""" testutil.create_request('/peon_area/in_admin_group_explicit_check?' 'user_name=samIam&password=secret&login=Login') firstline = cherrypy.response.body[0] assert 'identity_failed' in firstline, firstline assert cherrypy.response.status == "401 Unauthorized" def test_decode_filter_whenidfails(self): """Test that the decode filter doesn't break with nested variables and Identity""" params = urllib.quote(IdentityRoot._test_encoded_params.decode( 'utf-8').encode('latin-1'), '=&') testutil.create_request('/test_params?' + params) firstline = cherrypy.response.body[0] assert 'identity_failed_answer' in firstline, firstline assert cherrypy.response.status == "401 Unauthorized" def test_decode_filter_whenidworks(self): """Test that the decode filter doesn't break with nested variables and Identity""" params = urllib.quote(IdentityRoot._test_encoded_params.decode( 'utf-8').encode('latin-1'), '=&') params += '&user_name=samIam&password=secret&login=Login' testutil.create_request('/test_params?' + params) firstline = cherrypy.response.body[0] assert 'params ok' in firstline, firstline class TestTGUser(testutil.DBTest): model = TG_User def setUp(self): self._identity_on = config.get('identity.on', False) config.update({'identity.on': False}) try: self._provider = cherrypy.request.identityProvider except AttributeError: self._provider= None cherrypy.request.identityProvider = None startup.startTurboGears() testutil.DBTest.setUp(self) def tearDown(self): testutil.DBTest.tearDown(self) startup.stopTurboGears() cherrypy.request.identityProvider = self._provider config.update({'identity.on': self._identity_on}) def test_create_user(self): """Check that User can be created outside of a running identity provider.""" u = TG_User(user_name='testcase', email_address='testcase@example.com', display_name='Test Me', password='test') assert u.password=='test', u.password PKA>͉͉+turbogears/identity/tests/test_identity.pyc; ޸HIc@sKdkZdkZdkZdkZdkZdklZlZlZl Z l Z l Z dk l Z lZdklZlZlZlZdklZlZlZeidZyeWn ej odklZnXdZde efd YZd efd YZ d ei!fd YZ"dei#fdYZ$dS(N(stestutilsdatabasesidentitysconfigsstartupsexpose(s ControllersRootController(sSecureResourceshas_permissionsin_groups not_anonymous(sTG_UsersTG_Groups TG_Permissionsturbogears.identity(sSetcCs |dSdS(Ns_custom(spassword(spassword((s@build\bdist.win32\egg\turbogears\identity\tests\test_identity.pysmycustomencryptssRestrictedAreacBstZedZegdZegeiedgdZegeiedgdZegdZ egdZ RS( NspeoncCsdSdS(Nsrestricted_index((sself((s@build\bdist.win32\egg\turbogears\identity\tests\test_identity.pysindexssadmincCsdSdS(Nsin_admin_group((sself((s@build\bdist.win32\egg\turbogears\identity\tests\test_identity.pysin_admin_group$ssothercCsdSdS(Nsin_other_group((sself((s@build\bdist.win32\egg\turbogears\identity\tests\test_identity.pysin_other_group)scCs.dtiijotidndSdS(NsadminsYou need to be an Adminsin_admin_group(sidentityscurrentsgroupssIdentityFailure(sself((s@build\bdist.win32\egg\turbogears\identity\tests\test_identity.pysin_admin_group_explicit_check-scCs(dtiijo tindSdS(Nsothersin_other_group(sidentityscurrentsgroupssIdentityException(sself((s@build\bdist.win32\egg\turbogears\identity\tests\test_identity.pysin_other_group_explicit_check4s ( s__name__s __module__sin_groupsrequiresexposesindexsidentitysin_admin_groupsin_other_groupsin_admin_group_explicit_checksin_other_group_explicit_check(((s@build\bdist.win32\egg\turbogears\identity\tests\test_identity.pysRestrictedAreas          s IdentityRootcBstZegdZegdZegeiegdZegeie dgdZ egdZ egeie dgdZ egeie d gd Zegeie d gd Zegd ZegeiegdZeZegdZdZegeiegdZRS(NcCsdS(N((sself((s@build\bdist.win32\egg\turbogears\identity\tests\test_identity.pysindex>scKsdti_dSdS(Nisidentity_failed_answer(scherrypysresponsesstatus(sselfskw((s@build\bdist.win32\egg\turbogears\identity\tests\test_identity.pysidentity_failedBs cCsdSdS(Nslogged_in_only((sself((s@build\bdist.win32\egg\turbogears\identity\tests\test_identity.pyslogged_in_onlyHsspeoncCsdSdS(Ns in_peon_group((sself((s@build\bdist.win32\egg\turbogears\identity\tests\test_identity.pys in_peon_groupMscCsat|id odSnt|iit odSnd|iiijodSndSdS(Ns_requiresno _require attrsnot correct classspeonsnot correct group names_require is exposed(shasattrsselfs in_peon_groups isinstances_requiresin_groups group_name(sself((s@build\bdist.win32\egg\turbogears\identity\tests\test_identity.pystest_exposed_requireQssadmincCsdSdS(Nsin_admin_group((sself((s@build\bdist.win32\egg\turbogears\identity\tests\test_identity.pysin_admin_group\ss chops_woodcCsdSdS(Nshas_chopper_permission((sself((s@build\bdist.win32\egg\turbogears\identity\tests\test_identity.pyshas_chopper_permissionass bosses_peoplecCsdSdS(Nshas_boss_permission((sself((s@build\bdist.win32\egg\turbogears\identity\tests\test_identity.pyshas_boss_permissionfscCstiidSdS(Ns logged out(sidentityscurrentslogout(sself((s@build\bdist.win32\egg\turbogears\identity\tests\test_identity.pyslogoutjs cCstiiiSdS(N(sidentityscurrentsusers email_address(sself((s@build\bdist.win32\egg\turbogears\identity\tests\test_identity.pys user_emailpscCsd||fSdS(Ns%s %s(s user_namespassword(sselfs user_namespassword((s@build\bdist.win32\egg\turbogears\identity\tests\test_identity.pysnew_user_setupvssb=krümel&d.a=klöße1cKs|i}tii}|tgi}|i dD]}||i dq2~}t }|didtiidj o t}n|ddidtiiddj o t}n|odSndtiiSdS( Ns&s=sbsutf8sdsas params oks9wrong params: %s expected unicode objects for all strings(sselfs_test_encoded_paramssparamss formencodesvariabledecodesvariable_decodes to_datastructsdictsappends_[1]ssplitspsexpected_paramssTrues params_oksdecodescherrypysrequestsFalse(sselfskwargss_[1]sexpected_paramss to_datastructspsparamss params_ok((s@build\bdist.win32\egg\turbogears\identity\tests\test_identity.pys test_params}s  E% - (s__name__s __module__sexposesindexsidentity_failedsidentitysrequires not_anonymousslogged_in_onlysin_groups in_peon_groupstest_exposed_requiresin_admin_groupshas_permissionshas_chopper_permissionshas_boss_permissionslogouts user_emailsRestrictedAreas peon_areasnew_user_setups_test_encoded_paramss test_params(((s@build\bdist.win32\egg\turbogears\identity\tests\test_identity.pys IdentityRoot;sB                       s TestIdentitycBs^tZdZdZdZdZdZdZdZdZ d Z d Z d Z d Z d ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZd Z d!Z!d"Z"d#Z#d$Z$d%Z%d&Z&RS('NcCshdhdt<dt<dd<dt<<}t}x%|dD]}ti|||Test that logout works and session is gets invalid afterwards.s;/in_peon_group?user_name=samIam&password=secret&login=LoginssamIamsSet-Cookie: (.*?); Path.*is/logoutsheaderssCookieN(stestutilscreate_requestsselfs assertEqualsscherrypysservingsrequestsidentitys user_namesresmatchsstrsresponses simple_cookiesgroups session_idsNones anonymoussAssertionError(sselfs session_id((s@build\bdist.win32\egg\turbogears\identity\tests\test_identity.pys test_logoutjs  cCsyti}ti}tid}ti|ti |ti|ti t i i ||iiptdS(soTest that logout works even when there is no visit_key (e.g. when testutils.set_identity_user is used).ssamIamN(stestutils DummyRequestsrequests test_usersold_usersTG_Users by_user_namesusersset_identity_usersattach_identityscall_with_requestscherrypysrootslogoutsidentitys anonymoussAssertionError(sselfsold_usersrequestsuser((s@build\bdist.win32\egg\turbogears\identity\tests\test_identity.pystest_logout_with_set_identityus     cCsRtidtiid}d|jp t|tiidjptdS(sTest that a anonymous users/in_peon_groupisidentity_failed_answers401 UnauthorizedN(stestutilscreate_requestscherrypysresponsesbodys firstlinesAssertionErrorsstatus(sselfs firstline((s@build\bdist.win32\egg\turbogears\identity\tests\test_identity.pystest_require_groups  cCs8tidtiid}d|jp t|dS(slTest that the decorator exposes the correct permissions via _require attribute on the actual method.s/test_exposed_requireisrequire is exposedN(stestutilscreate_requestscherrypysresponsesbodys firstlinesAssertionError(sselfs firstline((s@build\bdist.win32\egg\turbogears\identity\tests\test_identity.pys'test_require_expose_required_permissions cCsGtidtiid}d|jp t|tid}dS(sGTest that a user with proper group membership can see a restricted url.s;/in_peon_group?user_name=samIam&password=secret&login=Loginis in_peon_groupssamIamN( stestutilscreate_requestscherrypysresponsesbodys firstlinesAssertionErrorsTG_Users by_user_namesuser(sselfs firstlinesuser((s@build\bdist.win32\egg\turbogears\identity\tests\test_identity.pystest_require_group_viewables  cCstidtid}ttiditidif}t i i|jpt t i i |i jpt t i i|ijpt t i itddfjpt t i i |jpt dS(sBTest that the current user and group properties are set correctly.s;/in_peon_group?user_name=samIam&password=secret&login=LoginssamIamspeonsotherN(stestutilscreate_requestsTG_Users by_user_namesuserssetsTG_Groups by_group_namesids group_idssidentityscurrentsAssertionErrors user_namesuser_idsgroups(sselfs group_idssuser((s@build\bdist.win32\egg\turbogears\identity\tests\test_identity.pystest_require_group_viewables *&cCsRtidtiid}d|jp t|tiidjptdS(sDTest that a user is denied access if they aren't in the right group.s</in_admin_group?user_name=samIam&password=secret&login=Loginisidentity_failed_answers401 UnauthorizedN(stestutilscreate_requestscherrypysresponsesbodys firstlinesAssertionErrorsstatus(sselfs firstline((s@build\bdist.win32\egg\turbogears\identity\tests\test_identity.pystest_user_not_in_right_groups  cCsRtidtiid}d|jp t|tiidjptdS(sLTest that an anonymous user is denied access to a permission restricted url.s/has_chopper_permissionisidentity_failed_answers401 UnauthorizedN(stestutilscreate_requestscherrypysresponsesbodys firstlinesAssertionErrorsstatus(sselfs firstline((s@build\bdist.win32\egg\turbogears\identity\tests\test_identity.pystest_require_permissions  cCs8tidtiid}d|jp t|dS(sBTest that a user with proper permissions can see a restricted url.sD/has_chopper_permission?user_name=samIam&password=secret&login=Loginishas_chopper_permissionN(stestutilscreate_requestscherrypysresponsesbodys firstlinesAssertionError(sselfs firstline((s@build\bdist.win32\egg\turbogears\identity\tests\test_identity.pys test_require_permission_viewables cCsRtidtiid}d|jp t|tiidjptdS(sJTest that a user is denied acces if they don't have the proper permission.sA/has_boss_permission?user_name=samIam&password=secret&login=Loginisidentity_failed_answers401 UnauthorizedN(stestutilscreate_requestscherrypysresponsesbodys firstlinesAssertionErrorsstatus(sselfs firstline((s@build\bdist.win32\egg\turbogears\identity\tests\test_identity.pystest_user_lacks_permissions  cCs8tidtiid}d|jp t|dS(s<Test that we can see user information inside our controller.s8/user_email?user_name=samIam&password=secret&login=Loginissamiam@example.comN(stestutilscreate_requestscherrypysresponsesbodys firstlinesAssertionError(sselfs firstline((s@build\bdist.win32\egg\turbogears\identity\tests\test_identity.pystest_user_info_availables cCsRtidtiid}d|jp t|tiidjptdS(s9Test that we are denied access if we provide a bad login.s;/logged_in_only?user_name=samIam&password=wrong&login=Loginisidentity_failed_answers401 UnauthorizedN(stestutilscreate_requestscherrypysresponsesbodys firstlinesAssertionErrorsstatus(sselfs firstline((s@build\bdist.win32\egg\turbogears\identity\tests\test_identity.pystest_bad_logins  cCsRtidtiid}d|jp t|tiidjptdS(s9Test that we can restrict access to a whole subdirectory.s/peon_area/indexisidentity_failed_answers401 UnauthorizedN(stestutilscreate_requestscherrypysresponsesbodys firstlinesAssertionErrorsstatus(sselfs firstline((s@build\bdist.win32\egg\turbogears\identity\tests\test_identity.pystest_restricted_subdirectorys  cCs8tidtiid}d|jp t|dS(sXTest that we can access a restricted subdirectory if we have proper credentials.s=/peon_area/index?user_name=samIam&password=secret&login=Loginisrestricted_indexN(stestutilscreate_requestscherrypysresponsesbodys firstlinesAssertionError(sselfs firstline((s@build\bdist.win32\egg\turbogears\identity\tests\test_identity.pys%test_restricted_subdirectory_viewables cCs8tidtiid}d|jp t|dS(sTTest that we can require a different permission in a protected subdirectory.sF/peon_area/in_other_group?user_name=samIam&password=secret&login=Loginisin_other_groupN(stestutilscreate_requestscherrypysresponsesbodys firstlinesAssertionError(sselfs firstline((s@build\bdist.win32\egg\turbogears\identity\tests\test_identity.pys+test_decoratator_in_restricted_subdirectorys cCsRtidtiid}d|jp t|tiidjptdS(s^Test that we can get an identity failure from a decorator in a restricted subdirectorysF/peon_area/in_admin_group?user_name=samIam&password=secret&login=Loginisidentity_failed_answers401 UnauthorizedN(stestutilscreate_requestscherrypysresponsesbodys firstlinesAssertionErrorsstatus(sselfs firstline((s@build\bdist.win32\egg\turbogears\identity\tests\test_identity.pys3test_decoratator_failure_in_restricted_subdirectorys  cCs8tidtiid}d|jp t|dS(s\Test that explicit permission checks in a protected directory is handled as expectedsU/peon_area/in_other_group_explicit_check?user_name=samIam&password=secret&login=Loginisin_other_groupN(stestutilscreate_requestscherrypysresponsesbodys firstlinesAssertionError(sselfs firstline((s@build\bdist.win32\egg\turbogears\identity\tests\test_identity.pys/test_explicit_checks_in_restricted_subdirectorys cCsRtidtiid}d|jp t|tiidjptdS(s_Test that throwing an IdentityException in a protected directory is handled as expectedsU/peon_area/in_admin_group_explicit_check?user_name=samIam&password=secret&login=Loginisidentity_faileds401 UnauthorizedN(stestutilscreate_requestscherrypysresponsesbodys firstlinesAssertionErrorsstatus(sselfs firstline((s@build\bdist.win32\egg\turbogears\identity\tests\test_identity.pys;test_throwing_identity_exception_in_restricted_subdirectorys  cCs}titiididd}tid|t i i d}d|jp t |t i idjpt dS( sTTest that the decode filter doesn't break with nested variables and Identitysutf-8slatin-1s=&s /test_params?isidentity_failed_answers401 UnauthorizedN(surllibsquotes IdentityRoots_test_encoded_paramssdecodesencodesparamsstestutilscreate_requestscherrypysresponsesbodys firstlinesAssertionErrorsstatus(sselfs firstlinesparams((s@build\bdist.win32\egg\turbogears\identity\tests\test_identity.pystest_decode_filter_whenidfailss cCsmtitiididd}|d7}tid|t i i d}d|jp t |dS( sTTest that the decode filter doesn't break with nested variables and Identitysutf-8slatin-1s=&s-&user_name=samIam&password=secret&login=Logins /test_params?is params okN(surllibsquotes IdentityRoots_test_encoded_paramssdecodesencodesparamsstestutilscreate_requestscherrypysresponsesbodys firstlinesAssertionError(sselfs firstlinesparams((s@build\bdist.win32\egg\turbogears\identity\tests\test_identity.pystest_decode_filter_whenidworks s  ('s__name__s __module__ssetUpstearDowns init_modelstest_user_password_parametersstest_user_existsstest_user_passwordstest_user_password_unicodestest_user_password_hashed_shas%test_user_password_hashed_sha_unicodestest_user_password_hashed_md5s%test_user_password_hashed_md5_unicodes(test_user_password_hashed_md5_utf8stringstest_user_password_rawstest_user_password_raw_unicodes test_user_password_hashed_customstest_anonymous_browsingstest_deny_anonymousstest_deny_anonymous_viewables test_logoutstest_logout_with_set_identitystest_require_groups'test_require_expose_required_permissionstest_require_group_viewablestest_user_not_in_right_groupstest_require_permissions test_require_permission_viewablestest_user_lacks_permissionstest_user_info_availablestest_bad_loginstest_restricted_subdirectorys%test_restricted_subdirectory_viewables+test_decoratator_in_restricted_subdirectorys3test_decoratator_failure_in_restricted_subdirectorys/test_explicit_checks_in_restricted_subdirectorys;test_throwing_identity_exception_in_restricted_subdirectorystest_decode_filter_whenidfailsstest_decode_filter_whenidworks(((s@build\bdist.win32\egg\turbogears\identity\tests\test_identity.pys TestIdentitysL                              s TestTGUsercBs)tZeZdZdZdZRS(NcCstidt|_tihdt<ytii|_ Wnt j ot |_ nXt ti_t i tii|dS(Ns identity.on(sconfigsgetsFalsesselfs _identity_onsupdatescherrypysrequestsidentityProviders _providersAttributeErrorsNonesstartupsstartTurboGearsstestutilsDBTestssetUp(sself((s@build\bdist.win32\egg\turbogears\identity\tests\test_identity.pyssetUps  cCsFtii|ti|iti_ t i hd|i <dS(Ns identity.on( stestutilsDBTeststearDownsselfsstartupsstopTurboGearss _providerscherrypysrequestsidentityProvidersconfigsupdates _identity_on(sself((s@build\bdist.win32\egg\turbogears\identity\tests\test_identity.pystearDown%s c CsBtdddddddd}|idjp t|id S( sFCheck that User can be created outside of a running identity provider.s user_namestestcases email_addressstestcase@example.coms display_namesTest MespasswordstestN(sTG_UsersuspasswordsAssertionError(sselfsu((s@build\bdist.win32\egg\turbogears\identity\tests\test_identity.pystest_create_user+s  (s__name__s __module__sTG_UsersmodelssetUpstearDownstest_create_user(((s@build\bdist.win32\egg\turbogears\identity\tests\test_identity.pys TestTGUsers (%sresunittestsurllibs formencodescherrypys turbogearsstestutilsdatabasesidentitysconfigsstartupsexposesturbogears.controllerss ControllersRootControllersturbogears.identitysSecureResourceshas_permissionsin_groups not_anonymoussturbogears.identity.soprovidersTG_UsersTG_Groups TG_Permissions PackageHubshubssets NameErrorssetssSetsmycustomencryptsRestrictedAreas IdentityRootsTestCases TestIdentitysDBTests TestTGUser(stestutils TG_PermissionssetscherrypysunittestsstartupsSecureResources TestIdentitys formencodesurllibs not_anonymoussres ControllersmycustomencryptsTG_GroupsconfigsRestrictedAreashubsin_groupsexposes TestTGUsersRootControllershas_permissions IdentityRootsidentitysdatabasesTG_User((s@build\bdist.win32\egg\turbogears\identity\tests\test_identity.pys?s&     + !WPKK9`'turbogears/identity/tests/test_visit.pyimport time from cStringIO import StringIO from urllib import urlencode from unittest import TestCase import cherrypy from turbogears import config, controllers, expose, startup, testutil, visit def cookie_header(morsel): """Returns a dict containing cookie information to pass to a server.""" return {'Cookie': morsel.output(header="")[1:]} class VisitRoot(controllers.RootController): [expose()] def index(self): cur_visit = visit.current() return cur_visit.key class TestVisit(TestCase): def setUp(self): self._visit_on = config.get('visit.on', False) self._visit_source = config.get('visit.source', 'cookie') config.update({'visit.on': True}) self._visit_timeout = config.get('visit.timeout', 20) config.update({'visit.timeout': 50}) self.cookie_name = config.get("visit.cookie.name", 'tg-visit') self._visit_key_param = config.get("visit.form.name", 'tg_visit') cherrypy.root = VisitRoot() def tearDown(self): startup.stopTurboGears() config.update({'visit.timeout': self._visit_timeout}) config.update({'visit.on': self._visit_on}) def test_visit_response(self): """Test if the visit cookie is set in cherrypy.response.""" testutil.create_request("/") assert cherrypy.response.simple_cookie.has_key(self.cookie_name) def test_new_visit(self): """Test that we can see a new visit on the server.""" testutil.create_request("/") assert visit.current().is_new def test_old_visit(self): """Test if we can track a visitor over time.""" testutil.create_request("/") # first visit's cookie morsel = cherrypy.response.simple_cookie[self.cookie_name] testutil.create_request("/", headers=cookie_header(morsel)) assert not visit.current().is_new def test_visit_from_form(self): """Test if the visit key is retrieved from the request params.""" try: config.update({'visit.source': 'cookie,form'}) # first visit's cookie testutil.create_request("/") first_key = cherrypy.response.body[0].strip() # second request with no cookies post_data = StringIO(urlencode({self._visit_key_param: first_key})) testutil.create_request("/", method='POST', rfile=post_data) second_key = cherrypy.response.body[0].strip() finally: config.update({'visit.source': self._visit_source}) assert first_key == second_key def test_visit_from_form_with_cookie_fallback(self): """Test if visit key is retrieved from cookie if not found in params.""" try: config.update({'visit.source': 'form,cookie'}) # first visit's cookie testutil.create_request("/") first_key = cherrypy.response.body[0].strip() # second request with no cookies morsel = cherrypy.response.simple_cookie[self.cookie_name] testutil.create_request("/", headers=cookie_header(morsel)) second_key = cherrypy.response.body[0].strip() finally: config.update({'visit.source': self._visit_source}) assert first_key == second_key def test_cookie_expires(self): """Test if the visit timeout mechanism works.""" timeout = config.get('visit.timeout', 50) try: # set expiration to one second for this test only config.update({'visit.timeout': 1.0/60}) testutil.create_request("/") morsel = cherrypy.response.simple_cookie[self.cookie_name] time.sleep(2) # 2 seconds testutil.create_request("/", headers=cookie_header(morsel)) finally: config.update({'visit.timeout': timeout}) assert cherrypy.response.simple_cookie[ self.cookie_name].value != morsel.value, \ 'cookie values should not match' assert visit.current().is_new, \ 'this should be a new visit, as the cookie has expired' def test_cookie_not_permanent(self): """Check that by default the visit cookie is not permanent.""" testutil.create_request('/') morsel = cherrypy.response.simple_cookie[self.cookie_name] assert not morsel['expires'] and not morsel['max-age'] def test_cookie_permanent(self): """Check that the visit cookie can be made permanent.""" permanent = config.get('visit.cookie.permanent', False) try: # set cookie permanent for this test only (needs restart) startup.stopTurboGears() config.update({'visit.cookie.permanent': True}) startup.startTurboGears() testutil.create_request('/') morsel = cherrypy.response.simple_cookie[self.cookie_name] finally: config.update({'visit.cookie.permanent': permanent}) assert morsel['max-age'] == 3000 expires = time.mktime(time.strptime(morsel['expires'], '%a, %d-%b-%Y %H:%M:%S GMT')[:8] + (0,)) should_expire = time.mktime(time.gmtime()) + morsel['max-age'] assert abs(should_expire - expires) < 3 PKA>L*t t (turbogears/identity/tests/test_visit.pyc; ޸HIc@sdkZdklZdklZdklZdkZdkl Z l Z l Z l Z l Z lZdZde ifdYZdefd YZdS( N(sStringIO(s urlencode(sTestCase(sconfigs controllerssexposesstartupstestutilsvisitcCs!hd|idddgˋ&turbogears/identity/tests/__init__.pyc; ޸HIc@sdS(N((((s;build\bdist.win32\egg\turbogears\identity\tests\__init__.pys?sPKK9"turbogears/qstemplates/__init__.pyPKA>2#turbogears/qstemplates/__init__.pyc; HIc@sdS(N((((s8build\bdist.win32\egg\turbogears\qstemplates\__init__.pys?sPKK9Bturbogears/qstemplates/qsbase/+einame+.egg-info/paster_plugins.txtPKK9 8turbogears/qstemplates/qsbase/+einame+.egg-info/PKG-INFOVersion: 0.0 PKK9|Bturbogears/qstemplates/qsbase/+einame+.egg-info/sqlobject.txt_tmpl#if $sqlobject != 'True' and $getVar('SkipTemplate', None) #raise $SkipTemplate #end if db_module=${package}.model history_dir=${"$"}base/${package}/sqlobject-history PKK93i7turbogears/qstemplates/qsbase/+package+/release.py_tmpl# Release information about ${project} version = "1.0" # description = "Your plan to rule the world" # long_description = "More description about your plan" # author = "Your Name Here" # email = "YourEmail@YourDomain" # copyright = "Vintage 2008 - a good year indeed" # if it's open source, you might want to specify these # url = "http://yourcool.site/" # download_url = "http://yourcool.site/download" # license = "MIT" PKK93turbogears/qstemplates/qsbase/+package+/__init__.pyPKA>xT$/4turbogears/qstemplates/qsbase/+package+/__init__.pyc; HIc@sdS(N((((sIbuild\bdist.win32\egg\turbogears\qstemplates\qsbase\+package+\__init__.pys?sPKK9@Vp>>=turbogears/qstemplates/qsbase/+package+/static/css/empty_tmpl#if $getVar('SkipTemplate', None) #raise $SkipTemplate #end ifPKK9F899Aturbogears/qstemplates/qsbase/+package+/static/images/favicon.icoGIF89aM]]]Cqqq|||ӑan/-.ͣӴ򓓓̾ίuRƴZ0T%`ԇmbn01onniiiؐiV}QQQGGGC&ÛT*fff```sA.{-M"WWWSfAZ2wgc[Hp$>l1l:pPI򞾜jlqL̞沶䌍beiۅ=ߏ썐nqvwzľHuuvՂLMMSUYzCt6\_cxxx󅉏NPS]`d2.on:::QSWֶ˦PHfhmABBöƻ՝ISSSbcéssgggXXXZZ[ȿ|$##ͺ!Created with The GIMP,4a!y3PeHfD$ <͊HXMc ʁp0:Hctq wbE'Ę4iRx{oXBQUGZP#UR]  t-( ϗ.5Q:TPiŚ(ьlj16ls"@˹kexK#F 2>}\bD*$h5 碆1cb6q#U0$#_NH D蛬`-a@;PKK9JpGKturbogears/qstemplates/qsbase/+package+/static/images/tg_under_the_hood.pngPNG  IHDRD#gAMAOX2tEXtSoftwareAdobe ImageReadyqe<PLTEŦĻs8ziǜsljIƗji3٥sުd@wIrG߹rwCoęZ& ]KڳtS漡Զ½mDzT੃]{;˳bQ۾U:`LVs)ѻJF!ׂYm]1|XFʬ⽑htcxC&õѾk;!xK4O$iZ8ͥ]zS&AvT|f;qCSY1|̱ǔiQ㷣bLg+ t3Ƒ\cƻմֻԴW)㸕t\nuoTŠ}ωfT‰P˿{R=eڪ}Qi[`.hWʾ~MɻtN#9 ؟go@&A_3oG1±x._{>~ ЧpͶbj>L.~R/ϝnǮ÷KFѷfWǢX!ὈQ, 0IDATxԚ XWib@N8h 5X( "EEb-T|Xj-"j}`kJZ1P5ƾVִD{gɀT~/K{933ݼtX !Z9&hI! 25_1ohHhjLQ> K_^L#%z5Q#0%CLPW8 Zɛ9ZW_S%V<@۳5I_Z^xgTԌwΟ/+?yA%R*0t aeeae11+;;ls̬p րx'{yՅ 7y R 99{kR?, =?yҤkx]3ik`mX)MtLQ?FΤ.gt90gW^w^{\\j>8x^{{mܰJ) rC3gmq \ (l€?z'Y3241ec2t{;I p9UL.Av8!KA>dryyLyۡGcA3)8d`l8s v @.czy~#lB29;OxW#NϞ/nT)@]ky `E jö_~jI\_w>~}PiRk/zok'^ (.•oY~˷+Ǝ[v68!i;>~((=zZ-LV쁭[7o98B$W}4@p.f{W7W^_\L'ÑC\ȕR3@9>pWdDԨnf{2_8rʂYW;@ yGe/葧(]_{{e}MJ<\'FipIΔ4Z7ռز,)QLB5%0AlKYIU{ݭ>}ꖏZ7Urޡ;`ktg Lpy!^i_HϴgA)䜵Bae5sdQ555m?*%_1E#V*GML hn. (.xQ1?:*:jg|TH k! I+RDg~T7TD/Cz*y'OX3Zۨ_s8)ݖҠੑӾz5UVV/u\E>ZSP`)u N<󣍯guE;e)13%*x H+OiS8W씵Z՛"ƍE5-€E+Wsp.NFntrZ%'}\6qnܙe9=Qr1w1Y玔qJIr.񔢢U;lt"8eb*4*;#frZRKuf%9`jQ㫢 01կ•NY i)uW)M+hgΤ>X:6:cP i!7龚Z_"zӀ_|@E,oFhZ[͛RW@%mp2>րa5vn3฾h: ./?wjܸZBQ5$SOޑ\dC >eZARB-7&Uo&G ERAxGRy`nJ"6I:<2690=@> vF _mw!@ rL'Ʌ::q![o!a5m2p@ 3`( u  2 7P_wXlr[PM[hSRщ0F$жK\BX}/YMXʞãm ڟv]$#]Ϛ6v[JAh>47v".Ie{副O Ggwv>/NSa*Dru.xJ']-]s],t͡5. ;\ )p"p}zA'l4s"TddZ}vhN :.^blw2`&^̾iLoZZ#gх0ꭤ&SyI ks+7',Z =91(ItxD .Az lYI,:%5}h!b'2ǰ&Yz [<"E<.o;^k6^Y8fW 'a,6j{ H< z"ZQ PbL@c1L0gEgn Htdt".'a D0} -Û0,4gPтɬo8KP-CfUZ)nBr A$Q5%1\օKD\zM6ӣ @+`p{VLYdmk ٮ7$KgnӶ4ւ͠ j?ZtԴwGG$E LUj|7%"ܞ#LhrO`f"A 8F%X^6Do4P Gz ܍q#s$҂Lϟ@7~VLUh]nzzczplOdg; Z@[l-fX`0VZ<|7~OF`6­h]!!)@yHk3;[̹ jj5t5[Nߺ= ~lIENDB`PKK9pk k Mturbogears/qstemplates/qsbase/+package+/static/images/under_the_hood_blue.pngPNG  IHDR(+gAMA7tEXtSoftwareAdobe ImageReadyqe<PLTE2|٢a=9裏e}ֽĴҏ%ØIꮮפְ]B҈®̡̥ɻȡٍ]ŷzرQ׿ط|-Ðܲ㖬ŽdSksYIDATxbh h: hen#.@,SU^%~}=%aPg{ ]48g +ٱx ۱@,Y%~^35`UU~^a^~~d,@ \h)y)'&0I g qprp\ Yc̨UP6`.fx [MH2X@&P(](͘Vjjfʘef1-!= z@u0=jj \< ,&@pgpˀ a`bbhmejmefj1[9`,]L66 3 ~l`y h7H!\7'#P.]:jb^ B 8C#E[[mZ[E۹Z[[[ڙ,t8VFm~b@70K2V10s'͕ISh+ HMbat9 D# bRhmmbbomjm``omMlml 2J03ImKjgPTL,&0A5°Gy0gsshY@!"ʺQTHQA bdĹݭiKk|@"ncfkj, G5Q["B(50zYMR-NYVD[PHXVfVFy&LA^j;K `hE y `h@>`1 հ>Al7hHb'$$0Krić PFHu@PAIH"7W,fA;`h)#_UY*q'BrH# (;\E٘E\ ąxDEm;\32:KRK]K] ۈ h$ P3D~OVNZ霆`Wi*@Hbb,l "" L[RDRRdbg ZYU|B Aqq-!f&yI!!Iynnfy- fPO ԌP"'Kp]eo..YlL: `fWoL@A (ldfu ( 6 ln: deaQcDyRaDq B^ 'W3ǫoг*jBVYm6 J5! %^~acAVJ("Yr||rAr|Rrm|ArRRmmm\Rj*Жm9KԀgMUMU7U,{ ]h @96.6) V֐ocnや;)' RkkאUꎠ2CX5V5&-}x@8 H1# ,8P@ (k/P!+(("koꨐQ uYR\\jgoGv0١Β%0DA*a]1Ks^MA^^V^^^P J", Ѧ J`|Rĕ4 ))m{n\:X(ک *QHu1Y58@E+QugF' ֹKvAAWAVg/YSSdi0g 88[K@: Xr bh8 h u@ Rg1M^@lIENDB`PKK9@Vp>>Dturbogears/qstemplates/qsbase/+package+/static/javascript/empty_tmpl#if $getVar('SkipTemplate', None) #raise $SkipTemplate #end ifPKK9=turbogears/qstemplates/qsbase/+package+/templates/__init__.pyPKA>,ͣ>turbogears/qstemplates/qsbase/+package+/templates/__init__.pyc; HIc@sdS(N((((sSbuild\bdist.win32\egg\turbogears\qstemplates\qsbase\+package+\templates\__init__.pys?sPKK90 .turbogears/qstemplates/quickstart/dev.cfg_tmpl[global] # This is where all of your settings go for your development environment # Settings that are the same for both development and production # (such as template engine, encodings, etc.) all go in # ${package}/config/app.cfg # DATABASE #if $sqlalchemy == "True" # driver://username:password@host:port/database # pick the form for your database # sqlalchemy.dburi="postgres://username@hostname/databasename" # sqlalchemy.dburi="mysql://username:password@hostname:port/databasename" # sqlalchemy.dburi="sqlite://%(current_dir_uri)s/devdata.sqlite" # If you have sqlite, here's a simple default to get you started # in development sqlalchemy.dburi="sqlite:///devdata.sqlite" #else # pick the form for your database # sqlobject.dburi="postgres://username@hostname/databasename" # sqlobject.dburi="mysql://username:password@hostname:port/databasename" # sqlobject.dburi="sqlite:///file_name_and_path" # If you have sqlite, here's a simple default to get you started # in development sqlobject.dburi="sqlite://%(current_dir_uri)s/devdata.sqlite" # if you are using a database or table type without transactions # (MySQL default, for example), you should turn off transactions # by prepending notrans_ on the uri # sqlobject.dburi="notrans_mysql://username:password@hostname:port/databasename" # for Windows users, sqlite URIs look like: # sqlobject.dburi="sqlite:///drive_letter:/path/to/file" #end if # SERVER # Some server parameters that you may want to tweak # server.socket_port=8080 # Enable the debug output at the end on pages. # log_debug_info_filter.on = False server.environment="development" autoreload.package="${package}" # Auto-Reload after code modification # autoreload.on = True # Set to True if you'd like to abort execution if a controller gets an # unexpected parameter. False by default tg.strict_parameters = True # LOGGING # Logging configuration generally follows the style of the standard # Python logging module configuration. Note that when specifying # log format messages, you need to use *() for formatting variables. # Deployment independent log configuration is in ${package}/config/log.cfg [logging] [[loggers]] [[[${package}]]] level='DEBUG' qualname='${package}' handlers=['debug_out'] [[[allinfo]]] level='INFO' handlers=['debug_out'] [[[access]]] level='INFO' qualname='turbogears.access' handlers=['access_out'] propagate=0 #if $identity != 'none' [[[identity]]] level='INFO' qualname='turbogears.identity' handlers=['access_out'] propagate=0 #end if #if $sqlalchemy == "True" [[[database]]] # Set to INFO to make SQLAlchemy display SQL commands level='ERROR' qualname='sqlalchemy.engine' handlers=['debug_out'] propagate=0 #end if PKK9‚1turbogears/qstemplates/quickstart/README.txt_tmpl${project} This is a TurboGears (http://www.turbogears.org) project. It can be started by running the start-${package}.py script.PKK9o 6turbogears/qstemplates/quickstart/sample-prod.cfg_tmpl[global] # This is where all of your settings go for your production environment. # You'll copy this file over to your production server and provide it # as a command-line option to your start script. # Settings that are the same for both development and production # (such as template engine, encodings, etc.) all go in # ${package}/config/app.cfg # DATABASE #if $sqlalchemy == "True" # driver://username:password@host:port/database # pick the form for your database # sqlalchemy.dburi="postgres://username@hostname/databasename" # sqlalchemy.dburi="mysql://username:password@hostname:port/databasename" # sqlalchemy.dburi="sqlite:///file_name_and_path" # If you have sqlite, here's a simple default to get you started # in development sqlalchemy.dburi="sqlite:///%(current_dir_uri)s/devdata.sqlite" #else # pick the form for your database # sqlobject.dburi="postgres://username@hostname/databasename" # sqlobject.dburi="mysql://username:password@hostname:port/databasename" # sqlobject.dburi="sqlite:///file_name_and_path" # If you have sqlite, here's a simple default to get you started # in development sqlobject.dburi="sqlite://%(current_dir_uri)s/devdata.sqlite" # if you are using a database or table type without transactions # (MySQL default, for example), you should turn off transactions # by prepending notrans_ on the uri # sqlobject.dburi="notrans_mysql://username:password@hostname:port/databasename" # for Windows users, sqlite URIs look like: # sqlobject.dburi="sqlite:///drive_letter:/path/to/file" #end if # SERVER server.environment="production" # Sets the number of threads the server uses # server.thread_pool = 1 # if this is part of a larger site, you can set the path # to the TurboGears instance here # server.webpath="" # Set to True if you are deploying your App behind a proxy # e.g. Apache using mod_proxy # base_url_filter.on = False # Set to True if your proxy adds the x_forwarded_host header # base_url_filter.use_x_forwarded_host = True # If your proxy does not add the x_forwarded_host header, set # the following to the *public* host url. # (Note: This will be overridden by the use_x_forwarded_host option # if it is set to True and the proxy adds the header correctly. # base_url_filter.base_url = "http://www.example.com" # Set to True if you'd like to abort execution if a controller gets an # unexpected parameter. False by default # tg.strict_parameters = False # LOGGING # Logging configuration generally follows the style of the standard # Python logging module configuration. Note that when specifying # log format messages, you need to use *() for formatting variables. # Deployment independent log configuration is in ${package}/config/log.cfg [logging] [[handlers]] [[[access_out]]] # set the filename as the first argument below args="('server.log',)" class='FileHandler' level='INFO' formatter='message_only' [[loggers]] [[[${package}]]] level='ERROR' qualname='${package}' handlers=['error_out'] [[[access]]] level='INFO' qualname='turbogears.access' handlers=['access_out'] propagate=0 PKK9=J J /turbogears/qstemplates/quickstart/setup.py_tmpl# -*- coding: utf-8 -*- from setuptools import setup, find_packages from turbogears.finddata import find_package_data import os execfile(os.path.join("${package}", "release.py")) packages=find_packages() package_data = find_package_data(where='${package}', package='${package}') if os.path.isdir('locales'): packages.append('locales') package_data.update(find_package_data(where='locales', exclude=('*.po',), only_in_packages=False)) setup( name="${project}", version=version, # uncomment the following lines if you fill them out in release.py #description=description, #author=author, #author_email=email, #url=url, #download_url=download_url, #license=license, install_requires=[ "TurboGears >= ${turbogearsversion}", #if $sqlobject == 'True' "$sqlobjectversion" #elif $sqlalchemy == 'True' "${sqlalchemyversion}", #if $elixir == 'True' "${elixirversion}", #end if #end if ], zip_safe=False, packages=packages, package_data=package_data, keywords=[ # Use keywords if you'll be adding your package to the # Python Cheeseshop # if this has widgets, uncomment the next line # 'turbogears.widgets', # if this has a tg-admin command, uncomment the next line # 'turbogears.command', # if this has identity providers, uncomment the next line # 'turbogears.identity.provider', # If this is a template plugin, uncomment the next line # 'python.templating.engines', # If this is a full application, uncomment the next line # 'turbogears.app', ], classifiers=[ 'Development Status :: 3 - Alpha', 'Operating System :: OS Independent', 'Programming Language :: Python', 'Topic :: Software Development :: Libraries :: Python Modules', 'Framework :: TurboGears', # if this is an application that you'll distribute through # the Cheeseshop, uncomment the next line # 'Framework :: TurboGears :: Applications', # if this is a package that includes widgets that you'll distribute # through the Cheeseshop, uncomment the next line # 'Framework :: TurboGears :: Widgets', ], test_suite='nose.collector', entry_points = { 'console_scripts': [ 'start-${package} = ${package}.commands:start', ], }, # Uncomment next line and create a default.cfg file in your project dir # if you want to package a default configuration in your egg. #data_files = [('config', ['default.cfg'])], ) PKK9v9turbogears/qstemplates/quickstart/start-+package+.py_tmpl#!${sys_executable} # -*- coding: utf-8 -*- """Start script for the ${project} TurboGears project. This script is only needed during development for running from the project directory. When the project is installed, easy_install will create a proper start script. """ import sys from ${package}.commands import start, ConfigurationError if __name__ == "__main__": try: start() except ConfigurationError, exc: sys.stderr.write(str(exc)) sys.exit(1) PKK9)cc/turbogears/qstemplates/quickstart/test.cfg_tmpl[global] # You can place test-specific configuration options here (like test db uri, etc) # # DATABASE #if $sqlalchemy != "True" sqlobject.dburi = "sqlite:///:memory:" #else sqlalchemy.dburi = "sqlite:///:memory:" #end if # LOGGING [logging] [[formatters]] [[[full_content]]] format='*(asctime)s *(name)s *(levelname)s *(message)s' [[handlers]] [[[test_out]]] class='StreamHandler' level='DEBUG' args='(sys.stdout,)' formatter='full_content' [[loggers]] [[[${package}]]] level='DEBUG' qualname='${package}' handlers=['test_out'] [[[turbogears]]] level='INFO' qualname='turbogears' handlers=['test_out'] PKK9} "h$$<turbogears/qstemplates/quickstart/+package+/commands.py_tmpl# -*- coding: utf-8 -*- """This module contains functions called from console script entry points.""" import sys from os import getcwd from os.path import dirname, exists, join import pkg_resources pkg_resources.require("TurboGears>=$turbogearsversion") #if $identity == 'sqlobject' pkg_resources.require("$sqlobjectversion") #elif $identity == 'sqlalchemy' pkg_resources.require("$sqlalchemyversion") #end if import cherrypy import turbogears cherrypy.lowercase_api = True class ConfigurationError(Exception): pass def start(): """Start the CherryPy application server.""" setupdir = dirname(dirname(__file__)) curdir = getcwd() # First look on the command line for a desired config file, # if it's not on the command line, then look for 'setup.py' # in the current directory. If there, load configuration # from a file called 'dev.cfg'. If it's not there, the project # is probably installed and we'll look first for a file called # 'prod.cfg' in the current directory and then for a default # config file called 'default.cfg' packaged in the egg. if len(sys.argv) > 1: configfile = sys.argv[1] elif exists(join(setupdir, "setup.py")): configfile = join(setupdir, "dev.cfg") elif exists(join(curdir, "prod.cfg")): configfile = join(curdir, "prod.cfg") else: try: configfile = pkg_resources.resource_filename( pkg_resources.Requirement.parse("${project}"), "config/default.cfg") except pkg_resources.DistributionNotFound: raise ConfigurationError("Could not find default configuration.") turbogears.update_config(configfile=configfile, modulename="${package}.config") from ${package}.controllers import Root turbogears.start_server(Root()) PKK9 ~"?turbogears/qstemplates/quickstart/+package+/controllers.py_tmplimport turbogears as tg from turbogears import controllers, expose, flash # from ${package} import model #if $identity != "none" from turbogears import identity, redirect from cherrypy import request, response # from ${package} import json #end if # import logging # log = logging.getLogger("${package}.controllers") class Root(controllers.RootController): ${b}expose(template="${package}.templates.welcome")${e} #if $identity != "none" # ${b}identity.require(identity.in_group("admin"))${e} #end if def index(self): import time # log.debug("Happy TurboGears Controller Responding For Duty") flash("Your application is now running") return dict(now=time.ctime()) #if $identity != "none" ${b}expose(template="${package}.templates.login")${e} def login(self, forward_url=None, *args, **kw): if forward_url: if isinstance(forward_url, list): forward_url = forward_url.pop(0) else: del request.params['forward_url'] if not identity.current.anonymous and identity.was_login_attempted() \ and not identity.get_identity_errors(): redirect(tg.url(forward_url or '/', kw)) if identity.was_login_attempted(): msg = _("The credentials you supplied were not correct or " "did not grant access to this resource.") elif identity.get_identity_errors(): msg = _("You must provide your credentials before accessing " "this resource.") else: msg = _("Please log in.") if not forward_url: forward_url = request.headers.get("Referer", "/") response.status = 401 return dict(logging_in=True, message=msg, forward_url=forward_url, previous_url=request.path_info, original_parameters=request.params) ${b}expose()${e} def logout(self): identity.current.logout() redirect("/") #end if PKK9nE#8turbogears/qstemplates/quickstart/+package+/json.py_tmpl# A JSON-based API(view) for your app. # Most rules would look like: # # @jsonify.when("isinstance(obj, YourClass)") # def jsonify_yourclass(obj): # return [obj.val1, obj.val2] # # @jsonify can convert your objects to following types: # lists, dicts, numbers and strings from turbojson.jsonify import jsonify #if $identity == "sqlobject" from turbojson.jsonify import jsonify_sqlobject from ${package}.model import User, Group, Permission ${b}jsonify.when('isinstance(obj, Group)')${e} def jsonify_group(obj): result = jsonify_sqlobject( obj ) result["users"] = [u.user_name for u in obj.users] result["permissions"] = [p.permission_name for p in obj.permissions] return result ${b}jsonify.when('isinstance(obj, User)')${e} def jsonify_user(obj): result = jsonify_sqlobject( obj ) del result['password'] result["groups"] = [g.group_name for g in obj.groups] result["permissions"] = [p.permission_name for p in obj.permissions] return result ${b}jsonify.when('isinstance(obj, Permission)')${e} def jsonify_permission(obj): result = jsonify_sqlobject( obj ) result["groups"] = [g.group_name for g in obj.groups] return result #end if PKK9qLg?0?09turbogears/qstemplates/quickstart/+package+/model.py_tmpl#if $identity != 'none' from datetime import datetime #end if #if $sqlobject == 'True' import pkg_resources pkg_resources.require("$sqlobjectversion") #elif $sqlalchemy == 'True' import pkg_resources pkg_resources.require("$sqlalchemyversion") #if $elixir == 'True' pkg_resources.require("$elixirversion") #end if #end if #if $sqlobject == 'True' from turbogears.database import PackageHub # import some basic SQLObject classes for declaring the data model # (see http://www.sqlobject.org/SQLObject.html#declaring-the-class) from sqlobject import SQLObject, SQLObjectNotFound, RelatedJoin # import some datatypes for table columns from SQLObject # (see http://www.sqlobject.org/SQLObject.html#column-types for more) from sqlobject import StringCol, UnicodeCol, IntCol, DateTimeCol #end if #if $sqlalchemy == 'True' #if $elixir == 'True' # import the basic Elixir classes and functions for declaring the data model # (see http://elixir.ematia.de/trac/wiki/TutorialDivingIn) from elixir import Entity, Field, OneToMany, ManyToOne, ManyToMany from elixir import options_defaults, using_options, setup_all # import some datatypes for table columns from Elixir # (see http://www.sqlalchemy.org/docs/04/types.html for more) from elixir import String, Unicode, Integer, DateTime #else from turbogears.database import metadata, mapper # import some basic SQLAlchemy classes for declaring the data model # (see http://www.sqlalchemy.org/docs/04/ormtutorial.html) from sqlalchemy import Table, Column, ForeignKey from sqlalchemy.orm import relation # import some datatypes for table columns from SQLAlchemy # (see http://www.sqlalchemy.org/docs/04/types.html for more) from sqlalchemy import String, Unicode, Integer, DateTime #end if #end if #if $identity != 'none' from turbogears import identity #end if #if $sqlobject == 'True' __connection__ = hub = PackageHub('${package}') # your data model # class YourDataClass(SQLObject): # pass #end if #if $sqlalchemy == 'True' #if $elixir == 'True' options_defaults['autosetup'] = False # your data model # class YourDataClass(Entity): # pass #else # your data tables # your_table = Table('yourtable', metadata, # Column('my_id', Integer, primary_key=True) # ) # your model classes # class YourDataClass(object): # pass # set up mappers between your data tables and classes # mapper(YourDataClass, your_table) #end if #end if #if $identity == 'sqlobject' # the identity model class Visit(SQLObject): """ A visit to your site """ class sqlmeta: table = 'visit' visit_key = StringCol(length=40, alternateID=True, alternateMethodName='by_visit_key') created = DateTimeCol(default=datetime.now) expiry = DateTimeCol() def lookup_visit(cls, visit_key): try: return cls.by_visit_key(visit_key) except SQLObjectNotFound: return None lookup_visit = classmethod(lookup_visit) class VisitIdentity(SQLObject): """ A Visit that is link to a User object """ visit_key = StringCol(length=40, alternateID=True, alternateMethodName='by_visit_key') user_id = IntCol() class Group(SQLObject): """ An ultra-simple group definition. """ # names like "Group", "Order" and "User" are reserved words in SQL # so we set the name to something safe for SQL class sqlmeta: table = 'tg_group' group_name = UnicodeCol(length=16, alternateID=True, alternateMethodName='by_group_name') display_name = UnicodeCol(length=255) created = DateTimeCol(default=datetime.now) # collection of all users belonging to this group users = RelatedJoin('User', intermediateTable='user_group', joinColumn='group_id', otherColumn='user_id') # collection of all permissions for this group permissions = RelatedJoin('Permission', joinColumn='group_id', intermediateTable='group_permission', otherColumn='permission_id') class User(SQLObject): """ Reasonably basic User definition. Probably would want additional attributes. """ # names like "Group", "Order" and "User" are reserved words in SQL # so we set the name to something safe for SQL class sqlmeta: table = 'tg_user' user_name = UnicodeCol(length=16, alternateID=True, alternateMethodName='by_user_name') email_address = UnicodeCol(length=255, alternateID=True, alternateMethodName='by_email_address') display_name = UnicodeCol(length=255) password = UnicodeCol(length=40) created = DateTimeCol(default=datetime.now) # groups this user belongs to groups = RelatedJoin('Group', intermediateTable='user_group', joinColumn='user_id', otherColumn='group_id') def _get_permissions(self): perms = set() for g in self.groups: perms |= set(g.permissions) return perms def _set_password(self, cleartext_password): """Runs cleartext_password through the hash algorithm before saving.""" password_hash = identity.encrypt_password(cleartext_password) self._SO_set_password(password_hash) def set_password_raw(self, password): """Saves the password as-is to the database.""" self._SO_set_password(password) class Permission(SQLObject): """ A relationship that determines what each Group can do """ permission_name = UnicodeCol(length=16, alternateID=True, alternateMethodName='by_permission_name') description = UnicodeCol(length=255) groups = RelatedJoin('Group', intermediateTable='group_permission', joinColumn='permission_id', otherColumn='group_id') #end if #if $identity == 'sqlalchemy' #if $elixir == 'True' # the identity model class Visit(Entity): """ A visit to your site """ using_options(tablename='visit') visit_key = Field(String(40), primary_key=True) created = Field(DateTime, nullable=False, default=datetime.now) expiry = Field(DateTime) def lookup_visit(cls, visit_key): return Visit.get(visit_key) lookup_visit = classmethod(lookup_visit) class VisitIdentity(Entity): """ A Visit that is link to a User object """ using_options(tablename='visit_identity') visit_key = Field(String(40), primary_key=True) user = ManyToOne('User', colname='user_id', use_alter=True) class Group(Entity): """ An ultra-simple group definition. """ using_options(tablename='tg_group') group_id = Field(Integer, primary_key=True) group_name = Field(Unicode(16), unique=True) display_name = Field(Unicode(255)) created = Field(DateTime, default=datetime.now) users = ManyToMany('User', tablename='user_group') permissions = ManyToMany('Permission', tablename='group_permission') class User(Entity): """ Reasonably basic User definition. Probably would want additional attributes. """ using_options(tablename='tg_user') user_id = Field(Integer, primary_key=True) user_name = Field(Unicode(16), unique=True) email_address = Field(Unicode(255), unique=True) display_name = Field(Unicode(255)) password = Field(Unicode(40)) created = Field(DateTime, default=datetime.now) groups = ManyToMany('Group', tablename='user_group') def permissions(self): p = set() for g in self.groups: p |= set(g.permissions) return p permissions = property(permissions) class Permission(Entity): """ A relationship that determines what each Group can do """ using_options(tablename='permission') permission_id = Field(Integer, primary_key=True) permission_name = Field(Unicode(16), unique=True) description = Field(Unicode(255)) groups = ManyToMany('Group', tablename='group_permission') # Set up all Elixir entities declared above setup_all() #else # the identity schema visits_table = Table('visit', metadata, Column('visit_key', String(40), primary_key=True), Column('created', DateTime, nullable=False, default=datetime.now), Column('expiry', DateTime) ) visit_identity_table = Table('visit_identity', metadata, Column('visit_key', String(40), primary_key=True), Column('user_id', Integer, ForeignKey('tg_user.user_id'), index=True) ) groups_table = Table('tg_group', metadata, Column('group_id', Integer, primary_key=True), Column('group_name', Unicode(16), unique=True), Column('display_name', Unicode(255)), Column('created', DateTime, default=datetime.now) ) users_table = Table('tg_user', metadata, Column('user_id', Integer, primary_key=True), Column('user_name', Unicode(16), unique=True), Column('email_address', Unicode(255), unique=True), Column('display_name', Unicode(255)), Column('password', Unicode(40)), Column('created', DateTime, default=datetime.now) ) permissions_table = Table('permission', metadata, Column('permission_id', Integer, primary_key=True), Column('permission_name', Unicode(16), unique=True), Column('description', Unicode(255)) ) user_group_table = Table('user_group', metadata, Column('user_id', Integer, ForeignKey('tg_user.user_id', onupdate='CASCADE', ondelete='CASCADE'), primary_key=True), Column('group_id', Integer, ForeignKey('tg_group.group_id', onupdate='CASCADE', ondelete='CASCADE'), primary_key=True) ) group_permission_table = Table('group_permission', metadata, Column('group_id', Integer, ForeignKey('tg_group.group_id', onupdate='CASCADE', ondelete='CASCADE'), primary_key=True), Column('permission_id', Integer, ForeignKey('permission.permission_id', onupdate='CASCADE', ondelete='CASCADE'), primary_key=True) ) # the identity model class Visit(object): """ A visit to your site """ def lookup_visit(cls, visit_key): return cls.query.get(visit_key) lookup_visit = classmethod(lookup_visit) class VisitIdentity(object): """ A Visit that is link to a User object """ pass class Group(object): """ An ultra-simple group definition. """ pass class User(object): """ Reasonably basic User definition. Probably would want additional attributes. """ def permissions(self): p = set() for g in self.groups: p |= set(g.permissions) return p permissions = property(permissions) def by_email_address(cls, email): """ A class method that can be used to search users based on their email addresses since it is unique. """ return cls.query.filter_by(email_address=email).first() by_email_address = classmethod(by_email_address) def by_user_name(cls, username): """ A class method that permits to search users based on their user_name attribute. """ return cls.query.filter_by(user_name=username).first() by_user_name = classmethod(by_user_name) def _set_password(self, password): """ encrypts password on the fly using the encryption algo defined in the configuration """ self._password = identity.encrypt_password(password) def _get_password(self): """ returns password """ return self._password password = property(_get_password, _set_password) class Permission(object): """ A relationship that determines what each Group can do """ pass # set up mappers between identity tables and classes mapper(Visit, visits_table) mapper(VisitIdentity, visit_identity_table, properties=dict(users=relation(User, backref='visit_identity'))) mapper(User, users_table, properties=dict(_password=users_table.c.password)) mapper(Group, groups_table, properties=dict(users=relation(User, secondary=user_group_table, backref='groups'))) mapper(Permission, permissions_table, properties=dict(groups=relation(Group, secondary=group_permission_table, backref='permissions'))) #end if #end ifPKK9?turbogears/qstemplates/quickstart/+package+/config/app.cfg_tmpl[global] # The settings in this file should not vary depending on the deployment # environment. dev.cfg and prod.cfg are the locations for # the different deployment settings. Settings in this file will # be overridden by settings in those other files. # The commented out values below are the defaults # APPLICATION PACKAGE package = "${package}" # VIEW # which view (template engine) to use if one is not specified in the # template name # tg.defaultview = "kid" # The following Kid settings determine the settings used by the Kid serializer. # Kid output method (e.g. html, html-strict, xhtml, xhtml-strict, xml, json) # and formatting (e.g. default, straight, compact, newlines, wrap, nice) # kid.outputformat="html default" # kid.encoding="utf-8" # The sitetemplate is used for overall styling of a site that # includes multiple TurboGears applications # tg.sitetemplate="" # Allow every exposed function to be called as json, # tg.allow_json = False # Suppress the inclusion of the shipped MochiKit version. Setting this to True # and listing 'turbogears.mochikit' in 'tg.include_widgets' is a contradiction. # This option will overrule the default-inclusion to prevent version mismatch. # tg.mochikit_suppress = True # By default, in order to be backward compatible, TurboGears uses a rather # outdated MochiKit 1.3 version. But it now also includes the latest MochiKit # 1.4 version which will be used if you specify this version number here. # tg.mochikit_version = '1.4' # List of Widgets to include on every page. # for example ['turbogears.mochikit'] # tg.include_widgets = [] # Set to True if the scheduler should be started # tg.scheduler = False # Set to True to allow paginate decorator redirects when page number gets # out of bound. Useful for getting the real page id in the url # paginate.redirect_on_out_of_range = True # Set to True to allow paginate decorator redirects when last page is requested. # This is useful for getting the real last page id in the url # paginate.redirect_on_last_page = True # Set session or cookie # session_filter.on = True #if $identity != 'none' # VISIT TRACKING # -------------- # Each visit to your application will be assigned a unique visit ID tracked via # a cookie sent to the visitor's browser. # Enable Visit tracking visit.on=True # Number of minutes a visit may be idle before it expires. # visit.timeout=20 # Where to look for the key of an existing visit in the request and in which # order. Comma-separated list of possible values: 'cookie', 'form'. # By default only use visit key in session cookie. # visit.source="cookie" # The name of the cookie to transmit to the visitor's browser. # visit.cookie.name="tg-visit" # The name of the request parameter with the session key (for when # 'visit.source' includes 'form'). Name MUST NOT contain dashes or dots! # visit.form.name="tg_visit" # Domain name to specify when setting the cookie (must begin with . according to # RFC 2109). The default (None) should work for most cases and will default to # the machine to which the request was made. NOTE: localhost is NEVER a valid # value and will NOT WORK. # visit.cookie.domain=None # Specific path for the cookie # visit.cookie.path="/" # The name of the VisitManager plugin to use for visitor tracking. visit.manager="${identity}" #if $identity == "sqlobject" # Database class to use for visit tracking visit.soprovider.model = "${package}.model.Visit" identity.soprovider.model.visit = "${package}.model.VisitIdentity" #else if $identity == "sqlalchemy" # Database class to use for visit tracking visit.saprovider.model = "${package}.model.Visit" identity.saprovider.model.visit = "${package}.model.VisitIdentity" #end if # IDENTITY # -------- # General configuration of the TurboGears Identity management module # Switch to turn on or off the Identity management module identity.on=True # [REQUIRED] URL to which CherryPy will internally redirect when an access # control check fails. If Identity management is turned on, a value for this # option must be specified. identity.failure_url="/login" # If force_external_redirect is set to True, then the identity # framework will use an external redirection. # This is mainly used to make sure that if you use # an https:// url in the failure_url, this will be respected. identity.force_external_redirect=False #if $identity=='sqlobject' # identity.provider='${identity}' #else identity.provider='${identity}' #end if # The names of the fields on the login form containing the visitor's user ID # and password. In addition, the submit button is specified simply so its # existence may be stripped out prior to passing the form data to the target # controller. # identity.form.user_name="user_name" # identity.form.password="password" # identity.form.submit="login" # What sources should the identity provider consider when determining the # identity associated with a request? Comma separated list of identity sources. # Valid sources: form, visit, http_auth # identity.source="form,http_auth,visit" #if $identity=='sqlobject' # SqlObjectIdentityProvider # ------------------------- # Configuration options for the default IdentityProvider # The classes you wish to use for your Identity model. Remember to not use reserved # SQL keywords for class names (at least unless you specify a different table # name using sqlmeta). identity.soprovider.model.user="${package}.model.User" identity.soprovider.model.group="${package}.model.Group" identity.soprovider.model.permission="${package}.model.Permission" # The password encryption algorithm used when comparing passwords against what's # stored in the database. Valid values are 'md5' or 'sha1'. If you do not # specify an encryption algorithm, passwords are expected to be clear text. # # The SqlObjectProvider *will* encrypt passwords supplied as part of your login # form. If you set the password through the password property, like: # my_user.password = 'secret' # the password will be encrypted in the database, provided identity is up and # running, or you have loaded the configuration specifying what encryption to # use (in situations where identity may not yet be running, like tests). # identity.soprovider.encryption_algorithm=None #else # SqlAlchemyIdentityProvider # -------------------------- # Configuration options for the default IdentityProvider # The classes you wish to use for your Identity model. Remember to not use reserved # SQL keywords for class names (at least unless you specify a different table # name using sqlmeta). identity.saprovider.model.user="${package}.model.User" identity.saprovider.model.group="${package}.model.Group" identity.saprovider.model.permission="${package}.model.Permission" # The password encryption algorithm used when comparing passwords against what's # stored in the database. Valid values are 'md5' or 'sha1'. If you do not # specify an encryption algorithm, passwords are expected to be clear text. # # The SqlAlchemyProvider *will* encrypt passwords supplied as part of your login # form. If you set the password through the password property, like: # my_user.password = 'secret' # the password will be encrypted in the database, provided identity is up and # running, or you have loaded the configuration specifying what encryption to # use (in situations where identity may not yet be running, like tests). # identity.saprovider.encryption_algorithm=None #end if #end if # compress the data sends to the web browser # [/] # gzip_filter.on = True # gzip_filter.mime_types = ["application/json", "application/x-javascript", # "text/javascript", "text/html", "text/css", "text/plain"] [/static] static_filter.on = True static_filter.dir = "%(top_level_dir)s/static" [/favicon.ico] static_filter.on = True static_filter.file = "%(top_level_dir)s/static/images/favicon.ico" PKK9i-_?turbogears/qstemplates/quickstart/+package+/config/log.cfg_tmpl# LOGGING # Logging is often deployment specific, but some handlers and # formatters can be defined here. [logging] [[formatters]] [[[message_only]]] format='*(message)s' [[[full_content]]] format='*(asctime)s *(name)s *(levelname)s *(message)s' [[handlers]] [[[debug_out]]] class='StreamHandler' level='DEBUG' args='(sys.stdout,)' formatter='full_content' [[[access_out]]] class='StreamHandler' level='INFO' args='(sys.stdout,)' formatter='message_only' [[[error_out]]] class='StreamHandler' level='ERROR' args='(sys.stdout,)' PKK9>turbogears/qstemplates/quickstart/+package+/config/__init__.pyPKA>06?turbogears/qstemplates/quickstart/+package+/config/__init__.pyc; HIc@sdS(N((((sTbuild\bdist.win32\egg\turbogears\qstemplates\quickstart\+package+\config\__init__.pys?sPKK9)&J @turbogears/qstemplates/quickstart/+package+/static/css/style.css/* * Quick mash-up of CSS for the TG quick start page. */ html, body { color: black; background-color: #ddd; font: x-small "Lucida Grande", "Lucida Sans Unicode", geneva, verdana, sans-serif; margin: 0; padding: 0; } td, th {padding:3px;border:none;} tr th {text-align:left;background-color:#f0f0f0;color:#333;} tr.odd td {background-color:#edf3fe;} tr.even td {background-color:#fff;} #header { height: 80px; width: 777px; background: blue URL('../images/header_inner.png') no-repeat; border-left: 1px solid #aaa; border-right: 1px solid #aaa; margin: 0 auto 0 auto; } a.link, a, a.active { color: #369; } #main_content { color: black; font-size: 127%; background-color: white; width: 757px; margin: 0 auto 0 auto; border-left: 1px solid #aaa; border-right: 1px solid #aaa; padding: 10px; } #sidebar { border: 1px solid #aaa; background-color: #eee; margin: 0.5em; padding: 1em; float: right; width: 200px; font-size: 88%; } #sidebar h2 { margin-top: 0; } #sidebar ul { margin-left: 1.5em; padding-left: 0; } h1,h2,h3,h4,h5,h6,#getting_started_steps { font-family: "Century Schoolbook L", Georgia, serif; font-weight: bold; } h2 { font-size: 150%; } #getting_started_steps a { text-decoration: none; } #getting_started_steps a:hover { text-decoration: underline; } #getting_started_steps li { font-size: 80%; margin-bottom: 0.5em; } #getting_started_steps h2 { font-size: 120%; } #getting_started_steps p { font: 100% "Lucida Grande", "Lucida Sans Unicode", geneva, verdana, sans-serif; } #footer { border: 1px solid #aaa; border-top: 0px none; color: #999; background-color: white; padding: 10px; font-size: 80%; text-align: center; width: 757px; margin: 0 auto 1em auto; } .code { font-family: monospace; } span.code { font-weight: bold; background: #eee; } #status_block { margin: 0 auto 0.5em auto; padding: 15px 10px 15px 55px; background: #cec URL('../images/ok.png') left center no-repeat; border: 1px solid #9c9; width: 450px; font-size: 120%; font-weight: bolder; } .notice { margin: 0.5em auto 0.5em auto; padding: 15px 10px 15px 55px; width: 450px; background: #eef URL('../images/info.png') left center no-repeat; border: 1px solid #cce; } .fielderror { color: red; font-weight: bold; }PKK9S Jturbogears/qstemplates/quickstart/+package+/static/images/header_inner.pngPNG  IHDR PR9.bKGDC pHYs  tIME /D8e IDATxwu}?|?gq7;!, B kEUqTVۯmVuj-jk]((30!d'7#ws޿?z9=q|{}#|<,UgsT/@̏_Ps-.%r}5xO{_d+SsG5k}/!C%<^OFvx !b P%H2{ ?/kɇU` \怳qdLO=̘s Ȼp'.< ;npAR`N87\jQ ¼ipV@(4q+>#\h]G QeAEë)7ʦ1+|rԔur8F&=* r|2PQdYgR vjnB>9(p #hϺT`"X5x KW 7t7sW$wdK&AUjmR8.$~O~ &9}>Yj(|᱊D~G ."px\:r(Ψe>8N~)a$(e1C#T,B9(^vR8 S~)ԩnL?WRE *P8’&$qq2dW3Dn4 .g cUʎxEn8?/:(PRhPEXT;y/~xW!lgg׻&q xp |WBRx9U<% "?X$xcx̂C+9 @bdf&LZΙoJ΂"Cu^3#% ɾ(1d eZ]?Wj gizH P‡k7gHm G`}(U=SpZ RHŁUO"P x^U)E Xd)FqUE@2j> aB;>'@vbŖO:VƶIavoa[@æ MƐ?gt#{dS3'_@›Bqs|&o7y W}_D$ B`Bq_5n3YA.S12Dv 0ikӠ9&n Dx V'F TcsBds˿@$PeD|#AmyoO]@!Fǡ}JMMf"EjB Jxf<衑($$23{NF7*A2fIR\Mk_vG,%'o$0 E1Q}B.ĭQĹ-Up͚QӐNe n"= ¶.ypwF'b@ Q1J.Ap9;97yA8rc% $_xa"쥞kJx%, % (t)Ť/0?{6'f-ʓ0X'PV0aW Rg?x-T(U_,RvfN **"OTj / O@% Q3f3IوqW^c%9QP,>!d1#yH0!}yK[,HF2ڐ 5H.$]PcZnƵ$2&DWyd!ZWȉ(Rǁ?7 9EfFK, bXD%]4+Pʓ,!i1l!~x4w^Ǽxc2rdt?kn/gxl0U i hȎԬFVO"OJy0qʉÊ&Uf B@Ԙ=-€#Zklvs0n U:XѪ_QC"7q|Y0e cA\bqܳECgnU5\iwjrD%iz507 vA=0 1vus˓j,߆B6҉"{8C~>YԜdj+({@J3!ikH6xMhu<] T)nd lY1YčFPr@6hD6Z5* Tr+RBN%(u:W#xΖwvQ(d< &է?IH0#|%qc=~'Hk]I*+,R5W5 d~aC34CcuPr6"MŢBB&6mnD Ѝ'"4n"\kSY\{E1q-4f@rń-̉L)۸(R !;ud@j)4d1%Q iD=$Q'pa#C=)%oC Ԉ[ &'4B5#8.J+*5jI('={5 @̌djO5*uFTƧ)P_Z@w6 @t\$'oڔ5 y$2+U|75¤eeGD@)ƒ6pCc+zɜx%2 &LH33~ӢٴL91h72P/*.e\)/Y&L]&(*bH3T}BJ[# 4C"L'"-mꕐأkk<Qj ;x)b+ sV.Hpj2%LJcV28*q{2F(= n>[$ETŽ3+̹ɾ],4xP2p d"+4^YU┸IrN6) MJ#1"fQq0 1CrUmI'ؙi~P4F871,T<:M1ư |~]xL&+Xaϼ1<'F4mp63 DtvV4="&n[8AF.ȕ@ *b`.Gٳ:1*I$4Pwބ& #&Y1)f6\WW:;,nu[ ̆@x6a$gpMzn97h`yj ﹤̬2%B79JRee.Ju1ї I@`dMf/ +dOG(T!;M%[Uag @t?^2 [Mr #SA .B]ϕ@>V$@yv'YX:eOeIwH_@ʍ級AAJbPvFLglo?f)#]Rd"kHiZb*t×HM͓`ȭՌdc"kUL:Ȇ*H#)mGۈmBHgt)N#iq>q CD#ytsJq}850 PpѴHhYzR ebn,e7\cL,Mח%6JDZ }$K%$5lK5`W®E $ I#`dh+Lwk7Yp0 DAB'yp(O~81ij1& +_a>,5QZI aFȗ2c.d1H>-/ 4w2,-4iy {x e-~f}$0pk2_fTd@̥ mYg9Xؙ2;"6^8oFs?{I+>T-l?<^Z^J[vs-1EL3¨]В>)s8K,AZHz}Z?nd¤Dƿ1~3"r2 Wxρ\Z ,+!0DOߊ_9A4hb:$Ԑ{$,\gS'B&j,#v5/9F18?'lS%TI)2IFX`5zt#3369PDIlL\ZLVpot+Nfu/ĝOo<,IH0ß8W̎|JJmAZ9ɥ h0|7u`^}azw%a<vdݒ bIܽcQ`!'q3O/oco=Pk1dC~G ςsڅ4]"Jr4"2OVq5􄷩'Bqk%j D%A:@"ФQ"Rp@Pq"emb"C΃ zsS{.4Q\s 5Ϝѧљgci(1=3E#GY4ddJϫWUq?st3xҭ0˙oUV|i}lc <(6o,Xؑ/^?\m-{x߸cs~Nƍ^,!@I(jPz賀GPSwRI,Ŕm'Y;L.Gf2j=0$ԹI] 8F^aM=~jNm<0\@A}|u^otfx>lÙަTu@9pbGK&B!3YL3-1mnMҷGfӧ'F11WBN*W9zsiX%:n9|wH Z$B+sxi=tE[:7OwǎArD5*1[/Z碔Iqr` IDAT|MCӓ{v~/$iFyʬ+QW8" 55dGf3KL;qv5 qk@j=CNIR0rc~Z@٦Xgk0wpO\]>ӎn;Q#ع(IdoS ~R7.]ǟݲ*&'!.T_\D}xDu+p6|]15WظprrP,i  Rj}CY:bxfPLJR$ q *Oq݈K t  KvbL^urh߈w'rO_>=?9epa4}X ˧q[OU?܎=r؃'׉\BMgfX[]{f+g^ɼ}LKH@:,g6"#':6e,Dk{GA#Fo 9 7ED"w.C'.6 _?7BZg{#>Hnq֓ k&6k!\c] a IH}9j cZ`N|fFd13"&8m,d~8^ s%3A{ X 6K[AIic=+2֋aAKDbb2\[ؚ/_+A<o< {2'`\Lsk3#]Ƨv'|s u\c@;_?鄨h*K3͋V>-~pq6/5o1oF+PN.d1UD2BYaߍ} C岤BN'!D^#"~փd9<=SYz5 M7ecHT !R<ȦɈٹ14 5ӟa =%0kjCE.:J@*"tВ_lis ;n%nVy7 +9I8|Sh˥ ۛb75[ׄ^oq7:0߄1ƕV= }ͥUIe&"5Q"NSf0<:E|]ن5 t+_Uh, Bמڃ#Ms 7ŒO]Gy0`aW .C7?mop̂E[KlC'#%=X֡nC'welA$=-x~_׆SuujeOoƅMigu=9|ŋƦfqƧp{q3CB3ipxә+іӝKƶSqpg"ù z4~y~`xb| ;~y/.^Kk{sh?~`'(k1 Ov7> } P,gB[p]sks׹ [Qy(w`dՃeR8aQVt{sД}GS 8\;{}82>-}QW + lp棺D1m0|&7XV)[.[̘*5ϋ y<h\^tl%Z; ~y{R9)fx/'c> ^!׏m )0;6fI,,F;M\':Y~o\_vM_27Ò$fh,l3Gqdk\rV'yx4.Njvbjhr8`eh<}E밠Uv4^U|Ql2S(֩ߛvL,}+P\9`,eλŌsޜ(,_sO&)3eܔ?>'uMUF,QIא 2C.R4̄MՕx^Bơ1)%ᘉOp q{P(`@̔,=x ^+QʼXE+CMأzrzrʟt\ W}~ҨQgoɞ|f (u^;?9-irq ~{mceR VS– O_~Tv,va_1'lDM*ٜb Y3sxo_*E]`m%pu8$&G|<_}zdg On]ҤMJ7Vӗt9mf %B)@7]r8֡i\/b`,hM{A] 75[G{`܁(WbTf܏oL|wVqn,& %22w"m2b?Jqj1vӘ)@ao6Cc,\Jp}#~Ar_tZ/#V%OY<;тcÚ$ ,Q5'9:PZk)Y3j[2{cˀDdH٤]@,( Im Si\v:1};3GwRG5nնlNl3#X.oZ/F:OZ.[Ö b`m@8@&D&ܺ^[7&3[qqaŽ&[aݖBW}gAҼBRLh#XQ|}s:J%O3Zxl)J2M&UJsX,Ƿ;r&:;ƒYa+Oqn#_/{w>z`=#kBԾbRl>7UrͶ j_a_#|PHb085NNXffdN)c k>[c@3-;ЋVphp&du] R+kL5 Т¤2~K'&lL|HZ5h3 <93dgV86Z? }3. BoĂ$&35b9s+yȉ|a&M!KՌEg&qB1~n9J\ ֒/&TܩB}<6Nᓿ٢єƻִhKLS>0j73כ7(Bo %8XkW. "X-h>\Ť13CZ[DH|5d"-[-ʸ2~˹T*}XݣsZ&`vZ }ېA8eEɜL PRAE(#H-XU2!XH@><V.abT2ic>Tz6\4bTf>ʞKjr>:oimCe}/ϱ:۞VJ [j8W+Z1' ^ ƍ[r?!ĖrVos FܓsuBrx"Xb cљCB$ €eĜAk}7dg4199/䌐Đ#ׁ“WUaxGqxt&N mO1Rf~|v(J."&X`i͹gY1\U+O@H/d O-\g"!]k¿?9#zO+9MZ/>4L8xQ|FH-BV^!h2V&|+DYYs#xg5O&ƪ_Y 0#bޯa13z5G9|gtෞ$ XpOK.eqi}Q7%]9y@.>KXk)=1d02Jz;b_z`-QY&fJokeZÚikc_+z @{~ F᭍.' –'LG)ZEo(C^&ta+4:wϳ"͛OB2w."ظ0tq1؆Hu€!|L3>{6=|h=2"Q{/XS;*c㝶x@pE>9|}ڻ彭xѲTsʜ \afבqi [Gp`lZ+L_+nxӱxiHHg`dafbTXQwR4Le #MD7ՅJ]YuWb ]WI9ȩNXEF!V$Lu)<|M8pqqs&뉷K [=e('>UU!ڴ(%.Bm94"U3)o B+WYV}/ɾܸQѣy,'t5j9 BYhs|W>v"~|!C141 XnɃʃfw8$oKHؖR|PdY$?9qBh8n#Ue;W.}/TKj@z#5m/H41: BCpbNRl CZ'r8zό r͸xP'x}_ikҩpxAGo\ǻӝ?-%fi}Nie HwjaNr+8p1\T ҎYc;2hNȁTG?@DuN#S4>}!1Fibak4bY{4SǭHgmŻH~WRp zvik"o?pXcN_֍SoZѡgeWzB{:#zp~m c.ȧsg'[FaIñ ^1 fЩ+␃eurQ!s+;g:( '`)kʻBDӳfds(vFs[#1H,f] bD i$Y|(A }"FDfH~@(21ZD0ce_ 5*qɒ7Sxhm1sNȢ+Kg.橃`fr8J9"71? JWW"=ѓ$力 @IIllFa|s!P& Vw.t^2]983t!}RR9 1ؚ±]Y`ak=EHaF$8 @Qà>]ۅl+ b|~} F_>+n?\+&'B\U'#7~@#<>-]+^^Ӂ:y[L5b]d [dB\cd+\BF+a&i+7a"ZVup&GI~E2 %Wq 3ik̅g&jɾuP=fd:P2#L Dp R`RP}P.B/GqMt?NH46^!,tq |xvȅ:őQ}lW+xU| VH=5BK=Hui nHu{W)I Y3cxl̵eV[񞉢cJaNyA&")l}dCA+PդnЇ팜{Ƨ{1{xй¶Qcޱ^"ܼy3ʔ9[}kKt >ugapZ)wca[]udqRN3i3!81[(%i#r .ofEمГ+Nƹ+z- -5͍¨,mK)K`xr?z98yQ'r)މaço~t ?UmU'ʭ[|w7O=K|Jw9O>2w=-&{f~_O\wM>^y\;7?-^/U NZ񻪈0WM˦Y;nd?%S )D8e?u!pEھ BՆprSa4F u]&r; a"<%snfٖkbI1x:.]d $7^`VyuDWR6<'Ma\k\!Ȅۈ(N"1hֱIp0Qklj$J^|Q3񏛎 LΙ;g[x ^kyHnh_L R.?]9TOi9siD@zdSsa@;qå'^{Ŧ=Sd[~~dž1eYkzsaBW巨Og'Ziku'/ݲ,Eo=rW&iɦpMڣz3-$d0>=k؎O1L@ eY3.LϨ9a}û Wtc)|E{Oa|+ L &I#1خ8WGi5P!AC`?sPBYphCsSx: Q! Ix#LcPmiTם'NiPAl0Q^#5HdGu0uʼnW5.֤Nc?!ܺinf 2Ў%0ĭY߼EkёKԁA_-ppmyq{30ZtcL&JB'fu~~"cYьW5{*r|x X3(տi>|:2(JgA,R [sÅ_==gFgGH6R%ĨZd_ua~3`٦0mÝ;d^ܼy`P8f=(1!,Ew ( h[nDm](NaF|鶭+OuYܖ'smMɃ mE>҈^m?m Ĵ!:tjkLZ@1<;*mdYO OO-J&J)T<2qj`qHI2%$Sx'@sdU,#J P&Xׄ'%{(#pk Is"(AQ[P)^u>X۝{gwR-4f9wbbv`!)VJ:B#(#羜 O,Pzv—E7M /+p7~ B{ɂM-hB! 㙽|R]u >MřY3'P@ǙkLB_>KgpBlT{`l o]D_^n 7aQLQ(߉-X4KFZgu^.]7םɯXӉ/>4B9WP3sL‰F%" ,}q%SX{#a' &VO[t8_fֻa!}f U)8Ah=YR;)rȞY4x/#%n#ƅwIAi7i^)'k"!<y%I1H%<0v9 P}׆Sl?t̖=y:9<9߃{1+:Z o> ֜#u3.=N85 ^CqjW߷:q*|ug36 hLY{k$!})[30>M)yF@D`Q t5ذʸۏ; H&G-ჷ7~g.AK&uvah),&k΃;as`=n|=q"v%dGNf[on I"yZql :ϼMY{ëB<.?|g &fP!X@;@Rgbyw =OfZ8yM59 8B݂(r_A!c| He Xʑ=&鶃"R.m7Q k 46m#,חkJܩZ8Pn@X5jd^x!_] ϛt˕LLuӦK6ㆣdNw{^,o4%ɃL`Mbf~)iѤ)=>ݵ)guɡvں2kiGspJe"jnuvad$!|aO8y0X֑ǘ}6VՅ cÂdцkS)6Ҍkف7Lz}J$hmVIQr|޽! yXQ/ 5B2#waq,̃Zn ơqӲGeaA!aWjcT y[ˤBÛR]\jfC gaT)&]#Hpj?f$\b~)hPXFԎ (l\TB f͍6gA3nN¦Ϛ]O͂(ٖN]ދW!$a욜 ґf^^8#LGa]= g>qӼs n DQ!xɤnN޾Z'` `|Υ{06WDa ""n| T2}ҽ Aqj(@- +5 ^w|5WCӖ+`&\ dsq^C laywɝ1*[O:^@||068=2|q)\mȩeȧppb2T8Aҙ|hbI(<]Mi4K9$%+gfU~,VZS\Fn?+ .m߸XI8\F / ܰ*W5*/"A nI| 796'OG2 #EH4ܘa93n1-pIɨ0ܬ!]42ML1&FqꔬY5RSl*vٵ|&cE< eShyƽ)d6$7P coKslw+x'l0 3J~ϧ#||yP=/S$ХL ũq)ݣv͋3 V~WHSƨMHʟj3fz=CZo;e!~8o7AjKC_& QG/X*]_T1A0O᪓9/"Fx+!m**R4P$3*"D 4hu;9ϕE~[ `0n{ ~?|vVv@RMxɝppkc`#cOi?k 1BㆨSfuY}Xeb#P1ʓPt;XɕUzJu"N,RGz@ LItI bR:!W[cRaiEP BHaVΌJUeTǩJ7 T\KGHS>crt-##UX$=p?1L>#]+Nfd;a$)u,0i)HBI% ͐bn9⌕S`bds,'nXIOUBbbl7aȱCÒ0/J}:1fEP3c paI9&?#꩚^CۑY`vD/l@Hk{qZWF^9:22\m`f"8W6> b6ii^tgS5 Y1k>ECG֟h}(jp>e$4"E`b?aMG5|>oY&3LaLP|'"-WۍLI{CBS݋w㢥-X\bWue&J*-āGf^]2 %ԩV :L_O1ZV^.16 ;`?fwyy z0)PYp ;L}#&h@R HR8w܁;h1#4tOl)]YM ;{⵵5wJ6x s>y4ebp9ydNhat :C=cSŒn~?~?_*f _> WnW,⾝16=XEG=▃)D+͉0ӄ=gTon| ?yg,+-~61m^?Бuy!T` yҤ~$&A`k# R {&cu`^q G$5>vbtĆcw;!Wm<#3ERs~;v "d,:r2OGf}>05!wceByf|NŻ1BG@rx`vh8k9]9|~C6:+0\sce+g+g&rM7m~%]JXfX\: ۆM#_6IHG W3_eq5/~kt-}Huj58px2ɥZ·ǬV12oV=81"[YO_JsbE>gc;Y0r`ڛemxf3ut o^Lt!6iNǬaٹǴg K;OabV URG\bK[NDW6rݜ' ڧ&ZP@*6RoEX\tDxӉCGqrHw&bDZ=rOZnyӈ@yπI xg?ߋSmЙ8wqhɁ$vc>wahbl!2 f#i 22Id3,A\/1EK"\i\0_+4% %%ktw!0\tra84(ԠְA:ɾ!V ӗO%;HԸ1EiD_γE;u} vQݒyڳL:,]X~ד(HwZÊk6#hѫ]~Ta)" p_=q(!I]xmCݰkNrmX҉k`ȬtWiִ ǚ@QZr.~$hA A(9a~ D"2*@wЇ1DSYf5t)k!D], $ MFrZ\.nKGM֑X-aFfn ) fڢ^G]uǙǘ<@z$?ݱ>GWEL8Ö1*ִOߵ FԊ%xҗ\;>pS:W B.\>wE)DM2K4nz`እ-bi ws(pt",iN9(i3sCxh(Fvp5YΗ\zۏbMGSsEܻ06,qўax mx m8<]މ9.lKZShN+.CնhJA=\|@3>ۍ5"M_GMπY|l"YՔN>hjb|Ψzddw RҀ8YN' ੱY<84"Gs9ir>ܷtʾyCWol;" K%vn[W_gk\ L_^c>HE`4<v_d\Ź㳙m)=*${ jx:%>&(@O?s}B7j,U(P&8!$>p,r2cam{kAkͻvDHw7l*{ӌ͸QLT·Bg7<"GGXs+~12݈Ͽ$,jwf:3 'cx)0Ɛ\Z%jK Cqhhܸ{&7;^"Ϯ,CW6xn~~qѪx(&G&YKjr(pfc8ܻEtWo'),.?rW,Ku60H$f7mW_F'uótxFjGg⧇aey>o$ND}գYfW^, -0yȶeK旅,,Kd6BڀW w.;3=ۯ8j?\ťsw ['fMJh l2mu=տΑ&8 ( pmI ؒ#dd0Iv3tN #ŊZrh0uP9i8y6 /Ч ǹMւ>v{ g >qPG,upbUL;V}VN{c`Aٰ8tC :Ģ^9xNԀ7*🷢5Ojγ+?|`wrQ?wߝC 6!~]㚝Т>#_'p0]@'.܏2BPI]|5?ƇzTe+_x?Odctd*UK IDATpDX=BHSAWFP 's Ci]#d|Cڃ>'md7kR Icn&9|M}^7.Bm5~_~w3RoYjAZ_"SAJs= ]Ӣ<&1Uԛ}o2M))Dy4͆ފ kTkev}cs M_EʶIsk Q=0 .p=+HTc|ŧv>9w#w񫷦_J'iϼ^\>Nm6~M|ߕSGgd 1[d,`ʭ_??o=8S?kw fb8wCL6@iGPo _O|lU|:-+E}o~+71.מC+a%I-mHϽ]ZS LTȿ|`[u[FU+W_<çKol 3߼G?W˟{~;xt1!l@j8z}N 5 md@3!9NA mcPY/(zUCl1yÅ<?b 5'_7FrŎSV\.w7Z{V=|pc3&4Kq\8̀s :5Ouzybii0utvyZXoԝo¢E?rۏ2"Gg-.9/qd[S|=oap*?h,. ދw?]y /_˗> W"u< qb1})1ܿQ.Gw>z w}}>z~^w>><|?L Q /bbEg&xp^ΝӧnD~Rx?YS.38n\$8c|0SxSp01m]S}?\ߺ㳇+gמÿW} wc٨. | _~x@Y-;5]Swmr/Y>Y2"7 A$L 7=0̚]0pNQl+o3?G"gϨ+Pϸ>9iS nZE~^sy5! A_tRNgj&Yc {PW%)vUME}Rij饈qG켠a&VKƹkCNPb~)B-K6K+'҃8tU`SD ͼ8a&'{q%{xqwA 5->ÃFGϿp?ٛ_ '.bpflaVG m7vʼn6L,w)gdsK٩NwryY92kh°?4v6 9>N`#a!*2 "lcK~#00@|G?9skAnlBnh܎ɴ|lb0=,=9`pGQ?DYUyY9$-@!p iBz:p41F7^OQ  b8܆ځ #Km97+7P ȍM|^ /'ggv Vmϼ}K?E~:^{hl2]˟QNKVQ3owgb$HB7t<㆑@!3v;s90q?.VĽ#|Σ) &[@ FP2ubkIN{hܮr*A=ShN3QK8G$,YiUxSL'|CoYCAD fH.'ೣs j*j%P#i,Q:ū{Wy~z9>MEk<9 vNkF@zhvBcF J:rF|)R,0XǨY c1aIF32 1B GAËqug0'W1WJWB)Y^9?vQq\=>Duόs77>}W_ CW#?vNϟ,6mio=FN>%;:(q>N߹2S>ib)fTՕh0D6pY@ׂ<%e8>? cnWjڴa FGҵ!66 pF/GsK?qY;dI޽s}]+_ %N,ϱS rsǨYݗTruH8#81M'."֬ A|gyb'X׀yfJQڰz$-!9zW[ZihYqdUD]u~K~AQ< p 7^D+LR`s>Q$$ |o^svhg'' 2<f`G9|x EAы/2W2Mb0Dq$sCkuGC(CF '^?$ɪڡ^CmPD mI.{6+H=g_!%vs֫$,_XgI:܈sg*,)d3b0S[:ZJS'Pa '[B5kx(beE*;N ';NRC~w!-QfexJJ9UM]N%0tP3s׳ L>6A((d:G[!ĄHA8N ײ P]qc#O%Ł(y]8>9碟sD뎕_! |FZSų-+Y {|#)_} d1X-GoAN&xy+"N!.Ii 7_ #c h;#R y@ ^BG3P?3)ǀb[ usqyjcf[ӑN~#+d/76|Bz} pSŘ Hy]Qga|GnI脽"p:La#9mfSȎEdEs$,uNhr u43^(ArԴCצ\g r3dX/\Us'azFY~eqy!9Bv2epg\$5U 饣=7>عM\]Ў"Km^w~r,yK0jx~T#xu\RX⹍ 7lswo n.D+lJ0$oðyQP){"zy#&>b~9qv^JWBQKTTN 9]F!5ת*9UWpp-3E _dUi2NFC(vIT9 U;%I+FLCP$<7`cN  A@֩sz>u g#9EL *%R@>YK8P$:%!-6fDI#{6wovu/&;VDWJ)!0pxmhbl\$ٚ_-=%d!Ea%8L>b"[S~_A)$"@ވ" $7HjvW91* uA[y40J Db?%0SW_u%YX#0(H*^r=%{,}πeOV8m8 j0slÆ5%Ak8H L]`(qDr_]/Zcs9i2Ag"O3 u9`Agj ):"hmվ6Jm1w:K2Dڇ-6mWuJL$&Y:-pPx4/W;P1 L`o$7I8\ӂ`<8\* v+f}!xޛ twaH@&:AJ p}$Z`ƴbi `Kay'L'T%Aؐ݁a$uCi9'KGKhS4[= @?8#c=YK6z0^FR?2Axq#È_}´VɷsC:EfW]8\(/U Cib3XyZ`=n#aB 8+LU##=ƒ;kDvfF ޙN  %c+S םbޣ +Eq Kݱ~mb{\vwq͚!~BQuSEؾ /b+&B6ԏ@C-0uov'ewS6e~1O$.d$! dJr1dI3wK A 772et5RK`9V̸3-poZtU:CWlBvr{$ Ui8X<'7'S0T`Tv2,T*H\T̘*b D+`ţeK~Xű>y3#kКK;S)\w`+,<xi3@T m}h>ҋ'j\P`ܞ8X(A SkSo-WOJD}N* %\!h|H sYeVnVv؆1/D>>_NrA} 1. Z} s`"ت:2,CTTmǔMpb)iZ鑱 ^].Q1z =W`P3 Uð3WjehrmAU^a #¡V5f (qݮ$(-5H[S᱌0b˝-G5ۧA/|v1qP Y,9xq688'R2g\UM|i8w:h,."Y~W"]׼B6SrA(Cjߟq& fE#cbIJc7bP|cpP>y7ׇcB/Q <35r=jomK1wvgVh0NX ʹ,}_D u^q, ︿'*$_.QrQRvdI IZA$XGV||bˉ@LpLfXj/&(/]C7١Q&ϲ|?n"6y'GԴ="mZKz{*Ǝ$m `*cBvz~xܙ0t]}OVvq_Yn/B!|Oi8Pl{s ]FJdӌ3:rZF{J#o B{yi&V%\qT (#G(ců2`^Xxid$s#X'>^q++`c`ʌL6_αY1h{qR_ P@ۜ&<^L>mF5[a ]&Ћ4HG2AOe#6MYUwV Of" `g +;B9RLnՖ!\`Kn18?+-DZZKw[2 gCף)AL; 88ugb"Pb-p玾u]SE)[b &Bz +YUW*ü)b%Q{lCRmKضI캓8VѫEl^oʵ(W]M?&E3m15yCAFR2ݦFJ!U-} {Q8 X 3xy7C11 ;܌yj}j&n{MOY,"tYi8 ٽ\@ b%:^*L ]A3?VS 㬎]1a"h%։hslUWFU^LFC|Jo37T y7S<̰[|;#.lg{ymM x`y6.KH+Y\qF><xk^ [d8Z*\u>-uܹ@w3xɘKC=1-RBiUN(Q1qen` %U LHe*~3bnsRJ:R2!qSv_ 5bgJ+R4dS2a1xxTNzNJ+–7Y'0N(m9{80w5@4v?` B&<]6bl+f@J qGÖF q<ROv $,áb+7dNw\oנCQїx/J/;EF-&$ [8[@S9mn1Is-\gNM(g孈tfZlOvLuDtu(Ɉֿ7Qs[-DŽg58`aS䜦(nD:LސMȂAnzgIU>6+C@ߪ:Lx0-p}R+rlX&sleX[ѸM' r+ס76S1a IFL0sc}},0>όHdh ag@0S ejaQ+\T2)p$2"$*iU flԚApe~Dtn}xk^`w )E^]Sanh J^wD+Հ`s CǹPCesEU;u)$ KC*Ŭ3[a&%rX&[%a'W- )+fL"wN M)O0#}lflj#hrַVf0#DE_0ދQo68ό*.)Hm02)Y% CUVGȨfiO<rD(S9,pX v̞OV򽓗ilOk9Q!]iU[U EA'a-W^DHg#HDg(IރSحQ5v%~.N2u4!&3oï1(1P7ZZf+R P4:`q`XT"pdQ7nJJa3X0UQ56FVuW64\1R9b2nt"hQ8!Jy$*E |gKš6bJA#!CmdfYRns34H ܛ} E)HUQADt]%!vXT+lJ{5ɀ܌[seq(Fp] :=ay(pbpɄu㞾V'wdƜޕKP6+v2dhD 4HWֶ4` `(]y,B= L+5mP} Ʌ)@fcGkfLbcpWBnqOU9)SlM!CYXB֟* *7`U7-YFPU[PY $gfT5IX@ ]V!͢dcĢI( v-繹 3+'CPCRͯBPTP;&qQBp6?v:s^[՚-a)v53f%\b$$Wg~ `Ej TIC c߮`QqvN=*Ue4!\olmŪ yJa+#'YJ0k@vΕr-X_GfrՆWW!P:U e(aTdo⚧T}$e'XuFFhLWC5r\Ժ@$9A\>Uzle+zmIL'V"FBp#J7!Ӯueep=pM8ZysU4Wc#X:0Rɪ*r:}VNfJ'p:DA+[&rbd$l{Ƚ҂Inŕad9dJ}p︈d'o  \Cd"[ J~IENDB`PKK9I I Bturbogears/qstemplates/quickstart/+package+/static/images/info.pngPNG  IHDR00WsBIT|dtEXtSoftwarewww.inkscape.org< IDAThՙoy眹\^DhY$R %JVbR5[S[IIڦ-@>ohpZ;Fcˊun%,Qxo^gfgNH:AYy̻b} Fff|*ܦZ)S)y!DG+:!3w3 ﳴ0eB·{ѱ.x3~ ^iViPB Bu,YY+֫ơQ3x'p5Y9縷1R (%]YEwNq h`yHr\)xYO|ĩ3|P#L-XA`Z:7`c 5)QiDT+^{_x+_&,4;7ٗ_bsEz )ETJ@Jh/B^*ksξs,(xCS`y3hH!()P"!GqW]9?pdAn/ܑ,4)J TJFI@ e ]MƱxm >Qs9xU11ƤI-$yJ%e+I1qh<_7n޺IPY6MFhư]Tz^XPwYc9[ bSܼu.]LՈ\F:!hY@Jۚ}ݏX\K9 V̕jL;Υ<;w?V-[8@HX-(X³+5q/Tq,a\EJe%,"վ)$B hc@*К(ҸDD$KV,5a`DWC tgjqL!%4A#8B$܍I 6l6Z#ȎH)SpBF&18R!H,r;eDR2IJ !J \TZkmRxE dF+`aFeR"RA\Ka[JRcK265?dw kW{ےnԂ)N@Ă2M!q ~A$턥={  8qlFiX̯X C=-T0& Kı$LXVB9,Ó'05uMz=ȸVㅠ\o5B {< Khi7O1ߛP2 R 396u <_/2s"{SXJpvVז2żEw" BF<^2ԛ;144y=u e4յY{sXRݧdu,&l֡PCь=L7FI$-ɹW@MP{3i#(ךd]Kkȴz!]?<_k~5B>_sWQa\j:U?uTIU$RV_dIIw^?ġyPX//xɺMc>RtQ1&MR8a|tOM= l 8.~u3 JFQbZ\$}AV9N?qaa7{l8K xvR ֒m0IeB0e9 xjC[1^z%&0gpQBY rPR>{ځ*+p.k,Rb!yklff|?=r-mw',QlHo^*eepyR:j@R,:J>sBQqCEFFczzN2J)tl0Juny&'xccٷ z?E) uWK!ˆE67k4 rNom5cP27wl.P[ضC6Y]`c}Fll[ot?ͭ[>08hٿ}H|- %-]{w_B*hDfnnX cnRږֆ8" űf}LimzΣQUHh6(·⏿"&"8N'6O,-_f^#R*ReJJTefYXXZ2vW*%",ks]U85c8F똥\rW,G1+1}}LM=ѣOݏm-RuB YR!Z?qLakp3l67sS `68.8.dM>ܱǝQlANryyNP/Fhv&m)/MJ)CiI(%l k#(Ӯv+@'VߛQ")yRF~- s/s{nOKNN{̿ 88f|9I~`RN+g/^Yqruh =So`\ 7+ԣ؉>hl% (mBWE迡d(t m^ `t[ka 39m;k! -xʓL'dTxtFN|p;_/Igz'H?`c>n˩^VwOF (ȼSz'kn-}TtM~8z}pc4jx)Ip޸7\ZхR?<yii Bz,+s5YӉN8 ߳e.Od.:}{{WT}q \ ?ēCrB= (i'_?tG5:4Lao\+yMsn62=|g0 `0 `0 Gn%sDHmkBF)3mkTSx]KZI&{*,4BXL^.ۛ+c0"*]o:1`V.pb4BWWXX!C#!@lXDwqBs\u|\UG'S>vz~Sr65zmx7(jE4kxc<ڪ4jQXo>l4{]ـ3oX>Tkmul]]4=lԡYc`3L/ȐQVUz?O1t扙vN̴YavcW3;Qؘ n 6 a`6d Sb( @9gd3t2B&KPؐC/onz}Jvx$6VPY2UL [5PC*< E| 7[Hkn *CtX%GZ'5v]0JC;B +d } výBt˫ #'PQ-&b';R5[f5@_ƪVM7]1zDNQP1!˦>Q+c:hM=mZ# xi#EL ^L^+9fFL;eūrW: IL9]sb<H8LGE#Hn,,> ,.>4RC|5\0K/sj|<2`Ow 3ic%@"DCm :a ;}]iF5,Y85!c:!%PR-Ce1,L ~h)il CP-z^M"S1)8&818x*V")s$Y\,3 LdӕWEÎ<'dѳ\-ɘQ`Ȇ= AO|Ozz Y8Z0%]QvOi $%y(4x1M ßp?}x; RO5d̻43!'n`PymhEGZcQ$!䞙oo=S]j _Nw<9aO<f%Όy'V LJ&NYޑ'ds^BB =~An ^b*5R>Ė `q5Ndh8G5}-MC@~L˱:х,#iLà ǵĀut-Ĩ?4/ 7n4D9DqOIV#"JG&p E)`RS.Pu?^y8c3+-ŀk\?$L0 %>aǑ,%H7XC/CmBOOĞ 4CYASqL NI<,pby9mV9q&ԎAŚ6EJY:£(ɁIƷvJELC=HIA7Y%=&ͰS8S]*{x"œO){ć;4֮ai/ӏxy1!cr1 )B3Uɝ{BK;/0J\6I~).Cf,&BjcΰFfF[/IJW,hJ'P ;?GL' &#ZW杴Bv)2wSYYKZA ?y4#^d>i妗l2A4/mUT>q~գIB-Mo6bl7J/U-hof[ :nP;.q5$7|z2(MK:7|jwJN!Y{-GjTnt5{10$;\4h|QX{U ߛz_/yZ\^vM|쮣jb!ĚxG`߼_R,s*&(;?%l+BJ?ڳ5oUFϨ+~GQC{.|DKaNg|KxGo&/Y?cыh,4qO7o=XB/c#t z1x+cV/7i;$ Q7'_9BvwnܡI'q(҄jNuUe-Z[9/LtƎ_'ş gNg8䁩G G6i[Bvd-˷&=F4I?I3+^Er< O4$R3z!H\Zp5B҄>\tY|me=iǿ3ql=8g㙳q!g㜍s6Ƨt~sF5#[9#猜3r #7\|z9#ϜEn9g䜑gd?LQ9:Ysst9GK8zs'dk9䜜s999䜓c*N9g33rbFhr&`|&\o9?w.6v̄"q>.g㜍p9#_Fg匜3r>.gLsFg}q9: stL/'3rN99 3Ea|&\fFP*y>'6YY1+MV9[ȨCGOܗfq&}t$h9ڥ^=,y|i%pNOJ5 c ѭ[\>D,q,~N!Gt\)ܨR|EG71Σh6^o 8c|YsF9g<ϟ6#?0V)_0< `ˁUʣN9h-r?˸ 4DLRidi+e1RiI3.3ցs@o瓿CV~5t_\c'p>B^~ktVz:t>*Y<| ]ȧP>)=^Kg±җ+~KY1fEE_ y|;x=q7C3^Eiے}F&d,@3 [jWGODzеXyȺOg\cGC<(ҩW?Uϯ%|nd/GG%+E=}Uħ_l]~.r#ewK¤+ޖ"jCh_GMM$gF>Nv7%h_WZ!!^C|OƸs33yWd眗s^y9 ˁ?~pec&Ͱi,,T1C4vGҺ_/\Ecn}.1sDj͌|{_O){pCqgJٸgڅƯd~z?Ipqɷ)?bY@Vw} e^*V3HgoMYIu`,Vd3EfT-__My#ez26D4F% Kc'19Gn\p~ >{5s)0\˸HƥoBlOhjcJ7 ?_"_]xQ`Ny'"[$%|~@>% bw|$$ s) h@8#3aE|3^ooD³KQè?ҙqO|7dqtx\ X矆u#4/¤AH3Hh.ɿC^${wɾD }zs{>7 a%%Grq.!N b /uDh떟QqQ,MVRS\,ߛ> R+=2ė|99i'GO?[tϭ}Zs,ZZ}{O{?ze17k{ljJiDgqtA{1ǟĭ]Ho`ƉYVZ7ӮZsF%]7YHe1.,w6GՏ^C}↕QOf6~8c*]*ŨPOר F Jbe璑v'_O]£wH'pKd\Sފ3P='VՅg4{7^Uty_5vutpĤut]k"+ؘeYIWok.I3{k.y-},~5Yx|UJ9}<|m\#wC;`޺,$F]X6Jm90㒭S3/ ]7ux!CxC똣\/']WK-mRPUH~LRh zF!.;1$6{45V5|64pScD^Kj~% ,c8-f߱жIw42-OaNL=/9fQr*ύ[{2zV5o'1 JhF݌eSiB1o|eP=$2iH٠O8ݮ ku_rh<'rj=^{WiUzجרi:|kڰ֨.d6Al. *<ʃ:[p'p.x~@pw=BM;kT׶}}{thgpW7'&R,+֫RbSkn?dWˏ}CbZ辵|z;_/N%eÍFlw`l= Ǭec?8 DQmT`m/$"kz?mRM(mkBSx]N07xS#WCJ4M8\f2;Q%aϩ:*I% :kXn´ACR95įΡ;>P4Mvhe LeJXZ1P6"%3%Kgŏ<4 GD1@^'u[ mkBTWx흍8 FSHI!)$FRHnw HYx3ꇤsaaaaxIǏ'U{o_ھgW9 o'GW {>~Jlo߾)*/N\ϱov[iZ_ձaJΝ/:6O- 92b?Tlk%?_21B sY5>:>c=1Ow y^- ڶ,XzusM#גU]>H_yYv!ۉ_mi Rus]Xm_g)YY)m]y,m z1aaaxEߓGקo/Y\k6xjgH|yu.\aæM&wk#ϐ$?]Mo\Ⱦ,/ڥQ@~6s?)}, l gX #vQg Bٙ^uのuhm?}{].~}v_J;xogJY]޳@.)oqC?}>@Xߘ'-(W? źvƔOʙRv[K?[A}?-wmՑ}g\=c}M ggg DŽ-B^k_g?F? v0||؎=ǧHPgs/hؑI t~{n^}ZyD5XWvO)"c0vY Z|~_%/,p\ɹyΰZ/;/xs_9?Pܯ5ݻ\[y|č8gʱL{? 0 0 _k3>z_\S |<)b|7aaaxn.ta?l^Cvkؽ#~e)3<3^kdlc&jK+o"e<.ʞ`^(3zu l+6v<ï k7]/lc[`On}򚄫 G뎱zt^v2)?;Wmr5ocIz?Ozx{&!ez."ѯ 1Gg{+ҏlw<=}GݽFƨ^)zIpG K֜{{e G12ۭqiumf>.}~a? 0 0 [u+7Svq֭y΅ ?ނ}XwŶv?ߩDZۓ-q/?߳=<~#>Fk"qzrQo 9r,nY[;o:)@-`ק-7({߯S@µK9֠ɸ>:n3 _[_*mtcmC>qSL=<6;ǫsaaa{xˌ\ފpx?0׋#5zяc]x^l򼠕(f:~٣^lin59W~\;?vn6erUbS~v^U O7O(|;+SG4|?f*?rW~2oNٟS9~daևmH6mX[J~s.ym4ٶO|Bd/b5ɿyU? 0 0 0 0 0 0 0.P~*1@G\⟿KrKXs2(ߥ纎J8'>X@▼QQbqwx b)_K|v 1M6kee-2Ǜ59?K^E~9ϱQﱮYF8N?~;:=J<-tĒyNAgC \NXKs)'^Kg\~2}6}Գ)n]Or^j~"{p29w6/.z-v:+M{WJYZ굢`% Ҥl9ힶկ#OUz+U?;sd~vND7*.Y+v:ye;8}~|+ÑޅN9}{Bƞ#txխsXɿkSV/uJ=o G<ջL'L:D]6jfgLz/+ؽ[{rCMYq~[{yy czA;w9zszWHVax3 % amkBTDxSv&6b3ShhM4DTD }Gr},^miTK`Y >ϗC1??fu`w 6F_3u?gggϚ U3b7૫],L h/z+ߧb ԠFb&Ŀ-w2rg!⊊hc`:˘?: ϰOYq+~t^/P^=P=p̙ ?nqt{Wϟ3.ySr/U~lw(:"=BA]n&>F~o1o9G"ܮk-b9W1ܕ޾?DFvm{o@"V.Wg/FK٣qh]Bcd,rwj(~r:BߐհRG{R lI{k㼸ޓk>u1ӰCpFFvwn{6v8"E?ں3` Z8 !yiC4tRwlU{i38 v=p>E˱=Rtn*;"Mk>bݯqgFfO~7k~6fڷ!f1fg{K1EܷՏBE͈jڦ8Gl&-D^Uyy1'? R&8ֶZ;Fog*a7kn&/TvsFLYn^RqͰ1 gBYYQ\nh߇qvP եOdHguu8߅n_5W'V?|c/G ZB?7CW8h*({|PPQ, Q}>_̅\Q+0v5GA没lYЖ`f %@JNX'` oN(sA|7OU=eOUWCPQaé``v @`^ B Z2{\Ik^c}Ni)(r?MUU9*s)sw}{|~L=~ݰeݷek6l~7$yo_zoN}s?oR##tf%1;}mkBTx흍) q ĉ8D^>׻gI@XjjgiЃ`0 `0 ?ϟ|:seQ3|ӧO|:2|.};7eGFO6_Qv]T]^ˮg{>pjzkuo{yye?{-x/ D:3D&򈼹e^Hyi#/OGzϪ߯_~ :sMe#M3Y#=2 QЙ[\s=E8}E>GȩT ڲTg-}VfoSVwzV}./>~!?U1<#}=F[ ~QڋBN..+푹^edLo+[\-k dW(}6q$#?z6Bөi?L7!3O_Q}Пuo[=tkȋM!'}/Ƈdr2_Cﲨ: `0 :8o=+8-4}۞cĥXdq{bUq©ήm!ƶg*ΪU\z[GA=^+ru{LV U?)V>ғ)x|Yҁgi\yi^cUo*= !TY?rfgWsʽVn*VX#=Fϫ+[F~yH\L~[O҇h5ݵTow|Sfӟ+);F;:x )/OS yUo2e)Ve3'wgGg=J^`0  ľu kU,Ksؑ5nY,bXw{ w&3QהNQev ]ƷgcH˞i{A3I8hwduwUIWq8I>+@pQşGcZ\ƪUߝ]/:3d;ɫ:gB9R|GW~w2;fzt|+i5nΟgZY|<1NyŬ|E7k?z/k><=Α}N΅>uWydʬdz `0 *\?W8GY:Dgcg< 2+'W6qn؟{ru"wU쏘~c#T?+y{Q,,^qF/Xv8.֩g3}ȸOP ~n%hUG4(_sn|W}Tg&x^c,Fѭ+ <#+}/Uw8BRh_|33!mr\7U9m({ѝpvew[xG]߱?g;,nҽow8]וb?OV=Z_#ve?vN_WrYLo;1g9pV^G~>[_vNOS3 `0Q[ veO\k^8֔v<Zbz\Opbn$~}oz3ј mK vU]^iNWA#x딫jt q :E= z%օq)CcYEqyRG-+u (K\hP'*^ء^q=m=y|Kvūe\rȊ4={W1;=ݷxp;o@>ȘT\Ԏ+C=*ɫ|GJOCW]x1.ﵠ9_Eб Vq)v(ʑ}[GwǺ{-oSdו_˞׃2;iT&w*w:g׭SOsj%Z[~_˯d֮+w]7 `0]kIu+eL]ւoA^;=GR?v쯱;<y o$N1紈=:ߥPVu< <&3KyC/4r)i=*/|Ύ^]QNН1qGw>ù{ ?Kv:A}E:_n+{u=rq͓̳]>>d}+|L01`0 leg:׺񶊝`W,3O?]\9P~[kOWiGc~)-<w.3q}'vuw$Vnv(r52S;Wk_Kϔ8B/hEՠ'9w?K;x:x<|@cϽVyc@ۖSw8Bq]=2lBe6V}eR( VeZT4ade2ޒ+nYBTqSߔ<[&=f[|szP)G}{Zׅ3n7jpWwftEw[ǽ;`l? `0 `0 `{~i`oLy>uoi\qK|}7Svu9G쯿c¾#>,jow{ՆݲL=mW2u_8دjo?kD߱mw>#}E:OۡO;y`$jwymkBT6x횉m0]HI!)$FR?6c>>~sm+vuՑνYu8uN?WP>1JsWiV_uKEϸ/rˆ_gKW]ױEYcl,[TYHT}xL#}A GV7^}>iҞ-i;}LJX&TP3T#ߨgJl e'=?͘ona|7>?ǐU%;/mN/IfQփz{G}?v✽3X~j{zTAO^ʰ>?sy|G)PL&6'tl~3~Ffv^|I>5.z {/_ۿpg4$@ 4F6 }Y>ΰ=Nb`'n ϳ%S }:eR18k KamB 7IE_Qѳ; rdL'm~OP! vP0AA6m(Oj:լm~OM '|,I:kP3 x[3Is 3.6fC1˽:GfF b_TxӐ zlM5wiK4 xl}6X&HdY|"}֩`+&OdOɪQqm~OV+rs[Ӟ*vrх؟~ +.fVrmPXK`H`)Evw/o{^s{}+ ?u1t#,s#8Ey}y hKKp/Zb|ų*]殻fV`p}i'*[43ׁm훑<1)F $+ ~}[ۀv찭-0GTN3Jo9Kt$}:ms_vpGWmt~Vu?Xnt_RV8eg?4ctO~=>9X]>6_ xH 9bo9,oWs>|2%|jԩ?T>]Ze8@ @>@81Hn=;vjQ﷿wEgF_^^m~O8Y󙦚X!]Ǫ S}tѪ$ӱ-E LXR'I_A`LAR!ٻo{EsNuL|SIቃ=9ioX1tڭ-3) B=Wp4 @61 \yG=?UA{ p#c9q 9 _b-2Pc@ۻy+03**s"*9H-Xtg|%?}*_X=>+ a6 E ;cFȚB2E"8?}K>,rv/nPa)ekFCI뜹sN@L K6' ąޚ]K+VMg 8{TDo{Wn> rf7$R\g-.TkEQs~o:ɗ +1ցְ`$F́\@yP=swv9y`g0k[jD=e>4VHSv ypЊ۵9=wu?rB8 & o{r6H-Kh߳[kP`9qG4XǟߣuKzЎH#9,q6WĻk1"Jo{vNƦm%$")̫WT[F'ql66PDK:}@Ep sm~OgO={Ua[@WwR3|bC)(6'(D\^rCW?e>$r-rPӞ6rs[f A>.l$\pL@66L뿖79_mp5JdIeрqxBXF5w# ,6'`8o`֮&7:CJd9[b6'Q6]͍GMsC|!lSj~rVɾR[;xŹ]ڀOkʐ`Tz 4#xw~tW[=CMFCz~*pWw+7PM`s2k'޲V"kȵsNR0\Yo;Zm+y9Hx0p Gm5/pb^ر,ZkR?eӶpk3E'c_ZH;w\F0<ȁ7S~]w$_C! 6'#ĿQ \c1'X zŵ_61@(0*WB`!6%aL> QN?KOJSp Nñ&Od<bZ cO Xsp1fhn]Qj%ڳk(9!ح-z&}z~f&Ģ~K*5ʄCDIQB~?{vmP^f5 =r0tI@Q10 u"i u汅vD'a`Mn1,7N6 H5 xg6ag'dk92y' QZs>:q8֩',6Xv`9 "RijBv-h+h<$>`"6ξhLf30o%2\H鿾>r 8oⰧ1<L-eOSI_U; __#0<-~?3EQƝ+rᖜΡ<r,phQz_\h<࠯FD_jw]^̓O~ ? e8$R(--<1q!y2oʁ֢ߪ:s|qg6(u<0c:':o` p=abwhıϺT,ifVzejwSU 4M,o{Bx|w$pIukZ6 w2rK 7D/_)MCXʡnS]Sv0_ |}GqX0ح &G=k%У!Q׿ڳ66d^B&h'3Q:_oo  h|vkyg&rٱz]7B{inH ;,~gݡwM_r3!Mxw3b\/:ZB+@qW8;j?\NrsO &t <|}9愺~ Կ= q<pMmuɺ}EGWvU@J]'ƟsR&SJ!gz.+"%pB H'ϑd6'씂X ~E//=xS<#___GZa<;= H\azQìеPg8vV< AV ۄZ8ZO~!s~$lR?m3ҏ;,52՝^_z ;jg? =8sI0 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @44Բ-JIDATh{L[?Ɓ$$!P^Ihyf떤MjNG5mҴMUդiu֭]EI, 1ȃ1cl{6PP,Xǿs~{~ע^6mܫ` 3l2o%k6v} 6Jjt{kwrS!*{f=Ieyrql)Ϝ4weo Dɓϳfenɻ^kNt'3 J \86ˬq0>g> T/=xL-\y{\UsVM7+3`tP6N2H$lS?9)p=] كRP[pAͧYp Y l1dqEbh& 4BZ]Ĥ} @cLJbhCW rq֐d+'W )SYK t?OJ\Azw3{6%8M](ڊ[omaC N(qԝS4wB%g;G\ mt*\.cX2rS5MF~EC>\T`OO ߅u]\pT<ƴso{o|?=k&j>x|Fhy,S8FAi p 7adžZXlIIځw~4(-$ sH( Ғױ!o=?>U HL&J($My<ۣ/~kldn!qg,bq|J$@7iW4$022k}<[,NѶ khC)oR.%;p-Wiydk}D"Q( ׼F/HNJ/=Hd8G5tzkt vi,ɡQC~S|*Ql6jr`D]2Goͅ_A!r=!ˁwȎ$-n $,!'O3ҦUД,;$t7,0XPzH%`&VbfPي\8y~UO+l$[3P.]U^gҦ)%J*nr _"JJGf}dBm'VBYԃh6J 44h )%vUJ%oI /+2]ƒkcDPHT'<ul"#'!v Yh Login

Login

${message}

PKK9xdH""@turbogears/qstemplates/quickstart/+package+/templates/master.kid Your title goes here
Login Welcome ${tg.identity.user.display_name or tg.identity.user.user_name}. Logout
page content
PKK9xn1 1 Aturbogears/qstemplates/quickstart/+package+/templates/welcome.kid Welcome to TurboGears
  1. Model

    Design models in the model.py.
    Edit dev.cfg to use a different backend, or start with a pre-configured SQLite database.
    Use script tg-admin sql create to create the database tables.

  2. View

    Edit html-like templates in the /templates folder;
    Put all static contents in the /static folder.

  3. Controller

    Edit controllers.py and build your website structure with the simplicity of Python objects.
    TurboGears will automatically reload itself when you modify your project.

If you create something cool, please let people know, and consider contributing something back to the community.
PKK9]z(Jturbogears/qstemplates/quickstart/+package+/tests/test_controllers.py_tmplimport unittest import turbogears from turbogears import testutil from ${package}.controllers import Root import cherrypy cherrypy.root = Root() class TestPages(unittest.TestCase): def setUp(self): turbogears.startup.startTurboGears() def tearDown(self): """Tests for apps using identity need to stop CP/TG after each test to stop the VisitManager thread. See http://trac.turbogears.org/turbogears/ticket/1217 for details. """ turbogears.startup.stopTurboGears() def test_method(self): "the index method should return a string called now" import types result = testutil.call(cherrypy.root.index) assert type(result["now"]) == types.StringType def test_indextitle(self): "The indexpage should have the right title" testutil.create_request("/") response = cherrypy.response.body[0].lower() assert "welcome to turbogears" in response #if $identity != "none" def test_logintitle(self): "login page should have the right title" testutil.create_request("/login") response = cherrypy.response.body[0].lower() assert "login" in response #end if PKK9]OODturbogears/qstemplates/quickstart/+package+/tests/test_model.py_tmpl# If your project uses a database, you can set up database tests # similar to what you see below. Be sure to set the db_uri to # an appropriate uri for your testing database. sqlite is a good # choice for testing, because you can use an in-memory database # which is very fast. from turbogears import testutil, database # from ${package}.model import YourDataClass, User # database.set_db_uri("sqlite:///:memory:") # class TestUser(testutil.DBTest): # def get_model(self): # return User # # def test_creation(self): # "Object creation should set the name" # obj = User(user_name = "creosote", # email_address = "spam@python.not", # display_name = "Mr Creosote", # password = "Wafer-thin Mint") # assert obj.display_name == "Mr Creosote" PKK9=turbogears/qstemplates/quickstart/+package+/tests/__init__.pyPKA>l>turbogears/qstemplates/quickstart/+package+/tests/__init__.pyc; HIc@sdS(N((((sSbuild\bdist.win32\egg\turbogears\qstemplates\quickstart\+package+\tests\__init__.pys?sPKK9 ~"Gturbogears/qstemplates/quickstartbig/+package+/controllers/root.py_tmplimport turbogears as tg from turbogears import controllers, expose, flash # from ${package} import model #if $identity != "none" from turbogears import identity, redirect from cherrypy import request, response # from ${package} import json #end if # import logging # log = logging.getLogger("${package}.controllers") class Root(controllers.RootController): ${b}expose(template="${package}.templates.welcome")${e} #if $identity != "none" # ${b}identity.require(identity.in_group("admin"))${e} #end if def index(self): import time # log.debug("Happy TurboGears Controller Responding For Duty") flash("Your application is now running") return dict(now=time.ctime()) #if $identity != "none" ${b}expose(template="${package}.templates.login")${e} def login(self, forward_url=None, *args, **kw): if forward_url: if isinstance(forward_url, list): forward_url = forward_url.pop(0) else: del request.params['forward_url'] if not identity.current.anonymous and identity.was_login_attempted() \ and not identity.get_identity_errors(): redirect(tg.url(forward_url or '/', kw)) if identity.was_login_attempted(): msg = _("The credentials you supplied were not correct or " "did not grant access to this resource.") elif identity.get_identity_errors(): msg = _("You must provide your credentials before accessing " "this resource.") else: msg = _("Please log in.") if not forward_url: forward_url = request.headers.get("Referer", "/") response.status = 401 return dict(logging_in=True, message=msg, forward_url=forward_url, previous_url=request.path_info, original_parameters=request.params) ${b}expose()${e} def logout(self): identity.current.logout() redirect("/") #end if PKK9Q,,Kturbogears/qstemplates/quickstartbig/+package+/controllers/__init__.py_tmplfrom ${package}.controllers.root import RootPKK9N@uu-turbogears/qstemplates/widget/README.txt_tmpl${project} This is a TurboGears (http://www.turbogears.org) widget project. You can view the widgets in the Toolbox.PKK9ڱ<<+turbogears/qstemplates/widget/setup.py_tmplfrom setuptools import setup, find_packages from turbogears.finddata import find_package_data import os execfile(os.path.join("${package}", "release.py")) setup( name="${project}", version=version, # uncomment the following lines if you fill them out in release.py #description=description, #long_description=long_description, #author=author, #author_email=email, #url=url, #download_url=download_url, #license=license, install_requires = ["TurboGears >= ${turbogearsversion}"], zip_safe=False, packages=find_packages(), package_data = find_package_data(where='${package}', package='${package}'), keywords = [ # Use keywords if you'll be adding your package to the # Python Cheeseshop # if this has widgets, uncomment the next line 'turbogears.widgets', # if this has a tg-admin command, uncomment the next line # 'turbogears.command', # if this has identity providers, uncomment the next line # 'turbogears.identity.provider', # If this is a template plugin, uncomment the next line # 'python.templating.engines', # If this is a full application, uncomment the next line # 'turbogears.app', ], classifiers = [ 'Development Status :: 3 - Alpha', 'Operating System :: OS Independent', 'Programming Language :: Python', 'Topic :: Software Development :: Libraries :: Python Modules', 'Framework :: TurboGears', # if this is an application that you'll distribute through # the Cheeseshop, uncomment the next line # 'Framework :: TurboGears :: Applications', # if this is a package that includes widgets that you'll distribute # through the Cheeseshop, uncomment the next line 'Framework :: TurboGears :: Widgets', ], entry_points = """ [turbogears.widgets] ${package} = ${package}.widgets """, test_suite = 'nose.collector', ) PKK9i BB7turbogears/qstemplates/widget/+package+/widgets.py_tmplimport pkg_resources from turbogears.widgets import CSSLink, JSLink, Widget, WidgetDescription, \ register_static_directory js_dir = pkg_resources.resource_filename("${package}", "static/javascript") register_static_directory("${package}", js_dir) PKK9turbogears/static/__init__.pyPKA>'Tturbogears/static/__init__.pyc; ݸHIc@sdS(N((((s3build\bdist.win32\egg\turbogears\static\__init__.pys?sPKK9[%turbogears/static/css/interpreter.cssh1 { font-size: 2em; color: #4B4545; text-align: center; } input.textbox { font-family: Monaco, "lucida console", Courier; border: 1px solid #CCCCCC; padding: 2px 4px; margin-top: .3em; } #interpreter_area { display: block; border: 1px solid #CCCCCC; padding: 2px 4px; margin-top: .3em; width: 600px; height: 300px; overflow: auto; } #interpreter_output { display: inline; font-family: Monaco, "lucida console", Courier; } #interpreter_output span { white-space: -moz-pre-wrap; /* Mozilla */ white-space: -o-pre-wrap; /* Opera 7 */ white-space: pre-wrap; /* CSS 2.1 */ white-space: pre-line; /* CSS 3 (and 2.1 as well, actually) */ word-wrap: break-word; /* IE */ wrap-option: emergency; /* CSS 3 */ } #interpreter_block_text { height: 200px; width: 500px; font-family: Monaco, "lucida console", Courier; border: 1px solid #CCCCCC; } #prompt { float: left; font-family: Monoco, "lucida console", Courier; vertical-align: bottom; margin-top: .6em; } .textbox:focus { background-color: #FFFEE3; } .code { color: blue; } .data { color: black; } .error { color: red; } .banner { color: green; } .invisible { display: none; } PKK9xR!turbogears/static/css/toolbox.cssbody {margin:0;padding:0;margin-bottom:50px; font-family:verdana,sans-serif;font-size:12px;} #top_background{background-repeat:repeat-x; background-image:url('/tg_static/images/top_bg.png');} #top {height:100px;width:100%; background-repeat:no-repeat;background-position:top right; background-image:url('/tg_static/images/top.png');} #top h1 {font-size:22px;color:#fff;font-weight:100; margin:0;padding:0;margin-left:20px;padding-top:8px;} #top h1 a {color:#fff;} h1,h2,h3,h4,h5 {color:#1F76BD;} h2 {margin-top:0;padding-top:0} #main_content {text-align:left;width:750px;} #main_content a {color:#1F76BD;} #main_content #tools {border-top:1px solid #1F76BD;} #main_content #tools h4 {padding-bottom:3px;margin-bottom:3px;} ul#toc {position:absolute;right:0;list-style:none; margin:0 12px; padding: 4px; background-color:#eee;border: 1px solid #999;z-index:2;} #left_col {width:229px;} #left_col a {color:#1F76BD;} button {background-color:#1F76BD;color:#fff; margin-left:4px;text-align:center;} #under_the_hood {width:100%;text-align:center; position:absolute;bottom:0px;} .disabled, .disabled h4 {color:grey !important;} dl.param_list dd {float:left;width:110px; text-align:right;font-weight:bold;} dl.param_list dt {margin-left:160px;} input {margin:2px;} PKK9jƵ turbogears/static/css/widget.css.grid {background-color:#e3e3e3;font-size:12px;font-family:verdana,sans-serif;border:none} .grid td, .grid th {padding:3px;border:none} .grid .action_cell {text-align:right} .grid thead tr th {text-align:left;background-color:#f0f0f0;color:#333} .grid thead tr td {text-align:center;padding:5px} .grid thead tr td a {text-decoration:none;font-weight:bold} .grid .heading img {float:right;margin-left:2px;margin-right:3px} .grid .heading a {text-decoration:none;color:#333} .grid tbody tr td a {text-decoration:none;color:#333} .grid tr.odd td {background-color:#edf3fe} .grid tr.even td {background-color:#fff} .grid .pointer {cursor:pointer} .grid .column_chooser_link {position:relative;background-color:#e3e3e3} .grid .column_chooser_link ul {position:absolute;display:none;top:0px;right:-20px} .grid .column_chooser_list a {width:200px;display:block;padding:3px;background-color:#e3e3e3} .grid .column_chooser_list a:hover {background-color:#cdcdcd} .grid .column_chooser_list {padding:0;margin:0;list-style:none;background-color:#e3e3e3} .grid .tgp_button {border-width:2px;border-style:outset;padding:1px 3px;color:#999;background:#f3f3f3} .grid a .tgp_button {color:#369;background:#edf3fe} .grid a:hover .tgp_button {border-style:inset} PKK9!turbogears/static/css/__init__.pyPKA>"turbogears/static/css/__init__.pyc; ָHIc@sdS(N((((s7build\bdist.win32\egg\turbogears\static\css\__init__.pys?sPKK9xkk turbogears/static/images/add.pngPNG  IHDR(-SgAMAOX2tEXtSoftwareAdobe ImageReadyqe<6PLTEcccbbbɧDZ͠'tRNS⿿IDATxbDĀ.@P6FV  ̌@`` ##d ''33;;P@98xXx`)faah -,P@lab@p&( +90u JIENDB`PKK9Uxܮ $turbogears/static/images/admi18n.pngPNG  IHDR00WsBIT|d eIDAThKl}??ɧ(jEI( v!)m괆]A=@0A`CCsIiA95ulǹvm<`Ֆe'ʏXK$rEryDER`f~ADhO;|SLA!Ihh J^!M^7x?|ȃ q~_bDV4%s D Z!rK-Z62hf0S3?徸)r[wg[~oٯX4gjz56>ՍƪJ][V<0  =kqe'G$?jLr(ѱc{8qdNRhJRo|+-7>ezh>MhiMQO0 zhu2Ce2Lm KpNwl@n"ŋHQZ#<Cj:}vgV4~;r.^ENLW &'avvwb-ZZ[D>۲w{JGA)ݫI˄fZ|:q\ήz`mW l~a RJ %VJ5иPD{>nJC)\D2<܎DCC!!tĹM:ZkV!HS KN]4&K(!;N-;e Oedb- lhuv y9ͧ}chs?ðLOlV"I4i` `aX *ԌS:*߻ȁsDR"^w聇:Lip?ksgy^el ABiRMR-Xc0Ƭ-1XNE|d|D81Y GT- cgNS@b} ϿL$cpQ]Hڢ`b2cpଥj!//cl)8}D l Q폅[ Q/)i,dێۀc2U,JPJJV!R! " ׂKV~o^GwIi4Z{2~'y9ad{ $lvS-nnZYtvɓR q `7mB+_!g {և8l8Ԏ ւ~2c6-r>|yij=q D{qj!G!-4Ih KֱWc&g{4`E#M\L+iJɴ'ı eX4Q' Q% #,ֲ9RIG1%@x38{vKD(B~貖SֲhdN+.,iMMG7,8Y(xyu'$9B?ܓ  S ñ!GE$tbBMT_}O=~vL<"ۇgɊ6oel%m=8i9R W*$[Û /剉BEU}Hbqx`i @?|g5zezj{ PgK2I 6l6y97^?WXkLD;ч6 +J QBs|X/D{mF/><667~DEtgBU!- Jm >Zd<ڝ19m)>Q@< DtCh1\SY`*T/,tapL6(^@t)"A} o2QzaW~ - E~+30@q]n@B`'i v96{6Bt7 bB|!nqع~u;!{@nnގb1w39%:&DRɚb> b:3Nm6V pRn\7&yCyc7u}It#LMhyۿZڤ=q,׍Y7|}dvn݀g7ދ.6ÆfO9CKIENDB`PKK9[,,'turbogears/static/images/arrow_down.pngPNG  IHDR exgAMAOX2tEXtSoftwareAdobe ImageReadyqe<3PLTEsssѮŀ拋www IDATxb`@: vVF`e|f eq8|0 @|.  b`XYlBG m>a]IENDB`PKK9V-turbogears/static/images/arrow_down_small.pngPNG  IHDR ?gAMA7tEXtSoftwareAdobe ImageReadyqe<PLTE֍tRNS0J@IDATxb`b@0 @@&0Hb 0 :I@!1 `Ui.IENDB`PKK96b'turbogears/static/images/arrow_left.pngPNG  IHDR ex pHYs  gAMA|Q cHRMz%u0`:o_FPLTEsssѮŀ拋www !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxxyyyzzz{{{|||}}}~~~y/ljIDATxb`@1@!/3+ `bdA\܌`>@ ##@ /<@ t~Bw@#BGIENDB`PKK9sK?(turbogears/static/images/arrow_right.pngPNG  IHDR exgAMAOX2tEXtSoftwareAdobe ImageReadyqe<3PLTEsssѮŀ拋www kIDATxb`@ؑB̼p6@## @>##7'@0>## @>? @  t}Y'"0IENDB`PKK9⟎%turbogears/static/images/arrow_up.pngPNG  IHDRysBITO0PLTEκi; pHYs B4!tEXtSoftwareMacromedia Fireworks 4.0&'u?IDATxc` 'Po(#D 11f]d,f>&DIENDB`PKK9dx+turbogears/static/images/arrow_up_small.pngPNG  IHDR ?gAMA7tEXtSoftwareAdobe ImageReadyqe<PLTE֍tRNS0J?IDATxb`b@0A`Qae  $&@@U|AIENDB`PKK98$turbogears/static/images/catwalk.pngPNG  IHDR00WsBIT|d pHYs  ~tEXtSoftwareMacromedia Fireworks 8hx܍7q*XK_j/%/uQ7quD0σLtgDPĩ:F0e{oXQuht*}Q['> E:$VVЮ *֝gIj7V@Y` q $ p6!9h-[Ė +`5LkD^hX4Qf\:iu6lJ lv4BC%|\yp}"̇A5IE5J):ZJb+sTqϥ7^fֵ:k;2G'30ϗ9r|T*}97hyS*EǮٌDvU_ߞzG)ՠ+~Nr u@ ̌JZEQ\>]r Mrkҙ5iL2%ôAH\um2rtȭ?KJIENDB`PKK9 )turbogears/static/images/catwalk_logo.pngPNG  IHDR0Z tgAMAOX2tEXtSoftwareAdobe ImageReadyqe<PLTEG_ВsxTs?FDA<BCE5l$ N&a5m%H[ L囮~R:XʀчC JR ІJDAu-؎7n&1i!υ8o'9#_ ]M M~6Q ޓ^2j# \W|w鞶τ7m&o҈4k$lMdG(cV𥜺qېxP ߔgbH,f3$_+d}P~:)beH`>s,\^CdO @S\֋uTI{4U=шs׎4l#Y?̂jltSC?yWЅFݒ[F^D_DiJ[@oO2f$ܒ7n%CeG #B>gIDATxb` )D3 (D$dp; {yۈ1:&q!2bcs RfcǔD1DݏA('S2?LOD1ZT?l;LO>DNtvGtAC$#ɉJqJ^yU/wp[bs^)$OϲCȱj+25O%F"Àq.9E`wTYГl"uFB~6R'8Ir ,T^ *b(UM+"[;Up.-z @"!Qoq5s3p![]&h$ha!>M"\jm&sB-|]ىo_#';[%Dvvv?az|8*5IX|ss=Pn iV>x۩TJu!qb`+.kJg)yVx)GVw5~M TɩϨՉxoY1ԃ--a$6'Z8>ܐm ,uG\6,lAq;D*l o#%@F'o(PF lqU6I{ `eC6"/jze[f!h%6oniaDv`lIZh!ͣ`2vsI/N%\(-jMih @Є AJ]U{ 6.Ӑ#+.NbmbYb:;ؼ'\PyU~؈/2I֘瀒U1j@b>ΰI0rp.!VوB9&kBx)(I=Pjrovi܅-vV0N,looVWw= {=73-RNc?)9٤&CLNvA]-nH v(! @ -&6)`soM#TV'o2-TMvBjgl2z M|c%a7vBjo \x" 91<]qT, )':3a^#~#Bbk.DQ'E ؠ[+nf=R2hU\ͅ%uPWM9HegjmݣgdZ֕(#po "[>&-dBip {Ǣ!Ϯmm)jh$ Ʋ誢VA:؅f&"a'jMc`P˖*>VB@IX;h5j8E=!q0y/xFO;.+dh" )ah"b` % a yXb` %a-a-a-a-a-a-cůIENDB`PKK9!|8,turbogears/static/images/catwalk_logo_bg.pngPNG  IHDR0+gAMAOX2tEXtSoftwareAdobe ImageReadyqe<PLTEG_sxTsВ5u&IDATxb`؀\ wYIENDB`PKK9FP+turbogears/static/images/column_chooser.pngPNG  IHDR agAMAOX2tEXtSoftwareAdobe ImageReadyqe<PLTEaaaAtRNS0JPIDATxb`DĀ F`d *"@(2  ʁh `##@1 @(.0Ig^hIENDB`PKK9nii%turbogears/static/images/designer.pngPNG  IHDR00WsBIT|d IDAThXYpyg.@,`q/NIQ):ۊ";QRNP!)T" -J*W\vIm1LHAєx@ ؝ٝ<`ހHN^W;3}_7}c_ZZd5ZZdZ!L}|cCs=|Mu|2"pKodee?dJ)8瘚DoՁ~*vcC۫FOB%|.\9B~6==%0 d⾽,={!ë=|Dij[];̬;%I:=|Ľ\Ul$vzjnnQUp80777>rK'n|$I僚7Vm`d>LkIƆ/87vz#0xmt:P(5kQU{6PI:_PeӖv?h[XUUfBy)ZItq7|чP(4 UUֶ𑝔o+(܄xO9 F NbBb7B À#Ƙ &)s5)3C!E8O.J[Zq?r#/L,-c 6݌Fh`mܞbG0XP/uiuS}+,++w)?=Js+!ᜧsΡ(ʢKI7̑0a0Q QMCT c_Eco4z+7yW},_Z\?xGm-,WAERA+e'[iqb2MVbA, [)x}Z9? `0ck%j܄i](`9R #$IzsÆ f  \xS}z$*] [mVo=h 3OQewJi? XK)fb9x襺Ɛ Dۺ0J0<2渮ni/4ם[Qd`!;xMxq%R !.*aH୷Fj/I_A)=u51B)6<26X+B]fc,s]!2, , EaiX,x'mvm- [7[ȌH҆G&N !oU Tf7odY4>H`1I :<ɹnlhV+֛B{WvG83@ʋзUt0L\C,2+R2zt3PiZLӄiXla*+-Gwܳ{gDǧ_;O7r2?ǵn0 Pш PLLӁ{j~-0эX,J/|ꖖ##{ݳk_O70@ј4;jEz @nz4ka!ľޓjG)^"+77֜s!Jd߰={dptz!yIMe-t,d8O͠ (r a:_|`X'ZZ쌱nٶu}FEUU!O4(Bw.2??HcCc<-_e<̫\N.ޡit]:XTbOG~Qbs!5-ۏ[Zo۱B B$ i.!L{❰564-ZoDi}iiu͚TΆ&T`S(>G_yD#!ȶ4{ /LS`` YR2]a-fxX[Db0g~zhrjHIIYtdYܚxA)}SV',KJyY9>CK?l,3!QJ /S*2UmA r % ; x¯$P:\N"$CC_t_++z|> /i8x%)Xgm=۬H dGNn>q—C/iD$ů @įIENDB`PKK9Libb$turbogears/static/images/discard.pngPNG  IHDR(-SgAMAOX2tEXtSoftwareAdobe ImageReadyqe<PLTE㨨Ƃ՞ҧzzzsssuuuwww|||~~~ِݽހׁtttЦʫۻvvv}}}{{{3IDATxb`au( F@@N&0!n ik ˋٺs3P@\DE V**’ S@@E.KF̀ Ҫ A QC> 8 :@ث:1PKMˉQV͚ Ҳ J >J dU2`c .%@S X=`M#7IENDB`PKK9O"l!turbogears/static/images/edit.pngPNG  IHDR(-SgAMAOX2tEXtSoftwareAdobe ImageReadyqe<xPLTE紴nnn֤GGGю:::mmm[[[ϏwU^(tRNS.vIDATx\I@ џVF{'‚RWP?6)S=="FMaf] cbs?Zv`Yqcao0f*)CB갿K~VD!dIENDB`PKK9n !turbogears/static/images/file.pngPNG  IHDREgAMAOX2tEXtSoftwareAdobe ImageReadyqe<PLTE%%%뱱⯯@@@ֻ̈ťנīÔǤ䶶}}}tRNS@f(IDATxb`BrNz`!{EYYC 3I @QUIIAU߄Z  . @UT%e-t,/'+@`1im y^e5uF# y Im=,ՐTge` (X(@`16q0 P b`Q>@ńٹl@1 21Mb b b-MO IENDB`PKK9{..#turbogears/static/images/folder.pngPNG  IHDREgAMAOX2tEXtSoftwareAdobe ImageReadyqe<RPLTEĻ̊ꂿĦ鈉ḩ솿w}„j򜚘aٜ{oj~xꤣuu暹蘜xyyjrՕYZ[p}n~xwvچ|zycwփ犽檔WFtRNS@fUIDATxb`B,,ؙ@|{Yę;C( d1#+F S-bZ)4o>=N cŗcFe:[M@ŶDz&s77X(-+,@@1Nx&@@Dd'r6@@LH@IENDB`PKK9kn.  %turbogears/static/images/identity.pngPNG  IHDR22)xgAMAOX2tEXtSoftwareAdobe ImageReadyqe<PLTEDJAXXXMRTZ1^(qƶǕIˮ% ~0{{{ӔvH̺93}tz:ou7RLhj+di3γ=E|||Z].I}Y!al a* vvv;sTJJJugr eeeV\#!뢢rrrpppMMM{V999jVin:`y6tttkkk===mg^Vv09(wQFFFf,+++ߔ’xSww0ȷ777yTQWh/oKm2z:}wɺ?ћIϿV_af0fk8щfn͞WҟS_d1d0-`jJD/:EM۪`V8 ]Z W[0{8w=n^hܦWfp|7mr@|zLB]NtRNSS%IDATxbO2`4ZK?ZIqq q3/'NK,/0r)XED^AA@@]]׍Ka-a-˥:]¥M\zRkIrSP766f.ꑕZKPi d\{iw.BZKoݺ&D er.YJVA0y둜A@-B`-5ո^ic9Ap-܁ g^`ESL&%+`œ/r aUUP+dhi4%yA"ܸ,-3N H33|AA S,jX|ˍWE-\h :^2-w :ٌ5ΥS0mBhZӁn\j*,lKȍiy_\9eU!5iZllVAVAL[??>evS/@[@^ߵ~W;;'#i}[)aZ@ ` @ s̛0I毀! J4556vtuwOlõ^# IagN^&!!QSN?C@Ҳ P锞#$wP5pCkYɔdx;]H9Պ䦉V@cJ2_y{5@6@e4vo6l(*zc>$74u@DhY4] X`p7Eh"pYy4SZ,9eƍb@9QҰti+B Z7ZMnh붙lt> r64%45<ҖєGhV6VTT+<%<%W0d0.]ۀ2EQ}X'DJ4%Zz }}}[tW(dd:G GY-F2@;`gTg ;J0e%211 hZ}|XYYC3$BYUC+ K˅+m##6mVFvYpk@X ʸ ʻ0@YO0wZ~Q\6}:<0،)KB+IjIInuz{ ^مYϛɉUO[qڠl -% .CfuIENDB`PKK9 !turbogears/static/images/info.pngPNG  IHDR00WsBIT|d mIDAThypTǝ?iF}r!025w6ĕĵɲֻune˫ʮ77qYg: )cs:«qHh$f4 K~{onڟĝ(T[?x\fr),!q9OsC݉;E T[?xbYQPmʱ( ch +ʥֈ]3gZ u'_ jCKYC|WqE up~ ē Z\sC]b-z  [_`fx"I[G\ ϒPRCEq.,3c΁x7׶EhκB3W~Lo:y!b*!]UJ$t =ߞ=^Pvj c+Jyv5;>cB` "0l ZkrA/oϘRW`1MҬG)Pmly{uT?y7wپg!0݋!DJ V! k؆ ~l}q[@,&/p}|բ*@ lsi ixZp'eB26W JkWJxቕ`0a'ZhlSP-,Ŵb^5d]h_憺dBk~/;g^v/biRᘒ[WqYk3<鉡K)&oTϰ-]631:|g-4lpDa͜aBBVR޲X ITD^]Y8 }q͎#Ɠ&cxn+y`J!pWx3n!CPQeYbMm 3(?6~m7 J I8pN6j&mnaO&J& LJKz"6Z!(v9u\m->9U46wq RDlhG{=! flBj!k̜Tdh_WJcКi3,G94^`h>$_5.~kvgT,6&5ulz&Pwx.̞ wiϓs`JiQIaG$mSx?&r߷CoFF?v^Y1Rpw'85'NR ˲g:ųQZh_ ~>0ZFc$oAJMp&woRP X²,RGIo20IsQԷoJ3移N(W ]Z=l m<ϻIK9Dl(PZ|+Wvgξ=#x+~շC]O̓< .I, iY$-"C+MhlV%tO_W~r`s#a5IO/YR<kL]xRҽSvڅkV.a|ҲvLZG<￲v{v#bz W;͛>LjpeI5<rH,_hH'cl)&Onu?h[4 ɋ_>>8iL!A?V:pb\!NNۼs<++xᅔY-k5J1wj9Oar='ճp4^{o_O.IK?f?l]fN4q\;v`H.&2YKRFSej %4 ā ޞ#`َ@΄O=_PRӏ~s WnK$-:{btGtteJ > re33OX#W_>ݗU2va|3@8w‚PɌ/~eŸa6sI~7~rz#1[#M>䇖,3X|lYc T& w3@G.m^֣ w]S2w|H.%w~9oiyN4L1FVB ~`J"hJo˱}W>> :1ϳKHVr PT/t2D_@W#ǢAӂW &o&QQZqM+c2ASFMHTe^{w@1kUf**E$زGTTT(@1h.搗*P*2fjeC@ZCŝ \~zWTbR`(_v5jt1[ @ SԙyA95mwd+k J.ps @ yvb8 aW^"@11srr,}F7b`2ffG^ 94e^f`UNc` PgY&13C$te=P (I'VAdbuBAAΆJ'"ӕ bE .ss=\|!B;XIENDB`PKK9r#UU#turbogears/static/images/remove.pngPNG  IHDR(-SgAMAOX2tEXtSoftwareAdobe ImageReadyqe<9PLTEbbbcccɂDZͮʢЧVtRNS}IDATxbBĀ.@!@!@@fFF b``d ?;;/ @YXY98`c```` CC 0C 0C ,c, IENDB`PKK9{`--!turbogears/static/images/save.pngPNG  IHDR exgAMAOX2tEXtSoftwareAdobe ImageReadyqe<PLTEfff"""UUUDDD333wwwKa+ tRNS,IDATxbDĀ d>@H|F  1`.'@ uL.'@00Y@\6 d; @ t>@ WI}jIENDB`PKK9\w w "turbogears/static/images/shell.pngPNG  IHDR00WsBIT|d .IDAThY[]U{LVۡ Rz%6T@i@##&>Hƒ/ƒ $1D"@FEphh,m;29s9}^ke:$&=gu'\ţ?2  n"2" "ZLe!2R[<};X,^ AfTkULM}@ϿZB>:)屛oG@`t ?Fi)냀#}T֟>I RʇE2'PgEOu1== b7R|+/ `4yB2Ep?lt.EBCˇ0k C.<09ɉ4q"uѢ8y؎7|硷{@S f1q 3%< S'm"")!۴v{F4Mc0Yaf ȉN~-U dt9y kq[h_>8RJcd A@`|%z(B/tFh!֡at'D !KSɾCqJ? (<2D(1E 17:{ L%@hUNZ[P7|\:<þZ D~(n!$B(_i%<*"A2tGrh\4:2RHm@ H)@|M\g2c:$%AdP.RC^mpPPZAm4(1x W)H,I5[ۨab ~ !j2 P:_u7ޙ;q1zlZruBo_.ϵ jbRI``n%[coc+aflنUq.Xu(5w1%@1 C> !&R踌J zN=~ZMW\/~lءQHDR@/$=_>[C()h0D ̕q,ذ6֬Y WbU-,CEUpc5`\y15 !`b H;.vn ;6`qV/ LΟsЫ/tlv1 XZwaI(W2 (#Ji{WQ _=9t"yKҌO9~v[hκLUtR CkyFhm+R>x eId%SC[jSlplJNCZ< ̭pkN(ZRe],-(J X:zA][ffXFN m<W!!$pɾ k͛w߇wo?8 t_mᲴ3`:;pVJ3xe>LBfR:΁`J<$|kGѶH T^K%i;[2А2<ʢ"YJ"Ev ?RLY?NQF֏%eZ+HI;wN".U]ܹ]""ZhmhѪ[JRJE'vI]f-aٲePʋ֜}E}[TAchpCPl8j:DчwnvV\}[_JӢۋRhm}O/}}bxG<1Fe,==\ێ7s< LLjѽ@"|7nR>y].U k _)Z+6GC=NJ_17?gN\XBc(3oߓΆ Ȏk. WZszH-b.֫Yp:ởQ9ȱmWwb{F)İR¼\žc;jļūYñ|vư~ŴήYc+ zjo0 ±kBǹ͢Z7W*nE/|So$*}ԡ8cuù_j|G*ym0㯍mn#}Ơ{ɵȰҸ{ԓH,g7A"E$O/ْraƳm(ғiSe: pF1tIvK5|j0o}O仛÷iVvhlĿğyνu?"zO8d5Ҏl\йĮi=%@籒sL5 X)v`yKİ|O7ŴrKsN3 += IDATxb`B&YVSp6=$ ̱P &q@3 ClߥɭZkx8:C+M++0KAG5AZS$J200/f{_lʜ?I9lie[ro. L7h^mD";Jlr}ݺl!~Ԫ@EYכX tި_8uA|j2L@5, Rљ3ywC\mV畼flcgD&Ff0 NIENDB`PKK9 !turbogears/static/images/stop.pngPNG  IHDRugAMAOX2tEXtSoftwareAdobe ImageReadyqe<PLTEf<<<;;;...:::ۇ四888999666777𞞞䢢˒몪444555333000_z_UU2k2h^^^===gfBBEE6y6:y:LL=<6~6*r*-u-ݢj񞝝4|40o/4r4ͦ⍌///111CCYYY---]]]\\\{zɘUUU׍*++ggXYY~҇222ّܚά3s3˂,,,***փ''&f~fVVVZZZ2s2ӎ򡡡̔ȋッω˨ˢzyث988233%%%>#IDATxb`HTi.ᶑ!@묊|iFsF,@@Qc &`LH @Nu DGXQ˲  S̄e~ʇd&~v XϤޗd`pp=@1DM2:m)''竲m)~MQp;'"ݟx iθ m=o}لk;,xHf _)G s^; @ T(qgsVOC}##bk'ϼWZZk @1gT++wWz1{O !kQMGe;ys{}Y7tCL)efbb Wb/zjqbX#u݄[̊̈́8g 'O.@1UsBIIq:_y\\CzuQqdޟҾOT}Wv:@1$$rډsɊ,dgLI Дlll`RRHH$% 1W`Œ,<5 VR$.9pSH +/-WbCZnZX #2"5.&"`NIENDB`PKK9Lyy"turbogears/static/images/table.gifGIF89a3!,>HIj{ǒ'r@Y e`8|@Z&GXHWfՊe:Xl;PKK9 %turbogears/static/images/tg_power.pngPNG  IHDR+{gAMAOX2tEXtSoftwareAdobe ImageReadyqe<PLTEɽˡtG\5ĖzꬬhT+z\`%: {94xk™մi6fV˳ļÝyC&üṳգtZժe@lKښCtG۫aPL!ƶtSǑ]IݥîպӼLWʹͿʭwJ3;{möe)pM![%ºrR|VCdɝƕfͶqŦhvڽnK}ou+hI|ݣ|[g9mTʽF̧zQþ¢{[3 綅jƺlždDgCq1sn< d>n]CxY׷Բė= ?,ü`-8xQ<נH{I[IyC·׾Ⱦؘ@g7˪M.Y=O%T4clcџmүqA)¬bJqVvX{ày˩n^ugźp{xcIDATxbX6(@1 Ng՜u *9=C:.lq1 }!w5fwM g5BQtȫ)'H/4,5@TI[ҖNR#ڳϜj)'xW`yx/ g, Aye-,Td84RǤIz[JRg%{tUe|q*#fQ+bJc (tbٗohQvhn@d : (M[GS4l`$Wl@F 3C98;ɿ?cb: (.wL۴Hnsߎ-Rg?RIXyy؍5MrkOEGZFq@:병ѯyyU+wڥ2:Ҝ@:ȁoM Kj-Ҩ+ai'jJs"@QZ@l)d`,͂]*L7SDi$v3ٕ3%DmU!]EV.3RgUu7Cuu+.UX]C5U5@Q\@ٳRZ\(($*B :XqMfy OŨ: j8jy[䢊]<=/(OW @TqֲGƶUz>D  = ֤ be8oPeBXfh:*$, o,s_HXgٲ\Q!!GhqQhQڼG>Y@:LP8l2n_V-6(!yt2 ~ {3`qQ 謴=f3zz؀ 4~{" bş .hxt0@'RC8͗ aPz"Y˖ ! uHX#  {4Dkf& :m50  QaanX$,Hc#:"Y0e۶mPcoPn~ 5P@1ppC[p\p5Ԙ5߷GPd@1D*ެl#r"băV8E#sm߼6qҸ$Cd@ s?oI(ݩ[촛L2LMVV޾Nε2`uϲ* 1bS#0>i<`^Oڱ.@1,Q 9nX&gU)d{g q/' S`֣@Ąx_$HBۨ> edze4C.h!XBR2ߡscZ 'DikFToxOzXY ULV'jx[s`QΙd#)i 8+c @~:<tI"uC/Y$$Awb_ww#DYwY?߳' Vy{oOREeа=T1;Kvyu5;:$jfC+Xjz?,+{! 垾1H~1+Wm J CutMaY~$uUe JmFfr>>vo9&>򓰝9w!i~ );md-V TbM^hٕgۺֻ9Vۊ4IMW ,0G)^iKxP]K+~978`|Vv7GY rrCCk vopWp_7LA*hBmO[ZҬIENDB`PKK9JpG.turbogears/static/images/tg_under_the_hood.pngPNG  IHDRD#gAMAOX2tEXtSoftwareAdobe ImageReadyqe<PLTEŦĻs8ziǜsljIƗji3٥sުd@wIrG߹rwCoęZ& ]KڳtS漡Զ½mDzT੃]{;˳bQ۾U:`LVs)ѻJF!ׂYm]1|XFʬ⽑htcxC&õѾk;!xK4O$iZ8ͥ]zS&AvT|f;qCSY1|̱ǔiQ㷣bLg+ t3Ƒ\cƻմֻԴW)㸕t\nuoTŠ}ωfT‰P˿{R=eڪ}Qi[`.hWʾ~MɻtN#9 ؟go@&A_3oG1±x._{>~ ЧpͶbj>L.~R/ϝnǮ÷KFѷfWǢX!ὈQ, 0IDATxԚ XWib@N8h 5X( "EEb-T|Xj-"j}`kJZ1P5ƾVִD{gɀT~/K{933ݼtX !Z9&hI! 25_1ohHhjLQ> K_^L#%z5Q#0%CLPW8 Zɛ9ZW_S%V<@۳5I_Z^xgTԌwΟ/+?yA%R*0t aeeae11+;;ls̬p րx'{yՅ 7y R 99{kR?, =?yҤkx]3ik`mX)MtLQ?FΤ.gt90gW^w^{\\j>8x^{{mܰJ) rC3gmq \ (l€?z'Y3241ec2t{;I p9UL.Av8!KA>dryyLyۡGcA3)8d`l8s v @.czy~#lB29;OxW#NϞ/nT)@]ky `E jö_~jI\_w>~}PiRk/zok'^ (.•oY~˷+Ǝ[v68!i;>~((=zZ-LV쁭[7o98B$W}4@p.f{W7W^_\L'ÑC\ȕR3@9>pWdDԨnf{2_8rʂYW;@ yGe/葧(]_{{e}MJ<\'FipIΔ4Z7ռز,)QLB5%0AlKYIU{ݭ>}ꖏZ7Urޡ;`ktg Lpy!^i_HϴgA)䜵Bae5sdQ555m?*%_1E#V*GML hn. (.xQ1?:*:jg|TH k! I+RDg~T7TD/Cz*y'OX3Zۨ_s8)ݖҠੑӾz5UVV/u\E>ZSP`)u N<󣍯guE;e)13%*x H+OiS8W씵Z՛"ƍE5-€E+Wsp.NFntrZ%'}\6qnܙe9=Qr1w1Y玔qJIr.񔢢U;lt"8eb*4*;#frZRKuf%9`jQ㫢 01կ•NY i)uW)M+hgΤ>X:6:cP i!7龚Z_"zӀ_|@E,oFhZ[͛RW@%mp2>րa5vn3฾h: ./?wjܸZBQ5$SOޑ\dC >eZARB-7&Uo&G ERAxGRy`nJ"6I:<2690=@> vF _mw!@ rL'Ʌ::q![o!a5m2p@ 3`( u  2 7P_wXlr[PM[hSRщ0F$жK\BX}/YMXʞãm ڟv]$#]Ϛ6v[JAh>47v".Ie{副O Ggwv>/NSa*Dru.xJ']-]s],t͡5. ;\ )p"p}zA'l4s"TddZ}vhN :.^blw2`&^̾iLoZZ#gх0ꭤ&SyI ks+7',Z =91(ItxD .Az lYI,:%5}h!b'2ǰ&Yz [<"E<.o;^k6^Y8fW 'a,6j{ H< z"ZQ PbL@c1L0gEgn Htdt".'a D0} -Û0,4gPтɬo8KP-CfUZ)nBr A$Q5%1\օKD\zM6ӣ @+`p{VLYdmk ٮ7$KgnӶ4ւ͠ j?ZtԴwGG$E LUj|7%"ܞ#LhrO`f"A 8F%X^6Do4P Gz ܍q#s$҂Lϟ@7~VLUh]nzzczplOdg; Z@[l-fX`0VZ<|7~OF`6­h]!!)@yHk3;[̹ jj5t5[Nߺ= ~lIENDB`PKK9_v 8turbogears/static/images/tg_under_the_hood_sans_gear.pngPNG  IHDRgAMAOX2tEXtSoftwareAdobe ImageReadyqe<PLTEĵźͣ쭭a;AtUlJyҽL!uUž+Ŗ|IZ2E󰰰jɩqd徾1v: Ѫͷжe̶Ҹմť˾̭nviFүҡR(vXۼ뽆hT+ձ{^O%ȼ丸ǾwUq\3V-N$Ż< ġ}`αmd?žЗ=mJV-˲5~_j?rO~`z[Ȧط8w33T)ϵҷϾ‹o.ϸճpOոظǬttostQW.Γ6˰ģX0^8ûúzZ{\OJgIDATxiTSG %`hR(gvI]Im4 ˝)-QKf =!L10#?+SlW0Rq.7 K#E19,oϞC鹼{bN {To_PpJԿYlgs O?&G"2N 3;[~4/c(<t-!ub[awGE Hcq[ )lW>vsIMй% egP=ѾFSa[}]@F 34G% &tιcG?a$ol'ȺƼbų$HrZP1౫cIIQ ict;}ptI^?_|pyxSJ?bDwۧqeHf)h |)/Zt}}>"k{fRi=EԹ3W=9,ƈF$NnnGO ܙK(MkW8+3Ry2~śR?o5\%;Sć.\4 ԄǯI|ϮG8w{L%Jzmӟdn!aAIp;|ⷢwOW4ܔIs$H%-.wҨ2 > u𮟶ޝZmJ(UWE8]낶)SQz\.ԛ1[!jEtؖ_6^ia/Dް~4- U}>"-QF Enii5pۆrqv` kr@aڻn%FJP?d⚒nh(Su牘ThvhnH9jC4[GT^)(_jd:=@_-:Y]E(` ̶ʼ5OWA诘NJIe4LE_#uOʅa+As/3.%_Mo ig癁Ebim鐴 j+VF0̤y{^<"kAu`iaP(`cB $zQ&$AWTH q TIVVWaP A&ls ;wCsRT(NH&m|-Mɷ3tN&$ *t&piZBJP1o LUV/)1X=!֬xUsweuo|o|L  x<9պXxjŔ@)KD,*dh'*N`y3 :J190̀$oBRZx&P L%&yx!d_KJUSQ0p@3O55 vMU[a`յZmu1aX[FU[îg4֌Zm3((((((( 0!BtS|IENDB`PKK9zT"I I )turbogears/static/images/toolbox_logo.pngPNG  IHDR<7TvgAMAOX2tEXtSoftwareAdobe ImageReadyqe<PLTE˲zJtSrGwhoiG½Ӎ4hh+ S8Bż컱ΤX1<ZlUh;Ŀʻỵ{}Sm5õZBbÓeɻr2ⴃRԷy<˹~2R$e@{eìܵekvE+}]Ťr>"ܵͼ\~bĴmSeSY& b=aOxG%&ԅB^LvԱuǟcͶruJ2bڬlJΦ"W/s<ÚN#x5gBCoO$tĽ˟t_lYTձohƹ}XF߸zȿJƮU0ť@Ϋ岓Lͱr;ڞqEȚq?h4IDATxTSW1(#AEAq@A)SEEԀz8@R- T|[1ZG[J$Q{q5sjRJNNw~{bf1h Ơ1h Ơ1h  h>WA4"bolD+^tk$Cv v=,(6:4O&0e\ЊɁ4Y޹"3A{4~ LLt/nOwSQMڏj}+׫`NO(k lȩVצmf-OY'Ul!N k}6uͰ uBvӷxerf{mI9ԮW01ZOUN5ڗJIRn[fv~kY*PtPDhsϛnbf ↢/Co^+os꒒VY/v"]+g>(҃$!RN$ ~.ӱʶ.>FFȆ=&$@6rvqNٵ.Y\ue4Mfvjil8 Y[@M-P| ;[$`ڬRDh6Ғ;s~zgeBF$8~R\xP+.^B_Re6Z~w1Zq]ęVPEb)=aa>YE6H{+C?ϿF4K,vHY$)}8w35D_.9Yo\v 밐Pa`0Tf=.4u"eQ ^(Ru#m{r}~Pj_QLU{$6Rc'qV+}SHf4vz#(I*$%% 88=6DmFC0n!8AA ncaV?ؒxرcWzeg{ ;6<~y<^\<;p 7y%1L3oXs pRsQk\Hwn$]Z+MG%x!,5~\ň&؞ĪUv'eJW!!Ȝ\ch0fDy=w$x mM$RI0MA< s<:Q{dؙ81D³JM釵M]6c>LViZoIE 9-r&Jh)]e+0|]Nr*7ih7+Ldxe` x𞍱 kGt}ٹ[rZؽѾF@3jkuk\s UJC YGb Z"+xq0 tnpܒ|$jIވdM.jV*)#![T_9{Fm@BifOHbtp`BbjB4Ec4.^SF3mj<)n,|zmU}2 WKd !*px(CRer}( >nWMkkJKߖ_ƹB>wN!a^wYY+1AG۟?]vSUL[ٷQ3sk{ D-[:!vCγ9A{!Ñ6p/#r8,#=q㐹>gN21pֆPJ?aY_-cO&kGD G3ROwϻ (_U$"yu_>zi4eIІNK9Sk^I5~eEȯ*T 6x(箦'jiG ˙#!%.__M]xn$@_1A +,{^[:\tSTt0p3W?uu/sޛ)PJyC˔_n-S4|7fmxVX=F%t]ǫ>Rnoah c](o7 uɁըf>ZzDM*3 qw ݅ Z"z[oޤ[<%Fa >T" Qߗśv *]P {]}g *1y㬉l:$s@:]o"T"ѨA"HA\g[~Z?]}\C =J~ PzϪ>|ĐܲCo3IW%?>s_̷Aɒn[C՚eY_l6*j3 'w^wˀ!>f,=+w]=_8%?; ;atwF@ sF0QN,*_j P!o-_.yNF6x bեn2?8x#!`g~ ?}N)7WlQѣwםf2]E 3tNć}G&4]jUޯx (F"EEӚL. Y<ĸb rc1ԹY-|؁V>kGWt.+[gxG=/s'T"')P<SwePl 6/]AKO0[& |Ysm-jј11& NCBMiKQ߲w{ϛaaOozNq7[˚d9uoIrm羚t೛e:0Ai_`;޾Sc_r%#awH3pIU۸>6߽ڗrroJ[0S(9u>m1y ~ z9ZӏvB0ָ2z#y{_5enVB%J(sWAC3i\%{6XWٵ*J2)I#\y:]4WuȺ]>$KN_%"_P4E|zZK^'7A .4m:lF.nDQyi\dr8<A?՞bl&0@O<Ѱ)qbJsZ8%rw>=tιwo+5rl$=E} zׅJ<_.UdT^o 4@ 3:&7Z[ P3i]Rgƾ aVnA?%Ch#:+־3}gw,b|g;M CH ѷ50Z$mFzED3'r />,9:C^_C`\S] _oDt_XE"ec=E{UAa>A dBYT$2GnANh2kc.&ETj% "';E>/mvǵ  ?$~%Eű% u#0g7-o=X"^A,2/( 7=y/|<7lv8իBSfLMemӧu/$@Z>VWk vXȏiiSi47EN ۉTޕVu Fw7h[A  %&m0`g(i~%_e1 !@{B"? [2%/!@0~Ct;uѪz>Bž Wִa~˶;Y]z.guhV>[9%A OM)¢WS31NCeCߞݳC$oJ+ro w'_n!ȱZ$:}G49ZP(M#ĸN~ukyiaW7I.QXw>u>qbɶ(N;u-¾Yv Y@{~lj/y;/ʿ#DrS=O]gR?6_lW`!)mۍEEORs+iO4vU}|FsJ5H~! aZfOWp.Y5P^6w++t5(F-Y >:O|dǦY੏}sn70px 6 @ $ZWN!٘&$J&5)jRjy;O;, +íU9t i{Zۅ} ~B~m;]/+< ;3-}p(Q9"vu:;Gz:f o/t^|P.x|/4ĹVC@{c(T߷\ko0 ߜiB6U&TWs~9vux//.!{ϴË[?m_R>~s8{MLj5$7u`~o*ZX\QQi\oܜ2 =/zޭޟ6/c5X^5akRQIrk~ Zdx=jDBJ`ā!#j υּw*a YV](b*(&8y=#>NOR>-U'_߫O %F8d[-SP @N~7WϻYLIa |M$5LOzvV`=F#M^C'xq< D/54!o.a{ݐf\#+>%oK7jvNSWHܸc=s$nbcvXESW7_Q`IyDlF?f}'k#~QM Bj*S9(^2[ ۆi<5(EX9jDϒU(lk+ hUE5TGvQ# c|Os J]ϕ'y ɠL*|5z9[Z _+Z$omFn4o")o- ږ_0ߪ/@JƄYc{2*gjS +ӹ TZ=C1Ree(+j:!ʴlKD%؍D1wmU-%Y5R|> _ýO)AÓ8>V1RGr0Hyg?Oc2-i^=` QT`'Ɣt׳/w %wHf#hрsmܱAScz~4ox"O`{"g"pدRwa,C3BM?0: WF_wwvSp^n8~^sp')'%C%8|ifYjcȶIC; +i ^&A @ (A%D? * *"!63cr(AEj{s,qnVi֢j/tڸ}kBˋSS}E^Sxyc-)ڦl&XMz%L1T{  KX}\4.'Lgq0HhQ0|ݨ78x$fj[W6L^MGld u AMF,!t|޸[yg>6])41sHx~~]L˧zʥD L1|鹛%V4V."2;Q4b/c"lnNK{"o7@ &.k$}tؗ p<Ķ:I0zM;M,nٳ.Mn$"L{<"/|fG1Q>4 CJ>fQJYKTs:}DF2&2"|K.MݍS+4mm~ĹDyn${cGbk̮Mb؈MyXސ|wI833Wv.> #EzHHqc1Kʤ$Y}*z Ȥ)&\BG9 52$cN3~ɡ)L>|6j XHth:kռ7k2E,3Ã\4!Utakx8hix;GEB{FnI˅oV"!N_7r}z=ˇ *;ߏ _?*/uIUXћdF*\]?';O{F.cQ 2ynYg˪gTrZbWuLqg#,hd7PRŖ=RIW؞L>wBYikg DrdJ~4Ui[hhhH]rQRV3F= tPm݉@P`|?~w*xиƄ現L?ޘ?I^-Reׇۗ?^تvvG0#%:<߂J9Kh+ m7q`yhb''!PP()N7(i(h !-G3̛q'vA)y?o&YǪF_}gt=z;~bN~H'qo^F#;d 6Tkò5X< -EکhLkCHp k#4i|]er*_ 8<(V/u !8Ǘf Y4Zrsm}!/ȯmif7C >j,W;O=E+ZjO|W~Q.s 7s\ƀcڽtX\%WTᗄqذMg2OCP!Z.<,W5Mc*MœMܾm^\;\?zur.G{g gUx]}rYToo.o~^ق[\wgl|_Kp]ҕ ^O2 w69mA"-kX\ R$9A$NĎB8RDd̸=WS3 a3ay~uի|淋70~8ɶ^|ol8@U]! 틄OQ岳O"k?}9N`d>Hbk:\2 8zr1)7m忬k[!FXO.Wg `&T ]5k q-ujX; ^ fד*ê_StVSG?9e$C9y`;<*ͧ;KHN'YG/>qq͇/sv}sip'iZU U@bMpp68lTUƉxq *]@TYUUN"'G:?` vv$;ࣃ݁}z y$غMnHW,F}ܖ'NB?ܺP|C8ՅYY;*ȣ 3G~{Fk~.i9kEkOR:?q Eڬc/?׊49C* UXh X 8E8.nOU"쭡6`"OB88%ͬ׋HmHzRv=A0rjtf~xwЕ'6Z]ˊ@GR= nDp7]+?pO#Aĵl:f1ܛT'Lj!4TW=k8t k8. zX?X1SNۿkb"P k̞ y>3@FPoTv=8&,TX8/*pI;}4GxOɽP&@\uH.[h[yzdZ8\9-b|p5"Q]6x3KLq91Xr# `l-j;$˂_NREݻGRizEla au6*);z@p!2NQx@ ø;8CU:h;2v:n. mlCK?˓yj~Mtc :_) &7B2Par em`Yi(8ؔߜX{e<7؍"RdFe{b; "V903͟"!"&K7n `2:[!0Y/6ѽ\Ô!LRIax0_!EQv4kd/ښVPMB]C[>@jD]8Q;$6NC C?_Tyz&m"~T;~ÓחWW÷O?ʯo Ui[xmm [SQMkv,E}ms|~սTKm9zs@{]b_p.h| 9. \R0~ \q%BW rq^Y^") *2ˈ?"o+ھ\ϗ;ﶊ/T>/wR|Hv`k %E;3a<_sqˉq}Le|B[IPž2±Od@[|q5`NkC+(N|'0%6&IBS"< ]NWcb*f ?oBTgʅr T\O=cry/mN=%?CqŸ7w5%_YzAp&޵v=' 2۩\/;`p[r o,"!Yp,)=|~JU26|L{SE:~%a嶊`7 76&\&fkCB=D 쓱t0xI_]-/F+:9c PRXxJ¾D<n@u;&?j~Ŝ^ţ'o_~yk톾rw6w =`!`kRvE|\8yiWLjd4a*Ev0-ru!w~-wg0 aoqPU ށ+O“$MH3lvRX$jz:oE6/dֽ7߾s?p)=U%`v0#F#pnYz.:l<0|Uݔ x>e)fIy[qw -X4*v%R5|⪕ éޣi8ɮc U3^Et)hQiߌ%>?0KWHoe+u mX.3ۉJS<sM=҅ws鲜ms\:R]f Ns$B+B)"``'|"Ha,[y! bԢ#-FRjX |3bDȮcw]" Y[Wx0yn]γw;nNSsUel^H xo].{mbo{YYm ]7Y^VzˢAnJ7|\ @,'a<zs>H魷^zP+thvQd,?6~G;ݞ{-1d.ƞD@ E.& i ?Zy^-T,(r!e$?nJA:haԧ8+|O^ދTTQs%#$;0fL5#?RΓF_Hz//Oa_=Ljeb T7˿ 9 i'@8 q%i@^N&Z}I$?`7>ilJ]owɗ7diBUK DRབྷ93a|.k%j'\pQzp(' ;(? CUPFDZG.sV=M #1_;+|}{LVdUն:s(Ioθ/jۋej> xhѮ|ۅ:;ܰ.:|tg~N}p?-{ $v˦ʍ.9\ viNn/ɟ3G6QL/#wD _@zR8Tm/ա }ԣu7)M ,_-XӺɯDj ܯh"/L1?E_<رROg2KjI68a#6w7zIF+ǦN9/ܶa *R8]EOEwGuP貋 qd['fHL;H5BaKL > >_ _noK7*{ F>n֋ע2;"3!˫\eޖ+X*P (Ŏy"\#= EƑণoJ6u:,FG?zb]!:3,1Fn0{Ӎ.DP.l?.5`=*X^3(zsHըs 4Z,^ѕW=TCG/`+ٿ&vet6 `[HsϵGgYa&zs×߶q:L7_?qTjOU8]3ASN=;1vx=;# ד@4<>˵QY7o&o[Wߋ]IN0Ԥt@P@g܁D;@ٱ<Į35UI3þOBca_.!afk}@w݆/$//W%y/8'!lUi lE[UCg}{PErE/B Ym1/x%86s̰}Yڝ&k=cpB?Ɛ"[Sd)eܕQT]r$bhtEΫ#ϼVFgo;E%H2;@ȟ @ܢQ[7\%0mF=#y>ErxP="j2jR&{앳C?eG`<]amX0\ToS阈KlC߽T4e,9A">A؂>; |]DBl>@6. /'0kԃd;\ -R&3p zLRrF,Ìe)9vp;Aǟh*q"G-)y}kdS)Qe;ijl-?2l?cGYЏ<Gz#ecBcw"e9o6|(x,M2SB:F#rD!$EU#ףOD>*ʍ,54nhWgṓطWPj2/&@,,wv3Rv`~XY:s₎!h iұmB~uO &>ʮ %;1{ȋC_WfxӶ >|ɻK)s'͌;yS/ KԞR0:2+WExps>sz*0W|/HQk Cؗ`UAud9ԣm(/T<t ĦK#Pk5ut?hbEC6'(ucY}SMgvU ڜۆ7(j3;kg@}yV{P- CwֻbkFo͟OB_=]nNj9ωF$) |RVU|y ±帹pX* m$ xm7؜,D?.zhDc7y2^rG}$&BX:EG7ƿ?o6[NnN>VhonTQO=eI竱ih'zKTC2DΖ@Li`0lH^p$[H!/"S3!zA~ Ժ5;z&/$%C 7\PIj8A3;~UWV+.Q([M̙N[Xiֹ5"+]ǟUkE1PK VCn[+FCS QeӣOʿ]=nr,Fڐd2g^Dz_ڗX=Uet#UkS3.ܰ@'IXoV7;dOa\{ Р2ݺGzfE`Q=1 Ƒٍb;TX^.dez>Sk.2W@vX9w&DxM1^-m/!qu\YԳ{ζۗGfŸ́ZUKoU^'ţm6]_CdZ7bղx|)7>)ǓyZ<ϸU|:Ko/ q0~ ܹ6 Dag.vPD D ej<` $$6PaAB-s8kJhy9s|/]+= ^;X[gqM{U죺`B0 !70žl[Z5 gE+A]8 x"|,_9Wa9[|:+aq0_ԽΊyn2A"is`nu"hPw: PNI- l0@< $__M@*:Um;ܖlMj.!H*'3gF=؝mOv?KEu6c8K\Y:Ɓ OqdpơUPӎB鏑nX _hWe34;h3T~ 8bpnHeꪰSՆ|2(ǁoퟱzLá|Eo,'A9u[þN6 e4ž[>+/\#JOKYX)ϫ~M& Ct+%zFD (hۙ2M3&~$!|#*#i.VmZk5<5@WND|T8 Wy _S}hP=ILxtckM隆5wbqa Tq4\V 2(0C {pQ:Glbx?ϭR/Mb}̬+ 8^<[l<$<)T'(A=^MK~ RK&~KĬq`[BZZE)Ό4sp5>] In˻z9ѾIomUHuQ$VJ0W@CJ5cbX6@'Y%='`ưD콖^)rdO|AYlA{sqE9 Sy^k_ܢvt -)A뼚L{:!CBu>ښi\Sy_ɭW/*義ooRz120_ wlΝ j5L#S_xc/$Ѣ[Bp|o< @ܵ#I Q%ٳldBѸ` By_?UTTcۣVw׊^?b4`rbGtw(e{4A9M& %jekT%[R}iFʈ[0? { zG@ O\ >mFԘ1F,c*7.@X!eV $PDAQNF}Cf1PX kg(`(IL"z:m$Ko(F';+I7W ,&}=-x+ш?={U'm`?qƬSA]6'/>b(<66`5c7/5=YQ <<ҕEO;qJ#2*}Qi%m$V7-k5+/1su@U-|R+\%& G^рVU3H}A`ۤd̓!+ìN M }hFEW77=Bզ2LJB!`.hR.~= &/vX{$i* U-B}3~􉨯XVIur>nilJCAԅRd$Fm]8.M k9P"%!l0CF qq,ߧ忹3:ggJKPВfsL>OS&dcª{ye}Z|y4ffxoʣ<#~?,1{=bLin 6Fgp4H궮E>g{ f9 mDDirĸs<:xqnu]knea{r"66l?I/ ֕J [v>`p5f♤%|D>Uhȕ" .LUX{Сp nQ>Yl ykˡoѲ0~d8 %@/6U%}lR}p$]KwJnV6O򱫧> w[+[Fm-$(y+6gKf @,5qуチwg|+Ջ}Cuw@(hЁrdGuc_Ҫ ;vu-|If߬{L}aϥe\GmNV:hpG+gT׉+1'Iu6J`CL6Y܈@J*UHGl഑&KCn/PgsF_[8}Ѫ,v{$ڄ2-I=cCl>ljJfuED(T,S\_Tǒ+{.wЍ?mȿtAsG*B)=O6̕!^ERcdZx}"p^eXRSEiwø+rV+E#Q~~ S?v쮓 a %;WJ˥;; *xྺ4b̵mք}m_]^dCIAFY\o鲔ABQ5ܼDv_hE3j%6Í ABfTVth,Z|)lz)eIa_} @ܵ4 CAΧ-$Ďp)س`m\NҴ4]X~㼌f"g&^;E }K\ u]f$_dUkg2oB!)v"NK#~OE( kY5Abr0nKM (ӢDuA*3m Z{=9?tS%UED?y?Ccgސ|QؠXC1|s\a$pĞĎnR܍{ǫfpϠfp;s-ƾ Iğ\%As{؛CM˾zn |kzvGiqxr@0skY)هz*|Cq >Q vav9ZUrt0HWi0 f $KV두!j@Yk0E &ac= Y~fmѮTCS h}{k>aA״T+ѷͲJx jఐmݯc[%~OcPWaï"ܒ1Jf`[ʲr`ڑ܌\ؾj{y:{|?w19S{¯ )n;~*0I1ڀ' $E;WjyCH^ y㏠./@L H,D ໳k)jUT4W!^!#͚eI5͎=Lzr{H="E=X;Ɇ'->"#Tm߫@ƣsHQץ :m01 6D6g3 *!Syoq,(OYKfyݼmV-6 5{-L=_~_4A7l]_:y2k~<ڵVtUX%O\v 컆Sֽ!LjG{]NA8Q :GD>>BQ."{3kֻhpaV5s{c߂ד߆J^^$ͭm}^/J$O7,H_hՙeE>/G(DCV寉3q>6!NZNyD4AE-' p%`0- d܎E+gswt*|Yi3,lÆبg8T(:պ4#/u-lЧgHȰ&z(ssD"W;B{ -t`qA~PBwH㭓i /R==-zU>Ovs'*C.%Ni][ 6ֆi 1ԏ2.0QZ=?Y(9ϔ1͡FLJڞJh/JE1..V쮃~󕭕 A eWWU;A 4aw51Qà3z$Z2-ˡ(e`Ut~akDȌ0zav: 3iB/܏&U.vB0o:5KWsҐw/7{zdg&+;P["[n;-R:liܙ04,+agҺ*{aK۫2+S5ҪlzE_U4:x"sLZ¢Vo` 6#%.Ƨ\dgo0 \.{O$'+;{+SzAOy\+3xa\2»Uۨؑi*rQQa 9F?3 ;((VݛEs&9-MVJ]i+ˑ KB  O<+z'h;H4UňS\$j`sR]ي, LvS%G[p~c!4(hj h2oE|1K3~hB"]B , #8-I|^qF/TRĀ\pA% (p&#Ѧ\^)}9>ob7EN0p~|G+5ݶnx|xM #ÎD쟴_޽W ƭ\ڝFbѷo>~+)'A 0XES ߼7xՍ{g]0}/ynAȫLCAoEQ.΢3eC=$l<>01P թ(bEgD#g憰U}QHsiܝUHi`9pp0q6{϶ h3uFVTLCPj1b>ُs,L|zh[\2Ξ&H-4e-C}"Y*fuM( w8l]%6>vAorg^N(z&C̎' ̈MZ*@ў+W maT\,fJ}&)3c@Lv!HHj`$hU-3UJ>V eC)G'3-/y4mΰZy<:X+U熚 qۍy1"dzTh #m_:W?9~ǩ \V+ҬSqFMG_2dtѨIj<2SzԮ~_X&b jR9KO|N~h\p@9DMvm^ Yix{Ec |"mGs \)TrtEz<߂{8M>Q'C;< o/l~T L̨Wv̢QF>=׼ Q=ܷ<kw 6SeNB!LDzy$jPNrȟCDFFМ0&0heڵ HNKQɬ!k  T lU ^@ (Lx[H+mTB=M%_ꗆjTS!7Ҩ ܖdLTmjD/ME ;#aoW|Rhޔ?eAγTTx dk,g-qj 5lu;c-X d 3 E(=A$g8Yf#HD DCn,_ɏ|FWM7ʮэM VÈ2*#X^ \ԫƜp:->SBM-. `7mx[?'Df726ԖUz:cO /^n۰^Ƅ?o^]! Iz<0jr}~{y)i)6RiWûY1~.]H8ܒ2~_ѪYvghbmU w1y fY@~BC`iR8f쿳Mtq3si=Se?jvy(( qxFނGh%\PD˥mήvMz"ȱb'gF")ݞy\]ڄ{99iKIC4~DfSC!!q].ڗtݤT6ܗ$Н,>&7Z5@NF!Fe!_jC_JMw`g"p;_Y0J*L#xi٥T[B@@{ |-؁ c07K1z߃q=އ|,Zw9Ѽy4 kUZf/w }>ZTGv ٗ.޼]δMU~yz~ݶkw+AkZu- ,ĺ塭ZVU뜲'-n|oXa vjՂO<~ HB.Ym_88.lFmn2̜93oO.;r}[𱤷[GDX+hXeiul}6v+ \oFTlsE}1Y6IŋP9|tL\UBJ}LWEA3& ?4dR n.)3+sQ!S3PkaЋM)`h9)#_}0`|re#?B"9gnv=miȃOʒI7ȦR侪w0 :֨'mspG_=}K#?[kq͗}W.͉5a!^5as'껭mmOן|_;{b I`XFH"( ] zi ܃"E( QB]kdz{zs3̛yw" @ -Be.,<L9}MZGUu iYJ\x:L+ }))3go ˁ0%v4.;>R+/RrW~6M3B6ĹM.e1'viy<ϵ ;{ /?,F-,XYy/1콃P "`~b2Kʄ`e33جrn2,h@{M|} & 6!KiACZ*(Pe=uI 6Fs8R藅|`qanC)Ćy+oBh%J IhFf{AƓEQE[|AݳOZ}3Aу宇Lp&1_!v~]Y/&%5MƝ.k`| $O(wSɜ9r.e-`]肼 s43I ,V- [a ôPF'yl^7SZHvv7KXx a?`cao/v3|a@>ORC&0yw{2VQ3/RС'l("a&ϧ5MWe6I5RLRuDd6̔c8<`gʤ 6WvhY~ΕZmQ0 F(`87M=pϟ֜bSYw)0uwcf@um 33 je T7hS_?~3߿&6ߜτlHw ??},N=+n|9X~ _1#.=#9e!93Mp|I#ZEA$#$Jy YX€s!_so-GW?x<?@)D09&pLmKs\ #iŽXH:k=Q2@ h&JJIL9&'jxcn"xɊj ``nVnj=MTm1H7^TS.o׭. :O O;wa0 '6iҊE,xA[]}QN$j&Id8$`·  ֥bٚ;aBmd=-z~2b|&`mí#7 sz_mw1yp8|%6z8 s-Tq) # ^,1Ҿm^.|?xgGيOw)@ I1tۍхUAEP4ClLbŕyga Ola"qz2/#1e3HyWtI;ӘؑR&k0`|eBΕƘ,j;2 t`2wqj )+0C|Xb 庩gxmQ0 F(`WL$Xd`:⃌c9IX۳O޿{+&.l1#i𱰰gl,5vmœ@PP /PȆ7Ci)@N^Q|1?>2}ϣc֐h 1vh7 F(` IVV֟?EZ^exRt%Ske>{~2!6I72 Enb2! iAm59/ߘ ]a3"o!j76S3uJqqqMpw*0=Xp]<{ G'WQ Wj9֤G fA`aUnm*}w)y!qE oVk=tJ1 T%+t74+kϋ|»n}}ɲ-_?jiz^z,އo>h7 F(`!7C}? 303ߙ>F,5,Rدݺz 212 iI`BBȭ=xS2 vFƻO@С>>0F?^M||r.Pޚ$@mQ0 F(` frktٿ_r:tX ۏDA2B}1 >9yYi}qy˗/_M:xڐO2Y ozXw=L^*|af6]m SZ~0 -6.0,4`Q0 FLH Vq v>:g> y?FV?f`f^oN i2m][ '@vl ~ |/#l~`MFO\>t5/3 hh&pߗo|@{8F(`Q0  8`ee#_Y`f/h?_<&uOH'm;dOqV?\@-:fo꿹3I~s;6/3pZBΈAJhoQ0 F(öeFfx 'ۙ5yM/Д/[&&Z?t/_~߄ iA|A>H/_>zyEW~aaak6lᅳ=𧻓o12'ϟ*VҲr@QFvh7 F(`c@ޅ4 |@;;;D.??~2A6p;?? ?Y~2MɃ|:u8SCߞ ؒnn\.|qT5g~{&?pq0//Heãח\^g-wF)dumwo^ztސ%X#A@mQ0 F(` O; r |bM1֟ @G1g9 ܂c?2nBcE?M{3 : r_$i1y]p(Ǐo>_ןoo~z*[ | r-7#+ _q&P C˕Uu K ϐD@` xە2mX8;>o HE%Zͪ,Y=T7ii,_zcsƻb?vSuqe*@˭!o "r@̧sl J a6ɗj0 \e׾@Hq @~zo M.0"V qY;q+.y[E)eUf!{)_; w:thY_@hōnv6@U;r)Oh4Nsv&8%cmC5<> ”z^WV"QF^dq˼u+}֬ؐ?60l-<{ȷ%)d!x"H“ Ի9_,W:l%Fd`Q0 Fpn!Ղ< rǯo : <[+7YI g7ӟLdpp.؜ǿ,Ic/Y8~|z" ob{|K{S?#p K~g1Ft=k`SG Hw*QMf11(j,^DKA@IA %HQ3ʜ˽o>Fh4%ò>)ϗeRQH~u},>[G`IMEiTM23"Go2@0a(^e &}b@J؉.ZbqW=P'o$ao4kzna:Ղk ݫ CQNjZT*"::>R*Z67%ߜ!̧((Z ~pV_0Z|1g ge,fDlXKR 7Gc~jQ= 76kEi5LNz}B0R~!gc!Ηm۔f'Qx-[^-{箂0 fRZ,h7 oछJ/Ӥ7S8;J?rΧh4oO(;|*öm5dc o7jܝo}~ "|1*!6 i j쑀ȱB [#AJ5t@g"N^FM `]qU֭B>prP1։nwV-h7 F(`ci9AzpPZI˭Xc 5+Vfb&ml@Àm4OX2 j _9@7q}O.̬@-,Y}$#ߟpʉgf/#^f^RU:ZJJZ{Ap[) Dg' Dh 8zptK;t>AAB/l*@uGGDl8ɚe֍t|֊e<(ÚwU)0`FRixcu\-:6ʫ8V;Jzn6>{~ |hoQ0 F(üow¥m` *!/$_W%>|s%#)Ov @ 80c+u O_=~(n`)&%{> !77d1# q3&6(`Q0 FPy6ODwx>o83fxZ\gfddf?hUL,ll23,]XHAIh8ϡ$gid]8@F(`Q0"Z{dy988Ў`ˏ]}sie=?acd"`+)lۍL\޿f+?wvXc~GaVvsٻL c/;?@p'eMseY9o߾]lQ6(`Q0 FDƒeAz]``LJWk};/%x'_8o|U+(1ω3c`տ*~߬x)~+?~1|Ctm3ן?0|xWL\ (t(dLڵh7 F(``# BB.dp]ׯ0A`Ӈ7^cddbdbcR4فM=`r" LjhmQ0 F(`e@~_!Cp Wz@fAy- =Q,yTohoQ0 F(#͇@ƒm7>  <ł='x)K,M[&dr  '#X,iRJY#]e;pzGpod6G9p%w`aG.1 (9VD]z]P9]'Amе|^Oty6BDli@ɩp8^= Jt]φmV87<5s^x@he髭蠄Nti7Rϩ~uke;˽z6|3B ~~gz>egT*g}^tMg@[qZwSX܌|1Pƾ5 y" B~J)n5midQiW*mbۏJb pufr U|X!Q q3YySQx B.%U6ح2vwqME@LǢ:pF)O56՜٭F4֖ݻSz΄qF|^OR}o=%sA%$*P!G*jҌNj0Hspj$R ߬ }, bϳ~( Dϳ$_8rzzuܷlf G4Q|QzٶՕ6T[lOLcxq.!!Q ۷mKzB3(A=wo(9 JZ\Rd2T:χQ"ط3xv,ܔlk̸v ҙ@E4!(nz4ί…K'Otm܌fr/l -lF2:th 1ܹ~):;kOݻ{#{?Ua߶{~Mqh! (Ŝr L +@)v@MwHu> =gz|0wc[Z-sX0_ZiaMc`DGgN֫c-Ws1srs ?q.u-[0ّ(&I_Q4Úl^5M~k<1`89)1Lݧ/SCCx4jBE9 /31lhinJ777\S]I*l2!I@ 稬@̫_|^5}q}Ϯq2rP1̩BFz}h @$m M:tO9h B-C4h@6!IAA@p&lS0j>;&kw0fLb6`ɕE+BDas ,anS3F7wܔ3*s$1  %OmAl6SH!(bd4 YDž/S`PH$|HA S`2B*du|qԏC}4dݽpzƊ'&t:] zףSJlM<F lATJa42 d4M#r YT")*8l8D2宐$c1`scooUK7v5t%@x$gD";n[ `X(qo[cP8"E86'O_jXUշpt?ONz)?,sT!K,OpS#uoww-Uִk"X@$g3lSҪ>_۴EtvL9LœDrMsY8~j}wtSX~AX侇dL3 ŅQ Y08::t!G38t[ s_=m#UD855΁_v=Bb5kADcCZvFfUHp'(3cdtguwvq޼b#{bP`"/& Vd14DolV3jP=Fcj5$Iƨs"?=38Srwxe&ŀLF@.xیuTUx(3g@)l&3ZiH$MB7gw!q!>ˁIyQ D"(Bc d҅0?gXRrJt٭ܔc=G+f#,/s,^xg{V|Xy|MM&)ϓQ0@@I0K?tgўp %I?M tLF9{Sz/^>O5FQ[lࠅTJF+y Mf3z:yKcҟOYOeI޿mh Xfݎ$gYOKH%r0$p,s =M:K(/ǂcUo 8/flolYkonM )pl eU$ٸ(sO=a[lH"3G~wEPyq勮Ic} ^s*\%fTto,+h2ǃw# y 1?_k% * {{HGĸ_X,6u]R? LMܿmײߒ$] C!.@ n &hapxTE2@O̙<] B藇>(Az Mb@@s#Fɞx_/KI;`.|n_JEQH0,Sr#ecPIYL uge9 u"ǂiɤ|G??)Pйs9^|gmePCcL:@ƄLJg-Mdr٢Ue5 ]32XǗ{q~*2߶o 7IENDB`PKK9$turbogears/static/images/__init__.pyPKA>^%turbogears/static/images/__init__.pyc; ָHIc@sdS(N((((s:build\bdist.win32\egg\turbogears\static\images\__init__.pys?sPKK9!turbogears/static/js/i18n_base.js function _(key) { if (typeof(MESSAGES) != "undefined") { var v = MESSAGES[key]; if(v !== undefined) { return v; } } return key; }PKK9_#turbogears/static/js/interpreter.js/* Interpreter: Turbogears Python Interactive Interpreter Based heavily on the Javascript Interactive Interpreter MochiKit Demo */ InterpreterManager = function () { bindMethods(this); }; InterpreterManager.prototype.initialize = function () { updateNodeAttributes("interpreter_text", { "onkeyup": this.keyUp }); updateNodeAttributes("interpreter_form", { "onsubmit": this.submit }); updateNodeAttributes("exec", { "onclick": this.multilineSubmit }); this.banner(); this.lines = []; this.history = []; this.currentHistory = ""; this.historyPos = -1; }; InterpreterManager.prototype.banner = function () { var _ua = window.navigator.userAgent; var ua = _ua.replace(/^Mozilla\/.*?\(.*?\)\s*/, ""); if (ua == "") { // MSIE ua = _ua.replace(/^Mozilla\/4\.0 \(compatible; MS(IE .*?);.*$/, "$1"); } appendChildNodes("interpreter_output", SPAN({"class": "banner"}, "TurboGears Console via MochiKit v" + MochiKit.Base.VERSION + " [" + ua + "]" ), BR() ); }; InterpreterManager.prototype.submit = function () { this.doSubmit(); this.doScroll(); return false; }; InterpreterManager.prototype.multilineSubmit = function () { this.doMultilineSubmit(); this.doScroll(); return false; }; InterpreterManager.prototype.doScroll = function () { var p = getElement("interpreter_output").lastChild; if (typeof(p) == "undefined" || p == null) { return; } var area = getElement("interpreter_area"); if (area.offsetHeight > area.scrollHeight) { area.scrollTop = 0; } else { area.scrollTop = area.scrollHeight; } }; InterpreterManager.prototype.moveHistory = function (dir) { // totally bogus value if (dir == 0 || this.history.length == 0) { return; } var elem = getElement("interpreter_text"); if (this.historyPos == -1) { this.currentHistory = elem.value; if (dir > 0) { return; } this.historyPos = this.history.length - 1; elem.value = this.history[this.historyPos]; return; } if (this.historyPos == 0 && dir < 0) { return; } if (this.historyPos == this.history.length - 1 && dir > 0) { this.historyPos = -1; elem.value = this.currentHistory; return; } this.historyPos += dir; elem.value = this.history[this.historyPos]; }; InterpreterManager.prototype.keyUp = function (e) { e = e || window.event; switch (e.keyCode) { case 38: this.moveHistory(-1); break; case 40: this.moveHistory(1); break; default: return true; } e.cancelBubble = true; return false; }; InterpreterManager.prototype.doSubmit = function () { var elem = getElement("interpreter_text"); var code = elem.value; elem.value = ""; this.history.push(code); this.historyPos = -1; this.currentHistory = ""; var d = loadJSONDoc("process_request?line="+encodeURIComponent(code)); d.addCallback(this.showResult); return; }; InterpreterManager.prototype.doMultilineSubmit = function () { var elem = getElement("interpreter_block_text"); var code = elem.value; elem.value = ""; lines = code.split("\n"); for ( var i = 0; i < lines.length; i++ ) { this.history.push(lines[i]); } this.historyPos = -1; this.currentHistory = ""; var d = loadJSONDoc("process_multiline_request?block="+encodeURIComponent(code)); d.addCallback(this.showResult); return; } InterpreterManager.prototype.showResult = function (res) { var lines = res["output"].split("\n"); for ( var i = 0; i < lines.length; i++ ) { var lineclass = "data"; // highlight input code. // assumption: only input code starts with ">>> " or "... " var lineprefix = lines[i].substr(0,4); if ( lineprefix == ">>> " || lineprefix == "... " ) { lineclass = "code"; } appendChildNodes("interpreter_output", SPAN({"class": lineclass}, lines[i]), BR() ); } this.doScroll(); $("prompt").innerHTML = res["more"] ? "... " : ">>> "; }; interpreterManager = new InterpreterManager(); addLoadEvent(interpreterManager.initialize); PKK9yr:ll$turbogears/static/js/MochiKit_1_3.js/*** MochiKit.MochiKit 1.3.1 : PACKED VERSION THIS FILE IS AUTOMATICALLY GENERATED. If creating patches, please diff against the source tree, not this file. See for documentation, downloads, license, etc. (c) 2005 Bob Ippolito. All rights Reserved. ***/ if(typeof (dojo)!="undefined"){ dojo.provide("MochiKit.Base"); } if(typeof (MochiKit)=="undefined"){ MochiKit={}; } if(typeof (MochiKit.Base)=="undefined"){ MochiKit.Base={}; } MochiKit.Base.VERSION="1.3.1"; MochiKit.Base.NAME="MochiKit.Base"; MochiKit.Base.update=function(_1,_2){ if(_1===null){ _1={}; } for(var i=1;i=0;i--){ _12.unshift(o[i]); } }else{ res.push(o); } } return res; },extend:function(_13,obj,_15){ if(!_15){ _15=0; } if(obj){ var l=obj.length; if(typeof (l)!="number"){ if(typeof (MochiKit.Iter)!="undefined"){ obj=MochiKit.Iter.list(obj); l=obj.length; }else{ throw new TypeError("Argument not an array-like and MochiKit.Iter not present"); } } if(!_13){ _13=[]; } for(var i=_15;i>b; },zrshift:function(a,b){ return a>>>b; },eq:function(a,b){ return a==b; },ne:function(a,b){ return a!=b; },gt:function(a,b){ return a>b; },ge:function(a,b){ return a>=b; },lt:function(a,b){ return al){ _41=l; } } _40=[]; for(i=0;i<_41;i++){ var _42=[]; for(var j=1;j0){ _57=m.concat(me.im_preargs,_57); } var _52=me.im_self; if(!_52){ _52=this; } return me.im_func.apply(_52,_57); }; _56.im_self=_55; _56.im_func=_53; _56.im_preargs=_54; return _56; },bindMethods:function(_58){ var _59=MochiKit.Base.bind; for(var k in _58){ var _60=_58[k]; if(typeof (_60)=="function"){ _58[k]=_59(_60,_58); } } },registerComparator:function(_61,_62,_63,_64){ MochiKit.Base.comparatorRegistry.register(_61,_62,_63,_64); },_primitives:{"boolean":true,"string":true,"number":true},compare:function(a,b){ if(a==b){ return 0; } var _65=(typeof (a)=="undefined"||a===null); var _66=(typeof (b)=="undefined"||b===null); if(_65&&_66){ return 0; }else{ if(_65){ return -1; }else{ if(_66){ return 1; } } } var m=MochiKit.Base; var _67=m._primitives; if(!(typeof (a) in _67&&typeof (b) in _67)){ try{ return m.comparatorRegistry.match(a,b); } catch(e){ if(e!=m.NotFound){ throw e; } } } if(ab){ return 1; } } var _68=m.repr; throw new TypeError(_68(a)+" and "+_68(b)+" can not be compared"); },compareDateLike:function(a,b){ return MochiKit.Base.compare(a.getTime(),b.getTime()); },compareArrayLike:function(a,b){ var _69=MochiKit.Base.compare; var _70=a.length; var _71=0; if(_70>b.length){ _71=1; _70=b.length; }else{ if(_700))){ var kv=MochiKit.DOM.formContents(_113); _113=kv[0]; _114=kv[1]; }else{ if(arguments.length==1){ var o=_113; _113=[]; _114=[]; for(var k in o){ var v=o[k]; if(typeof (v)!="function"){ _113.push(k); _114.push(v); } } } } var rval=[]; var len=Math.min(_113.length,_114.length); var _118=MochiKit.Base.urlEncode; for(var i=0;i=stop){ throw self.StopIteration; } _147+=step; return rval; }}; },imap:function(fun,p,q){ var m=MochiKit.Base; var self=MochiKit.Iter; var _151=m.map(self.iter,m.extend(null,arguments,1)); var map=m.map; var next=self.next; return {repr:function(){ return "imap(...)"; },toString:m.forwardCall("repr"),next:function(){ return fun.apply(this,map(next,_151)); }}; },applymap:function(fun,seq,self){ seq=MochiKit.Iter.iter(seq); var m=MochiKit.Base; return {repr:function(){ return "applymap(...)"; },toString:m.forwardCall("repr"),next:function(){ return fun.apply(self,seq.next()); }}; },chain:function(p,q){ var self=MochiKit.Iter; var m=MochiKit.Base; if(arguments.length==1){ return self.iter(arguments[0]); } var _153=m.map(self.iter,arguments); return {repr:function(){ return "chain(...)"; },toString:m.forwardCall("repr"),next:function(){ while(_153.length>1){ try{ return _153[0].next(); } catch(e){ if(e!=self.StopIteration){ throw e; } _153.shift(); } } if(_153.length==1){ var arg=_153.shift(); this.next=m.bind("next",arg); return this.next(); } throw self.StopIteration; }}; },takewhile:function(pred,seq){ var self=MochiKit.Iter; seq=self.iter(seq); return {repr:function(){ return "takewhile(...)"; },toString:MochiKit.Base.forwardCall("repr"),next:function(){ var rval=seq.next(); if(!pred(rval)){ this.next=function(){ throw self.StopIteration; }; this.next(); } return rval; }}; },dropwhile:function(pred,seq){ seq=MochiKit.Iter.iter(seq); var m=MochiKit.Base; var bind=m.bind; return {"repr":function(){ return "dropwhile(...)"; },"toString":m.forwardCall("repr"),"next":function(){ while(true){ var rval=seq.next(); if(!pred(rval)){ break; } } this.next=bind("next",seq); return rval; }}; },_tee:function(_155,sync,_157){ sync.pos[_155]=-1; var m=MochiKit.Base; var _158=m.listMin; return {repr:function(){ return "tee("+_155+", ...)"; },toString:m.forwardCall("repr"),next:function(){ var rval; var i=sync.pos[_155]; if(i==sync.max){ rval=_157.next(); sync.deque.push(rval); sync.max+=1; sync.pos[_155]+=1; }else{ rval=sync.deque[i-sync.min]; sync.pos[_155]+=1; if(i==sync.min&&_158(sync.pos)!=sync.min){ sync.min+=1; sync.deque.shift(); } } return rval; }}; },tee:function(_159,n){ var rval=[]; var sync={"pos":[],"deque":[],"max":-1,"min":-1}; if(arguments.length==1){ n=2; } var self=MochiKit.Iter; _159=self.iter(_159); var _tee=self._tee; for(var i=0;i0&&_165>=stop)||(step<0&&_165<=stop)){ throw MochiKit.Iter.StopIteration; } var rval=_165; _165+=step; return rval; },repr:function(){ return "range("+[_165,stop,step].join(", ")+")"; },toString:MochiKit.Base.forwardCall("repr")}; },sum:function(_166,_167){ var x=_167||0; var self=MochiKit.Iter; _166=self.iter(_166); try{ while(true){ x+=_166.next(); } } catch(e){ if(e!=self.StopIteration){ throw e; } } return x; },exhaust:function(_168){ var self=MochiKit.Iter; _168=self.iter(_168); try{ while(true){ _168.next(); } } catch(e){ if(e!=self.StopIteration){ throw e; } } },forEach:function(_169,func,self){ var m=MochiKit.Base; if(arguments.length>2){ func=m.bind(func,self); } if(m.isArrayLike(_169)){ try{ for(var i=0;i<_169.length;i++){ func(_169[i]); } } catch(e){ if(e!=MochiKit.Iter.StopIteration){ throw e; } } }else{ self=MochiKit.Iter; self.exhaust(self.imap(func,_169)); } },every:function(_171,func){ var self=MochiKit.Iter; try{ self.ifilterfalse(func,_171).next(); return false; } catch(e){ if(e!=self.StopIteration){ throw e; } return true; } },sorted:function(_172,cmp){ var rval=MochiKit.Iter.list(_172); if(arguments.length==1){ cmp=MochiKit.Base.compare; } rval.sort(cmp); return rval; },reversed:function(_173){ var rval=MochiKit.Iter.list(_173); rval.reverse(); return rval; },some:function(_174,func){ var self=MochiKit.Iter; try{ self.ifilter(func,_174).next(); return true; } catch(e){ if(e!=self.StopIteration){ throw e; } return false; } },iextend:function(lst,_175){ if(MochiKit.Base.isArrayLike(_175)){ for(var i=0;i<_175.length;i++){ lst.push(_175[i]); } }else{ var self=MochiKit.Iter; _175=self.iter(_175); try{ while(true){ lst.push(_175.next()); } } catch(e){ if(e!=self.StopIteration){ throw e; } } } return lst; },groupby:function(_176,_177){ var m=MochiKit.Base; var self=MochiKit.Iter; if(arguments.length<2){ _177=m.operator.identity; } _176=self.iter(_176); var pk=undefined; var k=undefined; var v; function fetch(){ v=_176.next(); k=_177(v); } function eat(){ var ret=v; v=undefined; return ret; } var _180=true; return {repr:function(){ return "groupby(...)"; },next:function(){ while(k==pk){ fetch(); if(_180){ _180=false; break; } } pk=k; return [k,{next:function(){ if(v==undefined){ fetch(); } if(k!=pk){ throw self.StopIteration; } return eat(); }}]; }}; },groupby_as_array:function(_181,_182){ var m=MochiKit.Base; var self=MochiKit.Iter; if(arguments.length<2){ _182=m.operator.identity; } _181=self.iter(_181); var _183=[]; var _184=true; var _185; while(true){ try{ var _186=_181.next(); var key=_182(_186); } catch(e){ if(e==self.StopIteration){ break; } throw e; } if(_184||key!=_185){ var _187=[]; _183.push([key,_187]); } _187.push(_186); _184=false; _185=key; } return _183; },arrayLikeIter:function(_188){ var i=0; return {repr:function(){ return "arrayLikeIter(...)"; },toString:MochiKit.Base.forwardCall("repr"),next:function(){ if(i>=_188.length){ throw MochiKit.Iter.StopIteration; } return _188[i++]; }}; },hasIterateNext:function(_189){ return (_189&&typeof (_189.iterateNext)=="function"); },iterateNextIter:function(_190){ return {repr:function(){ return "iterateNextIter(...)"; },toString:MochiKit.Base.forwardCall("repr"),next:function(){ var rval=_190.iterateNext(); if(rval===null||rval===undefined){ throw MochiKit.Iter.StopIteration; } return rval; }}; }}); MochiKit.Iter.EXPORT_OK=["iteratorRegistry","arrayLikeIter","hasIterateNext","iterateNextIter",]; MochiKit.Iter.EXPORT=["StopIteration","registerIteratorFactory","iter","count","cycle","repeat","next","izip","ifilter","ifilterfalse","islice","imap","applymap","chain","takewhile","dropwhile","tee","list","reduce","range","sum","exhaust","forEach","every","sorted","reversed","some","iextend","groupby","groupby_as_array"]; MochiKit.Iter.__new__=function(){ var m=MochiKit.Base; this.StopIteration=new m.NamedError("StopIteration"); this.iteratorRegistry=new m.AdapterRegistry(); this.registerIteratorFactory("arrayLike",m.isArrayLike,this.arrayLikeIter); this.registerIteratorFactory("iterateNext",this.hasIterateNext,this.iterateNextIter); this.EXPORT_TAGS={":common":this.EXPORT,":all":m.concat(this.EXPORT,this.EXPORT_OK)}; m.nameFunctions(this); }; MochiKit.Iter.__new__(); if(!MochiKit.__compat__){ reduce=MochiKit.Iter.reduce; } MochiKit.Base._exportSymbols(this,MochiKit.Iter); if(typeof (dojo)!="undefined"){ dojo.provide("MochiKit.Logging"); dojo.require("MochiKit.Base"); } if(typeof (JSAN)!="undefined"){ JSAN.use("MochiKit.Base",[]); } try{ if(typeof (MochiKit.Base)=="undefined"){ throw ""; } } catch(e){ throw "MochiKit.Logging depends on MochiKit.Base!"; } if(typeof (MochiKit.Logging)=="undefined"){ MochiKit.Logging={}; } MochiKit.Logging.NAME="MochiKit.Logging"; MochiKit.Logging.VERSION="1.3.1"; MochiKit.Logging.__repr__=function(){ return "["+this.NAME+" "+this.VERSION+"]"; }; MochiKit.Logging.toString=function(){ return this.__repr__(); }; MochiKit.Logging.EXPORT=["LogLevel","LogMessage","Logger","alertListener","logger","log","logError","logDebug","logFatal","logWarning"]; MochiKit.Logging.EXPORT_OK=["logLevelAtLeast","isLogMessage","compareLogMessage"]; MochiKit.Logging.LogMessage=function(num,_192,info){ this.num=num; this.level=_192; this.info=info; this.timestamp=new Date(); }; MochiKit.Logging.LogMessage.prototype={repr:function(){ var m=MochiKit.Base; return "LogMessage("+m.map(m.repr,[this.num,this.level,this.info]).join(", ")+")"; },toString:MochiKit.Base.forwardCall("repr")}; MochiKit.Base.update(MochiKit.Logging,{logLevelAtLeast:function(_194){ var self=MochiKit.Logging; if(typeof (_194)=="string"){ _194=self.LogLevel[_194]; } return function(msg){ var _196=msg.level; if(typeof (_196)=="string"){ _196=self.LogLevel[_196]; } return _196>=_194; }; },isLogMessage:function(){ var _197=MochiKit.Logging.LogMessage; for(var i=0;i=0&&this._messages.length>this.maxSize){ this._messages.shift(); } },getMessages:function(_206){ var _207=0; if(!(typeof (_206)=="undefined"||_206===null)){ _207=Math.max(0,this._messages.length-_206); } return this._messages.slice(_207); },getMessageText:function(_208){ if(typeof (_208)=="undefined"||_208===null){ _208=30; } var _209=this.getMessages(_208); if(_209.length){ var lst=map(function(m){ return "\n ["+m.num+"] "+m.level+": "+m.info.join(" "); },_209); lst.unshift("LAST "+_209.length+" MESSAGES:"); return lst.join(""); } return ""; },debuggingBookmarklet:function(_210){ if(typeof (MochiKit.LoggingPane)=="undefined"){ alert(this.getMessageText()); }else{ MochiKit.LoggingPane.createLoggingPane(_210||false); } }}; MochiKit.Logging.__new__=function(){ this.LogLevel={ERROR:40,FATAL:50,WARNING:30,INFO:20,DEBUG:10}; var m=MochiKit.Base; m.registerComparator("LogMessage",this.isLogMessage,this.compareLogMessage); var _211=m.partial; var _212=this.Logger; var _213=_212.prototype.baseLog; m.update(this.Logger.prototype,{debug:_211(_213,"DEBUG"),log:_211(_213,"INFO"),error:_211(_213,"ERROR"),fatal:_211(_213,"FATAL"),warning:_211(_213,"WARNING")}); var self=this; var _214=function(name){ return function(){ self.logger[name].apply(self.logger,arguments); }; }; this.log=_214("log"); this.logError=_214("error"); this.logDebug=_214("debug"); this.logFatal=_214("fatal"); this.logWarning=_214("warning"); this.logger=new _212(); this.logger.useNativeConsole=true; this.EXPORT_TAGS={":common":this.EXPORT,":all":m.concat(this.EXPORT,this.EXPORT_OK)}; m.nameFunctions(this); }; if(typeof (printfire)=="undefined"&&typeof (document)!="undefined"&&document.createEvent&&typeof (dispatchEvent)!="undefined"){ printfire=function(){ printfire.args=arguments; var ev=document.createEvent("Events"); ev.initEvent("printfire",false,true); dispatchEvent(ev); }; } MochiKit.Logging.__new__(); MochiKit.Base._exportSymbols(this,MochiKit.Logging); if(typeof (dojo)!="undefined"){ dojo.provide("MochiKit.DateTime"); } if(typeof (MochiKit)=="undefined"){ MochiKit={}; } if(typeof (MochiKit.DateTime)=="undefined"){ MochiKit.DateTime={}; } MochiKit.DateTime.NAME="MochiKit.DateTime"; MochiKit.DateTime.VERSION="1.3.1"; MochiKit.DateTime.__repr__=function(){ return "["+this.NAME+" "+this.VERSION+"]"; }; MochiKit.DateTime.toString=function(){ return this.__repr__(); }; MochiKit.DateTime.isoDate=function(str){ str=str+""; if(typeof (str)!="string"||str.length===0){ return null; } var iso=str.split("-"); if(iso.length===0){ return null; } return new Date(iso[0],iso[1]-1,iso[2]); }; MochiKit.DateTime._isoRegexp=/(\d{4,})(?:-(\d{1,2})(?:-(\d{1,2})(?:[T ](\d{1,2}):(\d{1,2})(?::(\d{1,2})(?:\.(\d+))?)?(?:(Z)|([+-])(\d{1,2})(?::(\d{1,2}))?)?)?)?)?/; MochiKit.DateTime.isoTimestamp=function(str){ str=str+""; if(typeof (str)!="string"||str.length===0){ return null; } var res=str.match(MochiKit.DateTime._isoRegexp); if(typeof (res)=="undefined"||res===null){ return null; } var year,month,day,hour,min,sec,msec; year=parseInt(res[1],10); if(typeof (res[2])=="undefined"||res[2]===""){ return new Date(year); } month=parseInt(res[2],10)-1; day=parseInt(res[3],10); if(typeof (res[4])=="undefined"||res[4]===""){ return new Date(year,month,day); } hour=parseInt(res[4],10); min=parseInt(res[5],10); sec=(typeof (res[6])!="undefined"&&res[6]!=="")?parseInt(res[6],10):0; if(typeof (res[7])!="undefined"&&res[7]!==""){ msec=Math.round(1000*parseFloat("0."+res[7])); }else{ msec=0; } if((typeof (res[8])=="undefined"||res[8]==="")&&(typeof (res[9])=="undefined"||res[9]==="")){ return new Date(year,month,day,hour,min,sec,msec); } var ofs; if(typeof (res[9])!="undefined"&&res[9]!==""){ ofs=parseInt(res[10],10)*3600000; if(typeof (res[11])!="undefined"&&res[11]!==""){ ofs+=parseInt(res[11],10)*60000; } if(res[9]=="-"){ ofs=-ofs; } }else{ ofs=0; } return new Date(Date.UTC(year,month,day,hour,min,sec,msec)-ofs); }; MochiKit.DateTime.toISOTime=function(date,_221){ if(typeof (date)=="undefined"||date===null){ return null; } var hh=date.getHours(); var mm=date.getMinutes(); var ss=date.getSeconds(); var lst=[((_221&&(hh<10))?"0"+hh:hh),((mm<10)?"0"+mm:mm),((ss<10)?"0"+ss:ss)]; return lst.join(":"); }; MochiKit.DateTime.toISOTimestamp=function(date,_225){ if(typeof (date)=="undefined"||date===null){ return null; } var sep=_225?"T":" "; var foot=_225?"Z":""; if(_225){ date=new Date(date.getTime()+(date.getTimezoneOffset()*60000)); } return MochiKit.DateTime.toISODate(date)+sep+MochiKit.DateTime.toISOTime(date,_225)+foot; }; MochiKit.DateTime.toISODate=function(date){ if(typeof (date)=="undefined"||date===null){ return null; } var _228=MochiKit.DateTime._padTwo; return [date.getFullYear(),_228(date.getMonth()+1),_228(date.getDate())].join("-"); }; MochiKit.DateTime.americanDate=function(d){ d=d+""; if(typeof (d)!="string"||d.length===0){ return null; } var a=d.split("/"); return new Date(a[2],a[0]-1,a[1]); }; MochiKit.DateTime._padTwo=function(n){ return (n>9)?n:"0"+n; }; MochiKit.DateTime.toPaddedAmericanDate=function(d){ if(typeof (d)=="undefined"||d===null){ return null; } var _230=MochiKit.DateTime._padTwo; return [_230(d.getMonth()+1),_230(d.getDate()),d.getFullYear()].join("/"); }; MochiKit.DateTime.toAmericanDate=function(d){ if(typeof (d)=="undefined"||d===null){ return null; } return [d.getMonth()+1,d.getDate(),d.getFullYear()].join("/"); }; MochiKit.DateTime.EXPORT=["isoDate","isoTimestamp","toISOTime","toISOTimestamp","toISODate","americanDate","toPaddedAmericanDate","toAmericanDate"]; MochiKit.DateTime.EXPORT_OK=[]; MochiKit.DateTime.EXPORT_TAGS={":common":MochiKit.DateTime.EXPORT,":all":MochiKit.DateTime.EXPORT}; MochiKit.DateTime.__new__=function(){ var base=this.NAME+"."; for(var k in this){ var o=this[k]; if(typeof (o)=="function"&&typeof (o.NAME)=="undefined"){ try{ o.NAME=base+k; } catch(e){ } } } }; MochiKit.DateTime.__new__(); if(typeof (MochiKit.Base)!="undefined"){ MochiKit.Base._exportSymbols(this,MochiKit.DateTime); }else{ (function(_231,_232){ if((typeof (JSAN)=="undefined"&&typeof (dojo)=="undefined")||(typeof (MochiKit.__compat__)=="boolean"&&MochiKit.__compat__)){ var all=_232.EXPORT_TAGS[":all"]; for(var i=0;i_240){ var i=_246.length-_240; res=fmt.separator+_246.substring(i,_246.length)+res; _246=_246.substring(0,i); } } res=_246+res; if(_238>0){ while(frac.length<_241){ frac=frac+"0"; } res=res+fmt.decimal+frac; } return _242+res+_243; }; }; MochiKit.Format.numberFormatter=function(_248,_249,_250){ if(typeof (_249)=="undefined"){ _249=""; } var _251=_248.match(/((?:[0#]+,)?[0#]+)(?:\.([0#]+))?(%)?/); if(!_251){ throw TypeError("Invalid pattern"); } var _252=_248.substr(0,_251.index); var _253=_248.substr(_251.index+_251[0].length); if(_252.search(/-/)==-1){ _252=_252+"-"; } var _254=_251[1]; var frac=(typeof (_251[2])=="string"&&_251[2]!="")?_251[2]:""; var _255=(typeof (_251[3])=="string"&&_251[3]!=""); var tmp=_254.split(/,/); var _257; if(typeof (_250)=="undefined"){ _250="default"; } if(tmp.length==1){ _257=null; }else{ _257=tmp[1].length; } var _258=_254.length-_254.replace(/0/g,"").length; var _259=frac.length-frac.replace(/0/g,"").length; var _260=frac.length; var rval=MochiKit.Format._numberFormatter(_249,_252,_253,_250,_255,_260,_258,_257,_259); var m=MochiKit.Base; if(m){ var fn=arguments.callee; var args=m.concat(arguments); rval.repr=function(){ return [self.NAME,"(",map(m.repr,args).join(", "),")"].join(""); }; } return rval; }; MochiKit.Format.formatLocale=function(_262){ if(typeof (_262)=="undefined"||_262===null){ _262="default"; } if(typeof (_262)=="string"){ var rval=MochiKit.Format.LOCALE[_262]; if(typeof (rval)=="string"){ rval=arguments.callee(rval); MochiKit.Format.LOCALE[_262]=rval; } return rval; }else{ return _262; } }; MochiKit.Format.twoDigitAverage=function(_263,_264){ if(_264){ var res=_263/_264; if(!isNaN(res)){ return MochiKit.Format.twoDigitFloat(_263/_264); } } return "0"; }; MochiKit.Format.twoDigitFloat=function(_265){ var sign=(_265<0?"-":""); var s=Math.floor(Math.abs(_265)*100).toString(); if(s=="0"){ return s; } if(s.length<3){ while(s.charAt(s.length-1)=="0"){ s=s.substring(0,s.length-1); } return sign+"0."+s; } var head=sign+s.substring(0,s.length-2); var tail=s.substring(s.length-2,s.length); if(tail=="00"){ return head; }else{ if(tail.charAt(1)=="0"){ return head+"."+tail.charAt(0); }else{ return head+"."+tail; } } }; MochiKit.Format.lstrip=function(str,_270){ str=str+""; if(typeof (str)!="string"){ return null; } if(!_270){ return str.replace(/^\s+/,""); }else{ return str.replace(new RegExp("^["+_270+"]+"),""); } }; MochiKit.Format.rstrip=function(str,_271){ str=str+""; if(typeof (str)!="string"){ return null; } if(!_271){ return str.replace(/\s+$/,""); }else{ return str.replace(new RegExp("["+_271+"]+$"),""); } }; MochiKit.Format.strip=function(str,_272){ var self=MochiKit.Format; return self.rstrip(self.lstrip(str,_272),_272); }; MochiKit.Format.truncToFixed=function(_273,_274){ _273=Math.floor(_273*Math.pow(10,_274)); var res=(_273*Math.pow(10,-_274)).toFixed(_274); if(res.charAt(0)=="."){ res="0"+res; } return res; }; MochiKit.Format.roundToFixed=function(_275,_276){ return MochiKit.Format.truncToFixed(_275+0.5*Math.pow(10,-_276),_276); }; MochiKit.Format.percentFormat=function(_277){ return MochiKit.Format.twoDigitFloat(100*_277)+"%"; }; MochiKit.Format.EXPORT=["truncToFixed","roundToFixed","numberFormatter","formatLocale","twoDigitAverage","twoDigitFloat","percentFormat","lstrip","rstrip","strip"]; MochiKit.Format.LOCALE={en_US:{separator:",",decimal:".",percent:"%"},de_DE:{separator:".",decimal:",",percent:"%"},fr_FR:{separator:" ",decimal:",",percent:"%"},"default":"en_US"}; MochiKit.Format.EXPORT_OK=[]; MochiKit.Format.EXPORT_TAGS={":all":MochiKit.Format.EXPORT,":common":MochiKit.Format.EXPORT}; MochiKit.Format.__new__=function(){ var base=this.NAME+"."; var k,v,o; for(k in this.LOCALE){ o=this.LOCALE[k]; if(typeof (o)=="object"){ o.repr=function(){ return this.NAME; }; o.NAME=base+"LOCALE."+k; } } for(k in this){ o=this[k]; if(typeof (o)=="function"&&typeof (o.NAME)=="undefined"){ try{ o.NAME=base+k; } catch(e){ } } } }; MochiKit.Format.__new__(); if(typeof (MochiKit.Base)!="undefined"){ MochiKit.Base._exportSymbols(this,MochiKit.Format); }else{ (function(_278,_279){ if((typeof (JSAN)=="undefined"&&typeof (dojo)=="undefined")||(typeof (MochiKit.__compat__)=="boolean"&&MochiKit.__compat__)){ var all=_279.EXPORT_TAGS[":all"]; for(var i=0;i=0)){ this._fire(); } },_continue:function(res){ this._resback(res); this._unpause(); },_resback:function(res){ this.fired=((res instanceof Error)?1:0); this.results[this.fired]=res; this._fire(); },_check:function(){ if(this.fired!=-1){ if(!this.silentlyCancelled){ throw new MochiKit.Async.AlreadyCalledError(this); } this.silentlyCancelled=false; return; } },callback:function(res){ this._check(); if(res instanceof MochiKit.Async.Deferred){ throw new Error("Deferred instances can only be chained if they are the result of a callback"); } this._resback(res); },errback:function(res){ this._check(); var self=MochiKit.Async; if(res instanceof self.Deferred){ throw new Error("Deferred instances can only be chained if they are the result of a callback"); } if(!(res instanceof Error)){ res=new self.GenericError(res); } this._resback(res); },addBoth:function(fn){ if(arguments.length>1){ fn=MochiKit.Base.partial.apply(null,arguments); } return this.addCallbacks(fn,fn); },addCallback:function(fn){ if(arguments.length>1){ fn=MochiKit.Base.partial.apply(null,arguments); } return this.addCallbacks(fn,null); },addErrback:function(fn){ if(arguments.length>1){ fn=MochiKit.Base.partial.apply(null,arguments); } return this.addCallbacks(null,fn); },addCallbacks:function(cb,eb){ if(this.chained){ throw new Error("Chained Deferreds can not be re-used"); } this.chain.push([cb,eb]); if(this.fired>=0){ this._fire(); } return this; },_fire:function(){ var _284=this.chain; var _285=this.fired; var res=this.results[_285]; var self=this; var cb=null; while(_284.length>0&&this.paused===0){ var pair=_284.shift(); var f=pair[_285]; if(f===null){ continue; } try{ res=f(res); _285=((res instanceof Error)?1:0); if(res instanceof MochiKit.Async.Deferred){ cb=function(res){ self._continue(res); }; this._pause(); } } catch(err){ _285=1; if(!(err instanceof Error)){ err=new MochiKit.Async.GenericError(err); } res=err; } } this.fired=_285; this.results[_285]=res; if(cb&&this.paused){ res.addBoth(cb); res.chained=true; } }}; MochiKit.Base.update(MochiKit.Async,{evalJSONRequest:function(){ return eval("("+arguments[0].responseText+")"); },succeed:function(_287){ var d=new MochiKit.Async.Deferred(); d.callback.apply(d,arguments); return d; },fail:function(_288){ var d=new MochiKit.Async.Deferred(); d.errback.apply(d,arguments); return d; },getXMLHttpRequest:function(){ var self=arguments.callee; if(!self.XMLHttpRequest){ var _289=[function(){ return new XMLHttpRequest(); },function(){ return new ActiveXObject("Msxml2.XMLHTTP"); },function(){ return new ActiveXObject("Microsoft.XMLHTTP"); },function(){ return new ActiveXObject("Msxml2.XMLHTTP.4.0"); },function(){ throw new MochiKit.Async.BrowserComplianceError("Browser does not support XMLHttpRequest"); }]; for(var i=0;i<_289.length;i++){ var func=_289[i]; try{ self.XMLHttpRequest=func; return func(); } catch(e){ } } } return self.XMLHttpRequest(); },_nothing:function(){ },_xhr_onreadystatechange:function(d){ if(this.readyState==4){ try{ this.onreadystatechange=null; } catch(e){ try{ this.onreadystatechange=MochiKit.Async._nothing; } catch(e){ } } var _290=null; try{ _290=this.status; if(!_290&&MochiKit.Base.isNotEmpty(this.responseText)){ _290=304; } } catch(e){ } if(_290==200||_290==304){ d.callback(this); }else{ var err=new MochiKit.Async.XMLHttpRequestError(this,"Request failed"); if(err.number){ d.errback(err); }else{ d.errback(err); } } } },_xhr_canceller:function(req){ try{ req.onreadystatechange=null; } catch(e){ try{ req.onreadystatechange=MochiKit.Async._nothing; } catch(e){ } } req.abort(); },sendXMLHttpRequest:function(req,_293){ if(typeof (_293)=="undefined"||_293===null){ _293=""; } var m=MochiKit.Base; var self=MochiKit.Async; var d=new self.Deferred(m.partial(self._xhr_canceller,req)); try{ req.onreadystatechange=m.bind(self._xhr_onreadystatechange,req,d); req.send(_293); } catch(e){ try{ req.onreadystatechange=null; } catch(ignore){ } d.errback(e); } return d; },doSimpleXMLHttpRequest:function(url){ var self=MochiKit.Async; var req=self.getXMLHttpRequest(); if(arguments.length>1){ var m=MochiKit.Base; var qs=m.queryString.apply(null,m.extend(null,arguments,1)); if(qs){ url+="?"+qs; } } req.open("GET",url,true); return self.sendXMLHttpRequest(req); },loadJSONDoc:function(url){ var self=MochiKit.Async; var d=self.doSimpleXMLHttpRequest.apply(self,arguments); d=d.addCallback(self.evalJSONRequest); return d; },wait:function(_296,_297){ var d=new MochiKit.Async.Deferred(); var m=MochiKit.Base; if(typeof (_297)!="undefined"){ d.addCallback(function(){ return _297; }); } var _298=setTimeout(m.bind("callback",d),Math.floor(_296*1000)); d.canceller=function(){ try{ clearTimeout(_298); } catch(e){ } }; return d; },callLater:function(_299,func){ var m=MochiKit.Base; var _300=m.partial.apply(m,m.extend(null,arguments,1)); return MochiKit.Async.wait(_299).addCallback(function(res){ return _300(); }); }}); MochiKit.Async.DeferredLock=function(){ this.waiting=[]; this.locked=false; this.id=this._nextId(); }; MochiKit.Async.DeferredLock.prototype={__class__:MochiKit.Async.DeferredLock,acquire:function(){ d=new MochiKit.Async.Deferred(); if(this.locked){ this.waiting.push(d); }else{ this.locked=true; d.callback(this); } return d; },release:function(){ if(!this.locked){ throw TypeError("Tried to release an unlocked DeferredLock"); } this.locked=false; if(this.waiting.length>0){ this.locked=true; this.waiting.shift().callback(this); } },_nextId:MochiKit.Base.counter(),repr:function(){ var _301; if(this.locked){ _301="locked, "+this.waiting.length+" waiting"; }else{ _301="unlocked"; } return "DeferredLock("+this.id+", "+_301+")"; },toString:MochiKit.Base.forwardCall("repr")}; MochiKit.Async.DeferredList=function(list,_303,_304,_305,_306){ this.list=list; this.resultList=new Array(this.list.length); this.chain=[]; this.id=this._nextId(); this.fired=-1; this.paused=0; this.results=[null,null]; this.canceller=_306; this.silentlyCancelled=false; if(this.list.length===0&&!_303){ this.callback(this.resultList); } this.finishedCount=0; this.fireOnOneCallback=_303; this.fireOnOneErrback=_304; this.consumeErrors=_305; var _307=0; MochiKit.Base.map(MochiKit.Base.bind(function(d){ d.addCallback(MochiKit.Base.bind(this._cbDeferred,this),_307,true); d.addErrback(MochiKit.Base.bind(this._cbDeferred,this),_307,false); _307+=1; },this),this.list); }; MochiKit.Base.update(MochiKit.Async.DeferredList.prototype,MochiKit.Async.Deferred.prototype); MochiKit.Base.update(MochiKit.Async.DeferredList.prototype,{_cbDeferred:function(_308,_309,_310){ this.resultList[_308]=[_309,_310]; this.finishedCount+=1; if(this.fired!==0){ if(_309&&this.fireOnOneCallback){ this.callback([_308,_310]); }else{ if(!_309&&this.fireOnOneErrback){ this.errback(_310); }else{ if(this.finishedCount==this.list.length){ this.callback(this.resultList); } } } } if(!_309&&this.consumeErrors){ _310=null; } return _310; }}); MochiKit.Async.gatherResults=function(_311){ var d=new MochiKit.Async.DeferredList(_311,false,true,false); d.addCallback(function(_312){ var ret=[]; for(var i=0;i<_312.length;i++){ ret.push(_312[i][1]); } return ret; }); return d; }; MochiKit.Async.maybeDeferred=function(func){ var self=MochiKit.Async; var _313; try{ var r=func.apply(null,MochiKit.Base.extend([],arguments,1)); if(r instanceof self.Deferred){ _313=r; }else{ if(r instanceof Error){ _313=self.fail(r); }else{ _313=self.succeed(r); } } } catch(e){ _313=self.fail(e); } return _313; }; MochiKit.Async.EXPORT=["AlreadyCalledError","CancelledError","BrowserComplianceError","GenericError","XMLHttpRequestError","Deferred","succeed","fail","getXMLHttpRequest","doSimpleXMLHttpRequest","loadJSONDoc","wait","callLater","sendXMLHttpRequest","DeferredLock","DeferredList","gatherResults","maybeDeferred"]; MochiKit.Async.EXPORT_OK=["evalJSONRequest"]; MochiKit.Async.__new__=function(){ var m=MochiKit.Base; var ne=m.partial(m._newNamedError,this); ne("AlreadyCalledError",function(_316){ this.deferred=_316; }); ne("CancelledError",function(_317){ this.deferred=_317; }); ne("BrowserComplianceError",function(msg){ this.message=msg; }); ne("GenericError",function(msg){ this.message=msg; }); ne("XMLHttpRequestError",function(req,msg){ this.req=req; this.message=msg; try{ this.number=req.status; } catch(e){ } }); this.EXPORT_TAGS={":common":this.EXPORT,":all":m.concat(this.EXPORT,this.EXPORT_OK)}; m.nameFunctions(this); }; MochiKit.Async.__new__(); MochiKit.Base._exportSymbols(this,MochiKit.Async); if(typeof (dojo)!="undefined"){ dojo.provide("MochiKit.DOM"); dojo.require("MochiKit.Iter"); } if(typeof (JSAN)!="undefined"){ JSAN.use("MochiKit.Iter",[]); } try{ if(typeof (MochiKit.Iter)=="undefined"){ throw ""; } } catch(e){ throw "MochiKit.DOM depends on MochiKit.Iter!"; } if(typeof (MochiKit.DOM)=="undefined"){ MochiKit.DOM={}; } MochiKit.DOM.NAME="MochiKit.DOM"; MochiKit.DOM.VERSION="1.3.1"; MochiKit.DOM.__repr__=function(){ return "["+this.NAME+" "+this.VERSION+"]"; }; MochiKit.DOM.toString=function(){ return this.__repr__(); }; MochiKit.DOM.EXPORT=["formContents","currentWindow","currentDocument","withWindow","withDocument","registerDOMConverter","coerceToDOM","createDOM","createDOMFunc","getNodeAttribute","setNodeAttribute","updateNodeAttributes","appendChildNodes","replaceChildNodes","removeElement","swapDOM","BUTTON","TT","PRE","H1","H2","H3","BR","CANVAS","HR","LABEL","TEXTAREA","FORM","STRONG","SELECT","OPTION","OPTGROUP","LEGEND","FIELDSET","P","UL","OL","LI","TD","TR","THEAD","TBODY","TFOOT","TABLE","TH","INPUT","SPAN","A","DIV","IMG","getElement","$","computedStyle","getElementsByTagAndClassName","addToCallStack","addLoadEvent","focusOnLoad","setElementClass","toggleElementClass","addElementClass","removeElementClass","swapElementClass","hasElementClass","escapeHTML","toHTML","emitHTML","setDisplayForElement","hideElement","showElement","scrapeText","elementDimensions","elementPosition","setElementDimensions","setElementPosition","getViewportDimensions","setOpacity"]; MochiKit.DOM.EXPORT_OK=["domConverters"]; MochiKit.DOM.Dimensions=function(w,h){ this.w=w; this.h=h; }; MochiKit.DOM.Dimensions.prototype.repr=function(){ var repr=MochiKit.Base.repr; return "{w: "+repr(this.w)+", h: "+repr(this.h)+"}"; }; MochiKit.DOM.Coordinates=function(x,y){ this.x=x; this.y=y; }; MochiKit.DOM.Coordinates.prototype.repr=function(){ var repr=MochiKit.Base.repr; return "{x: "+repr(this.x)+", y: "+repr(this.y)+"}"; }; MochiKit.DOM.Coordinates.prototype.toString=function(){ return this.repr(); }; MochiKit.Base.update(MochiKit.DOM,{setOpacity:function(elem,o){ elem=MochiKit.DOM.getElement(elem); MochiKit.DOM.updateNodeAttributes(elem,{"style":{"opacity":o,"-moz-opacity":o,"-khtml-opacity":o,"filter":" alpha(opacity="+(o*100)+")"}}); },getViewportDimensions:function(){ var d=new MochiKit.DOM.Dimensions(); var w=MochiKit.DOM._window; var b=MochiKit.DOM._document.body; if(w.innerWidth){ d.w=w.innerWidth; d.h=w.innerHeight; }else{ if(b.parentElement.clientWidth){ d.w=b.parentElement.clientWidth; d.h=b.parentElement.clientHeight; }else{ if(b&&b.clientWidth){ d.w=b.clientWidth; d.h=b.clientHeight; } } } return d; },elementDimensions:function(elem){ var self=MochiKit.DOM; if(typeof (elem.w)=="number"||typeof (elem.h)=="number"){ return new self.Dimensions(elem.w||0,elem.h||0); } elem=self.getElement(elem); if(!elem){ return undefined; } if(self.computedStyle(elem,"display")!="none"){ return new self.Dimensions(elem.offsetWidth||0,elem.offsetHeight||0); } var s=elem.style; var _322=s.visibility; var _323=s.position; s.visibility="hidden"; s.position="absolute"; s.display=""; var _324=elem.offsetWidth; var _325=elem.offsetHeight; s.display="none"; s.position=_323; s.visibility=_322; return new self.Dimensions(_324,_325); },elementPosition:function(elem,_326){ var self=MochiKit.DOM; elem=self.getElement(elem); if(!elem){ return undefined; } var c=new self.Coordinates(0,0); if(elem.x&&elem.y){ c.x+=elem.x||0; c.y+=elem.y||0; return c; }else{ if(elem.parentNode===null||self.computedStyle(elem,"display")=="none"){ return undefined; } } var box=null; var _329=null; var d=MochiKit.DOM._document; var de=d.documentElement; var b=d.body; if(elem.getBoundingClientRect){ box=elem.getBoundingClientRect(); c.x+=box.left+(de.scrollLeft||b.scrollLeft)-(de.clientLeft||b.clientLeft); c.y+=box.top+(de.scrollTop||b.scrollTop)-(de.clientTop||b.clientTop); }else{ if(d.getBoxObjectFor){ box=d.getBoxObjectFor(elem); c.x+=box.x; c.y+=box.y; }else{ if(elem.offsetParent){ c.x+=elem.offsetLeft; c.y+=elem.offsetTop; _329=elem.offsetParent; if(_329!=elem){ while(_329){ c.x+=_329.offsetLeft; c.y+=_329.offsetTop; _329=_329.offsetParent; } } var ua=navigator.userAgent.toLowerCase(); if((typeof (opera)!="undefined"&&parseFloat(opera.version())<9)||(ua.indexOf("safari")!=-1&&self.computedStyle(elem,"position")=="absolute")){ c.x-=b.offsetLeft; c.y-=b.offsetTop; } } } } if(typeof (_326)!="undefined"){ _326=arguments.callee(_326); if(_326){ c.x-=(_326.x||0); c.y-=(_326.y||0); } } if(elem.parentNode){ _329=elem.parentNode; }else{ _329=null; } while(_329&&_329.tagName!="BODY"&&_329.tagName!="HTML"){ c.x-=_329.scrollLeft; c.y-=_329.scrollTop; if(_329.parentNode){ _329=_329.parentNode; }else{ _329=null; } } return c; },setElementDimensions:function(elem,_332,_333){ elem=MochiKit.DOM.getElement(elem); if(typeof (_333)=="undefined"){ _333="px"; } MochiKit.DOM.updateNodeAttributes(elem,{"style":{"width":_332.w+_333,"height":_332.h+_333}}); },setElementPosition:function(elem,_334,_335){ elem=MochiKit.DOM.getElement(elem); if(typeof (_335)=="undefined"){ _335="px"; } MochiKit.DOM.updateNodeAttributes(elem,{"style":{"left":_334.x+_335,"top":_334.y+_335}}); },currentWindow:function(){ return MochiKit.DOM._window; },currentDocument:function(){ return MochiKit.DOM._document; },withWindow:function(win,func){ var self=MochiKit.DOM; var _337=self._document; var _338=self._win; var rval; try{ self._window=win; self._document=win.document; rval=func(); } catch(e){ self._window=_338; self._document=_337; throw e; } self._window=_338; self._document=_337; return rval; },formContents:function(elem){ var _339=[]; var _340=[]; var m=MochiKit.Base; var self=MochiKit.DOM; if(typeof (elem)=="undefined"||elem===null){ elem=self._document; }else{ elem=self.getElement(elem); } m.nodeWalk(elem,function(elem){ var name=elem.name; if(m.isNotEmpty(name)){ var _341=elem.nodeName; if(_341=="INPUT"&&(elem.type=="radio"||elem.type=="checkbox")&&!elem.checked){ return null; } if(_341=="SELECT"){ if(elem.selectedIndex>=0){ var opt=elem.options[elem.selectedIndex]; _339.push(name); _340.push((opt.value)?opt.value:opt.text); return null; } _339.push(name); _340.push(""); return null; } if(_341=="FORM"||_341=="P"||_341=="SPAN"||_341=="DIV"){ return elem.childNodes; } _339.push(name); _340.push(elem.value||""); return null; } return elem.childNodes; }); return [_339,_340]; },withDocument:function(doc,func){ var self=MochiKit.DOM; var _344=self._document; var rval; try{ self._document=doc; rval=func(); } catch(e){ self._document=_344; throw e; } self._document=_344; return rval; },registerDOMConverter:function(name,_345,wrap,_346){ MochiKit.DOM.domConverters.register(name,_345,wrap,_346); },coerceToDOM:function(node,ctx){ var im=MochiKit.Iter; var self=MochiKit.DOM; var iter=im.iter; var _350=im.repeat; var imap=im.imap; var _352=self.domConverters; var _353=self.coerceToDOM; var _354=MochiKit.Base.NotFound; while(true){ if(typeof (node)=="undefined"||node===null){ return null; } if(typeof (node.nodeType)!="undefined"&&node.nodeType>0){ return node; } if(typeof (node)=="number"||typeof (node)=="boolean"){ node=node.toString(); } if(typeof (node)=="string"){ return self._document.createTextNode(node); } if(typeof (node.toDOM)=="function"){ node=node.toDOM(ctx); continue; } if(typeof (node)=="function"){ node=node(ctx); continue; } var _355=null; try{ _355=iter(node); } catch(e){ } if(_355){ return imap(_353,_355,_350(ctx)); } try{ node=_352.match(node,ctx); continue; } catch(e){ if(e!=_354){ throw e; } } return self._document.createTextNode(node.toString()); } return undefined; },setNodeAttribute:function(node,attr,_357){ var o={}; o[attr]=_357; try{ return MochiKit.DOM.updateNodeAttributes(node,o); } catch(e){ } return null; },getNodeAttribute:function(node,attr){ var self=MochiKit.DOM; var _358=self.attributeArray.renames[attr]; node=self.getElement(node); try{ if(_358){ return node[_358]; } return node.getAttribute(attr); } catch(e){ } return null; },updateNodeAttributes:function(node,_359){ var elem=node; var self=MochiKit.DOM; if(typeof (node)=="string"){ elem=self.getElement(node); } if(_359){ var _360=MochiKit.Base.updatetree; if(self.attributeArray.compliant){ for(var k in _359){ var v=_359[k]; if(typeof (v)=="object"&&typeof (elem[k])=="object"){ _360(elem[k],v); }else{ if(k.substring(0,2)=="on"){ if(typeof (v)=="string"){ v=new Function(v); } elem[k]=v; }else{ elem.setAttribute(k,v); } } } }else{ var _361=self.attributeArray.renames; for(k in _359){ v=_359[k]; var _362=_361[k]; if(k=="style"&&typeof (v)=="string"){ elem.style.cssText=v; }else{ if(typeof (_362)=="string"){ elem[_362]=v; }else{ if(typeof (elem[k])=="object"&&typeof (v)=="object"){ _360(elem[k],v); }else{ if(k.substring(0,2)=="on"){ if(typeof (v)=="string"){ v=new Function(v); } elem[k]=v; }else{ elem.setAttribute(k,v); } } } } } } } return elem; },appendChildNodes:function(node){ var elem=node; var self=MochiKit.DOM; if(typeof (node)=="string"){ elem=self.getElement(node); } var _363=[self.coerceToDOM(MochiKit.Base.extend(null,arguments,1),elem)]; var _364=MochiKit.Base.concat; while(_363.length){ var n=_363.shift(); if(typeof (n)=="undefined"||n===null){ }else{ if(typeof (n.nodeType)=="number"){ elem.appendChild(n); }else{ _363=_364(n,_363); } } } return elem; },replaceChildNodes:function(node){ var elem=node; var self=MochiKit.DOM; if(typeof (node)=="string"){ elem=self.getElement(node); arguments[0]=elem; } var _365; while((_365=elem.firstChild)){ elem.removeChild(_365); } if(arguments.length<2){ return elem; }else{ return self.appendChildNodes.apply(this,arguments); } },createDOM:function(name,_366){ var elem; var self=MochiKit.DOM; var m=MochiKit.Base; if(typeof (_366)=="string"||typeof (_366)=="number"){ var args=m.extend([name,null],arguments,1); return arguments.callee.apply(this,args); } if(typeof (name)=="string"){ if(_366&&"name" in _366&&!self.attributeArray.compliant){ name=("<"+name+" name=\""+self.escapeHTML(_366.name)+"\">"); } elem=self._document.createElement(name); }else{ elem=name; } if(_366){ self.updateNodeAttributes(elem,_366); } if(arguments.length<=2){ return elem; }else{ var args=m.extend([elem],arguments,2); return self.appendChildNodes.apply(this,args); } },createDOMFunc:function(){ var m=MochiKit.Base; return m.partial.apply(this,m.extend([MochiKit.DOM.createDOM],arguments)); },swapDOM:function(dest,src){ var self=MochiKit.DOM; dest=self.getElement(dest); var _369=dest.parentNode; if(src){ src=self.getElement(src); _369.replaceChild(src,dest); }else{ _369.removeChild(dest); } return src; },getElement:function(id){ var self=MochiKit.DOM; if(arguments.length==1){ return ((typeof (id)=="string")?self._document.getElementById(id):id); }else{ return MochiKit.Base.map(self.getElement,arguments); } },computedStyle:function(_371,_372,_373){ if(arguments.length==2){ _373=_372; } var self=MochiKit.DOM; var el=self.getElement(_371); var _375=self._document; if(!el||el==_375){ return undefined; } if(el.currentStyle){ return el.currentStyle[_372]; } if(typeof (_375.defaultView)=="undefined"){ return undefined; } if(_375.defaultView===null){ return undefined; } var _376=_375.defaultView.getComputedStyle(el,null); if(typeof (_376)=="undefined"||_376===null){ return undefined; } return _376.getPropertyValue(_373); },getElementsByTagAndClassName:function(_377,_378,_379){ var self=MochiKit.DOM; if(typeof (_377)=="undefined"||_377===null){ _377="*"; } if(typeof (_379)=="undefined"||_379===null){ _379=self._document; } _379=self.getElement(_379); var _380=(_379.getElementsByTagName(_377)||self._document.all); if(typeof (_378)=="undefined"||_378===null){ return MochiKit.Base.extend(null,_380); } var _381=[]; for(var i=0;i<_380.length;i++){ var _382=_380[i]; var _383=_382.className.split(" "); for(var j=0;j<_383.length;j++){ if(_383[j]==_378){ _381.push(_382); break; } } } return _381; },_newCallStack:function(path,once){ var rval=function(){ var _386=arguments.callee.callStack; for(var i=0;i<_386.length;i++){ if(_386[i].apply(this,arguments)===false){ break; } } if(once){ try{ this[path]=null; } catch(e){ } } }; rval.callStack=[]; return rval; },addToCallStack:function(_387,path,func,once){ var self=MochiKit.DOM; var _388=_387[path]; var _389=_388; if(!(typeof (_388)=="function"&&typeof (_388.callStack)=="object"&&_388.callStack!==null)){ _389=self._newCallStack(path,once); if(typeof (_388)=="function"){ _389.callStack.push(_388); } _387[path]=_389; } _389.callStack.push(func); },addLoadEvent:function(func){ var self=MochiKit.DOM; self.addToCallStack(self._window,"onload",func,true); },focusOnLoad:function(_390){ var self=MochiKit.DOM; self.addLoadEvent(function(){ _390=self.getElement(_390); if(_390){ _390.focus(); } }); },setElementClass:function(_391,_392){ var self=MochiKit.DOM; var obj=self.getElement(_391); if(self.attributeArray.compliant){ obj.setAttribute("class",_392); }else{ obj.setAttribute("className",_392); } },toggleElementClass:function(_393){ var self=MochiKit.DOM; for(var i=1;i/g,">"); },toHTML:function(dom){ return MochiKit.DOM.emitHTML(dom).join(""); },emitHTML:function(dom,lst){ if(typeof (lst)=="undefined"||lst===null){ lst=[]; } var _409=[dom]; var self=MochiKit.DOM; var _410=self.escapeHTML; var _411=self.attributeArray; while(_409.length){ dom=_409.pop(); if(typeof (dom)=="string"){ lst.push(dom); }else{ if(dom.nodeType==1){ lst.push("<"+dom.nodeName.toLowerCase()); var _412=[]; var _413=_411(dom); for(var i=0;i<_413.length;i++){ var a=_413[i]; _412.push([" ",a.name,"=\"",_410(a.value),"\""]); } _412.sort(); for(i=0;i<_412.length;i++){ var _414=_412[i]; for(var j=0;j<_414.length;j++){ lst.push(_414[j]); } } if(dom.hasChildNodes()){ lst.push(">"); _409.push(""); var _415=dom.childNodes; for(i=_415.length-1;i>=0;i--){ _409.push(_415[i]); } }else{ lst.push("/>"); } }else{ if(dom.nodeType==3){ lst.push(_410(dom.nodeValue)); } } } } return lst; },setDisplayForElement:function(_416,_417){ var m=MochiKit.Base; var _418=m.extend(null,arguments,1); MochiKit.Iter.forEach(m.filter(null,m.map(MochiKit.DOM.getElement,_418)),function(_417){ _417.style.display=_416; }); },scrapeText:function(node,_419){ var rval=[]; (function(node){ var cn=node.childNodes; if(cn){ for(var i=0;i0){ var _424=m.filter; _423=function(node){ return _424(_423.ignoreAttrFilter,node.attributes); }; _423.ignoreAttr={}; MochiKit.Iter.forEach(_422.attributes,function(a){ _423.ignoreAttr[a.name]=a.value; }); _423.ignoreAttrFilter=function(a){ return (_423.ignoreAttr[a.name]!=a.value); }; _423.compliant=false; _423.renames={"class":"className","checked":"defaultChecked","usemap":"useMap","for":"htmlFor"}; }else{ _423=function(node){ return node.attributes; }; _423.compliant=true; _423.renames={}; } this.attributeArray=_423; var _425=this.createDOMFunc; this.UL=_425("ul"); this.OL=_425("ol"); this.LI=_425("li"); this.TD=_425("td"); this.TR=_425("tr"); this.TBODY=_425("tbody"); this.THEAD=_425("thead"); this.TFOOT=_425("tfoot"); this.TABLE=_425("table"); this.TH=_425("th"); this.INPUT=_425("input"); this.SPAN=_425("span"); this.A=_425("a"); this.DIV=_425("div"); this.IMG=_425("img"); this.BUTTON=_425("button"); this.TT=_425("tt"); this.PRE=_425("pre"); this.H1=_425("h1"); this.H2=_425("h2"); this.H3=_425("h3"); this.BR=_425("br"); this.HR=_425("hr"); this.LABEL=_425("label"); this.TEXTAREA=_425("textarea"); this.FORM=_425("form"); this.P=_425("p"); this.SELECT=_425("select"); this.OPTION=_425("option"); this.OPTGROUP=_425("optgroup"); this.LEGEND=_425("legend"); this.FIELDSET=_425("fieldset"); this.STRONG=_425("strong"); this.CANVAS=_425("canvas"); this.hideElement=m.partial(this.setDisplayForElement,"none"); this.showElement=m.partial(this.setDisplayForElement,"block"); this.removeElement=this.swapDOM; this.$=this.getElement; this.EXPORT_TAGS={":common":this.EXPORT,":all":m.concat(this.EXPORT,this.EXPORT_OK)}; m.nameFunctions(this); }}); MochiKit.DOM.__new__(((typeof (window)=="undefined")?this:window)); if(!MochiKit.__compat__){ withWindow=MochiKit.DOM.withWindow; withDocument=MochiKit.DOM.withDocument; } MochiKit.Base._exportSymbols(this,MochiKit.DOM); if(typeof (dojo)!="undefined"){ dojo.provide("MochiKit.LoggingPane"); dojo.require("MochiKit.Logging"); dojo.require("MochiKit.Base"); } if(typeof (JSAN)!="undefined"){ JSAN.use("MochiKit.Logging",[]); JSAN.use("MochiKit.Base",[]); } try{ if(typeof (MochiKit.Base)=="undefined"||typeof (MochiKit.Logging)=="undefined"){ throw ""; } } catch(e){ throw "MochiKit.LoggingPane depends on MochiKit.Base and MochiKit.Logging!"; } if(typeof (MochiKit.LoggingPane)=="undefined"){ MochiKit.LoggingPane={}; } MochiKit.LoggingPane.NAME="MochiKit.LoggingPane"; MochiKit.LoggingPane.VERSION="1.3.1"; MochiKit.LoggingPane.__repr__=function(){ return "["+this.NAME+" "+this.VERSION+"]"; }; MochiKit.LoggingPane.toString=function(){ return this.__repr__(); }; MochiKit.LoggingPane.createLoggingPane=function(_426){ var m=MochiKit.LoggingPane; _426=!(!_426); if(m._loggingPane&&m._loggingPane.inline!=_426){ m._loggingPane.closePane(); m._loggingPane=null; } if(!m._loggingPane||m._loggingPane.closed){ m._loggingPane=new m.LoggingPane(_426,MochiKit.Logging.logger); } return m._loggingPane; }; MochiKit.LoggingPane.LoggingPane=function(_427,_428){ if(typeof (_428)=="undefined"||_428===null){ _428=MochiKit.Logging.logger; } this.logger=_428; var _429=MochiKit.Base.update; var _430=MochiKit.Base.updatetree; var bind=MochiKit.Base.bind; var _431=MochiKit.Base.clone; var win=window; var uid="_MochiKit_LoggingPane"; if(typeof (MochiKit.DOM)!="undefined"){ win=MochiKit.DOM.currentWindow(); } if(!_427){ var url=win.location.href.split("?")[0].replace(/[:\/.><&]/g,"_"); var name=uid+"_"+url; var nwin=win.open("",name,"dependent,resizable,height=200"); if(!nwin){ alert("Not able to open debugging window due to pop-up blocking."); return undefined; } nwin.document.write(""+"[MochiKit.LoggingPane]"+""); nwin.document.close(); nwin.document.title+=" "+win.document.title; win=nwin; } var doc=win.document; this.doc=doc; var _434=doc.getElementById(uid); var _435=!!_434; if(_434&&typeof (_434.loggingPane)!="undefined"){ _434.loggingPane.logger=this.logger; _434.loggingPane.buildAndApplyFilter(); return _434.loggingPane; } if(_435){ var _436; while((_436=_434.firstChild)){ _434.removeChild(_436); } }else{ _434=doc.createElement("div"); _434.id=uid; } _434.loggingPane=this; var _437=doc.createElement("input"); var _438=doc.createElement("input"); var _439=doc.createElement("button"); var _440=doc.createElement("button"); var _441=doc.createElement("button"); var _442=doc.createElement("button"); var _443=doc.createElement("div"); var _444=doc.createElement("div"); var _445=uid+"_Listener"; this.colorTable=_431(this.colorTable); var _446=[]; var _447=null; var _448=function(msg){ var _449=msg.level; if(typeof (_449)=="number"){ _449=MochiKit.Logging.LogLevel[_449]; } return _449; }; var _450=function(msg){ return msg.info.join(" "); }; var _451=bind(function(msg){ var _452=_448(msg); var text=_450(msg); var c=this.colorTable[_452]; var p=doc.createElement("span"); p.className="MochiKit-LogMessage MochiKit-LogLevel-"+_452; p.style.cssText="margin: 0px; white-space: -moz-pre-wrap; white-space: -o-pre-wrap; white-space: pre-wrap; white-space: pre-line; word-wrap: break-word; wrap-option: emergency; color: "+c; p.appendChild(doc.createTextNode(_452+": "+text)); _444.appendChild(p); _444.appendChild(doc.createElement("br")); if(_443.offsetHeight>_443.scrollHeight){ _443.scrollTop=0; }else{ _443.scrollTop=_443.scrollHeight; } },this); var _454=function(msg){ _446[_446.length]=msg; _451(msg); }; var _455=function(){ var _456,infore; try{ _456=new RegExp(_437.value); infore=new RegExp(_438.value); } catch(e){ logDebug("Error in filter regex: "+e.message); return null; } return function(msg){ return (_456.test(_448(msg))&&infore.test(_450(msg))); }; }; var _457=function(){ while(_444.firstChild){ _444.removeChild(_444.firstChild); } }; var _458=function(){ _446=[]; _457(); }; var _459=bind(function(){ if(this.closed){ return; } this.closed=true; if(MochiKit.LoggingPane._loggingPane==this){ MochiKit.LoggingPane._loggingPane=null; } this.logger.removeListener(_445); _434.loggingPane=null; if(_427){ _434.parentNode.removeChild(_434); }else{ this.win.close(); } },this); var _460=function(){ _457(); for(var i=0;i<_446.length;i++){ var msg=_446[i]; if(_447===null||_447(msg)){ _451(msg); } } }; this.buildAndApplyFilter=function(){ _447=_455(); _460(); this.logger.removeListener(_445); this.logger.addListener(_445,_447,_454); }; var _461=bind(function(){ _446=this.logger.getMessages(); _460(); },this); var _462=bind(function(_463){ _463=_463||window.event; key=_463.which||_463.keyCode; if(key==13){ this.buildAndApplyFilter(); } },this); var _464="display: block; z-index: 1000; left: 0px; bottom: 0px; position: fixed; width: 100%; background-color: white; font: "+this.logFont; if(_427){ _464+="; height: 10em; border-top: 2px solid black"; }else{ _464+="; height: 100%;"; } _434.style.cssText=_464; if(!_435){ doc.body.appendChild(_434); } _464={"cssText":"width: 33%; display: inline; font: "+this.logFont}; _430(_437,{"value":"FATAL|ERROR|WARNING|INFO|DEBUG","onkeypress":_462,"style":_464}); _434.appendChild(_437); _430(_438,{"value":".*","onkeypress":_462,"style":_464}); _434.appendChild(_438); _464="width: 8%; display:inline; font: "+this.logFont; _439.appendChild(doc.createTextNode("Filter")); _439.onclick=bind("buildAndApplyFilter",this); _439.style.cssText=_464; _434.appendChild(_439); _440.appendChild(doc.createTextNode("Load")); _440.onclick=_461; _440.style.cssText=_464; _434.appendChild(_440); _441.appendChild(doc.createTextNode("Clear")); _441.onclick=_458; _441.style.cssText=_464; _434.appendChild(_441); _442.appendChild(doc.createTextNode("Close")); _442.onclick=_459; _442.style.cssText=_464; _434.appendChild(_442); _443.style.cssText="overflow: auto; width: 100%"; _444.style.cssText="width: 100%; height: "+(_427?"8em":"100%"); _443.appendChild(_444); _434.appendChild(_443); this.buildAndApplyFilter(); _461(); if(_427){ this.win=undefined; }else{ this.win=win; } this.inline=_427; this.closePane=_459; this.closed=false; return this; }; MochiKit.LoggingPane.LoggingPane.prototype={"logFont":"8pt Verdana,sans-serif","colorTable":{"ERROR":"red","FATAL":"darkred","WARNING":"blue","INFO":"black","DEBUG":"green"}}; MochiKit.LoggingPane.EXPORT_OK=["LoggingPane"]; MochiKit.LoggingPane.EXPORT=["createLoggingPane"]; MochiKit.LoggingPane.__new__=function(){ this.EXPORT_TAGS={":common":this.EXPORT,":all":MochiKit.Base.concat(this.EXPORT,this.EXPORT_OK)}; MochiKit.Base.nameFunctions(this); MochiKit.LoggingPane._loggingPane=null; }; MochiKit.LoggingPane.__new__(); MochiKit.Base._exportSymbols(this,MochiKit.LoggingPane); if(typeof (dojo)!="undefined"){ dojo.provide("MochiKit.Color"); dojo.require("MochiKit.Base"); } if(typeof (JSAN)!="undefined"){ JSAN.use("MochiKit.Base",[]); } try{ if(typeof (MochiKit.Base)=="undefined"){ throw ""; } } catch(e){ throw "MochiKit.Color depends on MochiKit.Base"; } if(typeof (MochiKit.Color)=="undefined"){ MochiKit.Color={}; } MochiKit.Color.NAME="MochiKit.Color"; MochiKit.Color.VERSION="1.3.1"; MochiKit.Color.__repr__=function(){ return "["+this.NAME+" "+this.VERSION+"]"; }; MochiKit.Color.toString=function(){ return this.__repr__(); }; MochiKit.Color.Color=function(red,_466,blue,_468){ if(typeof (_468)=="undefined"||_468===null){ _468=1; } this.rgb={r:red,g:_466,b:blue,a:_468}; }; MochiKit.Color.Color.prototype={__class__:MochiKit.Color.Color,colorWithAlpha:function(_469){ var rgb=this.rgb; var m=MochiKit.Color; return m.Color.fromRGB(rgb.r,rgb.g,rgb.b,_469); },colorWithHue:function(hue){ var hsl=this.asHSL(); hsl.h=hue; var m=MochiKit.Color; return m.Color.fromHSL(hsl); },colorWithSaturation:function(_473){ var hsl=this.asHSL(); hsl.s=_473; var m=MochiKit.Color; return m.Color.fromHSL(hsl); },colorWithLightness:function(_474){ var hsl=this.asHSL(); hsl.l=_474; var m=MochiKit.Color; return m.Color.fromHSL(hsl); },darkerColorWithLevel:function(_475){ var hsl=this.asHSL(); hsl.l=Math.max(hsl.l-_475,0); var m=MochiKit.Color; return m.Color.fromHSL(hsl); },lighterColorWithLevel:function(_476){ var hsl=this.asHSL(); hsl.l=Math.min(hsl.l+_476,1); var m=MochiKit.Color; return m.Color.fromHSL(hsl); },blendedColor:function(_477,_478){ if(typeof (_478)=="undefined"||_478===null){ _478=0.5; } var sf=1-_478; var s=this.rgb; var d=_477.rgb; var df=_478; return MochiKit.Color.Color.fromRGB((s.r*sf)+(d.r*df),(s.g*sf)+(d.g*df),(s.b*sf)+(d.b*df),(s.a*sf)+(d.a*df)); },compareRGB:function(_481){ var a=this.asRGB(); var b=_481.asRGB(); return MochiKit.Base.compare([a.r,a.g,a.b,a.a],[b.r,b.g,b.b,b.a]); },isLight:function(){ return this.asHSL().b>0.5; },isDark:function(){ return (!this.isLight()); },toHSLString:function(){ var c=this.asHSL(); var ccc=MochiKit.Color.clampColorComponent; var rval=this._hslString; if(!rval){ var mid=(ccc(c.h,360).toFixed(0)+","+ccc(c.s,100).toPrecision(4)+"%"+","+ccc(c.l,100).toPrecision(4)+"%"); var a=c.a; if(a>=1){ a=1; rval="hsl("+mid+")"; }else{ if(a<=0){ a=0; } rval="hsla("+mid+","+a+")"; } this._hslString=rval; } return rval; },toRGBString:function(){ var c=this.rgb; var ccc=MochiKit.Color.clampColorComponent; var rval=this._rgbString; if(!rval){ var mid=(ccc(c.r,255).toFixed(0)+","+ccc(c.g,255).toFixed(0)+","+ccc(c.b,255).toFixed(0)); if(c.a!=1){ rval="rgba("+mid+","+c.a+")"; }else{ rval="rgb("+mid+")"; } this._rgbString=rval; } return rval; },asRGB:function(){ return MochiKit.Base.clone(this.rgb); },toHexString:function(){ var m=MochiKit.Color; var c=this.rgb; var ccc=MochiKit.Color.clampColorComponent; var rval=this._hexString; if(!rval){ rval=("#"+m.toColorPart(ccc(c.r,255))+m.toColorPart(ccc(c.g,255))+m.toColorPart(ccc(c.b,255))); this._hexString=rval; } return rval; },asHSV:function(){ var hsv=this.hsv; var c=this.rgb; if(typeof (hsv)=="undefined"||hsv===null){ hsv=MochiKit.Color.rgbToHSV(this.rgb); this.hsv=hsv; } return MochiKit.Base.clone(hsv); },asHSL:function(){ var hsl=this.hsl; var c=this.rgb; if(typeof (hsl)=="undefined"||hsl===null){ hsl=MochiKit.Color.rgbToHSL(this.rgb); this.hsl=hsl; } return MochiKit.Base.clone(hsl); },toString:function(){ return this.toRGBString(); },repr:function(){ var c=this.rgb; var col=[c.r,c.g,c.b,c.a]; return this.__class__.NAME+"("+col.join(", ")+")"; }}; MochiKit.Base.update(MochiKit.Color.Color,{fromRGB:function(red,_486,blue,_487){ var _488=MochiKit.Color.Color; if(arguments.length==1){ var rgb=red; red=rgb.r; _486=rgb.g; blue=rgb.b; if(typeof (rgb.a)=="undefined"){ _487=undefined; }else{ _487=rgb.a; } } return new _488(red,_486,blue,_487); },fromHSL:function(hue,_489,_490,_491){ var m=MochiKit.Color; return m.Color.fromRGB(m.hslToRGB.apply(m,arguments)); },fromHSV:function(hue,_492,_493,_494){ var m=MochiKit.Color; return m.Color.fromRGB(m.hsvToRGB.apply(m,arguments)); },fromName:function(name){ var _495=MochiKit.Color.Color; if(name.charAt(0)=="\""){ name=name.substr(1,name.length-2); } var _496=_495._namedColors[name.toLowerCase()]; if(typeof (_496)=="string"){ return _495.fromHexString(_496); }else{ if(name=="transparent"){ return _495.transparentColor(); } } return null; },fromString:function(_497){ var self=MochiKit.Color.Color; var _498=_497.substr(0,3); if(_498=="rgb"){ return self.fromRGBString(_497); }else{ if(_498=="hsl"){ return self.fromHSLString(_497); }else{ if(_497.charAt(0)=="#"){ return self.fromHexString(_497); } } } return self.fromName(_497); },fromHexString:function(_499){ if(_499.charAt(0)=="#"){ _499=_499.substring(1); } var _500=[]; var i,hex; if(_499.length==3){ for(i=0;i<3;i++){ hex=_499.substr(i,1); _500.push(parseInt(hex+hex,16)/255); } }else{ for(i=0;i<6;i+=2){ hex=_499.substr(i,2); _500.push(parseInt(hex,16)/255); } } var _501=MochiKit.Color.Color; return _501.fromRGB.apply(_501,_500); },_fromColorString:function(pre,_503,_504,_505){ if(_505.indexOf(pre)===0){ _505=_505.substring(_505.indexOf("(",3)+1,_505.length-1); } var _506=_505.split(/\s*,\s*/); var _507=[]; for(var i=0;i<_506.length;i++){ var c=_506[i]; var val; var _508=c.substring(c.length-3); if(c.charAt(c.length-1)=="%"){ val=0.01*parseFloat(c.substring(0,c.length-1)); }else{ if(_508=="deg"){ val=parseFloat(c)/360; }else{ if(_508=="rad"){ val=parseFloat(c)/(Math.PI*2); }else{ val=_504[i]*parseFloat(c); } } } _507.push(val); } return this[_503].apply(this,_507); },fromComputedStyle:function(elem,_509,_510){ var d=MochiKit.DOM; var cls=MochiKit.Color.Color; for(elem=d.getElement(elem);elem;elem=elem.parentNode){ var _511=d.computedStyle.apply(d,arguments); if(!_511){ continue; } var _512=cls.fromString(_511); if(!_512){ break; } if(_512.asRGB().a>0){ return _512; } } return null; },fromBackground:function(elem){ var cls=MochiKit.Color.Color; return cls.fromComputedStyle(elem,"backgroundColor","background-color")||cls.whiteColor(); },fromText:function(elem){ var cls=MochiKit.Color.Color; return cls.fromComputedStyle(elem,"color","color")||cls.blackColor(); },namedColors:function(){ return MochiKit.Base.clone(MochiKit.Color.Color._namedColors); }}); MochiKit.Base.update(MochiKit.Color,{clampColorComponent:function(v,_513){ v*=_513; if(v<0){ return 0; }else{ if(v>_513){ return _513; }else{ return v; } } },_hslValue:function(n1,n2,hue){ if(hue>6){ hue-=6; }else{ if(hue<0){ hue+=6; } } var val; if(hue<1){ val=n1+(n2-n1)*hue; }else{ if(hue<3){ val=n2; }else{ if(hue<4){ val=n1+(n2-n1)*(4-hue); }else{ val=n1; } } } return val; },hsvToRGB:function(hue,_516,_517,_518){ if(arguments.length==1){ var hsv=hue; hue=hsv.h; _516=hsv.s; _517=hsv.v; _518=hsv.a; } var red; var _519; var blue; if(_516===0){ red=0; _519=0; blue=0; }else{ var i=Math.floor(hue*6); var f=(hue*6)-i; var p=_517*(1-_516); var q=_517*(1-(_516*f)); var t=_517*(1-(_516*(1-f))); switch(i){ case 1: red=q; _519=_517; blue=p; break; case 2: red=p; _519=_517; blue=t; break; case 3: red=p; _519=q; blue=_517; break; case 4: red=t; _519=p; blue=_517; break; case 5: red=_517; _519=p; blue=q; break; case 6: case 0: red=_517; _519=t; blue=p; break; } } return {r:red,g:_519,b:blue,a:_518}; },hslToRGB:function(hue,_521,_522,_523){ if(arguments.length==1){ var hsl=hue; hue=hsl.h; _521=hsl.s; _522=hsl.l; _523=hsl.a; } var red; var _524; var blue; if(_521===0){ red=_522; _524=_522; blue=_522; }else{ var m2; if(_522<=0.5){ m2=_522*(1+_521); }else{ m2=_522+_521-(_522*_521); } var m1=(2*_522)-m2; var f=MochiKit.Color._hslValue; var h6=hue*6; red=f(m1,m2,h6+2); _524=f(m1,m2,h6); blue=f(m1,m2,h6-2); } return {r:red,g:_524,b:blue,a:_523}; },rgbToHSV:function(red,_528,blue,_529){ if(arguments.length==1){ var rgb=red; red=rgb.r; _528=rgb.g; blue=rgb.b; _529=rgb.a; } var max=Math.max(Math.max(red,_528),blue); var min=Math.min(Math.min(red,_528),blue); var hue; var _532; var _533=max; if(min==max){ hue=0; _532=0; }else{ var _534=(max-min); _532=_534/max; if(red==max){ hue=(_528-blue)/_534; }else{ if(_528==max){ hue=2+((blue-red)/_534); }else{ hue=4+((red-_528)/_534); } } hue/=6; if(hue<0){ hue+=1; } if(hue>1){ hue-=1; } } return {h:hue,s:_532,v:_533,a:_529}; },rgbToHSL:function(red,_535,blue,_536){ if(arguments.length==1){ var rgb=red; red=rgb.r; _535=rgb.g; blue=rgb.b; _536=rgb.a; } var max=Math.max(red,Math.max(_535,blue)); var min=Math.min(red,Math.min(_535,blue)); var hue; var _537; var _538=(max+min)/2; var _539=max-min; if(_539===0){ hue=0; _537=0; }else{ if(_538<=0.5){ _537=_539/(max+min); }else{ _537=_539/(2-max-min); } if(red==max){ hue=(_535-blue)/_539; }else{ if(_535==max){ hue=2+((blue-red)/_539); }else{ hue=4+((red-_535)/_539); } } hue/=6; if(hue<0){ hue+=1; } if(hue>1){ hue-=1; } } return {h:hue,s:_537,l:_538,a:_536}; },toColorPart:function(num){ num=Math.round(num); var _540=num.toString(16); if(num<16){ return "0"+_540; } return _540; },__new__:function(){ var m=MochiKit.Base; this.Color.fromRGBString=m.bind(this.Color._fromColorString,this.Color,"rgb","fromRGB",[1/255,1/255,1/255,1]); this.Color.fromHSLString=m.bind(this.Color._fromColorString,this.Color,"hsl","fromHSL",[1/360,0.01,0.01,1]); var _541=1/3; var _542={black:[0,0,0],blue:[0,0,1],brown:[0.6,0.4,0.2],cyan:[0,1,1],darkGray:[_541,_541,_541],gray:[0.5,0.5,0.5],green:[0,1,0],lightGray:[2*_541,2*_541,2*_541],magenta:[1,0,1],orange:[1,0.5,0],purple:[0.5,0,0.5],red:[1,0,0],transparent:[0,0,0,0],white:[1,1,1],yellow:[1,1,0]}; var _543=function(name,r,g,b,a){ var rval=this.fromRGB(r,g,b,a); this[name]=function(){ return rval; }; return rval; }; for(var k in _542){ var name=k+"Color"; var _545=m.concat([_543,this.Color,name],_542[k]); this.Color[name]=m.bind.apply(null,_545); } var _546=function(){ for(var i=0;i1){ var src=MochiKit.DOM.getElement(arguments[0]); var sig=arguments[1]; var obj=arguments[2]; var func=arguments[3]; for(var i=_562.length-1;i>=0;i--){ var o=_562[i]; if(o[0]===src&&o[1]===sig&&o[4]===obj&&o[5]===func){ self._disconnect(o); _562.splice(i,1); return true; } } }else{ var idx=m.findIdentical(_562,_561); if(idx>=0){ self._disconnect(_561); _562.splice(idx,1); return true; } } return false; },disconnectAll:function(src,sig){ src=MochiKit.DOM.getElement(src); var m=MochiKit.Base; var _563=m.flattenArguments(m.extend(null,arguments,1)); var self=MochiKit.Signal; var _564=self._disconnect; var _565=self._observers; if(_563.length===0){ for(var i=_565.length-1;i>=0;i--){ var _566=_565[i]; if(_566[0]===src){ _564(_566); _565.splice(i,1); } } }else{ var sigs={}; for(var i=0;i<_563.length;i++){ sigs[_563[i]]=true; } for(var i=_565.length-1;i>=0;i--){ var _566=_565[i]; if(_566[0]===src&&_566[1] in sigs){ _564(_566); _565.splice(i,1); } } } },signal:function(src,sig){ var _568=MochiKit.Signal._observers; src=MochiKit.DOM.getElement(src); var args=MochiKit.Base.extend(null,arguments,2); var _569=[]; for(var i=0;i<_568.length;i++){ var _570=_568[i]; if(_570[0]===src&&_570[1]===sig){ try{ _570[2].apply(src,args); } catch(e){ _569.push(e); } } } if(_569.length==1){ throw _569[0]; }else{ if(_569.length>1){ var e=new Error("Multiple errors thrown in handling 'sig', see errors property"); e.errors=_569; throw e; } } }}); MochiKit.Signal.EXPORT_OK=[]; MochiKit.Signal.EXPORT=["connect","disconnect","signal","disconnectAll"]; MochiKit.Signal.__new__=function(win){ var m=MochiKit.Base; this._document=document; this._window=win; try{ this.connect(window,"onunload",this._unloadCache); } catch(e){ } this.EXPORT_TAGS={":common":this.EXPORT,":all":m.concat(this.EXPORT,this.EXPORT_OK)}; m.nameFunctions(this); }; MochiKit.Signal.__new__(this); if(!MochiKit.__compat__){ connect=MochiKit.Signal.connect; disconnect=MochiKit.Signal.disconnect; disconnectAll=MochiKit.Signal.disconnectAll; signal=MochiKit.Signal.signal; } MochiKit.Base._exportSymbols(this,MochiKit.Signal); if(typeof (dojo)!="undefined"){ dojo.provide("MochiKit.Visual"); dojo.require("MochiKit.Base"); dojo.require("MochiKit.DOM"); dojo.require("MochiKit.Color"); } if(typeof (JSAN)!="undefined"){ JSAN.use("MochiKit.Base",[]); JSAN.use("MochiKit.DOM",[]); JSAN.use("MochiKit.Color",[]); } try{ if(typeof (MochiKit.Base)=="undefined"||typeof (MochiKit.DOM)=="undefined"||typeof (MochiKit.Color)=="undefined"){ throw ""; } } catch(e){ throw "MochiKit.Visual depends on MochiKit.Base, MochiKit.DOM and MochiKit.Color!"; } if(typeof (MochiKit.Visual)=="undefined"){ MochiKit.Visual={}; } MochiKit.Visual.NAME="MochiKit.Visual"; MochiKit.Visual.VERSION="1.3.1"; MochiKit.Visual.__repr__=function(){ return "["+this.NAME+" "+this.VERSION+"]"; }; MochiKit.Visual.toString=function(){ return this.__repr__(); }; MochiKit.Visual._RoundCorners=function(e,_571){ e=MochiKit.DOM.getElement(e); this._setOptions(_571); if(this.options.__unstable__wrapElement){ e=this._doWrap(e); } var _572=this.options.color; var C=MochiKit.Color.Color; if(this.options.color=="fromElement"){ _572=C.fromBackground(e); }else{ if(!(_572 instanceof C)){ _572=C.fromString(_572); } } this.isTransparent=(_572.asRGB().a<=0); var _574=this.options.bgColor; if(this.options.bgColor=="fromParent"){ _574=C.fromBackground(e.offsetParent); }else{ if(!(_574 instanceof C)){ _574=C.fromString(_574); } } this._roundCornersImpl(e,_572,_574); }; MochiKit.Visual._RoundCorners.prototype={_doWrap:function(e){ var _575=e.parentNode; var doc=MochiKit.DOM.currentDocument(); if(typeof (doc.defaultView)=="undefined"||doc.defaultView===null){ return e; } var _576=doc.defaultView.getComputedStyle(e,null); if(typeof (_576)=="undefined"||_576===null){ return e; } var _577=MochiKit.DOM.DIV({"style":{display:"block",marginTop:_576.getPropertyValue("padding-top"),marginRight:_576.getPropertyValue("padding-right"),marginBottom:_576.getPropertyValue("padding-bottom"),marginLeft:_576.getPropertyValue("padding-left"),padding:"0px"}}); _577.innerHTML=e.innerHTML; e.innerHTML=""; e.appendChild(_577); return e; },_roundCornersImpl:function(e,_578,_579){ if(this.options.border){ this._renderBorder(e,_579); } if(this._isTopRounded()){ this._roundTopCorners(e,_578,_579); } if(this._isBottomRounded()){ this._roundBottomCorners(e,_578,_579); } },_renderBorder:function(el,_580){ var _581="1px solid "+this._borderColor(_580); var _582="border-left: "+_581; var _583="border-right: "+_581; var _584="style='"+_582+";"+_583+"'"; el.innerHTML="
"+el.innerHTML+"
"; },_roundTopCorners:function(el,_585,_586){ var _587=this._createCorner(_586); for(var i=0;i=0;i--){ _590.appendChild(this._createCornerSlice(_588,_589,i,"bottom")); } el.style.paddingBottom=0; el.appendChild(_590); },_createCorner:function(_591){ var dom=MochiKit.DOM; return dom.DIV({style:{backgroundColor:_591.toString()}}); },_createCornerSlice:function(_592,_593,n,_594){ var _595=MochiKit.DOM.SPAN(); var _596=_595.style; _596.backgroundColor=_592.toString(); _596.display="block"; _596.height="1px"; _596.overflow="hidden"; _596.fontSize="1px"; var _597=this._borderColor(_592,_593); if(this.options.border&&n===0){ _596.borderTopStyle="solid"; _596.borderTopWidth="1px"; _596.borderLeftWidth="0px"; _596.borderRightWidth="0px"; _596.borderBottomWidth="0px"; _596.height="0px"; _596.borderColor=_597.toString(); }else{ if(_597){ _596.borderColor=_597.toString(); _596.borderStyle="solid"; _596.borderWidth="0px 1px"; } } if(!this.options.compact&&(n==(this.options.numSlices-1))){ _596.height="2px"; } this._setMargin(_595,n,_594); this._setBorder(_595,n,_594); return _595; },_setOptions:function(_598){ this.options={corners:"all",color:"fromElement",bgColor:"fromParent",blend:true,border:false,compact:false,__unstable__wrapElement:false}; MochiKit.Base.update(this.options,_598); this.options.numSlices=(this.options.compact?2:4); },_whichSideTop:function(){ var _599=this.options.corners; if(this._hasString(_599,"all","top")){ return ""; } var _600=(_599.indexOf("tl")!=-1); var _601=(_599.indexOf("tr")!=-1); if(_600&&_601){ return ""; } if(_600){ return "left"; } if(_601){ return "right"; } return ""; },_whichSideBottom:function(){ var _602=this.options.corners; if(this._hasString(_602,"all","bottom")){ return ""; } var _603=(_602.indexOf("bl")!=-1); var _604=(_602.indexOf("br")!=-1); if(_603&&_604){ return ""; } if(_603){ return "left"; } if(_604){ return "right"; } return ""; },_borderColor:function(_605,_606){ if(_605=="transparent"){ return _606; }else{ if(this.options.border){ return this.options.border; }else{ if(this.options.blend){ return _606.blendedColor(_605); } } } return ""; },_setMargin:function(el,n,_607){ var _608=this._marginSize(n)+"px"; var _609=(_607=="top"?this._whichSideTop():this._whichSideBottom()); var _610=el.style; if(_609=="left"){ _610.marginLeft=_608; _610.marginRight="0px"; }else{ if(_609=="right"){ _610.marginRight=_608; _610.marginLeft="0px"; }else{ _610.marginLeft=_608; _610.marginRight=_608; } } },_setBorder:function(el,n,_611){ var _612=this._borderSize(n)+"px"; var _613=(_611=="top"?this._whichSideTop():this._whichSideBottom()); var _614=el.style; if(_613=="left"){ _614.borderLeftWidth=_612; _614.borderRightWidth="0px"; }else{ if(_613=="right"){ _614.borderRightWidth=_612; _614.borderLeftWidth="0px"; }else{ _614.borderLeftWidth=_612; _614.borderRightWidth=_612; } } },_marginSize:function(n){ if(this.isTransparent){ return 0; } var o=this.options; if(o.compact&&o.blend){ var _615=[1,0]; return _615[n]; }else{ if(o.compact){ var _616=[2,1]; return _616[n]; }else{ if(o.blend){ var _617=[3,2,1,0]; return _617[n]; }else{ var _618=[5,3,2,1]; return _618[n]; } } } },_borderSize:function(n){ var o=this.options; var _619; if(o.compact&&(o.blend||this.isTransparent)){ return 1; }else{ if(o.compact){ _619=[1,0]; }else{ if(o.blend){ _619=[2,1,1,1]; }else{ if(o.border){ _619=[0,2,0,0]; }else{ if(this.isTransparent){ _619=[5,3,2,1]; }else{ return 0; } } } } } return _619[n]; },_hasString:function(str){ for(var i=1;i"); } } })(); } PKK92o$turbogears/static/js/MochiKit_1_4.js/*** MochiKit.MochiKit 1.4.2 : PACKED VERSION THIS FILE IS AUTOMATICALLY GENERATED. If creating patches, please diff against the source tree, not this file. See for documentation, downloads, license, etc. (c) 2005 Bob Ippolito. All rights Reserved. ***/ if(typeof (dojo)!="undefined"){ dojo.provide("MochiKit.Base"); } if(typeof (MochiKit)=="undefined"){ MochiKit={}; } if(typeof (MochiKit.Base)=="undefined"){ MochiKit.Base={}; } if(typeof (MochiKit.__export__)=="undefined"){ MochiKit.__export__=(MochiKit.__compat__||(typeof (JSAN)=="undefined"&&typeof (dojo)=="undefined")); } MochiKit.Base.VERSION="1.4.2"; MochiKit.Base.NAME="MochiKit.Base"; MochiKit.Base.update=function(_1,_2){ if(_1===null||_1===undefined){ _1={}; } for(var i=1;i=0;i--){ _18.unshift(o[i]); } }else{ res.push(o); } } return res; },extend:function(_1b,obj,_1d){ if(!_1d){ _1d=0; } if(obj){ var l=obj.length; if(typeof (l)!="number"){ if(typeof (MochiKit.Iter)!="undefined"){ obj=MochiKit.Iter.list(obj); l=obj.length; }else{ throw new TypeError("Argument not an array-like and MochiKit.Iter not present"); } } if(!_1b){ _1b=[]; } for(var i=_1d;i>b; },zrshift:function(a,b){ return a>>>b; },eq:function(a,b){ return a==b; },ne:function(a,b){ return a!=b; },gt:function(a,b){ return a>b; },ge:function(a,b){ return a>=b; },lt:function(a,b){ return al){ _93=l; } } _91=[]; for(i=0;i<_93;i++){ var _95=[]; for(var j=1;j=0;i--){ _b2=[_ae[i].apply(this,_b2)]; } return _b2[0]; }; },bind:function(_b4,_b5){ if(typeof (_b4)=="string"){ _b4=_b5[_b4]; } var _b6=_b4.im_func; var _b7=_b4.im_preargs; var _b8=_b4.im_self; var m=MochiKit.Base; if(typeof (_b4)=="function"&&typeof (_b4.apply)=="undefined"){ _b4=m._wrapDumbFunction(_b4); } if(typeof (_b6)!="function"){ _b6=_b4; } if(typeof (_b5)!="undefined"){ _b8=_b5; } if(typeof (_b7)=="undefined"){ _b7=[]; }else{ _b7=_b7.slice(); } m.extend(_b7,arguments,2); var _ba=function(){ var _bb=arguments; var me=arguments.callee; if(me.im_preargs.length>0){ _bb=m.concat(me.im_preargs,_bb); } var _bd=me.im_self; if(!_bd){ _bd=this; } return me.im_func.apply(_bd,_bb); }; _ba.im_self=_b8; _ba.im_func=_b6; _ba.im_preargs=_b7; return _ba; },bindLate:function(_be,_bf){ var m=MochiKit.Base; if(typeof (_be)!="string"){ return m.bind.apply(this,arguments); } var _c1=m.extend([],arguments,2); var _c2=function(){ var _c3=arguments; var me=arguments.callee; if(me.im_preargs.length>0){ _c3=m.concat(me.im_preargs,_c3); } var _c5=me.im_self; if(!_c5){ _c5=this; } return _c5[me.im_func].apply(_c5,_c3); }; _c2.im_self=_bf; _c2.im_func=_be; _c2.im_preargs=_c1; return _c2; },bindMethods:function(_c6){ var _c7=MochiKit.Base.bind; for(var k in _c6){ var _c9=_c6[k]; if(typeof (_c9)=="function"){ _c6[k]=_c7(_c9,_c6); } } },registerComparator:function(_ca,_cb,_cc,_cd){ MochiKit.Base.comparatorRegistry.register(_ca,_cb,_cc,_cd); },_primitives:{"boolean":true,"string":true,"number":true},compare:function(a,b){ if(a==b){ return 0; } var _d0=(typeof (a)=="undefined"||a===null); var _d1=(typeof (b)=="undefined"||b===null); if(_d0&&_d1){ return 0; }else{ if(_d0){ return -1; }else{ if(_d1){ return 1; } } } var m=MochiKit.Base; var _d3=m._primitives; if(!(typeof (a) in _d3&&typeof (b) in _d3)){ try{ return m.comparatorRegistry.match(a,b); } catch(e){ if(e!=m.NotFound){ throw e; } } } if(ab){ return 1; } } var _d4=m.repr; throw new TypeError(_d4(a)+" and "+_d4(b)+" can not be compared"); },compareDateLike:function(a,b){ return MochiKit.Base.compare(a.getTime(),b.getTime()); },compareArrayLike:function(a,b){ var _d9=MochiKit.Base.compare; var _da=a.length; var _db=0; if(_da>b.length){ _db=1; _da=b.length; }else{ if(_da=0;i--){ sum+=o[i]; } }else{ sum+=o; } } if(_121<=0){ throw new TypeError("mean() requires at least one argument"); } return sum/_121; },median:function(){ var data=MochiKit.Base.flattenArguments(arguments); if(data.length===0){ throw new TypeError("median() requires at least one argument"); } data.sort(compare); if(data.length%2==0){ var _125=data.length/2; return (data[_125]+data[_125-1])/2; }else{ return data[(data.length-1)/2]; } },findValue:function(lst,_127,_128,end){ if(typeof (end)=="undefined"||end===null){ end=lst.length; } if(typeof (_128)=="undefined"||_128===null){ _128=0; } var cmp=MochiKit.Base.compare; for(var i=_128;i0))){ var kv=MochiKit.DOM.formContents(_135); _135=kv[0]; _136=kv[1]; }else{ if(arguments.length==1){ if(typeof (_135.length)=="number"&&_135.length==2){ return arguments.callee(_135[0],_135[1]); } var o=_135; _135=[]; _136=[]; for(var k in o){ var v=o[k]; if(typeof (v)=="function"){ continue; }else{ if(MochiKit.Base.isArrayLike(v)){ for(var i=0;i=stop){ throw self.StopIteration; } _183+=step; return rval; }}; },imap:function(fun,p,q){ var m=MochiKit.Base; var self=MochiKit.Iter; var _18d=m.map(self.iter,m.extend(null,arguments,1)); var map=m.map; var next=self.next; return {repr:function(){ return "imap(...)"; },toString:m.forwardCall("repr"),next:function(){ return fun.apply(this,map(next,_18d)); }}; },applymap:function(fun,seq,self){ seq=MochiKit.Iter.iter(seq); var m=MochiKit.Base; return {repr:function(){ return "applymap(...)"; },toString:m.forwardCall("repr"),next:function(){ return fun.apply(self,seq.next()); }}; },chain:function(p,q){ var self=MochiKit.Iter; var m=MochiKit.Base; if(arguments.length==1){ return self.iter(arguments[0]); } var _198=m.map(self.iter,arguments); return {repr:function(){ return "chain(...)"; },toString:m.forwardCall("repr"),next:function(){ while(_198.length>1){ try{ var _199=_198[0].next(); return _199; } catch(e){ if(e!=self.StopIteration){ throw e; } _198.shift(); var _199=_198[0].next(); return _199; } } if(_198.length==1){ var arg=_198.shift(); this.next=m.bind("next",arg); return this.next(); } throw self.StopIteration; }}; },takewhile:function(pred,seq){ var self=MochiKit.Iter; seq=self.iter(seq); return {repr:function(){ return "takewhile(...)"; },toString:MochiKit.Base.forwardCall("repr"),next:function(){ var rval=seq.next(); if(!pred(rval)){ this.next=function(){ throw self.StopIteration; }; this.next(); } return rval; }}; },dropwhile:function(pred,seq){ seq=MochiKit.Iter.iter(seq); var m=MochiKit.Base; var bind=m.bind; return {"repr":function(){ return "dropwhile(...)"; },"toString":m.forwardCall("repr"),"next":function(){ while(true){ var rval=seq.next(); if(!pred(rval)){ break; } } this.next=bind("next",seq); return rval; }}; },_tee:function(_1a4,sync,_1a6){ sync.pos[_1a4]=-1; var m=MochiKit.Base; var _1a8=m.listMin; return {repr:function(){ return "tee("+_1a4+", ...)"; },toString:m.forwardCall("repr"),next:function(){ var rval; var i=sync.pos[_1a4]; if(i==sync.max){ rval=_1a6.next(); sync.deque.push(rval); sync.max+=1; sync.pos[_1a4]+=1; }else{ rval=sync.deque[i-sync.min]; sync.pos[_1a4]+=1; if(i==sync.min&&_1a8(sync.pos)!=sync.min){ sync.min+=1; sync.deque.shift(); } } return rval; }}; },tee:function(_1ab,n){ var rval=[]; var sync={"pos":[],"deque":[],"max":-1,"min":-1}; if(arguments.length==1||typeof (n)=="undefined"||n===null){ n=2; } var self=MochiKit.Iter; _1ab=self.iter(_1ab); var _tee=self._tee; for(var i=0;i0&&_1bd>=stop)||(step<0&&_1bd<=stop)){ throw MochiKit.Iter.StopIteration; } var rval=_1bd; _1bd+=step; return rval; },repr:function(){ return "range("+[_1bd,stop,step].join(", ")+")"; },toString:MochiKit.Base.forwardCall("repr")}; },sum:function(_1c1,_1c2){ if(typeof (_1c2)=="undefined"||_1c2===null){ _1c2=0; } var x=_1c2; var self=MochiKit.Iter; _1c1=self.iter(_1c1); try{ while(true){ x+=_1c1.next(); } } catch(e){ if(e!=self.StopIteration){ throw e; } } return x; },exhaust:function(_1c5){ var self=MochiKit.Iter; _1c5=self.iter(_1c5); try{ while(true){ _1c5.next(); } } catch(e){ if(e!=self.StopIteration){ throw e; } } },forEach:function(_1c7,func,obj){ var m=MochiKit.Base; var self=MochiKit.Iter; if(arguments.length>2){ func=m.bind(func,obj); } if(m.isArrayLike(_1c7)&&!self.isIterable(_1c7)){ try{ for(var i=0;i<_1c7.length;i++){ func(_1c7[i]); } } catch(e){ if(e!=self.StopIteration){ throw e; } } }else{ self.exhaust(self.imap(func,_1c7)); } },every:function(_1cd,func){ var self=MochiKit.Iter; try{ self.ifilterfalse(func,_1cd).next(); return false; } catch(e){ if(e!=self.StopIteration){ throw e; } return true; } },sorted:function(_1d0,cmp){ var rval=MochiKit.Iter.list(_1d0); if(arguments.length==1){ cmp=MochiKit.Base.compare; } rval.sort(cmp); return rval; },reversed:function(_1d3){ var rval=MochiKit.Iter.list(_1d3); rval.reverse(); return rval; },some:function(_1d5,func){ var self=MochiKit.Iter; try{ self.ifilter(func,_1d5).next(); return true; } catch(e){ if(e!=self.StopIteration){ throw e; } return false; } },iextend:function(lst,_1d9){ var m=MochiKit.Base; var self=MochiKit.Iter; if(m.isArrayLike(_1d9)&&!self.isIterable(_1d9)){ for(var i=0;i<_1d9.length;i++){ lst.push(_1d9[i]); } }else{ _1d9=self.iter(_1d9); try{ while(true){ lst.push(_1d9.next()); } } catch(e){ if(e!=self.StopIteration){ throw e; } } } return lst; },groupby:function(_1dd,_1de){ var m=MochiKit.Base; var self=MochiKit.Iter; if(arguments.length<2){ _1de=m.operator.identity; } _1dd=self.iter(_1dd); var pk=undefined; var k=undefined; var v; function fetch(){ v=_1dd.next(); k=_1de(v); } function eat(){ var ret=v; v=undefined; return ret; } var _1e5=true; var _1e6=m.compare; return {repr:function(){ return "groupby(...)"; },next:function(){ while(_1e6(k,pk)===0){ fetch(); if(_1e5){ _1e5=false; break; } } pk=k; return [k,{next:function(){ if(v==undefined){ fetch(); } if(_1e6(k,pk)!==0){ throw self.StopIteration; } return eat(); }}]; }}; },groupby_as_array:function(_1e7,_1e8){ var m=MochiKit.Base; var self=MochiKit.Iter; if(arguments.length<2){ _1e8=m.operator.identity; } _1e7=self.iter(_1e7); var _1eb=[]; var _1ec=true; var _1ed; var _1ee=m.compare; while(true){ try{ var _1ef=_1e7.next(); var key=_1e8(_1ef); } catch(e){ if(e==self.StopIteration){ break; } throw e; } if(_1ec||_1ee(key,_1ed)!==0){ var _1f1=[]; _1eb.push([key,_1f1]); } _1f1.push(_1ef); _1ec=false; _1ed=key; } return _1eb; },arrayLikeIter:function(_1f2){ var i=0; return {repr:function(){ return "arrayLikeIter(...)"; },toString:MochiKit.Base.forwardCall("repr"),next:function(){ if(i>=_1f2.length){ throw MochiKit.Iter.StopIteration; } return _1f2[i++]; }}; },hasIterateNext:function(_1f4){ return (_1f4&&typeof (_1f4.iterateNext)=="function"); },iterateNextIter:function(_1f5){ return {repr:function(){ return "iterateNextIter(...)"; },toString:MochiKit.Base.forwardCall("repr"),next:function(){ var rval=_1f5.iterateNext(); if(rval===null||rval===undefined){ throw MochiKit.Iter.StopIteration; } return rval; }}; }}); MochiKit.Iter.EXPORT_OK=["iteratorRegistry","arrayLikeIter","hasIterateNext","iterateNextIter"]; MochiKit.Iter.EXPORT=["StopIteration","registerIteratorFactory","iter","count","cycle","repeat","next","izip","ifilter","ifilterfalse","islice","imap","applymap","chain","takewhile","dropwhile","tee","list","reduce","range","sum","exhaust","forEach","every","sorted","reversed","some","iextend","groupby","groupby_as_array"]; MochiKit.Iter.__new__=function(){ var m=MochiKit.Base; if(typeof (StopIteration)!="undefined"){ this.StopIteration=StopIteration; }else{ this.StopIteration=new m.NamedError("StopIteration"); } this.iteratorRegistry=new m.AdapterRegistry(); this.registerIteratorFactory("arrayLike",m.isArrayLike,this.arrayLikeIter); this.registerIteratorFactory("iterateNext",this.hasIterateNext,this.iterateNextIter); this.EXPORT_TAGS={":common":this.EXPORT,":all":m.concat(this.EXPORT,this.EXPORT_OK)}; m.nameFunctions(this); }; MochiKit.Iter.__new__(); if(MochiKit.__export__){ reduce=MochiKit.Iter.reduce; } MochiKit.Base._exportSymbols(this,MochiKit.Iter); MochiKit.Base._deps("Logging",["Base"]); MochiKit.Logging.NAME="MochiKit.Logging"; MochiKit.Logging.VERSION="1.4.2"; MochiKit.Logging.__repr__=function(){ return "["+this.NAME+" "+this.VERSION+"]"; }; MochiKit.Logging.toString=function(){ return this.__repr__(); }; MochiKit.Logging.EXPORT=["LogLevel","LogMessage","Logger","alertListener","logger","log","logError","logDebug","logFatal","logWarning"]; MochiKit.Logging.EXPORT_OK=["logLevelAtLeast","isLogMessage","compareLogMessage"]; MochiKit.Logging.LogMessage=function(num,_1f9,info){ this.num=num; this.level=_1f9; this.info=info; this.timestamp=new Date(); }; MochiKit.Logging.LogMessage.prototype={repr:function(){ var m=MochiKit.Base; return "LogMessage("+m.map(m.repr,[this.num,this.level,this.info]).join(", ")+")"; },toString:MochiKit.Base.forwardCall("repr")}; MochiKit.Base.update(MochiKit.Logging,{logLevelAtLeast:function(_1fc){ var self=MochiKit.Logging; if(typeof (_1fc)=="string"){ _1fc=self.LogLevel[_1fc]; } return function(msg){ var _1ff=msg.level; if(typeof (_1ff)=="string"){ _1ff=self.LogLevel[_1ff]; } return _1ff>=_1fc; }; },isLogMessage:function(){ var _200=MochiKit.Logging.LogMessage; for(var i=0;i=MochiKit.Logging.LogLevel.FATAL){ _20f="FATAL"; }else{ if(_20f>=MochiKit.Logging.LogLevel.ERROR){ _20f="ERROR"; }else{ if(_20f>=MochiKit.Logging.LogLevel.WARNING){ _20f="WARNING"; }else{ if(_20f>=MochiKit.Logging.LogLevel.INFO){ _20f="INFO"; }else{ _20f="DEBUG"; } } } } } var msg=new MochiKit.Logging.LogMessage(this.counter,_20f,MochiKit.Base.extend(null,arguments,1)); this._messages.push(msg); this.dispatchListeners(msg); if(this.useNativeConsole){ this.logToConsole(msg.level+": "+msg.info.join(" ")); } this.counter+=1; while(this.maxSize>=0&&this._messages.length>this.maxSize){ this._messages.shift(); } },getMessages:function(_212){ var _213=0; if(!(typeof (_212)=="undefined"||_212===null)){ _213=Math.max(0,this._messages.length-_212); } return this._messages.slice(_213); },getMessageText:function(_214){ if(typeof (_214)=="undefined"||_214===null){ _214=30; } var _215=this.getMessages(_214); if(_215.length){ var lst=map(function(m){ return "\n ["+m.num+"] "+m.level+": "+m.info.join(" "); },_215); lst.unshift("LAST "+_215.length+" MESSAGES:"); return lst.join(""); } return ""; },debuggingBookmarklet:function(_218){ if(typeof (MochiKit.LoggingPane)=="undefined"){ alert(this.getMessageText()); }else{ MochiKit.LoggingPane.createLoggingPane(_218||false); } }}; MochiKit.Logging.__new__=function(){ this.LogLevel={ERROR:40,FATAL:50,WARNING:30,INFO:20,DEBUG:10}; var m=MochiKit.Base; m.registerComparator("LogMessage",this.isLogMessage,this.compareLogMessage); var _21a=m.partial; var _21b=this.Logger; var _21c=_21b.prototype.baseLog; m.update(this.Logger.prototype,{debug:_21a(_21c,"DEBUG"),log:_21a(_21c,"INFO"),error:_21a(_21c,"ERROR"),fatal:_21a(_21c,"FATAL"),warning:_21a(_21c,"WARNING")}); var self=this; var _21e=function(name){ return function(){ self.logger[name].apply(self.logger,arguments); }; }; this.log=_21e("log"); this.logError=_21e("error"); this.logDebug=_21e("debug"); this.logFatal=_21e("fatal"); this.logWarning=_21e("warning"); this.logger=new _21b(); this.logger.useNativeConsole=true; this.EXPORT_TAGS={":common":this.EXPORT,":all":m.concat(this.EXPORT,this.EXPORT_OK)}; m.nameFunctions(this); }; if(typeof (printfire)=="undefined"&&typeof (document)!="undefined"&&document.createEvent&&typeof (dispatchEvent)!="undefined"){ printfire=function(){ printfire.args=arguments; var ev=document.createEvent("Events"); ev.initEvent("printfire",false,true); dispatchEvent(ev); }; } MochiKit.Logging.__new__(); MochiKit.Base._exportSymbols(this,MochiKit.Logging); MochiKit.Base._deps("DateTime",["Base"]); MochiKit.DateTime.NAME="MochiKit.DateTime"; MochiKit.DateTime.VERSION="1.4.2"; MochiKit.DateTime.__repr__=function(){ return "["+this.NAME+" "+this.VERSION+"]"; }; MochiKit.DateTime.toString=function(){ return this.__repr__(); }; MochiKit.DateTime.isoDate=function(str){ str=str+""; if(typeof (str)!="string"||str.length===0){ return null; } var iso=str.split("-"); if(iso.length===0){ return null; } var date=new Date(iso[0],iso[1]-1,iso[2]); date.setFullYear(iso[0]); date.setMonth(iso[1]-1); date.setDate(iso[2]); return date; }; MochiKit.DateTime._isoRegexp=/(\d{4,})(?:-(\d{1,2})(?:-(\d{1,2})(?:[T ](\d{1,2}):(\d{1,2})(?::(\d{1,2})(?:\.(\d+))?)?(?:(Z)|([+-])(\d{1,2})(?::(\d{1,2}))?)?)?)?)?/; MochiKit.DateTime.isoTimestamp=function(str){ str=str+""; if(typeof (str)!="string"||str.length===0){ return null; } var res=str.match(MochiKit.DateTime._isoRegexp); if(typeof (res)=="undefined"||res===null){ return null; } var year,_227,day,hour,min,sec,msec; year=parseInt(res[1],10); if(typeof (res[2])=="undefined"||res[2]===""){ return new Date(year); } _227=parseInt(res[2],10)-1; day=parseInt(res[3],10); if(typeof (res[4])=="undefined"||res[4]===""){ return new Date(year,_227,day); } hour=parseInt(res[4],10); min=parseInt(res[5],10); sec=(typeof (res[6])!="undefined"&&res[6]!=="")?parseInt(res[6],10):0; if(typeof (res[7])!="undefined"&&res[7]!==""){ msec=Math.round(1000*parseFloat("0."+res[7])); }else{ msec=0; } if((typeof (res[8])=="undefined"||res[8]==="")&&(typeof (res[9])=="undefined"||res[9]==="")){ return new Date(year,_227,day,hour,min,sec,msec); } var ofs; if(typeof (res[9])!="undefined"&&res[9]!==""){ ofs=parseInt(res[10],10)*3600000; if(typeof (res[11])!="undefined"&&res[11]!==""){ ofs+=parseInt(res[11],10)*60000; } if(res[9]=="-"){ ofs=-ofs; } }else{ ofs=0; } return new Date(Date.UTC(year,_227,day,hour,min,sec,msec)-ofs); }; MochiKit.DateTime.toISOTime=function(date,_22f){ if(typeof (date)=="undefined"||date===null){ return null; } var hh=date.getHours(); var mm=date.getMinutes(); var ss=date.getSeconds(); var lst=[((_22f&&(hh<10))?"0"+hh:hh),((mm<10)?"0"+mm:mm),((ss<10)?"0"+ss:ss)]; return lst.join(":"); }; MochiKit.DateTime.toISOTimestamp=function(date,_235){ if(typeof (date)=="undefined"||date===null){ return null; } var sep=_235?"T":" "; var foot=_235?"Z":""; if(_235){ date=new Date(date.getTime()+(date.getTimezoneOffset()*60000)); } return MochiKit.DateTime.toISODate(date)+sep+MochiKit.DateTime.toISOTime(date,_235)+foot; }; MochiKit.DateTime.toISODate=function(date){ if(typeof (date)=="undefined"||date===null){ return null; } var _239=MochiKit.DateTime._padTwo; var _23a=MochiKit.DateTime._padFour; return [_23a(date.getFullYear()),_239(date.getMonth()+1),_239(date.getDate())].join("-"); }; MochiKit.DateTime.americanDate=function(d){ d=d+""; if(typeof (d)!="string"||d.length===0){ return null; } var a=d.split("/"); return new Date(a[2],a[0]-1,a[1]); }; MochiKit.DateTime._padTwo=function(n){ return (n>9)?n:"0"+n; }; MochiKit.DateTime._padFour=function(n){ switch(n.toString().length){ case 1: return "000"+n; break; case 2: return "00"+n; break; case 3: return "0"+n; break; case 4: default: return n; } }; MochiKit.DateTime.toPaddedAmericanDate=function(d){ if(typeof (d)=="undefined"||d===null){ return null; } var _240=MochiKit.DateTime._padTwo; return [_240(d.getMonth()+1),_240(d.getDate()),d.getFullYear()].join("/"); }; MochiKit.DateTime.toAmericanDate=function(d){ if(typeof (d)=="undefined"||d===null){ return null; } return [d.getMonth()+1,d.getDate(),d.getFullYear()].join("/"); }; MochiKit.DateTime.EXPORT=["isoDate","isoTimestamp","toISOTime","toISOTimestamp","toISODate","americanDate","toPaddedAmericanDate","toAmericanDate"]; MochiKit.DateTime.EXPORT_OK=[]; MochiKit.DateTime.EXPORT_TAGS={":common":MochiKit.DateTime.EXPORT,":all":MochiKit.DateTime.EXPORT}; MochiKit.DateTime.__new__=function(){ var base=this.NAME+"."; for(var k in this){ var o=this[k]; if(typeof (o)=="function"&&typeof (o.NAME)=="undefined"){ try{ o.NAME=base+k; } catch(e){ } } } }; MochiKit.DateTime.__new__(); if(typeof (MochiKit.Base)!="undefined"){ MochiKit.Base._exportSymbols(this,MochiKit.DateTime); }else{ (function(_245,_246){ if((typeof (JSAN)=="undefined"&&typeof (dojo)=="undefined")||(MochiKit.__export__===false)){ var all=_246.EXPORT_TAGS[":all"]; for(var i=0;i_250){ var i=_258.length-_250; res=fmt.separator+_258.substring(i,_258.length)+res; _258=_258.substring(0,i); } } res=_258+res; if(_24e>0){ while(frac.length<_251){ frac=frac+"0"; } res=res+fmt.decimal+frac; } return _253+res+_254; }; }; MochiKit.Format.numberFormatter=function(_25c,_25d,_25e){ if(typeof (_25d)=="undefined"){ _25d=""; } var _25f=_25c.match(/((?:[0#]+,)?[0#]+)(?:\.([0#]+))?(%)?/); if(!_25f){ throw TypeError("Invalid pattern"); } var _260=_25c.substr(0,_25f.index); var _261=_25c.substr(_25f.index+_25f[0].length); if(_260.search(/-/)==-1){ _260=_260+"-"; } var _262=_25f[1]; var frac=(typeof (_25f[2])=="string"&&_25f[2]!="")?_25f[2]:""; var _264=(typeof (_25f[3])=="string"&&_25f[3]!=""); var tmp=_262.split(/,/); var _266; if(typeof (_25e)=="undefined"){ _25e="default"; } if(tmp.length==1){ _266=null; }else{ _266=tmp[1].length; } var _267=_262.length-_262.replace(/0/g,"").length; var _268=frac.length-frac.replace(/0/g,"").length; var _269=frac.length; var rval=MochiKit.Format._numberFormatter(_25d,_260,_261,_25e,_264,_269,_267,_266,_268); var m=MochiKit.Base; if(m){ var fn=arguments.callee; var args=m.concat(arguments); rval.repr=function(){ return [self.NAME,"(",map(m.repr,args).join(", "),")"].join(""); }; } return rval; }; MochiKit.Format.formatLocale=function(_26e){ if(typeof (_26e)=="undefined"||_26e===null){ _26e="default"; } if(typeof (_26e)=="string"){ var rval=MochiKit.Format.LOCALE[_26e]; if(typeof (rval)=="string"){ rval=arguments.callee(rval); MochiKit.Format.LOCALE[_26e]=rval; } return rval; }else{ return _26e; } }; MochiKit.Format.twoDigitAverage=function(_270,_271){ if(_271){ var res=_270/_271; if(!isNaN(res)){ return MochiKit.Format.twoDigitFloat(res); } } return "0"; }; MochiKit.Format.twoDigitFloat=function(_273){ var res=roundToFixed(_273,2); if(res.indexOf(".00")>0){ return res.substring(0,res.length-3); }else{ if(res.charAt(res.length-1)=="0"){ return res.substring(0,res.length-1); }else{ return res; } } }; MochiKit.Format.lstrip=function(str,_276){ str=str+""; if(typeof (str)!="string"){ return null; } if(!_276){ return str.replace(/^\s+/,""); }else{ return str.replace(new RegExp("^["+_276+"]+"),""); } }; MochiKit.Format.rstrip=function(str,_278){ str=str+""; if(typeof (str)!="string"){ return null; } if(!_278){ return str.replace(/\s+$/,""); }else{ return str.replace(new RegExp("["+_278+"]+$"),""); } }; MochiKit.Format.strip=function(str,_27a){ var self=MochiKit.Format; return self.rstrip(self.lstrip(str,_27a),_27a); }; MochiKit.Format.truncToFixed=function(_27c,_27d){ var res=Math.floor(_27c).toFixed(0); if(_27c<0){ res=Math.ceil(_27c).toFixed(0); if(res.charAt(0)!="-"&&_27d>0){ res="-"+res; } } if(res.indexOf("e")<0&&_27d>0){ var tail=_27c.toString(); if(tail.indexOf("e")>0){ tail="."; }else{ if(tail.indexOf(".")<0){ tail="."; }else{ tail=tail.substring(tail.indexOf(".")); } } if(tail.length-1>_27d){ tail=tail.substring(0,_27d+1); } while(tail.length-1<_27d){ tail+="0"; } res+=tail; } return res; }; MochiKit.Format.roundToFixed=function(_280,_281){ var _282=Math.abs(_280)+0.5*Math.pow(10,-_281); var res=MochiKit.Format.truncToFixed(_282,_281); if(_280<0){ res="-"+res; } return res; }; MochiKit.Format.percentFormat=function(_284){ return MochiKit.Format.twoDigitFloat(100*_284)+"%"; }; MochiKit.Format.EXPORT=["truncToFixed","roundToFixed","numberFormatter","formatLocale","twoDigitAverage","twoDigitFloat","percentFormat","lstrip","rstrip","strip"]; MochiKit.Format.LOCALE={en_US:{separator:",",decimal:".",percent:"%"},de_DE:{separator:".",decimal:",",percent:"%"},pt_BR:{separator:".",decimal:",",percent:"%"},fr_FR:{separator:" ",decimal:",",percent:"%"},"default":"en_US"}; MochiKit.Format.EXPORT_OK=[]; MochiKit.Format.EXPORT_TAGS={":all":MochiKit.Format.EXPORT,":common":MochiKit.Format.EXPORT}; MochiKit.Format.__new__=function(){ var base=this.NAME+"."; var k,v,o; for(k in this.LOCALE){ o=this.LOCALE[k]; if(typeof (o)=="object"){ o.repr=function(){ return this.NAME; }; o.NAME=base+"LOCALE."+k; } } for(k in this){ o=this[k]; if(typeof (o)=="function"&&typeof (o.NAME)=="undefined"){ try{ o.NAME=base+k; } catch(e){ } } } }; MochiKit.Format.__new__(); if(typeof (MochiKit.Base)!="undefined"){ MochiKit.Base._exportSymbols(this,MochiKit.Format); }else{ (function(_289,_28a){ if((typeof (JSAN)=="undefined"&&typeof (dojo)=="undefined")||(MochiKit.__export__===false)){ var all=_28a.EXPORT_TAGS[":all"]; for(var i=0;i1){ fn=MochiKit.Base.partial.apply(null,arguments); } return this.addCallbacks(fn,fn); },addCallback:function(fn){ if(arguments.length>1){ fn=MochiKit.Base.partial.apply(null,arguments); } return this.addCallbacks(fn,null); },addErrback:function(fn){ if(arguments.length>1){ fn=MochiKit.Base.partial.apply(null,arguments); } return this.addCallbacks(null,fn); },addCallbacks:function(cb,eb){ if(this.chained){ throw new Error("Chained Deferreds can not be re-used"); } this.chain.push([cb,eb]); if(this.fired>=0){ this._fire(); } return this; },_fire:function(){ var _299=this.chain; var _29a=this.fired; var res=this.results[_29a]; var self=this; var cb=null; while(_299.length>0&&this.paused===0){ var pair=_299.shift(); var f=pair[_29a]; if(f===null){ continue; } try{ res=f(res); _29a=((res instanceof Error)?1:0); if(res instanceof MochiKit.Async.Deferred){ cb=function(res){ self._resback(res); self.paused--; if((self.paused===0)&&(self.fired>=0)){ self._fire(); } }; this.paused++; } } catch(err){ _29a=1; if(!(err instanceof Error)){ err=new MochiKit.Async.GenericError(err); } res=err; } } this.fired=_29a; this.results[_29a]=res; if(cb&&this.paused){ res.addBoth(cb); res.chained=true; } }}; MochiKit.Base.update(MochiKit.Async,{evalJSONRequest:function(req){ return MochiKit.Base.evalJSON(req.responseText); },succeed:function(_2a2){ var d=new MochiKit.Async.Deferred(); d.callback.apply(d,arguments); return d; },fail:function(_2a4){ var d=new MochiKit.Async.Deferred(); d.errback.apply(d,arguments); return d; },getXMLHttpRequest:function(){ var self=arguments.callee; if(!self.XMLHttpRequest){ var _2a7=[function(){ return new XMLHttpRequest(); },function(){ return new ActiveXObject("Msxml2.XMLHTTP"); },function(){ return new ActiveXObject("Microsoft.XMLHTTP"); },function(){ return new ActiveXObject("Msxml2.XMLHTTP.4.0"); },function(){ throw new MochiKit.Async.BrowserComplianceError("Browser does not support XMLHttpRequest"); }]; for(var i=0;i<_2a7.length;i++){ var func=_2a7[i]; try{ self.XMLHttpRequest=func; return func(); } catch(e){ } } } return self.XMLHttpRequest(); },_xhr_onreadystatechange:function(d){ var m=MochiKit.Base; if(this.readyState==4){ try{ this.onreadystatechange=null; } catch(e){ try{ this.onreadystatechange=m.noop; } catch(e){ } } var _2ac=null; try{ _2ac=this.status; if(!_2ac&&m.isNotEmpty(this.responseText)){ _2ac=304; } } catch(e){ } if(_2ac==200||_2ac==201||_2ac==204||_2ac==304||_2ac==1223){ d.callback(this); }else{ var err=new MochiKit.Async.XMLHttpRequestError(this,"Request failed"); if(err.number){ d.errback(err); }else{ d.errback(err); } } } },_xhr_canceller:function(req){ try{ req.onreadystatechange=null; } catch(e){ try{ req.onreadystatechange=MochiKit.Base.noop; } catch(e){ } } req.abort(); },sendXMLHttpRequest:function(req,_2b0){ if(typeof (_2b0)=="undefined"||_2b0===null){ _2b0=""; } var m=MochiKit.Base; var self=MochiKit.Async; var d=new self.Deferred(m.partial(self._xhr_canceller,req)); try{ req.onreadystatechange=m.bind(self._xhr_onreadystatechange,req,d); req.send(_2b0); } catch(e){ try{ req.onreadystatechange=null; } catch(ignore){ } d.errback(e); } return d; },doXHR:function(url,opts){ var self=MochiKit.Async; return self.callLater(0,self._doXHR,url,opts); },_doXHR:function(url,opts){ var m=MochiKit.Base; opts=m.update({method:"GET",sendContent:""},opts); var self=MochiKit.Async; var req=self.getXMLHttpRequest(); if(opts.queryString){ var qs=m.queryString(opts.queryString); if(qs){ url+="?"+qs; } } if("username" in opts){ req.open(opts.method,url,true,opts.username,opts.password); }else{ req.open(opts.method,url,true); } if(req.overrideMimeType&&opts.mimeType){ req.overrideMimeType(opts.mimeType); } req.setRequestHeader("X-Requested-With","XMLHttpRequest"); if(opts.headers){ var _2bd=opts.headers; if(!m.isArrayLike(_2bd)){ _2bd=m.items(_2bd); } for(var i=0;i<_2bd.length;i++){ var _2bf=_2bd[i]; var name=_2bf[0]; var _2c1=_2bf[1]; req.setRequestHeader(name,_2c1); } } return self.sendXMLHttpRequest(req,opts.sendContent); },_buildURL:function(url){ if(arguments.length>1){ var m=MochiKit.Base; var qs=m.queryString.apply(null,m.extend(null,arguments,1)); if(qs){ return url+"?"+qs; } } return url; },doSimpleXMLHttpRequest:function(url){ var self=MochiKit.Async; url=self._buildURL.apply(self,arguments); return self.doXHR(url); },loadJSONDoc:function(url){ var self=MochiKit.Async; url=self._buildURL.apply(self,arguments); var d=self.doXHR(url,{"mimeType":"text/plain","headers":[["Accept","application/json"]]}); d=d.addCallback(self.evalJSONRequest); return d; },wait:function(_2ca,_2cb){ var d=new MochiKit.Async.Deferred(); var m=MochiKit.Base; if(typeof (_2cb)!="undefined"){ d.addCallback(function(){ return _2cb; }); } var _2ce=setTimeout(m.bind("callback",d),Math.floor(_2ca*1000)); d.canceller=function(){ try{ clearTimeout(_2ce); } catch(e){ } }; return d; },callLater:function(_2cf,func){ var m=MochiKit.Base; var _2d2=m.partial.apply(m,m.extend(null,arguments,1)); return MochiKit.Async.wait(_2cf).addCallback(function(res){ return _2d2(); }); }}); MochiKit.Async.DeferredLock=function(){ this.waiting=[]; this.locked=false; this.id=this._nextId(); }; MochiKit.Async.DeferredLock.prototype={__class__:MochiKit.Async.DeferredLock,acquire:function(){ var d=new MochiKit.Async.Deferred(); if(this.locked){ this.waiting.push(d); }else{ this.locked=true; d.callback(this); } return d; },release:function(){ if(!this.locked){ throw TypeError("Tried to release an unlocked DeferredLock"); } this.locked=false; if(this.waiting.length>0){ this.locked=true; this.waiting.shift().callback(this); } },_nextId:MochiKit.Base.counter(),repr:function(){ var _2d5; if(this.locked){ _2d5="locked, "+this.waiting.length+" waiting"; }else{ _2d5="unlocked"; } return "DeferredLock("+this.id+", "+_2d5+")"; },toString:MochiKit.Base.forwardCall("repr")}; MochiKit.Async.DeferredList=function(list,_2d7,_2d8,_2d9,_2da){ MochiKit.Async.Deferred.apply(this,[_2da]); this.list=list; var _2db=[]; this.resultList=_2db; this.finishedCount=0; this.fireOnOneCallback=_2d7; this.fireOnOneErrback=_2d8; this.consumeErrors=_2d9; var cb=MochiKit.Base.bind(this._cbDeferred,this); for(var i=0;i=0){ var opt=elem.options[elem.selectedIndex]; var v=opt.value; if(!v){ var h=opt.outerHTML; if(h&&!h.match(/^[^>]+\svalue\s*=/i)){ v=opt.text; } } _2fa.push(name); _2fb.push(v); return null; } _2fa.push(name); _2fb.push(""); return null; }else{ var opts=elem.options; if(!opts.length){ _2fa.push(name); _2fb.push(""); return null; } for(var i=0;i]+\svalue\s*=/i)){ v=opt.text; } } _2fa.push(name); _2fb.push(v); } return null; } } if(_300==="FORM"||_300==="P"||_300==="SPAN"||_300==="DIV"){ return elem.childNodes; } _2fa.push(name); _2fb.push(elem.value||""); return null; } return elem.childNodes; }); return [_2fa,_2fb]; },withDocument:function(doc,func){ var self=MochiKit.DOM; var _309=self._document; var rval; try{ self._document=doc; rval=func(); } catch(e){ self._document=_309; throw e; } self._document=_309; return rval; },registerDOMConverter:function(name,_30c,wrap,_30e){ MochiKit.DOM.domConverters.register(name,_30c,wrap,_30e); },coerceToDOM:function(node,ctx){ var m=MochiKit.Base; var im=MochiKit.Iter; var self=MochiKit.DOM; if(im){ var iter=im.iter; var _315=im.repeat; } var map=m.map; var _317=self.domConverters; var _318=arguments.callee; var _319=m.NotFound; while(true){ if(typeof (node)=="undefined"||node===null){ return null; } if(typeof (node)=="function"&&typeof (node.length)=="number"&&!(node instanceof Function)){ node=im?im.list(node):m.extend(null,node); } if(typeof (node.nodeType)!="undefined"&&node.nodeType>0){ return node; } if(typeof (node)=="number"||typeof (node)=="boolean"){ node=node.toString(); } if(typeof (node)=="string"){ return self._document.createTextNode(node); } if(typeof (node.__dom__)=="function"){ node=node.__dom__(ctx); continue; } if(typeof (node.dom)=="function"){ node=node.dom(ctx); continue; } if(typeof (node)=="function"){ node=node.apply(ctx,[ctx]); continue; } if(im){ var _31a=null; try{ _31a=iter(node); } catch(e){ } if(_31a){ return map(_318,_31a,_315(ctx)); } }else{ if(m.isArrayLike(node)){ var func=function(n){ return _318(n,ctx); }; return map(func,node); } } try{ node=_317.match(node,ctx); continue; } catch(e){ if(e!=_319){ throw e; } } return self._document.createTextNode(node.toString()); } return undefined; },isChildNode:function(node,_31e){ var self=MochiKit.DOM; if(typeof (node)=="string"){ node=self.getElement(node); } if(typeof (_31e)=="string"){ _31e=self.getElement(_31e); } if(typeof (node)=="undefined"||node===null){ return false; } while(node!=null&&node!==self._document){ if(node===_31e){ return true; } node=node.parentNode; } return false; },setNodeAttribute:function(node,attr,_322){ var o={}; o[attr]=_322; try{ return MochiKit.DOM.updateNodeAttributes(node,o); } catch(e){ } return null; },getNodeAttribute:function(node,attr){ var self=MochiKit.DOM; var _327=self.attributeArray.renames[attr]; var _328=self.attributeArray.ignoreAttr[attr]; node=self.getElement(node); try{ if(_327){ return node[_327]; } var _329=node.getAttribute(attr); if(_329!=_328){ return _329; } } catch(e){ } return null; },removeNodeAttribute:function(node,attr){ var self=MochiKit.DOM; var _32d=self.attributeArray.renames[attr]; node=self.getElement(node); try{ if(_32d){ return node[_32d]; } return node.removeAttribute(attr); } catch(e){ } return null; },updateNodeAttributes:function(node,_32f){ var elem=node; var self=MochiKit.DOM; if(typeof (node)=="string"){ elem=self.getElement(node); } if(_32f){ var _332=MochiKit.Base.updatetree; if(self.attributeArray.compliant){ for(var k in _32f){ var v=_32f[k]; if(typeof (v)=="object"&&typeof (elem[k])=="object"){ if(k=="style"&&MochiKit.Style){ MochiKit.Style.setStyle(elem,v); }else{ _332(elem[k],v); } }else{ if(k.substring(0,2)=="on"){ if(typeof (v)=="string"){ v=new Function(v); } elem[k]=v; }else{ elem.setAttribute(k,v); } } if(typeof (elem[k])=="string"&&elem[k]!=v){ elem[k]=v; } } }else{ var _335=self.attributeArray.renames; for(var k in _32f){ v=_32f[k]; var _336=_335[k]; if(k=="style"&&typeof (v)=="string"){ elem.style.cssText=v; }else{ if(typeof (_336)=="string"){ elem[_336]=v; }else{ if(typeof (elem[k])=="object"&&typeof (v)=="object"){ if(k=="style"&&MochiKit.Style){ MochiKit.Style.setStyle(elem,v); }else{ _332(elem[k],v); } }else{ if(k.substring(0,2)=="on"){ if(typeof (v)=="string"){ v=new Function(v); } elem[k]=v; }else{ elem.setAttribute(k,v); } } } } if(typeof (elem[k])=="string"&&elem[k]!=v){ elem[k]=v; } } } } return elem; },appendChildNodes:function(node){ var elem=node; var self=MochiKit.DOM; if(typeof (node)=="string"){ elem=self.getElement(node); } var _33a=[self.coerceToDOM(MochiKit.Base.extend(null,arguments,1),elem)]; var _33b=MochiKit.Base.concat; while(_33a.length){ var n=_33a.shift(); if(typeof (n)=="undefined"||n===null){ }else{ if(typeof (n.nodeType)=="number"){ elem.appendChild(n); }else{ _33a=_33b(n,_33a); } } } return elem; },insertSiblingNodesBefore:function(node){ var elem=node; var self=MochiKit.DOM; if(typeof (node)=="string"){ elem=self.getElement(node); } var _340=[self.coerceToDOM(MochiKit.Base.extend(null,arguments,1),elem)]; var _341=elem.parentNode; var _342=MochiKit.Base.concat; while(_340.length){ var n=_340.shift(); if(typeof (n)=="undefined"||n===null){ }else{ if(typeof (n.nodeType)=="number"){ _341.insertBefore(n,elem); }else{ _340=_342(n,_340); } } } return _341; },insertSiblingNodesAfter:function(node){ var elem=node; var self=MochiKit.DOM; if(typeof (node)=="string"){ elem=self.getElement(node); } var _347=[self.coerceToDOM(MochiKit.Base.extend(null,arguments,1),elem)]; if(elem.nextSibling){ return self.insertSiblingNodesBefore(elem.nextSibling,_347); }else{ return self.appendChildNodes(elem.parentNode,_347); } },replaceChildNodes:function(node){ var elem=node; var self=MochiKit.DOM; if(typeof (node)=="string"){ elem=self.getElement(node); arguments[0]=elem; } var _34b; while((_34b=elem.firstChild)){ elem.removeChild(_34b); } if(arguments.length<2){ return elem; }else{ return self.appendChildNodes.apply(this,arguments); } },createDOM:function(name,_34d){ var elem; var self=MochiKit.DOM; var m=MochiKit.Base; if(typeof (_34d)=="string"||typeof (_34d)=="number"){ var args=m.extend([name,null],arguments,1); return arguments.callee.apply(this,args); } if(typeof (name)=="string"){ var _352=self._xhtml; if(_34d&&!self.attributeArray.compliant){ var _353=""; if("name" in _34d){ _353+=" name=\""+self.escapeHTML(_34d.name)+"\""; } if(name=="input"&&"type" in _34d){ _353+=" type=\""+self.escapeHTML(_34d.type)+"\""; } if(_353){ name="<"+name+_353+">"; _352=false; } } var d=self._document; if(_352&&d===document){ elem=d.createElementNS("http://www.w3.org/1999/xhtml",name); }else{ elem=d.createElement(name); } }else{ elem=name; } if(_34d){ self.updateNodeAttributes(elem,_34d); } if(arguments.length<=2){ return elem; }else{ var args=m.extend([elem],arguments,2); return self.appendChildNodes.apply(this,args); } },createDOMFunc:function(){ var m=MochiKit.Base; return m.partial.apply(this,m.extend([MochiKit.DOM.createDOM],arguments)); },removeElement:function(elem){ var self=MochiKit.DOM; var e=self.coerceToDOM(self.getElement(elem)); e.parentNode.removeChild(e); return e; },swapDOM:function(dest,src){ var self=MochiKit.DOM; dest=self.getElement(dest); var _35c=dest.parentNode; if(src){ src=self.coerceToDOM(self.getElement(src),_35c); _35c.replaceChild(src,dest); }else{ _35c.removeChild(dest); } return src; },getElement:function(id){ var self=MochiKit.DOM; if(arguments.length==1){ return ((typeof (id)=="string")?self._document.getElementById(id):id); }else{ return MochiKit.Base.map(self.getElement,arguments); } },getElementsByTagAndClassName:function(_35f,_360,_361){ var self=MochiKit.DOM; if(typeof (_35f)=="undefined"||_35f===null){ _35f="*"; } if(typeof (_361)=="undefined"||_361===null){ _361=self._document; } _361=self.getElement(_361); if(_361==null){ return []; } var _363=(_361.getElementsByTagName(_35f)||self._document.all); if(typeof (_360)=="undefined"||_360===null){ return MochiKit.Base.extend(null,_363); } var _364=[]; for(var i=0;i<_363.length;i++){ var _366=_363[i]; var cls=_366.className; if(typeof (cls)!="string"){ cls=_366.getAttribute("class"); } if(typeof (cls)=="string"){ var _368=cls.split(" "); for(var j=0;j<_368.length;j++){ if(_368[j]==_360){ _364.push(_366); break; } } } } return _364; },_newCallStack:function(path,once){ var rval=function(){ var _36d=arguments.callee.callStack; for(var i=0;i<_36d.length;i++){ if(_36d[i].apply(this,arguments)===false){ break; } } if(once){ try{ this[path]=null; } catch(e){ } } }; rval.callStack=[]; return rval; },addToCallStack:function(_36f,path,func,once){ var self=MochiKit.DOM; var _374=_36f[path]; var _375=_374; if(!(typeof (_374)=="function"&&typeof (_374.callStack)=="object"&&_374.callStack!==null)){ _375=self._newCallStack(path,once); if(typeof (_374)=="function"){ _375.callStack.push(_374); } _36f[path]=_375; } _375.callStack.push(func); },addLoadEvent:function(func){ var self=MochiKit.DOM; self.addToCallStack(self._window,"onload",func,true); },focusOnLoad:function(_378){ var self=MochiKit.DOM; self.addLoadEvent(function(){ _378=self.getElement(_378); if(_378){ _378.focus(); } }); },setElementClass:function(_37a,_37b){ var self=MochiKit.DOM; var obj=self.getElement(_37a); if(self.attributeArray.compliant){ obj.setAttribute("class",_37b); }else{ obj.setAttribute("className",_37b); } },toggleElementClass:function(_37e){ var self=MochiKit.DOM; for(var i=1;i/g,">"); },toHTML:function(dom){ return MochiKit.DOM.emitHTML(dom).join(""); },emitHTML:function(dom,lst){ if(typeof (lst)=="undefined"||lst===null){ lst=[]; } var _3a1=[dom]; var self=MochiKit.DOM; var _3a3=self.escapeHTML; var _3a4=self.attributeArray; while(_3a1.length){ dom=_3a1.pop(); if(typeof (dom)=="string"){ lst.push(dom); }else{ if(dom.nodeType==1){ lst.push("<"+dom.tagName.toLowerCase()); var _3a5=[]; var _3a6=_3a4(dom); for(var i=0;i<_3a6.length;i++){ var a=_3a6[i]; _3a5.push([" ",a.name,"=\"",_3a3(a.value),"\""]); } _3a5.sort(); for(i=0;i<_3a5.length;i++){ var _3a9=_3a5[i]; for(var j=0;j<_3a9.length;j++){ lst.push(_3a9[j]); } } if(dom.hasChildNodes()){ lst.push(">"); _3a1.push(""); var _3ab=dom.childNodes; for(i=_3ab.length-1;i>=0;i--){ _3a1.push(_3ab[i]); } }else{ lst.push("/>"); } }else{ if(dom.nodeType==3){ lst.push(_3a3(dom.nodeValue)); } } } } return lst; },scrapeText:function(node,_3ad){ var rval=[]; (function(node){ var cn=node.childNodes; if(cn){ for(var i=0;i0){ var _3ca=m.filter; _3c9=function(node){ return _3ca(_3c9.ignoreAttrFilter,node.attributes); }; _3c9.ignoreAttr={}; var _3cc=_3c8.attributes; var _3cd=_3c9.ignoreAttr; for(var i=0;i<_3cc.length;i++){ var a=_3cc[i]; _3cd[a.name]=a.value; } _3c9.ignoreAttrFilter=function(a){ return (_3c9.ignoreAttr[a.name]!=a.value); }; _3c9.compliant=false; _3c9.renames={"class":"className","checked":"defaultChecked","usemap":"useMap","for":"htmlFor","readonly":"readOnly","colspan":"colSpan","bgcolor":"bgColor","cellspacing":"cellSpacing","cellpadding":"cellPadding"}; }else{ _3c9=function(node){ return node.attributes; }; _3c9.compliant=true; _3c9.ignoreAttr={}; _3c9.renames={}; } this.attributeArray=_3c9; var _3d2=function(_3d3,arr){ var _3d5=arr[0]; var _3d6=arr[1]; var _3d7=_3d6.split(".")[1]; var str=""; str+="if (!MochiKit."+_3d7+") { throw new Error(\""; str+="This function has been deprecated and depends on MochiKit."; str+=_3d7+".\");}"; str+="return "+_3d6+".apply(this, arguments);"; MochiKit[_3d3][_3d5]=new Function(str); }; for(var i=0;i0){ abort(repr(expr)); } },buildMatchExpression:function(){ var repr=MochiKit.Base.repr; var _3e4=this.params; var _3e5=[]; var _3e6,i; function childElements(_3e8){ return "MochiKit.Base.filter(function (node) { return node.nodeType == 1; }, "+_3e8+".childNodes)"; } if(_3e4.wildcard){ _3e5.push("true"); } if(_3e6=_3e4.id){ _3e5.push("element.id == "+repr(_3e6)); } if(_3e6=_3e4.tagName){ _3e5.push("element.tagName.toUpperCase() == "+repr(_3e6)); } if((_3e6=_3e4.classNames).length>0){ for(i=0;i<_3e6.length;i++){ _3e5.push("MochiKit.DOM.hasElementClass(element, "+repr(_3e6[i])+")"); } } if((_3e6=_3e4.pseudoClassNames).length>0){ for(i=0;i<_3e6.length;i++){ var _3e9=_3e6[i].match(/^([^(]+)(?:\((.*)\))?$/); var _3ea=_3e9[1]; var _3eb=_3e9[2]; switch(_3ea){ case "root": _3e5.push("element.nodeType == 9 || element === element.ownerDocument.documentElement"); break; case "nth-child": case "nth-last-child": case "nth-of-type": case "nth-last-of-type": _3e9=_3eb.match(/^((?:(\d+)n\+)?(\d+)|odd|even)$/); if(!_3e9){ throw "Invalid argument to pseudo element nth-child: "+_3eb; } var a,b; if(_3e9[0]=="odd"){ a=2; b=1; }else{ if(_3e9[0]=="even"){ a=2; b=0; }else{ a=_3e9[2]&&parseInt(_3e9)||null; b=parseInt(_3e9[3]); } } _3e5.push("this.nthChild(element,"+a+","+b+","+!!_3ea.match("^nth-last")+","+!!_3ea.match("of-type$")+")"); break; case "first-child": _3e5.push("this.nthChild(element, null, 1)"); break; case "last-child": _3e5.push("this.nthChild(element, null, 1, true)"); break; case "first-of-type": _3e5.push("this.nthChild(element, null, 1, false, true)"); break; case "last-of-type": _3e5.push("this.nthChild(element, null, 1, true, true)"); break; case "only-child": _3e5.push(childElements("element.parentNode")+".length == 1"); break; case "only-of-type": _3e5.push("MochiKit.Base.filter(function (node) { return node.tagName == element.tagName; }, "+childElements("element.parentNode")+").length == 1"); break; case "empty": _3e5.push("element.childNodes.length == 0"); break; case "enabled": _3e5.push("(this.isUIElement(element) && element.disabled === false)"); break; case "disabled": _3e5.push("(this.isUIElement(element) && element.disabled === true)"); break; case "checked": _3e5.push("(this.isUIElement(element) && element.checked === true)"); break; case "not": var _3ee=new MochiKit.Selector.Selector(_3eb); _3e5.push("!( "+_3ee.buildMatchExpression()+")"); break; } } } if(_3e6=_3e4.attributes){ MochiKit.Base.map(function(_3ef){ var _3f0="MochiKit.DOM.getNodeAttribute(element, "+repr(_3ef.name)+")"; var _3f1=function(_3f2){ return _3f0+".split("+repr(_3f2)+")"; }; _3e5.push(_3f0+" != null"); switch(_3ef.operator){ case "=": _3e5.push(_3f0+" == "+repr(_3ef.value)); break; case "~=": _3e5.push("MochiKit.Base.findValue("+_3f1(" ")+", "+repr(_3ef.value)+") > -1"); break; case "^=": _3e5.push(_3f0+".substring(0, "+_3ef.value.length+") == "+repr(_3ef.value)); break; case "$=": _3e5.push(_3f0+".substring("+_3f0+".length - "+_3ef.value.length+") == "+repr(_3ef.value)); break; case "*=": _3e5.push(_3f0+".match("+repr(_3ef.value)+")"); break; case "|=": _3e5.push(_3f1("-")+"[0].toUpperCase() == "+repr(_3ef.value.toUpperCase())); break; case "!=": _3e5.push(_3f0+" != "+repr(_3ef.value)); break; case "": case undefined: break; default: throw "Unknown operator "+_3ef.operator+" in selector"; } },_3e6); } return _3e5.join(" && "); },compileMatcher:function(){ var code="return (!element.tagName) ? false : "+this.buildMatchExpression()+";"; this.match=new Function("element",code); },nthChild:function(_3f4,a,b,_3f7,_3f8){ var _3f9=MochiKit.Base.filter(function(node){ return node.nodeType==1; },_3f4.parentNode.childNodes); if(_3f8){ _3f9=MochiKit.Base.filter(function(node){ return node.tagName==_3f4.tagName; },_3f9); } if(_3f7){ _3f9=MochiKit.Iter.reversed(_3f9); } if(a){ var _3fc=MochiKit.Base.findIdentical(_3f9,_3f4); return ((_3fc+1-b)/a)%1==0; }else{ return b==MochiKit.Base.findIdentical(_3f9,_3f4)+1; } },isUIElement:function(_3fd){ return MochiKit.Base.findValue(["input","button","select","option","textarea","object"],_3fd.tagName.toLowerCase())>-1; },findElements:function(_3fe,axis){ var _400; if(axis==undefined){ axis=""; } function inScope(_401,_402){ if(axis==""){ return MochiKit.DOM.isChildNode(_401,_402); }else{ if(axis==">"){ return _401.parentNode===_402; }else{ if(axis=="+"){ return _401===nextSiblingElement(_402); }else{ if(axis=="~"){ var _403=_402; while(_403=nextSiblingElement(_403)){ if(_401===_403){ return true; } } return false; }else{ throw "Invalid axis: "+axis; } } } } } if(_400=MochiKit.DOM.getElement(this.params.id)){ if(this.match(_400)){ if(!_3fe||inScope(_400,_3fe)){ return [_400]; } } } function nextSiblingElement(node){ node=node.nextSibling; while(node&&node.nodeType!=1){ node=node.nextSibling; } return node; } if(axis==""){ _3fe=(_3fe||MochiKit.DOM.currentDocument()).getElementsByTagName(this.params.tagName||"*"); }else{ if(axis==">"){ if(!_3fe){ throw "> combinator not allowed without preceeding expression"; } _3fe=MochiKit.Base.filter(function(node){ return node.nodeType==1; },_3fe.childNodes); }else{ if(axis=="+"){ if(!_3fe){ throw "+ combinator not allowed without preceeding expression"; } _3fe=nextSiblingElement(_3fe)&&[nextSiblingElement(_3fe)]; }else{ if(axis=="~"){ if(!_3fe){ throw "~ combinator not allowed without preceeding expression"; } var _406=[]; while(nextSiblingElement(_3fe)){ _3fe=nextSiblingElement(_3fe); _406.push(_3fe); } _3fe=_406; } } } } if(!_3fe){ return []; } var _407=MochiKit.Base.filter(MochiKit.Base.bind(function(_408){ return this.match(_408); },this),_3fe); return _407; },repr:function(){ return "Selector("+this.expression+")"; },toString:MochiKit.Base.forwardCall("repr")}; MochiKit.Base.update(MochiKit.Selector,{findChildElements:function(_409,_40a){ var uniq=function(arr){ var res=[]; for(var i=0;i+~]$/)){ _410=match[0]; return _412; }else{ var _414=new MochiKit.Selector.Selector(expr); var _415=MochiKit.Iter.reduce(function(_416,_417){ return MochiKit.Base.extend(_416,_414.findElements(_417||_409,_410)); },_412,[]); _410=""; return _415; } }; var _418=_40f.replace(/(^\s+|\s+$)/g,"").split(/\s+/); return uniq(MochiKit.Iter.reduce(_411,_418,[null])); },_40a)); },findDocElements:function(){ return MochiKit.Selector.findChildElements(MochiKit.DOM.currentDocument(),arguments); },__new__:function(){ var m=MochiKit.Base; this.$$=this.findDocElements; this.EXPORT_TAGS={":common":this.EXPORT,":all":m.concat(this.EXPORT,this.EXPORT_OK)}; m.nameFunctions(this); }}); MochiKit.Selector.__new__(); MochiKit.Base._exportSymbols(this,MochiKit.Selector); MochiKit.Base._deps("Style",["Base","DOM"]); MochiKit.Style.NAME="MochiKit.Style"; MochiKit.Style.VERSION="1.4.2"; MochiKit.Style.__repr__=function(){ return "["+this.NAME+" "+this.VERSION+"]"; }; MochiKit.Style.toString=function(){ return this.__repr__(); }; MochiKit.Style.EXPORT_OK=[]; MochiKit.Style.EXPORT=["setStyle","setOpacity","getStyle","getElementDimensions","elementDimensions","setElementDimensions","getElementPosition","elementPosition","setElementPosition","makePositioned","undoPositioned","makeClipping","undoClipping","setDisplayForElement","hideElement","showElement","getViewportDimensions","getViewportPosition","Dimensions","Coordinates"]; MochiKit.Style.Dimensions=function(w,h){ this.w=w; this.h=h; }; MochiKit.Style.Dimensions.prototype.__repr__=function(){ var repr=MochiKit.Base.repr; return "{w: "+repr(this.w)+", h: "+repr(this.h)+"}"; }; MochiKit.Style.Dimensions.prototype.toString=function(){ return this.__repr__(); }; MochiKit.Style.Coordinates=function(x,y){ this.x=x; this.y=y; }; MochiKit.Style.Coordinates.prototype.__repr__=function(){ var repr=MochiKit.Base.repr; return "{x: "+repr(this.x)+", y: "+repr(this.y)+"}"; }; MochiKit.Style.Coordinates.prototype.toString=function(){ return this.__repr__(); }; MochiKit.Base.update(MochiKit.Style,{getStyle:function(elem,_421){ var dom=MochiKit.DOM; var d=dom._document; elem=dom.getElement(elem); _421=MochiKit.Base.camelize(_421); if(!elem||elem==d){ return undefined; } if(_421=="opacity"&&typeof (elem.filters)!="undefined"){ var _424=(MochiKit.Style.getStyle(elem,"filter")||"").match(/alpha\(opacity=(.*)\)/); if(_424&&_424[1]){ return parseFloat(_424[1])/100; } return 1; } if(_421=="float"||_421=="cssFloat"||_421=="styleFloat"){ if(elem.style["float"]){ return elem.style["float"]; }else{ if(elem.style.cssFloat){ return elem.style.cssFloat; }else{ if(elem.style.styleFloat){ return elem.style.styleFloat; }else{ return "none"; } } } } var _425=elem.style?elem.style[_421]:null; if(!_425){ if(d.defaultView&&d.defaultView.getComputedStyle){ var css=d.defaultView.getComputedStyle(elem,null); _421=_421.replace(/([A-Z])/g,"-$1").toLowerCase(); _425=css?css.getPropertyValue(_421):null; }else{ if(elem.currentStyle){ _425=elem.currentStyle[_421]; if(/^\d/.test(_425)&&!/px$/.test(_425)&&_421!="fontWeight"){ var left=elem.style.left; var _428=elem.runtimeStyle.left; elem.runtimeStyle.left=elem.currentStyle.left; elem.style.left=_425||0; _425=elem.style.pixelLeft+"px"; elem.style.left=left; elem.runtimeStyle.left=_428; } } } } if(_421=="opacity"){ _425=parseFloat(_425); } if(/Opera/.test(navigator.userAgent)&&(MochiKit.Base.findValue(["left","top","right","bottom"],_421)!=-1)){ if(MochiKit.Style.getStyle(elem,"position")=="static"){ _425="auto"; } } return _425=="auto"?null:_425; },setStyle:function(elem,_42a){ elem=MochiKit.DOM.getElement(elem); for(var name in _42a){ switch(name){ case "opacity": MochiKit.Style.setOpacity(elem,_42a[name]); break; case "float": case "cssFloat": case "styleFloat": if(typeof (elem.style["float"])!="undefined"){ elem.style["float"]=_42a[name]; }else{ if(typeof (elem.style.cssFloat)!="undefined"){ elem.style.cssFloat=_42a[name]; }else{ elem.style.styleFloat=_42a[name]; } } break; default: elem.style[MochiKit.Base.camelize(name)]=_42a[name]; } } },setOpacity:function(elem,o){ elem=MochiKit.DOM.getElement(elem); var self=MochiKit.Style; if(o==1){ var _42f=/Gecko/.test(navigator.userAgent)&&!(/Konqueror|AppleWebKit|KHTML/.test(navigator.userAgent)); elem.style["opacity"]=_42f?0.999999:1; if(/MSIE/.test(navigator.userAgent)){ elem.style["filter"]=self.getStyle(elem,"filter").replace(/alpha\([^\)]*\)/gi,""); } }else{ if(o<0.00001){ o=0; } elem.style["opacity"]=o; if(/MSIE/.test(navigator.userAgent)){ elem.style["filter"]=self.getStyle(elem,"filter").replace(/alpha\([^\)]*\)/gi,"")+"alpha(opacity="+o*100+")"; } } },getElementPosition:function(elem,_431){ var self=MochiKit.Style; var dom=MochiKit.DOM; elem=dom.getElement(elem); if(!elem||(!(elem.x&&elem.y)&&(!elem.parentNode===null||self.getStyle(elem,"display")=="none"))){ return undefined; } var c=new self.Coordinates(0,0); var box=null; var _436=null; var d=MochiKit.DOM._document; var de=d.documentElement; var b=d.body; if(!elem.parentNode&&elem.x&&elem.y){ c.x+=elem.x||0; c.y+=elem.y||0; }else{ if(elem.getBoundingClientRect){ box=elem.getBoundingClientRect(); c.x+=box.left+(de.scrollLeft||b.scrollLeft)-(de.clientLeft||0); c.y+=box.top+(de.scrollTop||b.scrollTop)-(de.clientTop||0); }else{ if(elem.offsetParent){ c.x+=elem.offsetLeft; c.y+=elem.offsetTop; _436=elem.offsetParent; if(_436!=elem){ while(_436){ c.x+=parseInt(_436.style.borderLeftWidth)||0; c.y+=parseInt(_436.style.borderTopWidth)||0; c.x+=_436.offsetLeft; c.y+=_436.offsetTop; _436=_436.offsetParent; } } var ua=navigator.userAgent.toLowerCase(); if((typeof (opera)!="undefined"&&parseFloat(opera.version())<9)||(ua.indexOf("AppleWebKit")!=-1&&self.getStyle(elem,"position")=="absolute")){ c.x-=b.offsetLeft; c.y-=b.offsetTop; } if(elem.parentNode){ _436=elem.parentNode; }else{ _436=null; } while(_436){ var _43b=_436.tagName.toUpperCase(); if(_43b==="BODY"||_43b==="HTML"){ break; } var disp=self.getStyle(_436,"display"); if(disp.search(/^inline|table-row.*$/i)){ c.x-=_436.scrollLeft; c.y-=_436.scrollTop; } if(_436.parentNode){ _436=_436.parentNode; }else{ _436=null; } } } } } if(typeof (_431)!="undefined"){ _431=arguments.callee(_431); if(_431){ c.x-=(_431.x||0); c.y-=(_431.y||0); } } return c; },setElementPosition:function(elem,_43e,_43f){ elem=MochiKit.DOM.getElement(elem); if(typeof (_43f)=="undefined"){ _43f="px"; } var _440={}; var _441=MochiKit.Base.isUndefinedOrNull; if(!_441(_43e.x)){ _440["left"]=_43e.x+_43f; } if(!_441(_43e.y)){ _440["top"]=_43e.y+_43f; } MochiKit.DOM.updateNodeAttributes(elem,{"style":_440}); },makePositioned:function(_442){ _442=MochiKit.DOM.getElement(_442); var pos=MochiKit.Style.getStyle(_442,"position"); if(pos=="static"||!pos){ _442.style.position="relative"; if(/Opera/.test(navigator.userAgent)){ _442.style.top=0; _442.style.left=0; } } },undoPositioned:function(_444){ _444=MochiKit.DOM.getElement(_444); if(_444.style.position=="relative"){ _444.style.position=_444.style.top=_444.style.left=_444.style.bottom=_444.style.right=""; } },makeClipping:function(_445){ _445=MochiKit.DOM.getElement(_445); var s=_445.style; var _447={"overflow":s.overflow,"overflow-x":s.overflowX,"overflow-y":s.overflowY}; if((MochiKit.Style.getStyle(_445,"overflow")||"visible")!="hidden"){ _445.style.overflow="hidden"; _445.style.overflowX="hidden"; _445.style.overflowY="hidden"; } return _447; },undoClipping:function(_448,_449){ _448=MochiKit.DOM.getElement(_448); if(typeof (_449)=="string"){ _448.style.overflow=_449; }else{ if(_449!=null){ _448.style.overflow=_449["overflow"]; _448.style.overflowX=_449["overflow-x"]; _448.style.overflowY=_449["overflow-y"]; } } },getElementDimensions:function(elem,_44b){ var self=MochiKit.Style; var dom=MochiKit.DOM; if(typeof (elem.w)=="number"||typeof (elem.h)=="number"){ return new self.Dimensions(elem.w||0,elem.h||0); } elem=dom.getElement(elem); if(!elem){ return undefined; } var disp=self.getStyle(elem,"display"); if(disp=="none"||disp==""||typeof (disp)=="undefined"){ var s=elem.style; var _450=s.visibility; var _451=s.position; var _452=s.display; s.visibility="hidden"; s.position="absolute"; s.display=self._getDefaultDisplay(elem); var _453=elem.offsetWidth; var _454=elem.offsetHeight; s.display=_452; s.position=_451; s.visibility=_450; }else{ _453=elem.offsetWidth||0; _454=elem.offsetHeight||0; } if(_44b){ var _455="colSpan" in elem&&"rowSpan" in elem; var _456=(_455&&elem.parentNode&&self.getStyle(elem.parentNode,"borderCollapse")=="collapse"); if(_456){ if(/MSIE/.test(navigator.userAgent)){ var _457=elem.previousSibling?0.5:1; var _458=elem.nextSibling?0.5:1; }else{ var _457=0.5; var _458=0.5; } }else{ var _457=1; var _458=1; } _453-=Math.round((parseFloat(self.getStyle(elem,"paddingLeft"))||0)+(parseFloat(self.getStyle(elem,"paddingRight"))||0)+_457*(parseFloat(self.getStyle(elem,"borderLeftWidth"))||0)+_458*(parseFloat(self.getStyle(elem,"borderRightWidth"))||0)); if(_455){ if(/Gecko|Opera/.test(navigator.userAgent)&&!/Konqueror|AppleWebKit|KHTML/.test(navigator.userAgent)){ var _459=0; }else{ if(/MSIE/.test(navigator.userAgent)){ var _459=1; }else{ var _459=_456?0.5:1; } } }else{ var _459=1; } _454-=Math.round((parseFloat(self.getStyle(elem,"paddingTop"))||0)+(parseFloat(self.getStyle(elem,"paddingBottom"))||0)+_459*((parseFloat(self.getStyle(elem,"borderTopWidth"))||0)+(parseFloat(self.getStyle(elem,"borderBottomWidth"))||0))); } return new self.Dimensions(_453,_454); },setElementDimensions:function(elem,_45b,_45c){ elem=MochiKit.DOM.getElement(elem); if(typeof (_45c)=="undefined"){ _45c="px"; } var _45d={}; var _45e=MochiKit.Base.isUndefinedOrNull; if(!_45e(_45b.w)){ _45d["width"]=_45b.w+_45c; } if(!_45e(_45b.h)){ _45d["height"]=_45b.h+_45c; } MochiKit.DOM.updateNodeAttributes(elem,{"style":_45d}); },_getDefaultDisplay:function(elem){ var self=MochiKit.Style; var dom=MochiKit.DOM; elem=dom.getElement(elem); if(!elem){ return undefined; } var _462=elem.tagName.toUpperCase(); return self._defaultDisplay[_462]||"block"; },setDisplayForElement:function(_463,_464){ var _465=MochiKit.Base.extend(null,arguments,1); var _466=MochiKit.DOM.getElement; for(var i=0;i<_465.length;i++){ _464=_466(_465[i]); if(_464){ _464.style.display=_463; } } },getViewportDimensions:function(){ var d=new MochiKit.Style.Dimensions(); var w=MochiKit.DOM._window; var b=MochiKit.DOM._document.body; if(w.innerWidth){ d.w=w.innerWidth; d.h=w.innerHeight; }else{ if(b&&b.parentElement&&b.parentElement.clientWidth){ d.w=b.parentElement.clientWidth; d.h=b.parentElement.clientHeight; }else{ if(b&&b.clientWidth){ d.w=b.clientWidth; d.h=b.clientHeight; } } } return d; },getViewportPosition:function(){ var c=new MochiKit.Style.Coordinates(0,0); var d=MochiKit.DOM._document; var de=d.documentElement; var db=d.body; if(de&&(de.scrollTop||de.scrollLeft)){ c.x=de.scrollLeft; c.y=de.scrollTop; }else{ if(db){ c.x=db.scrollLeft; c.y=db.scrollTop; } } return c; },__new__:function(){ var m=MochiKit.Base; var _470=["A","ABBR","ACRONYM","B","BASEFONT","BDO","BIG","BR","CITE","CODE","DFN","EM","FONT","I","IMG","KBD","LABEL","Q","S","SAMP","SMALL","SPAN","STRIKE","STRONG","SUB","SUP","TEXTAREA","TT","U","VAR"]; this._defaultDisplay={"TABLE":"table","THEAD":"table-header-group","TBODY":"table-row-group","TFOOT":"table-footer-group","COLGROUP":"table-column-group","COL":"table-column","TR":"table-row","TD":"table-cell","TH":"table-cell","CAPTION":"table-caption","LI":"list-item","INPUT":"inline-block","SELECT":"inline-block"}; if(/MSIE/.test(navigator.userAgent)){ for(var k in this._defaultDisplay){ var v=this._defaultDisplay[k]; if(v.indexOf("table")==0){ this._defaultDisplay[k]="block"; } } } for(var i=0;i<_470.length;i++){ this._defaultDisplay[_470[i]]="inline"; } this.elementPosition=this.getElementPosition; this.elementDimensions=this.getElementDimensions; this.hideElement=m.partial(this.setDisplayForElement,"none"); this.showElement=m.partial(this.setDisplayForElement,"block"); this.EXPORT_TAGS={":common":this.EXPORT,":all":m.concat(this.EXPORT,this.EXPORT_OK)}; m.nameFunctions(this); }}); MochiKit.Style.__new__(); MochiKit.Base._exportSymbols(this,MochiKit.Style); MochiKit.Base._deps("LoggingPane",["Base","Logging"]); MochiKit.LoggingPane.NAME="MochiKit.LoggingPane"; MochiKit.LoggingPane.VERSION="1.4.2"; MochiKit.LoggingPane.__repr__=function(){ return "["+this.NAME+" "+this.VERSION+"]"; }; MochiKit.LoggingPane.toString=function(){ return this.__repr__(); }; MochiKit.LoggingPane.createLoggingPane=function(_474){ var m=MochiKit.LoggingPane; _474=!(!_474); if(m._loggingPane&&m._loggingPane.inline!=_474){ m._loggingPane.closePane(); m._loggingPane=null; } if(!m._loggingPane||m._loggingPane.closed){ m._loggingPane=new m.LoggingPane(_474,MochiKit.Logging.logger); } return m._loggingPane; }; MochiKit.LoggingPane.LoggingPane=function(_476,_477){ if(typeof (_477)=="undefined"||_477===null){ _477=MochiKit.Logging.logger; } this.logger=_477; var _478=MochiKit.Base.update; var _479=MochiKit.Base.updatetree; var bind=MochiKit.Base.bind; var _47b=MochiKit.Base.clone; var win=window; var uid="_MochiKit_LoggingPane"; if(typeof (MochiKit.DOM)!="undefined"){ win=MochiKit.DOM.currentWindow(); } if(!_476){ var url=win.location.href.split("?")[0].replace(/[#:\/.><&%-]/g,"_"); var name=uid+"_"+url; var nwin=win.open("",name,"dependent,resizable,height=200"); if(!nwin){ alert("Not able to open debugging window due to pop-up blocking."); return undefined; } nwin.document.write(""+"[MochiKit.LoggingPane]"+""); nwin.document.close(); nwin.document.title+=" "+win.document.title; win=nwin; } var doc=win.document; this.doc=doc; var _482=doc.getElementById(uid); var _483=!!_482; if(_482&&typeof (_482.loggingPane)!="undefined"){ _482.loggingPane.logger=this.logger; _482.loggingPane.buildAndApplyFilter(); return _482.loggingPane; } if(_483){ var _484; while((_484=_482.firstChild)){ _482.removeChild(_484); } }else{ _482=doc.createElement("div"); _482.id=uid; } _482.loggingPane=this; var _485=doc.createElement("input"); var _486=doc.createElement("input"); var _487=doc.createElement("button"); var _488=doc.createElement("button"); var _489=doc.createElement("button"); var _48a=doc.createElement("button"); var _48b=doc.createElement("div"); var _48c=doc.createElement("div"); var _48d=uid+"_Listener"; this.colorTable=_47b(this.colorTable); var _48e=[]; var _48f=null; var _490=function(msg){ var _492=msg.level; if(typeof (_492)=="number"){ _492=MochiKit.Logging.LogLevel[_492]; } return _492; }; var _493=function(msg){ return msg.info.join(" "); }; var _495=bind(function(msg){ var _497=_490(msg); var text=_493(msg); var c=this.colorTable[_497]; var p=doc.createElement("span"); p.className="MochiKit-LogMessage MochiKit-LogLevel-"+_497; p.style.cssText="margin: 0px; white-space: -moz-pre-wrap; white-space: -o-pre-wrap; white-space: pre-wrap; white-space: pre-line; word-wrap: break-word; wrap-option: emergency; color: "+c; p.appendChild(doc.createTextNode(_497+": "+text)); _48c.appendChild(p); _48c.appendChild(doc.createElement("br")); if(_48b.offsetHeight>_48b.scrollHeight){ _48b.scrollTop=0; }else{ _48b.scrollTop=_48b.scrollHeight; } },this); var _49b=function(msg){ _48e[_48e.length]=msg; _495(msg); }; var _49d=function(){ var _49e,_49f; try{ _49e=new RegExp(_485.value); _49f=new RegExp(_486.value); } catch(e){ logDebug("Error in filter regex: "+e.message); return null; } return function(msg){ return (_49e.test(_490(msg))&&_49f.test(_493(msg))); }; }; var _4a1=function(){ while(_48c.firstChild){ _48c.removeChild(_48c.firstChild); } }; var _4a2=function(){ _48e=[]; _4a1(); }; var _4a3=bind(function(){ if(this.closed){ return; } this.closed=true; if(MochiKit.LoggingPane._loggingPane==this){ MochiKit.LoggingPane._loggingPane=null; } this.logger.removeListener(_48d); try{ try{ _482.loggingPane=null; } catch(e){ logFatal("Bookmarklet was closed incorrectly."); } if(_476){ _482.parentNode.removeChild(_482); }else{ this.win.close(); } } catch(e){ } },this); var _4a4=function(){ _4a1(); for(var i=0;i<_48e.length;i++){ var msg=_48e[i]; if(_48f===null||_48f(msg)){ _495(msg); } } }; this.buildAndApplyFilter=function(){ _48f=_49d(); _4a4(); this.logger.removeListener(_48d); this.logger.addListener(_48d,_48f,_49b); }; var _4a7=bind(function(){ _48e=this.logger.getMessages(); _4a4(); },this); var _4a8=bind(function(_4a9){ _4a9=_4a9||window.event; key=_4a9.which||_4a9.keyCode; if(key==13){ this.buildAndApplyFilter(); } },this); var _4aa="display: block; z-index: 1000; left: 0px; bottom: 0px; position: fixed; width: 100%; background-color: white; font: "+this.logFont; if(_476){ _4aa+="; height: 10em; border-top: 2px solid black"; }else{ _4aa+="; height: 100%;"; } _482.style.cssText=_4aa; if(!_483){ doc.body.appendChild(_482); } _4aa={"cssText":"width: 33%; display: inline; font: "+this.logFont}; _479(_485,{"value":"FATAL|ERROR|WARNING|INFO|DEBUG","onkeypress":_4a8,"style":_4aa}); _482.appendChild(_485); _479(_486,{"value":".*","onkeypress":_4a8,"style":_4aa}); _482.appendChild(_486); _4aa="width: 8%; display:inline; font: "+this.logFont; _487.appendChild(doc.createTextNode("Filter")); _487.onclick=bind("buildAndApplyFilter",this); _487.style.cssText=_4aa; _482.appendChild(_487); _488.appendChild(doc.createTextNode("Load")); _488.onclick=_4a7; _488.style.cssText=_4aa; _482.appendChild(_488); _489.appendChild(doc.createTextNode("Clear")); _489.onclick=_4a2; _489.style.cssText=_4aa; _482.appendChild(_489); _48a.appendChild(doc.createTextNode("Close")); _48a.onclick=_4a3; _48a.style.cssText=_4aa; _482.appendChild(_48a); _48b.style.cssText="overflow: auto; width: 100%"; _48c.style.cssText="width: 100%; height: "+(_476?"8em":"100%"); _48b.appendChild(_48c); _482.appendChild(_48b); this.buildAndApplyFilter(); _4a7(); if(_476){ this.win=undefined; }else{ this.win=win; } this.inline=_476; this.closePane=_4a3; this.closed=false; return this; }; MochiKit.LoggingPane.LoggingPane.prototype={"logFont":"8pt Verdana,sans-serif","colorTable":{"ERROR":"red","FATAL":"darkred","WARNING":"blue","INFO":"black","DEBUG":"green"}}; MochiKit.LoggingPane.EXPORT_OK=["LoggingPane"]; MochiKit.LoggingPane.EXPORT=["createLoggingPane"]; MochiKit.LoggingPane.__new__=function(){ this.EXPORT_TAGS={":common":this.EXPORT,":all":MochiKit.Base.concat(this.EXPORT,this.EXPORT_OK)}; MochiKit.Base.nameFunctions(this); MochiKit.LoggingPane._loggingPane=null; }; MochiKit.LoggingPane.__new__(); MochiKit.Base._exportSymbols(this,MochiKit.LoggingPane); MochiKit.Base._deps("Color",["Base","DOM","Style"]); MochiKit.Color.NAME="MochiKit.Color"; MochiKit.Color.VERSION="1.4.2"; MochiKit.Color.__repr__=function(){ return "["+this.NAME+" "+this.VERSION+"]"; }; MochiKit.Color.toString=function(){ return this.__repr__(); }; MochiKit.Color.Color=function(red,_4ac,blue,_4ae){ if(typeof (_4ae)=="undefined"||_4ae===null){ _4ae=1; } this.rgb={r:red,g:_4ac,b:blue,a:_4ae}; }; MochiKit.Color.Color.prototype={__class__:MochiKit.Color.Color,colorWithAlpha:function(_4af){ var rgb=this.rgb; var m=MochiKit.Color; return m.Color.fromRGB(rgb.r,rgb.g,rgb.b,_4af); },colorWithHue:function(hue){ var hsl=this.asHSL(); hsl.h=hue; var m=MochiKit.Color; return m.Color.fromHSL(hsl); },colorWithSaturation:function(_4b5){ var hsl=this.asHSL(); hsl.s=_4b5; var m=MochiKit.Color; return m.Color.fromHSL(hsl); },colorWithLightness:function(_4b8){ var hsl=this.asHSL(); hsl.l=_4b8; var m=MochiKit.Color; return m.Color.fromHSL(hsl); },darkerColorWithLevel:function(_4bb){ var hsl=this.asHSL(); hsl.l=Math.max(hsl.l-_4bb,0); var m=MochiKit.Color; return m.Color.fromHSL(hsl); },lighterColorWithLevel:function(_4be){ var hsl=this.asHSL(); hsl.l=Math.min(hsl.l+_4be,1); var m=MochiKit.Color; return m.Color.fromHSL(hsl); },blendedColor:function(_4c1,_4c2){ if(typeof (_4c2)=="undefined"||_4c2===null){ _4c2=0.5; } var sf=1-_4c2; var s=this.rgb; var d=_4c1.rgb; var df=_4c2; return MochiKit.Color.Color.fromRGB((s.r*sf)+(d.r*df),(s.g*sf)+(d.g*df),(s.b*sf)+(d.b*df),(s.a*sf)+(d.a*df)); },compareRGB:function(_4c7){ var a=this.asRGB(); var b=_4c7.asRGB(); return MochiKit.Base.compare([a.r,a.g,a.b,a.a],[b.r,b.g,b.b,b.a]); },isLight:function(){ return this.asHSL().b>0.5; },isDark:function(){ return (!this.isLight()); },toHSLString:function(){ var c=this.asHSL(); var ccc=MochiKit.Color.clampColorComponent; var rval=this._hslString; if(!rval){ var mid=(ccc(c.h,360).toFixed(0)+","+ccc(c.s,100).toPrecision(4)+"%"+","+ccc(c.l,100).toPrecision(4)+"%"); var a=c.a; if(a>=1){ a=1; rval="hsl("+mid+")"; }else{ if(a<=0){ a=0; } rval="hsla("+mid+","+a+")"; } this._hslString=rval; } return rval; },toRGBString:function(){ var c=this.rgb; var ccc=MochiKit.Color.clampColorComponent; var rval=this._rgbString; if(!rval){ var mid=(ccc(c.r,255).toFixed(0)+","+ccc(c.g,255).toFixed(0)+","+ccc(c.b,255).toFixed(0)); if(c.a!=1){ rval="rgba("+mid+","+c.a+")"; }else{ rval="rgb("+mid+")"; } this._rgbString=rval; } return rval; },asRGB:function(){ return MochiKit.Base.clone(this.rgb); },toHexString:function(){ var m=MochiKit.Color; var c=this.rgb; var ccc=MochiKit.Color.clampColorComponent; var rval=this._hexString; if(!rval){ rval=("#"+m.toColorPart(ccc(c.r,255))+m.toColorPart(ccc(c.g,255))+m.toColorPart(ccc(c.b,255))); this._hexString=rval; } return rval; },asHSV:function(){ var hsv=this.hsv; var c=this.rgb; if(typeof (hsv)=="undefined"||hsv===null){ hsv=MochiKit.Color.rgbToHSV(this.rgb); this.hsv=hsv; } return MochiKit.Base.clone(hsv); },asHSL:function(){ var hsl=this.hsl; var c=this.rgb; if(typeof (hsl)=="undefined"||hsl===null){ hsl=MochiKit.Color.rgbToHSL(this.rgb); this.hsl=hsl; } return MochiKit.Base.clone(hsl); },toString:function(){ return this.toRGBString(); },repr:function(){ var c=this.rgb; var col=[c.r,c.g,c.b,c.a]; return this.__class__.NAME+"("+col.join(", ")+")"; }}; MochiKit.Base.update(MochiKit.Color.Color,{fromRGB:function(red,_4de,blue,_4e0){ var _4e1=MochiKit.Color.Color; if(arguments.length==1){ var rgb=red; red=rgb.r; _4de=rgb.g; blue=rgb.b; if(typeof (rgb.a)=="undefined"){ _4e0=undefined; }else{ _4e0=rgb.a; } } return new _4e1(red,_4de,blue,_4e0); },fromHSL:function(hue,_4e4,_4e5,_4e6){ var m=MochiKit.Color; return m.Color.fromRGB(m.hslToRGB.apply(m,arguments)); },fromHSV:function(hue,_4e9,_4ea,_4eb){ var m=MochiKit.Color; return m.Color.fromRGB(m.hsvToRGB.apply(m,arguments)); },fromName:function(name){ var _4ee=MochiKit.Color.Color; if(name.charAt(0)=="\""){ name=name.substr(1,name.length-2); } var _4ef=_4ee._namedColors[name.toLowerCase()]; if(typeof (_4ef)=="string"){ return _4ee.fromHexString(_4ef); }else{ if(name=="transparent"){ return _4ee.transparentColor(); } } return null; },fromString:function(_4f0){ var self=MochiKit.Color.Color; var _4f2=_4f0.substr(0,3); if(_4f2=="rgb"){ return self.fromRGBString(_4f0); }else{ if(_4f2=="hsl"){ return self.fromHSLString(_4f0); }else{ if(_4f0.charAt(0)=="#"){ return self.fromHexString(_4f0); } } } return self.fromName(_4f0); },fromHexString:function(_4f3){ if(_4f3.charAt(0)=="#"){ _4f3=_4f3.substring(1); } var _4f4=[]; var i,hex; if(_4f3.length==3){ for(i=0;i<3;i++){ hex=_4f3.substr(i,1); _4f4.push(parseInt(hex+hex,16)/255); } }else{ for(i=0;i<6;i+=2){ hex=_4f3.substr(i,2); _4f4.push(parseInt(hex,16)/255); } } var _4f7=MochiKit.Color.Color; return _4f7.fromRGB.apply(_4f7,_4f4); },_fromColorString:function(pre,_4f9,_4fa,_4fb){ if(_4fb.indexOf(pre)===0){ _4fb=_4fb.substring(_4fb.indexOf("(",3)+1,_4fb.length-1); } var _4fc=_4fb.split(/\s*,\s*/); var _4fd=[]; for(var i=0;i<_4fc.length;i++){ var c=_4fc[i]; var val; var _501=c.substring(c.length-3); if(c.charAt(c.length-1)=="%"){ val=0.01*parseFloat(c.substring(0,c.length-1)); }else{ if(_501=="deg"){ val=parseFloat(c)/360; }else{ if(_501=="rad"){ val=parseFloat(c)/(Math.PI*2); }else{ val=_4fa[i]*parseFloat(c); } } } _4fd.push(val); } return this[_4f9].apply(this,_4fd); },fromComputedStyle:function(elem,_503){ var d=MochiKit.DOM; var cls=MochiKit.Color.Color; for(elem=d.getElement(elem);elem;elem=elem.parentNode){ var _506=MochiKit.Style.getStyle.apply(d,arguments); if(!_506){ continue; } var _507=cls.fromString(_506); if(!_507){ break; } if(_507.asRGB().a>0){ return _507; } } return null; },fromBackground:function(elem){ var cls=MochiKit.Color.Color; return cls.fromComputedStyle(elem,"backgroundColor","background-color")||cls.whiteColor(); },fromText:function(elem){ var cls=MochiKit.Color.Color; return cls.fromComputedStyle(elem,"color","color")||cls.blackColor(); },namedColors:function(){ return MochiKit.Base.clone(MochiKit.Color.Color._namedColors); }}); MochiKit.Base.update(MochiKit.Color,{clampColorComponent:function(v,_50d){ v*=_50d; if(v<0){ return 0; }else{ if(v>_50d){ return _50d; }else{ return v; } } },_hslValue:function(n1,n2,hue){ if(hue>6){ hue-=6; }else{ if(hue<0){ hue+=6; } } var val; if(hue<1){ val=n1+(n2-n1)*hue; }else{ if(hue<3){ val=n2; }else{ if(hue<4){ val=n1+(n2-n1)*(4-hue); }else{ val=n1; } } } return val; },hsvToRGB:function(hue,_513,_514,_515){ if(arguments.length==1){ var hsv=hue; hue=hsv.h; _513=hsv.s; _514=hsv.v; _515=hsv.a; } var red; var _518; var blue; if(_513===0){ red=_514; _518=_514; blue=_514; }else{ var i=Math.floor(hue*6); var f=(hue*6)-i; var p=_514*(1-_513); var q=_514*(1-(_513*f)); var t=_514*(1-(_513*(1-f))); switch(i){ case 1: red=q; _518=_514; blue=p; break; case 2: red=p; _518=_514; blue=t; break; case 3: red=p; _518=q; blue=_514; break; case 4: red=t; _518=p; blue=_514; break; case 5: red=_514; _518=p; blue=q; break; case 6: case 0: red=_514; _518=t; blue=p; break; } } return {r:red,g:_518,b:blue,a:_515}; },hslToRGB:function(hue,_520,_521,_522){ if(arguments.length==1){ var hsl=hue; hue=hsl.h; _520=hsl.s; _521=hsl.l; _522=hsl.a; } var red; var _525; var blue; if(_520===0){ red=_521; _525=_521; blue=_521; }else{ var m2; if(_521<=0.5){ m2=_521*(1+_520); }else{ m2=_521+_520-(_521*_520); } var m1=(2*_521)-m2; var f=MochiKit.Color._hslValue; var h6=hue*6; red=f(m1,m2,h6+2); _525=f(m1,m2,h6); blue=f(m1,m2,h6-2); } return {r:red,g:_525,b:blue,a:_522}; },rgbToHSV:function(red,_52c,blue,_52e){ if(arguments.length==1){ var rgb=red; red=rgb.r; _52c=rgb.g; blue=rgb.b; _52e=rgb.a; } var max=Math.max(Math.max(red,_52c),blue); var min=Math.min(Math.min(red,_52c),blue); var hue; var _533; var _534=max; if(min==max){ hue=0; _533=0; }else{ var _535=(max-min); _533=_535/max; if(red==max){ hue=(_52c-blue)/_535; }else{ if(_52c==max){ hue=2+((blue-red)/_535); }else{ hue=4+((red-_52c)/_535); } } hue/=6; if(hue<0){ hue+=1; } if(hue>1){ hue-=1; } } return {h:hue,s:_533,v:_534,a:_52e}; },rgbToHSL:function(red,_537,blue,_539){ if(arguments.length==1){ var rgb=red; red=rgb.r; _537=rgb.g; blue=rgb.b; _539=rgb.a; } var max=Math.max(red,Math.max(_537,blue)); var min=Math.min(red,Math.min(_537,blue)); var hue; var _53e; var _53f=(max+min)/2; var _540=max-min; if(_540===0){ hue=0; _53e=0; }else{ if(_53f<=0.5){ _53e=_540/(max+min); }else{ _53e=_540/(2-max-min); } if(red==max){ hue=(_537-blue)/_540; }else{ if(_537==max){ hue=2+((blue-red)/_540); }else{ hue=4+((red-_537)/_540); } } hue/=6; if(hue<0){ hue+=1; } if(hue>1){ hue-=1; } } return {h:hue,s:_53e,l:_53f,a:_539}; },toColorPart:function(num){ num=Math.round(num); var _542=num.toString(16); if(num<16){ return "0"+_542; } return _542; },__new__:function(){ var m=MochiKit.Base; this.Color.fromRGBString=m.bind(this.Color._fromColorString,this.Color,"rgb","fromRGB",[1/255,1/255,1/255,1]); this.Color.fromHSLString=m.bind(this.Color._fromColorString,this.Color,"hsl","fromHSL",[1/360,0.01,0.01,1]); var _544=1/3; var _545={black:[0,0,0],blue:[0,0,1],brown:[0.6,0.4,0.2],cyan:[0,1,1],darkGray:[_544,_544,_544],gray:[0.5,0.5,0.5],green:[0,1,0],lightGray:[2*_544,2*_544,2*_544],magenta:[1,0,1],orange:[1,0.5,0],purple:[0.5,0,0.5],red:[1,0,0],transparent:[0,0,0,0],white:[1,1,1],yellow:[1,1,0]}; var _546=function(name,r,g,b,a){ var rval=this.fromRGB(r,g,b,a); this[name]=function(){ return rval; }; return rval; }; for(var k in _545){ var name=k+"Color"; var _54f=m.concat([_546,this.Color,name],_545[k]); this.Color[name]=m.bind.apply(null,_54f); } var _550=function(){ for(var i=0;i1){ var src=MochiKit.DOM.getElement(arguments[0]); var sig=arguments[1]; var obj=arguments[2]; var func=arguments[3]; for(var i=_592.length-1;i>=0;i--){ var o=_592[i]; if(o.source===src&&o.signal===sig&&o.objOrFunc===obj&&o.funcOrStr===func){ self._disconnect(o); if(!self._lock){ _592.splice(i,1); }else{ self._dirty=true; } return true; } } }else{ var idx=m.findIdentical(_592,_590); if(idx>=0){ self._disconnect(_590); if(!self._lock){ _592.splice(idx,1); }else{ self._dirty=true; } return true; } } return false; },disconnectAllTo:function(_59b,_59c){ var self=MochiKit.Signal; var _59e=self._observers; var _59f=self._disconnect; var _5a0=self._lock; var _5a1=self._dirty; if(typeof (_59c)==="undefined"){ _59c=null; } for(var i=_59e.length-1;i>=0;i--){ var _5a3=_59e[i]; if(_5a3.objOrFunc===_59b&&(_59c===null||_5a3.funcOrStr===_59c)){ _59f(_5a3); if(_5a0){ _5a1=true; }else{ _59e.splice(i,1); } } } self._dirty=_5a1; },disconnectAll:function(src,sig){ src=MochiKit.DOM.getElement(src); var m=MochiKit.Base; var _5a7=m.flattenArguments(m.extend(null,arguments,1)); var self=MochiKit.Signal; var _5a9=self._disconnect; var _5aa=self._observers; var i,_5ac; var _5ad=self._lock; var _5ae=self._dirty; if(_5a7.length===0){ for(i=_5aa.length-1;i>=0;i--){ _5ac=_5aa[i]; if(_5ac.source===src){ _5a9(_5ac); if(!_5ad){ _5aa.splice(i,1); }else{ _5ae=true; } } } }else{ var sigs={}; for(i=0;i<_5a7.length;i++){ sigs[_5a7[i]]=true; } for(i=_5aa.length-1;i>=0;i--){ _5ac=_5aa[i]; if(_5ac.source===src&&_5ac.signal in sigs){ _5a9(_5ac); if(!_5ad){ _5aa.splice(i,1); }else{ _5ae=true; } } } } self._dirty=_5ae; },signal:function(src,sig){ var self=MochiKit.Signal; var _5b3=self._observers; src=MochiKit.DOM.getElement(src); var args=MochiKit.Base.extend(null,arguments,2); var _5b5=[]; self._lock=true; for(var i=0;i<_5b3.length;i++){ var _5b7=_5b3[i]; if(_5b7.source===src&&_5b7.signal===sig&&_5b7.connected){ try{ _5b7.listener.apply(src,args); } catch(e){ _5b5.push(e); } } } self._lock=false; if(self._dirty){ self._dirty=false; for(var i=_5b3.length-1;i>=0;i--){ if(!_5b3[i].connected){ _5b3.splice(i,1); } } } if(_5b5.length==1){ throw _5b5[0]; }else{ if(_5b5.length>1){ var e=new Error("Multiple errors thrown in handling 'sig', see errors property"); e.errors=_5b5; throw e; } } }}); MochiKit.Signal.EXPORT_OK=[]; MochiKit.Signal.EXPORT=["connect","disconnect","signal","disconnectAll","disconnectAllTo"]; MochiKit.Signal.__new__=function(win){ var m=MochiKit.Base; this._document=document; this._window=win; this._lock=false; this._dirty=false; try{ this.connect(window,"onunload",this._unloadCache); } catch(e){ } this.EXPORT_TAGS={":common":this.EXPORT,":all":m.concat(this.EXPORT,this.EXPORT_OK)}; m.nameFunctions(this); }; MochiKit.Signal.__new__(this); if(MochiKit.__export__){ connect=MochiKit.Signal.connect; disconnect=MochiKit.Signal.disconnect; disconnectAll=MochiKit.Signal.disconnectAll; signal=MochiKit.Signal.signal; } MochiKit.Base._exportSymbols(this,MochiKit.Signal); MochiKit.Base._deps("Position",["Base","DOM","Style"]); MochiKit.Position.NAME="MochiKit.Position"; MochiKit.Position.VERSION="1.4.2"; MochiKit.Position.__repr__=function(){ return "["+this.NAME+" "+this.VERSION+"]"; }; MochiKit.Position.toString=function(){ return this.__repr__(); }; MochiKit.Position.EXPORT_OK=[]; MochiKit.Position.EXPORT=[]; MochiKit.Base.update(MochiKit.Position,{includeScrollOffsets:false,prepare:function(){ var _5bb=window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft||0; var _5bc=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0; this.windowOffset=new MochiKit.Style.Coordinates(_5bb,_5bc); },cumulativeOffset:function(_5bd){ var _5be=0; var _5bf=0; do{ _5be+=_5bd.offsetTop||0; _5bf+=_5bd.offsetLeft||0; _5bd=_5bd.offsetParent; }while(_5bd); return new MochiKit.Style.Coordinates(_5bf,_5be); },realOffset:function(_5c0){ var _5c1=0; var _5c2=0; do{ _5c1+=_5c0.scrollTop||0; _5c2+=_5c0.scrollLeft||0; _5c0=_5c0.parentNode; }while(_5c0); return new MochiKit.Style.Coordinates(_5c2,_5c1); },within:function(_5c3,x,y){ if(this.includeScrollOffsets){ return this.withinIncludingScrolloffsets(_5c3,x,y); } this.xcomp=x; this.ycomp=y; this.offset=this.cumulativeOffset(_5c3); if(_5c3.style.position=="fixed"){ this.offset.x+=this.windowOffset.x; this.offset.y+=this.windowOffset.y; } return (y>=this.offset.y&&y=this.offset.x&&x=this.offset.y&&this.ycomp=this.offset.x&&this.xcomp"+el.innerHTML+""; },_roundTopCorners:function(el,_5f5,_5f6){ var _5f7=this._createCorner(_5f6); for(var i=0;i=0;i--){ _5fc.appendChild(this._createCornerSlice(_5fa,_5fb,i,"bottom")); } el.style.paddingBottom=0; el.appendChild(_5fc); },_createCorner:function(_5fe){ var dom=MochiKit.DOM; return dom.DIV({style:{backgroundColor:_5fe.toString()}}); },_createCornerSlice:function(_600,_601,n,_603){ var _604=MochiKit.DOM.SPAN(); var _605=_604.style; _605.backgroundColor=_600.toString(); _605.display="block"; _605.height="1px"; _605.overflow="hidden"; _605.fontSize="1px"; var _606=this._borderColor(_600,_601); if(this.options.border&&n===0){ _605.borderTopStyle="solid"; _605.borderTopWidth="1px"; _605.borderLeftWidth="0px"; _605.borderRightWidth="0px"; _605.borderBottomWidth="0px"; _605.height="0px"; _605.borderColor=_606.toString(); }else{ if(_606){ _605.borderColor=_606.toString(); _605.borderStyle="solid"; _605.borderWidth="0px 1px"; } } if(!this.options.compact&&(n==(this.options.numSlices-1))){ _605.height="2px"; } this._setMargin(_604,n,_603); this._setBorder(_604,n,_603); return _604; },_setOptions:function(_607){ this.options={corners:"all",color:"fromElement",bgColor:"fromParent",blend:true,border:false,compact:false,__unstable__wrapElement:false}; MochiKit.Base.update(this.options,_607); this.options.numSlices=(this.options.compact?2:4); },_whichSideTop:function(){ var _608=this.options.corners; if(this._hasString(_608,"all","top")){ return ""; } var _609=(_608.indexOf("tl")!=-1); var _60a=(_608.indexOf("tr")!=-1); if(_609&&_60a){ return ""; } if(_609){ return "left"; } if(_60a){ return "right"; } return ""; },_whichSideBottom:function(){ var _60b=this.options.corners; if(this._hasString(_60b,"all","bottom")){ return ""; } var _60c=(_60b.indexOf("bl")!=-1); var _60d=(_60b.indexOf("br")!=-1); if(_60c&&_60d){ return ""; } if(_60c){ return "left"; } if(_60d){ return "right"; } return ""; },_borderColor:function(_60e,_60f){ if(_60e=="transparent"){ return _60f; }else{ if(this.options.border){ return this.options.border; }else{ if(this.options.blend){ return _60f.blendedColor(_60e); } } } return ""; },_setMargin:function(el,n,_612){ var _613=this._marginSize(n)+"px"; var _614=(_612=="top"?this._whichSideTop():this._whichSideBottom()); var _615=el.style; if(_614=="left"){ _615.marginLeft=_613; _615.marginRight="0px"; }else{ if(_614=="right"){ _615.marginRight=_613; _615.marginLeft="0px"; }else{ _615.marginLeft=_613; _615.marginRight=_613; } } },_setBorder:function(el,n,_618){ var _619=this._borderSize(n)+"px"; var _61a=(_618=="top"?this._whichSideTop():this._whichSideBottom()); var _61b=el.style; if(_61a=="left"){ _61b.borderLeftWidth=_619; _61b.borderRightWidth="0px"; }else{ if(_61a=="right"){ _61b.borderRightWidth=_619; _61b.borderLeftWidth="0px"; }else{ _61b.borderLeftWidth=_619; _61b.borderRightWidth=_619; } } },_marginSize:function(n){ if(this.isTransparent){ return 0; } var o=this.options; if(o.compact&&o.blend){ var _61e=[1,0]; return _61e[n]; }else{ if(o.compact){ var _61f=[2,1]; return _61f[n]; }else{ if(o.blend){ var _620=[3,2,1,0]; return _620[n]; }else{ var _621=[5,3,2,1]; return _621[n]; } } } },_borderSize:function(n){ var o=this.options; var _624; if(o.compact&&(o.blend||this.isTransparent)){ return 1; }else{ if(o.compact){ _624=[1,0]; }else{ if(o.blend){ _624=[2,1,1,1]; }else{ if(o.border){ _624=[0,2,0,0]; }else{ if(this.isTransparent){ _624=[5,3,2,1]; }else{ return 0; } } } } } return _624[n]; },_hasString:function(str){ for(var i=1;i=(_651||i)){ _651=i; } },this.effects); _64d=_651||_64d; break; case "break": ma(function(e){ e.finalize(); },this.effects); break; } _64c.startOn+=_64d; _64c.finishOn+=_64d; if(!_64c.options.queue.limit||this.effects.length<_64c.options.queue.limit){ this.effects.push(_64c); } if(!this.interval){ this.interval=this.startLoop(MochiKit.Base.bind(this.loop,this),40); } },startLoop:function(func,_656){ return setInterval(func,_656); },remove:function(_657){ this.effects=MochiKit.Base.filter(function(e){ return e!=_657; },this.effects); if(!this.effects.length){ this.stopLoop(this.interval); this.interval=null; } },stopLoop:function(_659){ clearInterval(_659); },loop:function(){ var _65a=new Date().getTime(); MochiKit.Base.map(function(_65b){ _65b.loop(_65a); },this.effects); }}); MochiKit.Visual.Queues={instances:{},get:function(_65c){ if(typeof (_65c)!="string"){ return _65c; } if(!this.instances[_65c]){ this.instances[_65c]=new MochiKit.Visual.ScopedQueue(); } return this.instances[_65c]; }}; MochiKit.Visual.Queue=MochiKit.Visual.Queues.get("global"); MochiKit.Visual.DefaultOptions={transition:MochiKit.Visual.Transitions.sinoidal,duration:1,fps:25,sync:false,from:0,to:1,delay:0,queue:"parallel"}; MochiKit.Visual.Base=function(){ }; MochiKit.Visual.Base.prototype={__class__:MochiKit.Visual.Base,start:function(_65d){ var v=MochiKit.Visual; this.options=MochiKit.Base.setdefault(_65d,v.DefaultOptions); this.currentFrame=0; this.state="idle"; this.startOn=this.options.delay*1000; this.finishOn=this.startOn+(this.options.duration*1000); this.event("beforeStart"); if(!this.options.sync){ v.Queues.get(typeof (this.options.queue)=="string"?"global":this.options.queue.scope).add(this); } },loop:function(_65f){ if(_65f>=this.startOn){ if(_65f>=this.finishOn){ return this.finalize(); } var pos=(_65f-this.startOn)/(this.finishOn-this.startOn); var _661=Math.round(pos*this.options.fps*this.options.duration); if(_661>this.currentFrame){ this.render(pos); this.currentFrame=_661; } } },render:function(pos){ if(this.state=="idle"){ this.state="running"; this.event("beforeSetup"); this.setup(); this.event("afterSetup"); } if(this.state=="running"){ if(this.options.transition){ pos=this.options.transition(pos); } pos*=(this.options.to-this.options.from); pos+=this.options.from; this.event("beforeUpdate"); this.update(pos); this.event("afterUpdate"); } },cancel:function(){ if(!this.options.sync){ MochiKit.Visual.Queues.get(typeof (this.options.queue)=="string"?"global":this.options.queue.scope).remove(this); } this.state="finished"; },finalize:function(){ this.render(1); this.cancel(); this.event("beforeFinish"); this.finish(); this.event("afterFinish"); },setup:function(){ },finish:function(){ },update:function(_663){ },event:function(_664){ if(this.options[_664+"Internal"]){ this.options[_664+"Internal"](this); } if(this.options[_664]){ this.options[_664](this); } },repr:function(){ return "["+this.__class__.NAME+", options:"+MochiKit.Base.repr(this.options)+"]"; }}; MochiKit.Visual.Parallel=function(_665,_666){ var cls=arguments.callee; if(!(this instanceof cls)){ return new cls(_665,_666); } this.__init__(_665,_666); }; MochiKit.Visual.Parallel.prototype=new MochiKit.Visual.Base(); MochiKit.Base.update(MochiKit.Visual.Parallel.prototype,{__class__:MochiKit.Visual.Parallel,__init__:function(_668,_669){ this.effects=_668||[]; this.start(_669); },update:function(_66a){ MochiKit.Base.map(function(_66b){ _66b.render(_66a); },this.effects); },finish:function(){ MochiKit.Base.map(function(_66c){ _66c.finalize(); },this.effects); }}); MochiKit.Visual.Sequence=function(_66d,_66e){ var cls=arguments.callee; if(!(this instanceof cls)){ return new cls(_66d,_66e); } this.__init__(_66d,_66e); }; MochiKit.Visual.Sequence.prototype=new MochiKit.Visual.Base(); MochiKit.Base.update(MochiKit.Visual.Sequence.prototype,{__class__:MochiKit.Visual.Sequence,__init__:function(_670,_671){ var defs={transition:MochiKit.Visual.Transitions.linear,duration:0}; this.effects=_670||[]; MochiKit.Base.map(function(_673){ defs.duration+=_673.options.duration; },this.effects); MochiKit.Base.setdefault(_671,defs); this.start(_671); },update:function(_674){ var time=_674*this.options.duration; for(var i=0;i0){ this.fontSize=parseFloat(_694); this.fontSizeType=_695; } },this),["em","px","%"]); this.factor=(this.options.scaleTo-this.options.scaleFrom)/100; if(/^content/.test(this.options.scaleMode)){ this.dims=[this.element.scrollHeight,this.element.scrollWidth]; }else{ if(this.options.scaleMode=="box"){ this.dims=[this.element.offsetHeight,this.element.offsetWidth]; }else{ this.dims=[this.options.scaleMode.originalHeight,this.options.scaleMode.originalWidth]; } } },update:function(_696){ var _697=(this.options.scaleFrom/100)+(this.factor*_696); if(this.options.scaleContent&&this.fontSize){ MochiKit.Style.setStyle(this.element,{fontSize:this.fontSize*_697+this.fontSizeType}); } this.setDimensions(this.dims[0]*_697,this.dims[1]*_697); },finish:function(){ if(this.restoreAfterFinish){ MochiKit.Style.setStyle(this.element,this.originalStyle); } },setDimensions:function(_698,_699){ var d={}; var r=Math.round; if(/MSIE/.test(navigator.userAgent)){ r=Math.ceil; } if(this.options.scaleX){ d.width=r(_699)+"px"; } if(this.options.scaleY){ d.height=r(_698)+"px"; } if(this.options.scaleFromCenter){ var topd=(_698-this.dims[0])/2; var _69d=(_699-this.dims[1])/2; if(this.elementPositioning=="absolute"){ if(this.options.scaleY){ d.top=this.originalTop-topd+"px"; } if(this.options.scaleX){ d.left=this.originalLeft-_69d+"px"; } }else{ if(this.options.scaleY){ d.top=-topd+"px"; } if(this.options.scaleX){ d.left=-_69d+"px"; } } } MochiKit.Style.setStyle(this.element,d); }}); MochiKit.Visual.Highlight=function(_69e,_69f){ var cls=arguments.callee; if(!(this instanceof cls)){ return new cls(_69e,_69f); } this.__init__(_69e,_69f); }; MochiKit.Visual.Highlight.prototype=new MochiKit.Visual.Base(); MochiKit.Base.update(MochiKit.Visual.Highlight.prototype,{__class__:MochiKit.Visual.Highlight,__init__:function(_6a1,_6a2){ this.element=MochiKit.DOM.getElement(_6a1); _6a2=MochiKit.Base.update({startcolor:"#ffff99"},_6a2); this.start(_6a2); },setup:function(){ var b=MochiKit.Base; var s=MochiKit.Style; if(s.getStyle(this.element,"display")=="none"){ this.cancel(); return; } this.oldStyle={backgroundImage:s.getStyle(this.element,"background-image")}; s.setStyle(this.element,{backgroundImage:"none"}); if(!this.options.endcolor){ this.options.endcolor=MochiKit.Color.Color.fromBackground(this.element).toHexString(); } if(b.isUndefinedOrNull(this.options.restorecolor)){ this.options.restorecolor=s.getStyle(this.element,"background-color"); } this._base=b.map(b.bind(function(i){ return parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16); },this),[0,1,2]); this._delta=b.map(b.bind(function(i){ return parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i]; },this),[0,1,2]); },update:function(_6a7){ var m="#"; MochiKit.Base.map(MochiKit.Base.bind(function(i){ m+=MochiKit.Color.toColorPart(Math.round(this._base[i]+this._delta[i]*_6a7)); },this),[0,1,2]); MochiKit.Style.setStyle(this.element,{backgroundColor:m}); },finish:function(){ MochiKit.Style.setStyle(this.element,MochiKit.Base.update(this.oldStyle,{backgroundColor:this.options.restorecolor})); }}); MochiKit.Visual.ScrollTo=function(_6aa,_6ab){ var cls=arguments.callee; if(!(this instanceof cls)){ return new cls(_6aa,_6ab); } this.__init__(_6aa,_6ab); }; MochiKit.Visual.ScrollTo.prototype=new MochiKit.Visual.Base(); MochiKit.Base.update(MochiKit.Visual.ScrollTo.prototype,{__class__:MochiKit.Visual.ScrollTo,__init__:function(_6ad,_6ae){ this.element=MochiKit.DOM.getElement(_6ad); this.start(_6ae); },setup:function(){ var p=MochiKit.Position; p.prepare(); var _6b0=p.cumulativeOffset(this.element); if(this.options.offset){ _6b0.y+=this.options.offset; } var max; if(window.innerHeight){ max=window.innerHeight-window.height; }else{ if(document.documentElement&&document.documentElement.clientHeight){ max=document.documentElement.clientHeight-document.body.scrollHeight; }else{ if(document.body){ max=document.body.clientHeight-document.body.scrollHeight; } } } this.scrollStart=p.windowOffset.y; this.delta=(_6b0.y>max?max:_6b0.y)-this.scrollStart; },update:function(_6b2){ var p=MochiKit.Position; p.prepare(); window.scrollTo(p.windowOffset.x,this.scrollStart+(_6b2*this.delta)); }}); MochiKit.Visual.CSS_LENGTH=/^(([\+\-]?[0-9\.]+)(em|ex|px|in|cm|mm|pt|pc|\%))|0$/; MochiKit.Visual.Morph=function(_6b4,_6b5){ var cls=arguments.callee; if(!(this instanceof cls)){ return new cls(_6b4,_6b5); } this.__init__(_6b4,_6b5); }; MochiKit.Visual.Morph.prototype=new MochiKit.Visual.Base(); MochiKit.Base.update(MochiKit.Visual.Morph.prototype,{__class__:MochiKit.Visual.Morph,__init__:function(_6b7,_6b8){ this.element=MochiKit.DOM.getElement(_6b7); this.start(_6b8); },setup:function(){ var b=MochiKit.Base; var _6ba=this.options.style; this.styleStart={}; this.styleEnd={}; this.units={}; var _6bb,unit; for(var s in _6ba){ _6bb=_6ba[s]; s=b.camelize(s); if(MochiKit.Visual.CSS_LENGTH.test(_6bb)){ var _6be=_6bb.match(/^([\+\-]?[0-9\.]+)(.*)$/); _6bb=parseFloat(_6be[1]); unit=(_6be.length==3)?_6be[2]:null; this.styleEnd[s]=_6bb; this.units[s]=unit; _6bb=MochiKit.Style.getStyle(this.element,s); _6be=_6bb.match(/^([\+\-]?[0-9\.]+)(.*)$/); _6bb=parseFloat(_6be[1]); this.styleStart[s]=_6bb; }else{ if(/[Cc]olor$/.test(s)){ var c=MochiKit.Color.Color; _6bb=c.fromString(_6bb); if(_6bb){ this.units[s]="color"; this.styleEnd[s]=_6bb.toHexString(); _6bb=MochiKit.Style.getStyle(this.element,s); this.styleStart[s]=c.fromString(_6bb).toHexString(); this.styleStart[s]=b.map(b.bind(function(i){ return parseInt(this.styleStart[s].slice(i*2+1,i*2+3),16); },this),[0,1,2]); this.styleEnd[s]=b.map(b.bind(function(i){ return parseInt(this.styleEnd[s].slice(i*2+1,i*2+3),16); },this),[0,1,2]); } }else{ this.element.style[s]=_6bb; } } } },update:function(_6c2){ var _6c3; for(var s in this.styleStart){ if(this.units[s]=="color"){ var m="#"; var _6c6=this.styleStart[s]; var end=this.styleEnd[s]; MochiKit.Base.map(MochiKit.Base.bind(function(i){ m+=MochiKit.Color.toColorPart(Math.round(_6c6[i]+(end[i]-_6c6[i])*_6c2)); },this),[0,1,2]); this.element.style[s]=m; }else{ _6c3=this.styleStart[s]+Math.round((this.styleEnd[s]-this.styleStart[s])*_6c2*1000)/1000+this.units[s]; this.element.style[s]=_6c3; } } }}); MochiKit.Visual.fade=function(_6c9,_6ca){ var s=MochiKit.Style; var _6cc=s.getStyle(_6c9,"opacity"); _6ca=MochiKit.Base.update({from:s.getStyle(_6c9,"opacity")||1,to:0,afterFinishInternal:function(_6cd){ if(_6cd.options.to!==0){ return; } s.hideElement(_6cd.element); s.setStyle(_6cd.element,{"opacity":_6cc}); }},_6ca); return new MochiKit.Visual.Opacity(_6c9,_6ca); }; MochiKit.Visual.appear=function(_6ce,_6cf){ var s=MochiKit.Style; var v=MochiKit.Visual; _6cf=MochiKit.Base.update({from:(s.getStyle(_6ce,"display")=="none"?0:s.getStyle(_6ce,"opacity")||0),to:1,afterFinishInternal:function(_6d2){ v.forceRerendering(_6d2.element); },beforeSetupInternal:function(_6d3){ s.setStyle(_6d3.element,{"opacity":_6d3.options.from}); s.showElement(_6d3.element); }},_6cf); return new v.Opacity(_6ce,_6cf); }; MochiKit.Visual.puff=function(_6d4,_6d5){ var s=MochiKit.Style; var v=MochiKit.Visual; _6d4=MochiKit.DOM.getElement(_6d4); var _6d8=MochiKit.Style.getElementDimensions(_6d4,true); var _6d9={position:s.getStyle(_6d4,"position"),top:_6d4.style.top,left:_6d4.style.left,width:_6d4.style.width,height:_6d4.style.height,opacity:s.getStyle(_6d4,"opacity")}; _6d5=MochiKit.Base.update({beforeSetupInternal:function(_6da){ MochiKit.Position.absolutize(_6da.effects[0].element); },afterFinishInternal:function(_6db){ s.hideElement(_6db.effects[0].element); s.setStyle(_6db.effects[0].element,_6d9); },scaleContent:true,scaleFromCenter:true},_6d5); return new v.Parallel([new v.Scale(_6d4,200,{sync:true,scaleFromCenter:_6d5.scaleFromCenter,scaleMode:{originalHeight:_6d8.h,originalWidth:_6d8.w},scaleContent:_6d5.scaleContent,restoreAfterFinish:true}),new v.Opacity(_6d4,{sync:true,to:0})],_6d5); }; MochiKit.Visual.blindUp=function(_6dc,_6dd){ var d=MochiKit.DOM; var s=MochiKit.Style; _6dc=d.getElement(_6dc); var _6e0=s.getElementDimensions(_6dc,true); var _6e1=s.makeClipping(_6dc); _6dd=MochiKit.Base.update({scaleContent:false,scaleX:false,scaleMode:{originalHeight:_6e0.h,originalWidth:_6e0.w},restoreAfterFinish:true,afterFinishInternal:function(_6e2){ s.hideElement(_6e2.element); s.undoClipping(_6e2.element,_6e1); }},_6dd); return new MochiKit.Visual.Scale(_6dc,0,_6dd); }; MochiKit.Visual.blindDown=function(_6e3,_6e4){ var d=MochiKit.DOM; var s=MochiKit.Style; _6e3=d.getElement(_6e3); var _6e7=s.getElementDimensions(_6e3,true); var _6e8; _6e4=MochiKit.Base.update({scaleContent:false,scaleX:false,scaleFrom:0,scaleMode:{originalHeight:_6e7.h,originalWidth:_6e7.w},restoreAfterFinish:true,afterSetupInternal:function(_6e9){ _6e8=s.makeClipping(_6e9.element); s.setStyle(_6e9.element,{height:"0px"}); s.showElement(_6e9.element); },afterFinishInternal:function(_6ea){ s.undoClipping(_6ea.element,_6e8); }},_6e4); return new MochiKit.Visual.Scale(_6e3,100,_6e4); }; MochiKit.Visual.switchOff=function(_6eb,_6ec){ var d=MochiKit.DOM; var s=MochiKit.Style; _6eb=d.getElement(_6eb); var _6ef=s.getElementDimensions(_6eb,true); var _6f0=s.getStyle(_6eb,"opacity"); var _6f1; _6ec=MochiKit.Base.update({duration:0.7,restoreAfterFinish:true,beforeSetupInternal:function(_6f2){ s.makePositioned(_6eb); _6f1=s.makeClipping(_6eb); },afterFinishInternal:function(_6f3){ s.hideElement(_6eb); s.undoClipping(_6eb,_6f1); s.undoPositioned(_6eb); s.setStyle(_6eb,{"opacity":_6f0}); }},_6ec); var v=MochiKit.Visual; return new v.Sequence([new v.appear(_6eb,{sync:true,duration:0.57*_6ec.duration,from:0,transition:v.Transitions.flicker}),new v.Scale(_6eb,1,{sync:true,duration:0.43*_6ec.duration,scaleFromCenter:true,scaleX:false,scaleMode:{originalHeight:_6ef.h,originalWidth:_6ef.w},scaleContent:false,restoreAfterFinish:true})],_6ec); }; MochiKit.Visual.dropOut=function(_6f5,_6f6){ var d=MochiKit.DOM; var s=MochiKit.Style; _6f5=d.getElement(_6f5); var _6f9={top:s.getStyle(_6f5,"top"),left:s.getStyle(_6f5,"left"),opacity:s.getStyle(_6f5,"opacity")}; _6f6=MochiKit.Base.update({duration:0.5,distance:100,beforeSetupInternal:function(_6fa){ s.makePositioned(_6fa.effects[0].element); },afterFinishInternal:function(_6fb){ s.hideElement(_6fb.effects[0].element); s.undoPositioned(_6fb.effects[0].element); s.setStyle(_6fb.effects[0].element,_6f9); }},_6f6); var v=MochiKit.Visual; return new v.Parallel([new v.Move(_6f5,{x:0,y:_6f6.distance,sync:true}),new v.Opacity(_6f5,{sync:true,to:0})],_6f6); }; MochiKit.Visual.shake=function(_6fd,_6fe){ var d=MochiKit.DOM; var v=MochiKit.Visual; var s=MochiKit.Style; _6fd=d.getElement(_6fd); var _702={top:s.getStyle(_6fd,"top"),left:s.getStyle(_6fd,"left")}; _6fe=MochiKit.Base.update({duration:0.5,afterFinishInternal:function(_703){ s.undoPositioned(_6fd); s.setStyle(_6fd,_702); }},_6fe); return new v.Sequence([new v.Move(_6fd,{sync:true,duration:0.1*_6fe.duration,x:20,y:0}),new v.Move(_6fd,{sync:true,duration:0.2*_6fe.duration,x:-40,y:0}),new v.Move(_6fd,{sync:true,duration:0.2*_6fe.duration,x:40,y:0}),new v.Move(_6fd,{sync:true,duration:0.2*_6fe.duration,x:-40,y:0}),new v.Move(_6fd,{sync:true,duration:0.2*_6fe.duration,x:40,y:0}),new v.Move(_6fd,{sync:true,duration:0.1*_6fe.duration,x:-20,y:0})],_6fe); }; MochiKit.Visual.slideDown=function(_704,_705){ var d=MochiKit.DOM; var b=MochiKit.Base; var s=MochiKit.Style; _704=d.getElement(_704); if(!_704.firstChild){ throw new Error("MochiKit.Visual.slideDown must be used on a element with a child"); } d.removeEmptyTextNodes(_704); var _709=s.getStyle(_704.firstChild,"bottom")||0; var _70a=s.getElementDimensions(_704,true); var _70b; _705=b.update({scaleContent:false,scaleX:false,scaleFrom:0,scaleMode:{originalHeight:_70a.h,originalWidth:_70a.w},restoreAfterFinish:true,afterSetupInternal:function(_70c){ s.makePositioned(_70c.element); s.makePositioned(_70c.element.firstChild); if(/Opera/.test(navigator.userAgent)){ s.setStyle(_70c.element,{top:""}); } _70b=s.makeClipping(_70c.element); s.setStyle(_70c.element,{height:"0px"}); s.showElement(_70c.element); },afterUpdateInternal:function(_70d){ var _70e=s.getElementDimensions(_70d.element,true); s.setStyle(_70d.element.firstChild,{bottom:(_70d.dims[0]-_70e.h)+"px"}); },afterFinishInternal:function(_70f){ s.undoClipping(_70f.element,_70b); if(/MSIE/.test(navigator.userAgent)){ s.undoPositioned(_70f.element); s.undoPositioned(_70f.element.firstChild); }else{ s.undoPositioned(_70f.element.firstChild); s.undoPositioned(_70f.element); } s.setStyle(_70f.element.firstChild,{bottom:_709}); }},_705); return new MochiKit.Visual.Scale(_704,100,_705); }; MochiKit.Visual.slideUp=function(_710,_711){ var d=MochiKit.DOM; var b=MochiKit.Base; var s=MochiKit.Style; _710=d.getElement(_710); if(!_710.firstChild){ throw new Error("MochiKit.Visual.slideUp must be used on a element with a child"); } d.removeEmptyTextNodes(_710); var _715=s.getStyle(_710.firstChild,"bottom"); var _716=s.getElementDimensions(_710,true); var _717; _711=b.update({scaleContent:false,scaleX:false,scaleMode:{originalHeight:_716.h,originalWidth:_716.w},scaleFrom:100,restoreAfterFinish:true,beforeStartInternal:function(_718){ s.makePositioned(_718.element); s.makePositioned(_718.element.firstChild); if(/Opera/.test(navigator.userAgent)){ s.setStyle(_718.element,{top:""}); } _717=s.makeClipping(_718.element); s.showElement(_718.element); },afterUpdateInternal:function(_719){ var _71a=s.getElementDimensions(_719.element,true); s.setStyle(_719.element.firstChild,{bottom:(_719.dims[0]-_71a.h)+"px"}); },afterFinishInternal:function(_71b){ s.hideElement(_71b.element); s.undoClipping(_71b.element,_717); s.undoPositioned(_71b.element.firstChild); s.undoPositioned(_71b.element); s.setStyle(_71b.element.firstChild,{bottom:_715}); }},_711); return new MochiKit.Visual.Scale(_710,0,_711); }; MochiKit.Visual.squish=function(_71c,_71d){ var d=MochiKit.DOM; var b=MochiKit.Base; var s=MochiKit.Style; var _721=s.getElementDimensions(_71c,true); var _722; _71d=b.update({restoreAfterFinish:true,scaleMode:{originalHeight:_721.w,originalWidth:_721.h},beforeSetupInternal:function(_723){ _722=s.makeClipping(_723.element); },afterFinishInternal:function(_724){ s.hideElement(_724.element); s.undoClipping(_724.element,_722); }},_71d); return new MochiKit.Visual.Scale(_71c,/Opera/.test(navigator.userAgent)?1:0,_71d); }; MochiKit.Visual.grow=function(_725,_726){ var d=MochiKit.DOM; var v=MochiKit.Visual; var s=MochiKit.Style; _725=d.getElement(_725); _726=MochiKit.Base.update({direction:"center",moveTransition:v.Transitions.sinoidal,scaleTransition:v.Transitions.sinoidal,opacityTransition:v.Transitions.full,scaleContent:true,scaleFromCenter:false},_726); var _72a={top:_725.style.top,left:_725.style.left,height:_725.style.height,width:_725.style.width,opacity:s.getStyle(_725,"opacity")}; var dims=s.getElementDimensions(_725,true); var _72c,_72d; var _72e,_72f; switch(_726.direction){ case "top-left": _72c=_72d=_72e=_72f=0; break; case "top-right": _72c=dims.w; _72d=_72f=0; _72e=-dims.w; break; case "bottom-left": _72c=_72e=0; _72d=dims.h; _72f=-dims.h; break; case "bottom-right": _72c=dims.w; _72d=dims.h; _72e=-dims.w; _72f=-dims.h; break; case "center": _72c=dims.w/2; _72d=dims.h/2; _72e=-dims.w/2; _72f=-dims.h/2; break; } var _730=MochiKit.Base.update({beforeSetupInternal:function(_731){ s.setStyle(_731.effects[0].element,{height:"0px"}); s.showElement(_731.effects[0].element); },afterFinishInternal:function(_732){ s.undoClipping(_732.effects[0].element); s.undoPositioned(_732.effects[0].element); s.setStyle(_732.effects[0].element,_72a); }},_726); return new v.Move(_725,{x:_72c,y:_72d,duration:0.01,beforeSetupInternal:function(_733){ s.hideElement(_733.element); s.makeClipping(_733.element); s.makePositioned(_733.element); },afterFinishInternal:function(_734){ new v.Parallel([new v.Opacity(_734.element,{sync:true,to:1,from:0,transition:_726.opacityTransition}),new v.Move(_734.element,{x:_72e,y:_72f,sync:true,transition:_726.moveTransition}),new v.Scale(_734.element,100,{scaleMode:{originalHeight:dims.h,originalWidth:dims.w},sync:true,scaleFrom:/Opera/.test(navigator.userAgent)?1:0,transition:_726.scaleTransition,scaleContent:_726.scaleContent,scaleFromCenter:_726.scaleFromCenter,restoreAfterFinish:true})],_730); }}); }; MochiKit.Visual.shrink=function(_735,_736){ var d=MochiKit.DOM; var v=MochiKit.Visual; var s=MochiKit.Style; _735=d.getElement(_735); _736=MochiKit.Base.update({direction:"center",moveTransition:v.Transitions.sinoidal,scaleTransition:v.Transitions.sinoidal,opacityTransition:v.Transitions.none,scaleContent:true,scaleFromCenter:false},_736); var _73a={top:_735.style.top,left:_735.style.left,height:_735.style.height,width:_735.style.width,opacity:s.getStyle(_735,"opacity")}; var dims=s.getElementDimensions(_735,true); var _73c,_73d; switch(_736.direction){ case "top-left": _73c=_73d=0; break; case "top-right": _73c=dims.w; _73d=0; break; case "bottom-left": _73c=0; _73d=dims.h; break; case "bottom-right": _73c=dims.w; _73d=dims.h; break; case "center": _73c=dims.w/2; _73d=dims.h/2; break; } var _73e; var _73f=MochiKit.Base.update({beforeStartInternal:function(_740){ s.makePositioned(_740.effects[0].element); _73e=s.makeClipping(_740.effects[0].element); },afterFinishInternal:function(_741){ s.hideElement(_741.effects[0].element); s.undoClipping(_741.effects[0].element,_73e); s.undoPositioned(_741.effects[0].element); s.setStyle(_741.effects[0].element,_73a); }},_736); return new v.Parallel([new v.Opacity(_735,{sync:true,to:0,from:1,transition:_736.opacityTransition}),new v.Scale(_735,/Opera/.test(navigator.userAgent)?1:0,{scaleMode:{originalHeight:dims.h,originalWidth:dims.w},sync:true,transition:_736.scaleTransition,scaleContent:_736.scaleContent,scaleFromCenter:_736.scaleFromCenter,restoreAfterFinish:true}),new v.Move(_735,{x:_73c,y:_73d,sync:true,transition:_736.moveTransition})],_73f); }; MochiKit.Visual.pulsate=function(_742,_743){ var d=MochiKit.DOM; var v=MochiKit.Visual; var b=MochiKit.Base; var _747=MochiKit.Style.getStyle(_742,"opacity"); _743=b.update({duration:3,from:0,afterFinishInternal:function(_748){ MochiKit.Style.setStyle(_748.element,{"opacity":_747}); }},_743); var _749=_743.transition||v.Transitions.sinoidal; _743.transition=function(pos){ return _749(1-v.Transitions.pulse(pos,_743.pulses)); }; return new v.Opacity(_742,_743); }; MochiKit.Visual.fold=function(_74b,_74c){ var d=MochiKit.DOM; var v=MochiKit.Visual; var s=MochiKit.Style; _74b=d.getElement(_74b); var _750=s.getElementDimensions(_74b,true); var _751={top:_74b.style.top,left:_74b.style.left,width:_74b.style.width,height:_74b.style.height}; var _752=s.makeClipping(_74b); _74c=MochiKit.Base.update({scaleContent:false,scaleX:false,scaleMode:{originalHeight:_750.h,originalWidth:_750.w},afterFinishInternal:function(_753){ new v.Scale(_74b,1,{scaleContent:false,scaleY:false,scaleMode:{originalHeight:_750.h,originalWidth:_750.w},afterFinishInternal:function(_754){ s.hideElement(_754.element); s.undoClipping(_754.element,_752); s.setStyle(_754.element,_751); }}); }},_74c); return new v.Scale(_74b,5,_74c); }; MochiKit.Visual.Color=MochiKit.Color.Color; MochiKit.Visual.getElementsComputedStyle=MochiKit.DOM.computedStyle; MochiKit.Visual.__new__=function(){ var m=MochiKit.Base; m.nameFunctions(this); this.EXPORT_TAGS={":common":this.EXPORT,":all":m.concat(this.EXPORT,this.EXPORT_OK)}; }; MochiKit.Visual.EXPORT=["roundElement","roundClass","tagifyText","multiple","toggle","Parallel","Sequence","Opacity","Move","Scale","Highlight","ScrollTo","Morph","fade","appear","puff","blindUp","blindDown","switchOff","dropOut","shake","slideDown","slideUp","squish","grow","shrink","pulsate","fold"]; MochiKit.Visual.EXPORT_OK=["Base","PAIRS"]; MochiKit.Visual.__new__(); MochiKit.Base._exportSymbols(this,MochiKit.Visual); MochiKit.Base._deps("DragAndDrop",["Base","Iter","DOM","Signal","Visual","Position"]); MochiKit.DragAndDrop.NAME="MochiKit.DragAndDrop"; MochiKit.DragAndDrop.VERSION="1.4.2"; MochiKit.DragAndDrop.__repr__=function(){ return "["+this.NAME+" "+this.VERSION+"]"; }; MochiKit.DragAndDrop.toString=function(){ return this.__repr__(); }; MochiKit.DragAndDrop.EXPORT=["Droppable","Draggable"]; MochiKit.DragAndDrop.EXPORT_OK=["Droppables","Draggables"]; MochiKit.DragAndDrop.Droppables={drops:[],remove:function(_756){ this.drops=MochiKit.Base.filter(function(d){ return d.element!=MochiKit.DOM.getElement(_756); },this.drops); },register:function(drop){ this.drops.push(drop); },unregister:function(drop){ this.drops=MochiKit.Base.filter(function(d){ return d!=drop; },this.drops); },prepare:function(_75b){ MochiKit.Base.map(function(drop){ if(drop.isAccepted(_75b)){ if(drop.options.activeclass){ MochiKit.DOM.addElementClass(drop.element,drop.options.activeclass); } drop.options.onactive(drop.element,_75b); } },this.drops); },findDeepestChild:function(_75d){ deepest=_75d[0]; for(i=1;i<_75d.length;++i){ if(MochiKit.DOM.isChildNode(_75d[i].element,deepest.element)){ deepest=_75d[i]; } } return deepest; },show:function(_75e,_75f){ if(!this.drops.length){ return; } var _760=[]; if(this.last_active){ this.last_active.deactivate(); } MochiKit.Iter.forEach(this.drops,function(drop){ if(drop.isAffected(_75e,_75f)){ _760.push(drop); } }); if(_760.length>0){ drop=this.findDeepestChild(_760); MochiKit.Position.within(drop.element,_75e.page.x,_75e.page.y); drop.options.onhover(_75f,drop.element,MochiKit.Position.overlap(drop.options.overlap,drop.element)); drop.activate(); } },fire:function(_762,_763){ if(!this.last_active){ return; } MochiKit.Position.prepare(); if(this.last_active.isAffected(_762.mouse(),_763)){ this.last_active.options.ondrop(_763,this.last_active.element,_762); } },reset:function(_764){ MochiKit.Base.map(function(drop){ if(drop.options.activeclass){ MochiKit.DOM.removeElementClass(drop.element,drop.options.activeclass); } drop.options.ondesactive(drop.element,_764); },this.drops); if(this.last_active){ this.last_active.deactivate(); } }}; MochiKit.DragAndDrop.Droppable=function(_766,_767){ var cls=arguments.callee; if(!(this instanceof cls)){ return new cls(_766,_767); } this.__init__(_766,_767); }; MochiKit.DragAndDrop.Droppable.prototype={__class__:MochiKit.DragAndDrop.Droppable,__init__:function(_769,_76a){ var d=MochiKit.DOM; var b=MochiKit.Base; this.element=d.getElement(_769); this.options=b.update({greedy:true,hoverclass:null,activeclass:null,hoverfunc:b.noop,accept:null,onactive:b.noop,ondesactive:b.noop,onhover:b.noop,ondrop:b.noop,containment:[],tree:false},_76a); this.options._containers=[]; b.map(MochiKit.Base.bind(function(c){ this.options._containers.push(d.getElement(c)); },this),this.options.containment); MochiKit.Style.makePositioned(this.element); MochiKit.DragAndDrop.Droppables.register(this); },isContained:function(_76e){ if(this.options._containers.length){ var _76f; if(this.options.tree){ _76f=_76e.treeNode; }else{ _76f=_76e.parentNode; } return MochiKit.Iter.some(this.options._containers,function(c){ return _76f==c; }); }else{ return true; } },isAccepted:function(_771){ return ((!this.options.accept)||MochiKit.Iter.some(this.options.accept,function(c){ return MochiKit.DOM.hasElementClass(_771,c); })); },isAffected:function(_773,_774){ return ((this.element!=_774)&&this.isContained(_774)&&this.isAccepted(_774)&&MochiKit.Position.within(this.element,_773.page.x,_773.page.y)); },deactivate:function(){ if(this.options.hoverclass){ MochiKit.DOM.removeElementClass(this.element,this.options.hoverclass); } this.options.hoverfunc(this.element,false); MochiKit.DragAndDrop.Droppables.last_active=null; },activate:function(){ if(this.options.hoverclass){ MochiKit.DOM.addElementClass(this.element,this.options.hoverclass); } this.options.hoverfunc(this.element,true); MochiKit.DragAndDrop.Droppables.last_active=this; },destroy:function(){ MochiKit.DragAndDrop.Droppables.unregister(this); },repr:function(){ return "["+this.__class__.NAME+", options:"+MochiKit.Base.repr(this.options)+"]"; }}; MochiKit.DragAndDrop.Draggables={drags:[],register:function(_775){ if(this.drags.length===0){ var conn=MochiKit.Signal.connect; this.eventMouseUp=conn(document,"onmouseup",this,this.endDrag); this.eventMouseMove=conn(document,"onmousemove",this,this.updateDrag); this.eventKeypress=conn(document,"onkeypress",this,this.keyPress); } this.drags.push(_775); },unregister:function(_777){ this.drags=MochiKit.Base.filter(function(d){ return d!=_777; },this.drags); if(this.drags.length===0){ var disc=MochiKit.Signal.disconnect; disc(this.eventMouseUp); disc(this.eventMouseMove); disc(this.eventKeypress); } },activate:function(_77a){ window.focus(); this.activeDraggable=_77a; },deactivate:function(){ this.activeDraggable=null; },updateDrag:function(_77b){ if(!this.activeDraggable){ return; } var _77c=_77b.mouse(); if(this._lastPointer&&(MochiKit.Base.repr(this._lastPointer.page)==MochiKit.Base.repr(_77c.page))){ return; } this._lastPointer=_77c; this.activeDraggable.updateDrag(_77b,_77c); },endDrag:function(_77d){ if(!this.activeDraggable){ return; } this._lastPointer=null; this.activeDraggable.endDrag(_77d); this.activeDraggable=null; },keyPress:function(_77e){ if(this.activeDraggable){ this.activeDraggable.keyPress(_77e); } },notify:function(_77f,_780,_781){ MochiKit.Signal.signal(this,_77f,_780,_781); }}; MochiKit.DragAndDrop.Draggable=function(_782,_783){ var cls=arguments.callee; if(!(this instanceof cls)){ return new cls(_782,_783); } this.__init__(_782,_783); }; MochiKit.DragAndDrop.Draggable.prototype={__class__:MochiKit.DragAndDrop.Draggable,__init__:function(_785,_786){ var v=MochiKit.Visual; var b=MochiKit.Base; _786=b.update({handle:false,starteffect:function(_789){ this._savedOpacity=MochiKit.Style.getStyle(_789,"opacity")||1; new v.Opacity(_789,{duration:0.2,from:this._savedOpacity,to:0.7}); },reverteffect:function(_78a,_78b,_78c){ var dur=Math.sqrt(Math.abs(_78b^2)+Math.abs(_78c^2))*0.02; return new v.Move(_78a,{x:-_78c,y:-_78b,duration:dur}); },endeffect:function(_78e){ new v.Opacity(_78e,{duration:0.2,from:0.7,to:this._savedOpacity}); },onchange:b.noop,zindex:1000,revert:false,scroll:false,scrollSensitivity:20,scrollSpeed:15,snap:false},_786); var d=MochiKit.DOM; this.element=d.getElement(_785); if(_786.handle&&(typeof (_786.handle)=="string")){ this.handle=d.getFirstElementByTagAndClassName(null,_786.handle,this.element); } if(!this.handle){ this.handle=d.getElement(_786.handle); } if(!this.handle){ this.handle=this.element; } if(_786.scroll&&!_786.scroll.scrollTo&&!_786.scroll.outerHTML){ _786.scroll=d.getElement(_786.scroll); this._isScrollChild=MochiKit.DOM.isChildNode(this.element,_786.scroll); } MochiKit.Style.makePositioned(this.element); this.delta=this.currentDelta(); this.options=_786; this.dragging=false; this.eventMouseDown=MochiKit.Signal.connect(this.handle,"onmousedown",this,this.initDrag); MochiKit.DragAndDrop.Draggables.register(this); },destroy:function(){ MochiKit.Signal.disconnect(this.eventMouseDown); MochiKit.DragAndDrop.Draggables.unregister(this); },currentDelta:function(){ var s=MochiKit.Style.getStyle; return [parseInt(s(this.element,"left")||"0"),parseInt(s(this.element,"top")||"0")]; },initDrag:function(_791){ if(!_791.mouse().button.left){ return; } var src=_791.target(); var _793=(src.tagName||"").toUpperCase(); if(_793==="INPUT"||_793==="SELECT"||_793==="OPTION"||_793==="BUTTON"||_793==="TEXTAREA"){ return; } if(this._revert){ this._revert.cancel(); this._revert=null; } var _794=_791.mouse(); var pos=MochiKit.Position.cumulativeOffset(this.element); this.offset=[_794.page.x-pos.x,_794.page.y-pos.y]; MochiKit.DragAndDrop.Draggables.activate(this); _791.stop(); },startDrag:function(_796){ this.dragging=true; if(this.options.selectclass){ MochiKit.DOM.addElementClass(this.element,this.options.selectclass); } if(this.options.zindex){ this.originalZ=parseInt(MochiKit.Style.getStyle(this.element,"z-index")||"0"); this.element.style.zIndex=this.options.zindex; } if(this.options.ghosting){ this._clone=this.element.cloneNode(true); this.ghostPosition=MochiKit.Position.absolutize(this.element); this.element.parentNode.insertBefore(this._clone,this.element); } if(this.options.scroll){ if(this.options.scroll==window){ var _797=this._getWindowScroll(this.options.scroll); this.originalScrollLeft=_797.left; this.originalScrollTop=_797.top; }else{ this.originalScrollLeft=this.options.scroll.scrollLeft; this.originalScrollTop=this.options.scroll.scrollTop; } } MochiKit.DragAndDrop.Droppables.prepare(this.element); MochiKit.DragAndDrop.Draggables.notify("start",this,_796); if(this.options.starteffect){ this.options.starteffect(this.element); } },updateDrag:function(_798,_799){ if(!this.dragging){ this.startDrag(_798); } MochiKit.Position.prepare(); MochiKit.DragAndDrop.Droppables.show(_799,this.element); MochiKit.DragAndDrop.Draggables.notify("drag",this,_798); this.draw(_799); this.options.onchange(this); if(this.options.scroll){ this.stopScrolling(); var p,q; if(this.options.scroll==window){ var s=this._getWindowScroll(this.options.scroll); p=new MochiKit.Style.Coordinates(s.left,s.top); q=new MochiKit.Style.Coordinates(s.left+s.width,s.top+s.height); }else{ p=MochiKit.Position.page(this.options.scroll); p.x+=this.options.scroll.scrollLeft; p.y+=this.options.scroll.scrollTop; p.x+=(window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft||0); p.y+=(window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0); q=new MochiKit.Style.Coordinates(p.x+this.options.scroll.offsetWidth,p.y+this.options.scroll.offsetHeight); } var _79d=[0,0]; if(_799.page.x>(q.x-this.options.scrollSensitivity)){ _79d[0]=_799.page.x-(q.x-this.options.scrollSensitivity); }else{ if(_799.page.x<(p.x+this.options.scrollSensitivity)){ _79d[0]=_799.page.x-(p.x+this.options.scrollSensitivity); } } if(_799.page.y>(q.y-this.options.scrollSensitivity)){ _79d[1]=_799.page.y-(q.y-this.options.scrollSensitivity); }else{ if(_799.page.y<(p.y+this.options.scrollSensitivity)){ _79d[1]=_799.page.y-(p.y+this.options.scrollSensitivity); } } this.startScrolling(_79d); } if(/AppleWebKit/.test(navigator.appVersion)){ window.scrollBy(0,0); } _798.stop(); },finishDrag:function(_79e,_79f){ var dr=MochiKit.DragAndDrop; this.dragging=false; if(this.options.selectclass){ MochiKit.DOM.removeElementClass(this.element,this.options.selectclass); } if(this.options.ghosting){ MochiKit.Position.relativize(this.element,this.ghostPosition); MochiKit.DOM.removeElement(this._clone); this._clone=null; } if(_79f){ dr.Droppables.fire(_79e,this.element); } dr.Draggables.notify("end",this,_79e); var _7a1=this.options.revert; if(_7a1&&typeof (_7a1)=="function"){ _7a1=_7a1(this.element); } var d=this.currentDelta(); if(_7a1&&this.options.reverteffect){ this._revert=this.options.reverteffect(this.element,d[1]-this.delta[1],d[0]-this.delta[0]); }else{ this.delta=d; } if(this.options.zindex){ this.element.style.zIndex=this.originalZ; } if(this.options.endeffect){ this.options.endeffect(this.element); } dr.Draggables.deactivate(); dr.Droppables.reset(this.element); },keyPress:function(_7a3){ if(_7a3.key().string!="KEY_ESCAPE"){ return; } this.finishDrag(_7a3,false); _7a3.stop(); },endDrag:function(_7a4){ if(!this.dragging){ return; } this.stopScrolling(); this.finishDrag(_7a4,true); _7a4.stop(); },draw:function(_7a5){ var pos=MochiKit.Position.cumulativeOffset(this.element); var d=this.currentDelta(); pos.x-=d[0]; pos.y-=d[1]; if(this.options.scroll&&(this.options.scroll!=window&&this._isScrollChild)){ pos.x-=this.options.scroll.scrollLeft-this.originalScrollLeft; pos.y-=this.options.scroll.scrollTop-this.originalScrollTop; } var p=[_7a5.page.x-pos.x-this.offset[0],_7a5.page.y-pos.y-this.offset[1]]; if(this.options.snap){ if(typeof (this.options.snap)=="function"){ p=this.options.snap(p[0],p[1]); }else{ if(this.options.snap instanceof Array){ var i=-1; p=MochiKit.Base.map(MochiKit.Base.bind(function(v){ i+=1; return Math.round(v/this.options.snap[i])*this.options.snap[i]; },this),p); }else{ p=MochiKit.Base.map(MochiKit.Base.bind(function(v){ return Math.round(v/this.options.snap)*this.options.snap; },this),p); } } } var _7ac=this.element.style; if((!this.options.constraint)||(this.options.constraint=="horizontal")){ _7ac.left=p[0]+"px"; } if((!this.options.constraint)||(this.options.constraint=="vertical")){ _7ac.top=p[1]+"px"; } if(_7ac.visibility=="hidden"){ _7ac.visibility=""; } },stopScrolling:function(){ if(this.scrollInterval){ clearInterval(this.scrollInterval); this.scrollInterval=null; MochiKit.DragAndDrop.Draggables._lastScrollPointer=null; } },startScrolling:function(_7ad){ if(!_7ad[0]&&!_7ad[1]){ return; } this.scrollSpeed=[_7ad[0]*this.options.scrollSpeed,_7ad[1]*this.options.scrollSpeed]; this.lastScrolled=new Date(); this.scrollInterval=setInterval(MochiKit.Base.bind(this.scroll,this),10); },scroll:function(){ var _7ae=new Date(); var _7af=_7ae-this.lastScrolled; this.lastScrolled=_7ae; if(this.options.scroll==window){ var s=this._getWindowScroll(this.options.scroll); if(this.scrollSpeed[0]||this.scrollSpeed[1]){ var dm=_7af/1000; this.options.scroll.scrollTo(s.left+dm*this.scrollSpeed[0],s.top+dm*this.scrollSpeed[1]); } }else{ this.options.scroll.scrollLeft+=this.scrollSpeed[0]*_7af/1000; this.options.scroll.scrollTop+=this.scrollSpeed[1]*_7af/1000; } var d=MochiKit.DragAndDrop; MochiKit.Position.prepare(); d.Droppables.show(d.Draggables._lastPointer,this.element); d.Draggables.notify("drag",this); if(this._isScrollChild){ d.Draggables._lastScrollPointer=d.Draggables._lastScrollPointer||d.Draggables._lastPointer; d.Draggables._lastScrollPointer.x+=this.scrollSpeed[0]*_7af/1000; d.Draggables._lastScrollPointer.y+=this.scrollSpeed[1]*_7af/1000; if(d.Draggables._lastScrollPointer.x<0){ d.Draggables._lastScrollPointer.x=0; } if(d.Draggables._lastScrollPointer.y<0){ d.Draggables._lastScrollPointer.y=0; } this.draw(d.Draggables._lastScrollPointer); } this.options.onchange(this); },_getWindowScroll:function(win){ var vp,w,h; MochiKit.DOM.withWindow(win,function(){ vp=MochiKit.Style.getViewportPosition(win.document); }); if(win.innerWidth){ w=win.innerWidth; h=win.innerHeight; }else{ if(win.document.documentElement&&win.document.documentElement.clientWidth){ w=win.document.documentElement.clientWidth; h=win.document.documentElement.clientHeight; }else{ w=win.document.body.offsetWidth; h=win.document.body.offsetHeight; } } return {top:vp.y,left:vp.x,width:w,height:h}; },repr:function(){ return "["+this.__class__.NAME+", options:"+MochiKit.Base.repr(this.options)+"]"; }}; MochiKit.DragAndDrop.__new__=function(){ MochiKit.Base.nameFunctions(this); this.EXPORT_TAGS={":common":this.EXPORT,":all":MochiKit.Base.concat(this.EXPORT,this.EXPORT_OK)}; }; MochiKit.DragAndDrop.__new__(); MochiKit.Base._exportSymbols(this,MochiKit.DragAndDrop); MochiKit.Base._deps("Sortable",["Base","Iter","DOM","Position","DragAndDrop"]); MochiKit.Sortable.NAME="MochiKit.Sortable"; MochiKit.Sortable.VERSION="1.4.2"; MochiKit.Sortable.__repr__=function(){ return "["+this.NAME+" "+this.VERSION+"]"; }; MochiKit.Sortable.toString=function(){ return this.__repr__(); }; MochiKit.Sortable.EXPORT=[]; MochiKit.Sortable.EXPORT_OK=[]; MochiKit.Base.update(MochiKit.Sortable,{sortables:{},_findRootElement:function(_7b7){ while(_7b7.tagName.toUpperCase()!="BODY"){ if(_7b7.id&&MochiKit.Sortable.sortables[_7b7.id]){ return _7b7; } _7b7=_7b7.parentNode; } },_createElementId:function(_7b8){ if(_7b8.id==null||_7b8.id==""){ var d=MochiKit.DOM; var id; var _7bb=1; while(d.getElement(id="sortable"+_7bb)!=null){ _7bb+=1; } d.setNodeAttribute(_7b8,"id",id); } },options:function(_7bc){ _7bc=MochiKit.Sortable._findRootElement(MochiKit.DOM.getElement(_7bc)); if(!_7bc){ return; } return MochiKit.Sortable.sortables[_7bc.id]; },destroy:function(_7bd){ var s=MochiKit.Sortable.options(_7bd); var b=MochiKit.Base; var d=MochiKit.DragAndDrop; if(s){ MochiKit.Signal.disconnect(s.startHandle); MochiKit.Signal.disconnect(s.endHandle); b.map(function(dr){ d.Droppables.remove(dr); },s.droppables); b.map(function(dr){ dr.destroy(); },s.draggables); delete MochiKit.Sortable.sortables[s.element.id]; } },create:function(_7c3,_7c4){ _7c3=MochiKit.DOM.getElement(_7c3); var self=MochiKit.Sortable; self._createElementId(_7c3); _7c4=MochiKit.Base.update({element:_7c3,tag:"li",dropOnEmpty:false,tree:false,treeTag:"ul",overlap:"vertical",constraint:"vertical",containment:[_7c3],handle:false,only:false,hoverclass:null,ghosting:false,scroll:false,scrollSensitivity:20,scrollSpeed:15,format:/^[^_]*_(.*)$/,onChange:MochiKit.Base.noop,onUpdate:MochiKit.Base.noop,accept:null},_7c4); self.destroy(_7c3); var _7c6={revert:true,ghosting:_7c4.ghosting,scroll:_7c4.scroll,scrollSensitivity:_7c4.scrollSensitivity,scrollSpeed:_7c4.scrollSpeed,constraint:_7c4.constraint,handle:_7c4.handle}; if(_7c4.starteffect){ _7c6.starteffect=_7c4.starteffect; } if(_7c4.reverteffect){ _7c6.reverteffect=_7c4.reverteffect; }else{ if(_7c4.ghosting){ _7c6.reverteffect=function(_7c7){ _7c7.style.top=0; _7c7.style.left=0; }; } } if(_7c4.endeffect){ _7c6.endeffect=_7c4.endeffect; } if(_7c4.zindex){ _7c6.zindex=_7c4.zindex; } var _7c8={overlap:_7c4.overlap,containment:_7c4.containment,hoverclass:_7c4.hoverclass,onhover:self.onHover,tree:_7c4.tree,accept:_7c4.accept}; var _7c9={onhover:self.onEmptyHover,overlap:_7c4.overlap,containment:_7c4.containment,hoverclass:_7c4.hoverclass,accept:_7c4.accept}; MochiKit.DOM.removeEmptyTextNodes(_7c3); _7c4.draggables=[]; _7c4.droppables=[]; if(_7c4.dropOnEmpty||_7c4.tree){ new MochiKit.DragAndDrop.Droppable(_7c3,_7c9); _7c4.droppables.push(_7c3); } MochiKit.Base.map(function(e){ var _7cb=_7c4.handle?MochiKit.DOM.getFirstElementByTagAndClassName(null,_7c4.handle,e):e; _7c4.draggables.push(new MochiKit.DragAndDrop.Draggable(e,MochiKit.Base.update(_7c6,{handle:_7cb}))); new MochiKit.DragAndDrop.Droppable(e,_7c8); if(_7c4.tree){ e.treeNode=_7c3; } _7c4.droppables.push(e); },(self.findElements(_7c3,_7c4)||[])); if(_7c4.tree){ MochiKit.Base.map(function(e){ new MochiKit.DragAndDrop.Droppable(e,_7c9); e.treeNode=_7c3; _7c4.droppables.push(e); },(self.findTreeElements(_7c3,_7c4)||[])); } self.sortables[_7c3.id]=_7c4; _7c4.lastValue=self.serialize(_7c3); _7c4.startHandle=MochiKit.Signal.connect(MochiKit.DragAndDrop.Draggables,"start",MochiKit.Base.partial(self.onStart,_7c3)); _7c4.endHandle=MochiKit.Signal.connect(MochiKit.DragAndDrop.Draggables,"end",MochiKit.Base.partial(self.onEnd,_7c3)); },onStart:function(_7cd,_7ce){ var self=MochiKit.Sortable; var _7d0=self.options(_7cd); _7d0.lastValue=self.serialize(_7d0.element); },onEnd:function(_7d1,_7d2){ var self=MochiKit.Sortable; self.unmark(); var _7d4=self.options(_7d1); if(_7d4.lastValue!=self.serialize(_7d4.element)){ _7d4.onUpdate(_7d4.element); } },findElements:function(_7d5,_7d6){ return MochiKit.Sortable.findChildren(_7d5,_7d6.only,_7d6.tree,_7d6.tag); },findTreeElements:function(_7d7,_7d8){ return MochiKit.Sortable.findChildren(_7d7,_7d8.only,_7d8.tree?true:false,_7d8.treeTag); },findChildren:function(_7d9,only,_7db,_7dc){ if(!_7d9.hasChildNodes()){ return null; } _7dc=_7dc.toUpperCase(); if(only){ only=MochiKit.Base.flattenArray([only]); } var _7dd=[]; MochiKit.Base.map(function(e){ if(e.tagName&&e.tagName.toUpperCase()==_7dc&&(!only||MochiKit.Iter.some(only,function(c){ return MochiKit.DOM.hasElementClass(e,c); }))){ _7dd.push(e); } if(_7db){ var _7e0=MochiKit.Sortable.findChildren(e,only,_7db,_7dc); if(_7e0&&_7e0.length>0){ _7dd=_7dd.concat(_7e0); } } },_7d9.childNodes); return _7dd; },onHover:function(_7e1,_7e2,_7e3){ if(MochiKit.DOM.isChildNode(_7e2,_7e1)){ return; } var self=MochiKit.Sortable; if(_7e3>0.33&&_7e3<0.66&&self.options(_7e2).tree){ return; }else{ if(_7e3>0.5){ self.mark(_7e2,"before"); if(_7e2.previousSibling!=_7e1){ var _7e5=_7e1.parentNode; _7e1.style.visibility="hidden"; _7e2.parentNode.insertBefore(_7e1,_7e2); if(_7e2.parentNode!=_7e5){ self.options(_7e5).onChange(_7e1); } self.options(_7e2.parentNode).onChange(_7e1); } }else{ self.mark(_7e2,"after"); var _7e6=_7e2.nextSibling||null; if(_7e6!=_7e1){ var _7e5=_7e1.parentNode; _7e1.style.visibility="hidden"; _7e2.parentNode.insertBefore(_7e1,_7e6); if(_7e2.parentNode!=_7e5){ self.options(_7e5).onChange(_7e1); } self.options(_7e2.parentNode).onChange(_7e1); } } } },_offsetSize:function(_7e7,type){ if(type=="vertical"||type=="height"){ return _7e7.offsetHeight; }else{ return _7e7.offsetWidth; } },onEmptyHover:function(_7e9,_7ea,_7eb){ var _7ec=_7e9.parentNode; var self=MochiKit.Sortable; var _7ee=self.options(_7ea); if(!MochiKit.DOM.isChildNode(_7ea,_7e9)){ var _7ef; var _7f0=self.findElements(_7ea,{tag:_7ee.tag,only:_7ee.only}); var _7f1=null; if(_7f0){ var _7f2=self._offsetSize(_7ea,_7ee.overlap)*(1-_7eb); for(_7ef=0;_7ef<_7f0.length;_7ef+=1){ if(_7f2-self._offsetSize(_7f0[_7ef],_7ee.overlap)>=0){ _7f2-=self._offsetSize(_7f0[_7ef],_7ee.overlap); }else{ if(_7f2-(self._offsetSize(_7f0[_7ef],_7ee.overlap)/2)>=0){ _7f1=_7ef+1<_7f0.length?_7f0[_7ef+1]:null; break; }else{ _7f1=_7f0[_7ef]; break; } } } } _7ea.insertBefore(_7e9,_7f1); self.options(_7ec).onChange(_7e9); _7ee.onChange(_7e9); } },unmark:function(){ var m=MochiKit.Sortable._marker; if(m){ MochiKit.Style.hideElement(m); } },mark:function(_7f4,_7f5){ var d=MochiKit.DOM; var self=MochiKit.Sortable; var _7f8=self.options(_7f4.parentNode); if(_7f8&&!_7f8.ghosting){ return; } if(!self._marker){ self._marker=d.getElement("dropmarker")||document.createElement("DIV"); MochiKit.Style.hideElement(self._marker); d.addElementClass(self._marker,"dropmarker"); self._marker.style.position="absolute"; document.getElementsByTagName("body").item(0).appendChild(self._marker); } var _7f9=MochiKit.Position.cumulativeOffset(_7f4); self._marker.style.left=_7f9.x+"px"; self._marker.style.top=_7f9.y+"px"; if(_7f5=="after"){ if(_7f8.overlap=="horizontal"){ self._marker.style.left=(_7f9.x+_7f4.clientWidth)+"px"; }else{ self._marker.style.top=(_7f9.y+_7f4.clientHeight)+"px"; } } MochiKit.Style.showElement(self._marker); },_tree:function(_7fa,_7fb,_7fc){ var self=MochiKit.Sortable; var _7fe=self.findElements(_7fa,_7fb)||[]; for(var i=0;i<_7fe.length;++i){ var _800=_7fe[i].id.match(_7fb.format); if(!_800){ continue; } var _801={id:encodeURIComponent(_800?_800[1]:null),element:_7fa,parent:_7fc,children:[],position:_7fc.children.length,container:self._findChildrenElement(_7fe[i],_7fb.treeTag.toUpperCase())}; if(_801.container){ self._tree(_801.container,_7fb,_801); } _7fc.children.push(_801); } return _7fc; },_findChildrenElement:function(_802,_803){ if(_802&&_802.hasChildNodes){ _803=_803.toUpperCase(); for(var i=0;i<_802.childNodes.length;++i){ if(_802.childNodes[i].tagName.toUpperCase()==_803){ return _802.childNodes[i]; } } } return null; },tree:function(_805,_806){ _805=MochiKit.DOM.getElement(_805); var _807=MochiKit.Sortable.options(_805); _806=MochiKit.Base.update({tag:_807.tag,treeTag:_807.treeTag,only:_807.only,name:_805.id,format:_807.format},_806||{}); var root={id:null,parent:null,children:new Array,container:_805,position:0}; return MochiKit.Sortable._tree(_805,_806,root); },setSequence:function(_809,_80a,_80b){ var self=MochiKit.Sortable; var b=MochiKit.Base; _809=MochiKit.DOM.getElement(_809); _80b=b.update(self.options(_809),_80b||{}); var _80e={}; b.map(function(n){ var m=n.id.match(_80b.format); if(m){ _80e[m[1]]=[n,n.parentNode]; } n.parentNode.removeChild(n); },self.findElements(_809,_80b)); b.map(function(_811){ var n=_80e[_811]; if(n){ n[1].appendChild(n[0]); delete _80e[_811]; } },_80a); },_constructIndex:function(node){ var _814=""; do{ if(node.id){ _814="["+node.position+"]"+_814; } }while((node=node.parent)!=null); return _814; },sequence:function(_815,_816){ _815=MochiKit.DOM.getElement(_815); var self=MochiKit.Sortable; var _816=MochiKit.Base.update(self.options(_815),_816||{}); return MochiKit.Base.map(function(item){ return item.id.match(_816.format)?item.id.match(_816.format)[1]:""; },MochiKit.DOM.getElement(self.findElements(_815,_816)||[])); },serialize:function(_819,_81a){ _819=MochiKit.DOM.getElement(_819); var self=MochiKit.Sortable; _81a=MochiKit.Base.update(self.options(_819),_81a||{}); var name=encodeURIComponent(_81a.name||_819.id); if(_81a.tree){ return MochiKit.Base.flattenArray(MochiKit.Base.map(function(item){ return [name+self._constructIndex(item)+"[id]="+encodeURIComponent(item.id)].concat(item.children.map(arguments.callee)); },self.tree(_819,_81a).children)).join("&"); }else{ return MochiKit.Base.map(function(item){ return name+"[]="+encodeURIComponent(item); },self.sequence(_819,_81a)).join("&"); } }}); MochiKit.Sortable.Sortable=MochiKit.Sortable; MochiKit.Sortable.__new__=function(){ MochiKit.Base.nameFunctions(this); this.EXPORT_TAGS={":common":this.EXPORT,":all":MochiKit.Base.concat(this.EXPORT,this.EXPORT_OK)}; }; MochiKit.Sortable.__new__(); MochiKit.Base._exportSymbols(this,MochiKit.Sortable); if(typeof (MochiKit)=="undefined"){ MochiKit={}; } if(typeof (MochiKit.MochiKit)=="undefined"){ MochiKit.MochiKit={}; } MochiKit.MochiKit.NAME="MochiKit.MochiKit"; MochiKit.MochiKit.VERSION="1.4.2"; MochiKit.MochiKit.__repr__=function(){ return "["+this.NAME+" "+this.VERSION+"]"; }; MochiKit.MochiKit.toString=function(){ return this.__repr__(); }; MochiKit.MochiKit.SUBMODULES=["Base","Iter","Logging","DateTime","Format","Async","DOM","Selector","Style","LoggingPane","Color","Signal","Position","Visual","DragAndDrop","Sortable"]; if(typeof (JSAN)!="undefined"||typeof (dojo)!="undefined"){ if(typeof (dojo)!="undefined"){ dojo.provide("MochiKit.MochiKit"); (function(lst){ for(var i=0;i"); } } })(); } PKK9p=U>H1H1turbogears/static/js/widget.jsvar Widget={}; Widget.imagedir='/tg_static/images/'; Widget.exists = function(val) { return typeof(val) != 'undefined'; } Widget.renderHandler = function(func,params) { var p=''; for(var i=0;i= 0;i--) { var cell = headers[i]; var column_name = (Widget.exists(cell.column))? cell.column:cell; if(Widget.columnIsHidden(content,column_name)) continue; lastActiveCell = i; break; } for(var i=0;i < headers.length;i++) { var cell = headers[i]; var column_name = (Widget.exists(cell.column))? cell.column:cell; var label = (Widget.exists(cell.label))? cell.label:column_name; var props = {'id':'TH_'+ id +'_'+ column_name,'class':'heading'}; var sortIcon = ''; if(Widget.columnIsHidden(content,column_name)) continue; if(Widget.exists(cell.sort)) { sortIcon = IMG({'id':'TH_IMG_'+ id +'_'+ column_name, 'src':Widget.imagedir +'arrow_'+ cell.sort +'_small.png', 'border':'0'}); } if(Widget.exists(actions.sort)) { var sortOrder = (Widget.exists(cell.sort))? cell.sort:'down'; props = {'onclick':actions.sort +"('"+ column_name +"','"+ sortOrder +"')", 'class':'pointer heading', 'title':'Sort by '+ label}; label = SPAN(null,sortIcon,label); } if(i==lastActiveCell && !(Widget.exists(actions.remove) || Widget.exists(actions.edit) ) && Widget.exists(actions.column_management)) label = SPAN(null,Widget.grid.manageColumns(id,content),label); htr.appendChild(TH(props,label)); } if(Widget.exists(actions.remove) || Widget.exists(actions.edit)) { var cm = (Widget.exists(actions.column_management))? SPAN(null,Widget.grid.manageColumns(id,content)):''; htr.appendChild( TH({'id':'TH_'+ id,'class':'heading','style':'width:40px;'},cm)); } if(!htr.hasChildNodes() && Widget.exists(actions.column_management)) { props = {'id':'TH_'+ id +'_column_manage','class':'heading'}; htr.appendChild(TH(props, SPAN(null,Widget.grid.manageColumns(id,content)) ) ); } return htr; } Widget.grid.manageColumns = function(id,content) { var headers = content['headers']; var dropDown = UL({'id':'column_chooser_list','class':'column_chooser_list'}); for(var i=0;i < headers.length;i++) { var cell = headers[i]; var column_name = (Widget.exists(cell.column))? cell.column:cell; var label = (Widget.exists(cell.label))? cell.label:column_name; var icon = ''; if(!Widget.columnIsHidden(content,column_name)) { icon = IMG({'border':'0','src':Widget.imagedir+'save.png'}); } var p = content.actions.column_management.params.concat(column_name); var action= 'javascript:'+ Widget.renderHandler(content.actions.column_management['function'],p); dropDown.appendChild( LI({'onclick':action},A({'href':'#'},icon,label)) ); } return SPAN({'id':'column_chooser_'+ id,'float':'right'}, A({'href':'#','class':'column_chooser_link', 'onmouseover':'document.getElementById("column_chooser_list").style.display="block"', 'onmouseout':'document.getElementById("column_chooser_list").style.display="none"' }, IMG({'src':Widget.imagedir+'column_chooser.png','border':'0'}), dropDown ) ); } Widget.columnIsHidden = function(content,column_name) { if(!Widget.exists(content['hidden_columns'])) return false; for(var i=0;i< content['hidden_columns'].length;i++) { if(column_name==content['hidden_columns'][i]) return true; } return false; } Widget.grid.renderRows = function(id,content) { var rows = content['rows']; var actions = Widget.exists(content.actions)? content.actions:{}; var tb = TBODY(null); for(var i=0;i < rows.length;i++) { var row= rows[i]; var row_id = (Widget.exists(row[0].value))? row[0].value:row[0]; var cursor =(Widget.exists(actions.select))? ';cursor:pointer':''; var color = (i % 2 == 0)? Widget.grid.oddColor:Widget.grid.evenColor; var gtr = TR( { 'id':'TR_'+ id +'_'+ row_id, 'style':'background-color:#'+ color + cursor, 'class':(i % 2 == 0)?'odd':'even', 'onmouseover':'Widget.grid.highlight(this,true)', 'onmouseout':'Widget.grid.highlight(this,false,"'+ color +'")' } ); for(var j=0;j < row.length;j++) { var cell_value = (Widget.exists(row[j].value))? row[j].value:row[j]; var column_name = (Widget.exists(row[j].column))? row[j].column:cell_value; if(Widget.columnIsHidden(content,column_name)) continue; var cellid = 'TD_'+ id +'_'+ row_id +'_'+ column_name; var props = {'id':cellid,'valign':'top'}; if(Widget.exists(actions.select)) { var p = actions.select.params.concat(row_id); props={'onclick':Widget.renderHandler(actions.select['function'],p), 'class':'pointer', 'nowrap':'nowrap', 'valign':'top', 'id':cellid, 'title':'Select row' }; } gtr.appendChild( TD(props,cell_value)); } if(Widget.exists(actions.remove) || Widget.exists(actions.edit) ) gtr.appendChild( Widget.grid.renderRowActionsLink(actions,row_id) ); tb.appendChild(gtr); } return tb; } Widget.grid.renderRowActionsLink = function(actions,id) { var rem=''; var ed=''; if(Widget.exists(actions.remove)) { var p = actions.remove.params.concat([id]); rem= A({'href':'javascript:'+ Widget.renderHandler(actions.remove['function'],p),'title':'Remove Row'}, IMG({'src':Widget.imagedir+'remove.png','border':'0'}) ); } if(Widget.exists(actions.edit)) { var q = actions.edit.params.concat([id]); ed = A({'href':'javascript:'+ Widget.renderHandler(actions.edit['function'],q),'title':'Edit Row'}, IMG({'src':Widget.imagedir+'edit.png','border':'0'}) ); } return TD({'align':'right'},ed,rem); } Widget.grid.highlight = function(el,state,originalColor) { if(state) { el.style.backgroundColor = '#'+ Widget.grid.highlightColor; } else { el.style.backgroundColor = '#'+ originalColor; } } /*********************************** SELECT ****************************/ Widget.select = {} Widget.select.load = function(id,content) { var list= document.getElementById(id); if(!Widget.exists(list)) { alert('Are you shure the id for the list is correct?'); return; } for(var i=list.options.length-1;i>=0;i--) list.options[i] = null; for(var i=0;i=0;i--) { if(list.options[i]!=null && list.options[i].selected) list.options[i]=null; } } Widget.select.addSelectedOptionsFromSourceToDestination = function(src,dest) { if(src.selectedIndex==-1) return; var newList = []; for(var i=0;i 0) return values; } Widget.select.getOptionValuesAsCSV = function(list) { var csv=''; for(var i=0;i < list.options.length;i++) { if(csv!='')csv+=','; csv+=list.options[i].value; } return csv; } Widget.select.getSelectionsAsCSV = function(list) { var values = Widget.select.getSelections(list); var csv=''; for(var i=0;i < values.length;i++) { if(csv!='')csv+=','; csv+=values[i]; } return csv; } Widget.select.hasValue= function(list,value) { for(var i=0;iڝ!turbogears/static/js/__init__.pyc; ݸHIc@sdS(N((((s6build\bdist.win32\egg\turbogears\static\js\__init__.pys?sPKK9כoo(turbogears/static/js/tool-man/cookies.js/* Copyright (c) 2005 Tim Taylor Consulting (see LICENSE.txt) based on http://www.quirksmode.org/js/cookies.html */ ToolMan._cookieOven = { set : function(name, value, expirationInDays) { if (expirationInDays) { var date = new Date() date.setTime(date.getTime() + (expirationInDays * 24 * 60 * 60 * 1000)) var expires = "; expires=" + date.toGMTString() } else { var expires = "" } document.cookie = name + "=" + value + expires + "; path=/" }, get : function(name) { var namePattern = name + "=" var cookies = document.cookie.split(';') for(var i = 0, n = cookies.length; i < n; i++) { var c = cookies[i] while (c.charAt(0) == ' ') c = c.substring(1, c.length) if (c.indexOf(namePattern) == 0) return c.substring(namePattern.length, c.length) } return null }, eraseCookie : function(name) { createCookie(name, "", -1) } } PKK9<**,turbogears/static/js/tool-man/coordinates.js/* Copyright (c) 2005 Tim Taylor Consulting (see LICENSE.txt) */ /* FIXME: assumes position styles are specified in 'px' */ ToolMan._coordinatesFactory = { create : function(x, y) { // FIXME: Safari won't parse 'throw' and aborts trying to do anything with this file //if (isNaN(x) || isNaN(y)) throw "invalid x,y: " + x + "," + y return new _ToolManCoordinate(this, x, y) }, origin : function() { return this.create(0, 0) }, /* * FIXME: Safari 1.2, returns (0,0) on absolutely positioned elements */ topLeftPosition : function(element) { var left = parseInt(ToolMan.css().readStyle(element, "left")) var left = isNaN(left) ? 0 : left var top = parseInt(ToolMan.css().readStyle(element, "top")) var top = isNaN(top) ? 0 : top return this.create(left, top) }, bottomRightPosition : function(element) { return this.topLeftPosition(element).plus(this._size(element)) }, topLeftOffset : function(element) { var offset = this._offset(element) var parent = element.offsetParent while (parent) { offset = offset.plus(this._offset(parent)) parent = parent.offsetParent } return offset }, bottomRightOffset : function(element) { return this.topLeftOffset(element).plus( this.create(element.offsetWidth, element.offsetHeight)) }, scrollOffset : function() { if (window.pageXOffset) { return this.create(window.pageXOffset, window.pageYOffset) } else if (document.documentElement) { return this.create( document.body.scrollLeft + document.documentElement.scrollLeft, document.body.scrollTop + document.documentElement.scrollTop) } else if (document.body.scrollLeft >= 0) { return this.create(document.body.scrollLeft, document.body.scrollTop) } else { return this.create(0, 0) } }, clientSize : function() { if (window.innerHeight >= 0) { return this.create(window.innerWidth, window.innerHeight) } else if (document.documentElement) { return this.create(document.documentElement.clientWidth, document.documentElement.clientHeight) } else if (document.body.clientHeight >= 0) { return this.create(document.body.clientWidth, document.body.clientHeight) } else { return this.create(0, 0) } }, /** * mouse coordinate relative to the window (technically the * browser client area) i.e. the part showing your page * * NOTE: in Safari the coordinate is relative to the document */ mousePosition : function(event) { event = ToolMan.events().fix(event) return this.create(event.clientX, event.clientY) }, /** * mouse coordinate relative to the document */ mouseOffset : function(event) { event = ToolMan.events().fix(event) if (event.pageX >= 0 || event.pageX < 0) { return this.create(event.pageX, event.pageY) } else if (event.clientX >= 0 || event.clientX < 0) { return this.mousePosition(event).plus(this.scrollOffset()) } }, _size : function(element) { /* TODO: move to a Dimension class */ return this.create(element.offsetWidth, element.offsetHeight) }, _offset : function(element) { return this.create(element.offsetLeft, element.offsetTop) } } function _ToolManCoordinate(factory, x, y) { this.factory = factory this.x = isNaN(x) ? 0 : x this.y = isNaN(y) ? 0 : y } _ToolManCoordinate.prototype = { toString : function() { return "(" + this.x + "," + this.y + ")" }, plus : function(that) { return this.factory.create(this.x + that.x, this.y + that.y) }, minus : function(that) { return this.factory.create(this.x - that.x, this.y - that.y) }, min : function(that) { return this.factory.create( Math.min(this.x , that.x), Math.min(this.y , that.y)) }, max : function(that) { return this.factory.create( Math.max(this.x , that.x), Math.max(this.y , that.y)) }, constrainTo : function (one, two) { var min = one.min(two) var max = one.max(two) return this.max(min).min(max) }, distance : function (that) { return Math.sqrt(Math.pow(this.x - that.x, 2) + Math.pow(this.y - that.y, 2)) }, reposition : function(element) { element.style["top"] = this.y + "px" element.style["left"] = this.x + "px" } } PKK9Wmm%turbogears/static/js/tool-man/core.js/* Copyright (c) 2005 Tim Taylor Consulting Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ var ToolMan = { events : function() { if (!ToolMan._eventsFactory) throw "ToolMan Events module isn't loaded"; return ToolMan._eventsFactory }, css : function() { if (!ToolMan._cssFactory) throw "ToolMan CSS module isn't loaded"; return ToolMan._cssFactory }, coordinates : function() { if (!ToolMan._coordinatesFactory) throw "ToolMan Coordinates module isn't loaded"; return ToolMan._coordinatesFactory }, drag : function() { if (!ToolMan._dragFactory) throw "ToolMan Drag module isn't loaded"; return ToolMan._dragFactory }, dragsort : function() { if (!ToolMan._dragsortFactory) throw "ToolMan DragSort module isn't loaded"; return ToolMan._dragsortFactory }, helpers : function() { return ToolMan._helpers }, cookies : function() { if (!ToolMan._cookieOven) throw "ToolMan Cookie module isn't loaded"; return ToolMan._cookieOven }, junkdrawer : function() { return ToolMan._junkdrawer } } ToolMan._helpers = { map : function(array, func) { for (var i = 0, n = array.length; i < n; i++) func(array[i]) }, nextItem : function(item, nodeName) { if (item == null) return var next = item.nextSibling while (next != null) { if (next.nodeName == nodeName) return next next = next.nextSibling } return null }, previousItem : function(item, nodeName) { var previous = item.previousSibling while (previous != null) { if (previous.nodeName == nodeName) return previous previous = previous.previousSibling } return null }, moveBefore : function(item1, item2) { var parent = item1.parentNode parent.removeChild(item1) parent.insertBefore(item1, item2) }, moveAfter : function(item1, item2) { var parent = item1.parentNode parent.removeChild(item1) parent.insertBefore(item1, item2 ? item2.nextSibling : null) } } /** * scripts without a proper home * * stuff here is subject to change unapologetically and without warning */ ToolMan._junkdrawer = { serializeList : function(list) { var items = list.getElementsByTagName("li") var array = new Array() for (var i = 0, n = items.length; i < n; i++) { var item = items[i] array.push(ToolMan.junkdrawer()._identifier(item)) } return array.join('|') }, inspectListOrder : function(id) { alert(ToolMan.junkdrawer().serializeList(document.getElementById(id))) }, restoreListOrder : function(listID) { var list = document.getElementById(listID) if (list == null) return var cookie = ToolMan.cookies().get("list-" + listID) if (!cookie) return; var IDs = cookie.split('|') var items = ToolMan.junkdrawer()._itemsByID(list) for (var i = 0, n = IDs.length; i < n; i++) { var itemID = IDs[i] if (itemID in items) { var item = items[itemID] list.removeChild(item) list.insertBefore(item, null) } } }, _identifier : function(item) { var trim = ToolMan.junkdrawer().trim var identifier identifier = trim(item.getAttribute("id")) if (identifier != null && identifier.length > 0) return identifier; identifier = trim(item.getAttribute("itemID")) if (identifier != null && identifier.length > 0) return identifier; // FIXME: strip out special chars or make this an MD5 hash or something return trim(item.innerHTML) }, _itemsByID : function(list) { var array = new Array() var items = list.getElementsByTagName('li') for (var i = 0, n = items.length; i < n; i++) { var item = items[i] array[ToolMan.junkdrawer()._identifier(item)] = item } return array }, trim : function(text) { if (text == null) return null return text.replace(/^(\s+)?(.*\S)(\s+)?$/, '$2') } } PKK9yA$turbogears/static/js/tool-man/css.js/* Copyright (c) 2005 Tim Taylor Consulting (see LICENSE.txt) */ // TODO: write unit tests ToolMan._cssFactory = { readStyle : function(element, property) { if (element.style[property]) { return element.style[property] } else if (element.currentStyle) { return element.currentStyle[property] } else if (document.defaultView && document.defaultView.getComputedStyle) { var style = document.defaultView.getComputedStyle(element, null) return style.getPropertyValue(property) } else { return null } } } PKK9ke %turbogears/static/js/tool-man/drag.js/* Copyright (c) 2005 Tim Taylor Consulting (see LICENSE.txt) */ ToolMan._dragFactory = { createSimpleGroup : function(element, handle) { handle = handle ? handle : element var group = this.createGroup(element) group.setHandle(handle) group.transparentDrag() group.onTopWhileDragging() return group }, createGroup : function(element) { var group = new _ToolManDragGroup(this, element) var position = ToolMan.css().readStyle(element, 'position') if (position == 'static') { element.style["position"] = 'relative' } else if (position == 'absolute') { /* for Safari 1.2 */ ToolMan.coordinates().topLeftOffset(element).reposition(element) } // TODO: only if ToolMan.isDebugging() group.register('draginit', this._showDragEventStatus) group.register('dragmove', this._showDragEventStatus) group.register('dragend', this._showDragEventStatus) return group }, _showDragEventStatus : function(dragEvent) { window.status = dragEvent.toString() }, constraints : function() { return this._constraintFactory }, _createEvent : function(type, event, group) { return new _ToolManDragEvent(type, event, group) } } function _ToolManDragGroup(factory, element) { this.factory = factory this.element = element this._handle = null this._thresholdDistance = 0 this._transforms = new Array() // TODO: refactor into a helper object, move into events.js this._listeners = new Array() this._listeners['draginit'] = new Array() this._listeners['dragstart'] = new Array() this._listeners['dragmove'] = new Array() this._listeners['dragend'] = new Array() } _ToolManDragGroup.prototype = { /* * TODO: * - unregister(type, func) * - move custom event listener stuff into Event library * - keyboard nudging of "selected" group */ setHandle : function(handle) { var events = ToolMan.events() handle.toolManDragGroup = this events.register(handle, 'mousedown', this._dragInit) handle.onmousedown = function() { return false } if (this.element != handle) events.unregister(this.element, 'mousedown', this._dragInit) }, register : function(type, func) { this._listeners[type].push(func) }, addTransform : function(transformFunc) { this._transforms.push(transformFunc) }, verticalOnly : function() { this.addTransform(this.factory.constraints().vertical()) }, horizontalOnly : function() { this.addTransform(this.factory.constraints().horizontal()) }, setThreshold : function(thresholdDistance) { this._thresholdDistance = thresholdDistance }, transparentDrag : function(opacity) { var opacity = typeof(opacity) != "undefined" ? opacity : 0.75; var originalOpacity = ToolMan.css().readStyle(this.element, "opacity") this.register('dragstart', function(dragEvent) { var element = dragEvent.group.element element.style.opacity = opacity element.style.filter = 'alpha(opacity=' + (opacity * 100) + ')' }) this.register('dragend', function(dragEvent) { var element = dragEvent.group.element element.style.opacity = originalOpacity element.style.filter = 'alpha(opacity=100)' }) }, onTopWhileDragging : function(zIndex) { var zIndex = typeof(zIndex) != "undefined" ? zIndex : 100000; var originalZIndex = ToolMan.css().readStyle(this.element, "z-index") this.register('dragstart', function(dragEvent) { dragEvent.group.element.style.zIndex = zIndex }) this.register('dragend', function(dragEvent) { dragEvent.group.element.style.zIndex = originalZIndex }) }, _dragInit : function(event) { event = ToolMan.events().fix(event) var group = document.toolManDragGroup = this.toolManDragGroup var dragEvent = group.factory._createEvent('draginit', event, group) group._isThresholdExceeded = false group._initialMouseOffset = dragEvent.mouseOffset group._grabOffset = dragEvent.mouseOffset.minus(dragEvent.topLeftOffset) ToolMan.events().register(document, 'mousemove', group._drag) document.onmousemove = function() { return false } ToolMan.events().register(document, 'mouseup', group._dragEnd) group._notifyListeners(dragEvent) }, _drag : function(event) { event = ToolMan.events().fix(event) var coordinates = ToolMan.coordinates() var group = this.toolManDragGroup if (!group) return var dragEvent = group.factory._createEvent('dragmove', event, group) var newTopLeftOffset = dragEvent.mouseOffset.minus(group._grabOffset) // TODO: replace with DragThreshold object if (!group._isThresholdExceeded) { var distance = dragEvent.mouseOffset.distance(group._initialMouseOffset) if (distance < group._thresholdDistance) return group._isThresholdExceeded = true group._notifyListeners( group.factory._createEvent('dragstart', event, group)) } for (i in group._transforms) { var transform = group._transforms[i] newTopLeftOffset = transform(newTopLeftOffset, dragEvent) } var dragDelta = newTopLeftOffset.minus(dragEvent.topLeftOffset) var newTopLeftPosition = dragEvent.topLeftPosition.plus(dragDelta) newTopLeftPosition.reposition(group.element) dragEvent.transformedMouseOffset = newTopLeftOffset.plus(group._grabOffset) group._notifyListeners(dragEvent) var errorDelta = newTopLeftOffset.minus(coordinates.topLeftOffset(group.element)) if (errorDelta.x != 0 || errorDelta.y != 0) { coordinates.topLeftPosition(group.element).plus(errorDelta).reposition(group.element) } }, _dragEnd : function(event) { event = ToolMan.events().fix(event) var group = this.toolManDragGroup var dragEvent = group.factory._createEvent('dragend', event, group) group._notifyListeners(dragEvent) this.toolManDragGroup = null ToolMan.events().unregister(document, 'mousemove', group._drag) document.onmousemove = null ToolMan.events().unregister(document, 'mouseup', group._dragEnd) }, _notifyListeners : function(dragEvent) { var listeners = this._listeners[dragEvent.type] for (i in listeners) { listeners[i](dragEvent) } } } function _ToolManDragEvent(type, event, group) { this.type = type this.group = group this.mousePosition = ToolMan.coordinates().mousePosition(event) this.mouseOffset = ToolMan.coordinates().mouseOffset(event) this.transformedMouseOffset = this.mouseOffset this.topLeftPosition = ToolMan.coordinates().topLeftPosition(group.element) this.topLeftOffset = ToolMan.coordinates().topLeftOffset(group.element) } _ToolManDragEvent.prototype = { toString : function() { return "mouse: " + this.mousePosition + this.mouseOffset + " " + "xmouse: " + this.transformedMouseOffset + " " + "left,top: " + this.topLeftPosition + this.topLeftOffset } } ToolMan._dragFactory._constraintFactory = { vertical : function() { return function(coordinate, dragEvent) { var x = dragEvent.topLeftOffset.x return coordinate.x != x ? coordinate.factory.create(x, coordinate.y) : coordinate } }, horizontal : function() { return function(coordinate, dragEvent) { var y = dragEvent.topLeftOffset.y return coordinate.y != y ? coordinate.factory.create(coordinate.x, y) : coordinate } } } PKK9wR )turbogears/static/js/tool-man/dragsort.js/* Copyright (c) 2005 Tim Taylor Consulting (see LICENSE.txt) */ ToolMan._dragsortFactory = { makeSortable : function(item) { var group = ToolMan.drag().createSimpleGroup(item) group.register('dragstart', this._onDragStart) group.register('dragmove', this._onDragMove) group.register('dragend', this._onDragEnd) return group }, /** * Iterates over a list's items, making them sortable, applying * optional functions to each item. * * example: makeListSortable(myList, myFunc1, myFunc2, ... , myFuncN) */ makeListSortable : function(list) { var helpers = ToolMan.helpers() var coordinates = ToolMan.coordinates() var items = list.getElementsByTagName("li") helpers.map(items, function(item) { var dragGroup = dragsort.makeSortable(item) dragGroup.setThreshold(4) var min, max dragGroup.addTransform(function(coordinate, dragEvent) { return coordinate.constrainTo(min, max) }) dragGroup.register('dragstart', function() { var items = list.getElementsByTagName("li") min = max = coordinates.topLeftOffset(items[0]) for (var i = 1, n = items.length; i < n; i++) { var offset = coordinates.topLeftOffset(items[i]) min = min.min(offset) max = max.max(offset) } }) }) for (var i = 1, n = arguments.length; i < n; i++) helpers.map(items, arguments[i]) }, _onDragStart : function(dragEvent) { }, _onDragMove : function(dragEvent) { var helpers = ToolMan.helpers() var coordinates = ToolMan.coordinates() var item = dragEvent.group.element var xmouse = dragEvent.transformedMouseOffset var moveTo = null var previous = helpers.previousItem(item, item.nodeName) while (previous != null) { var bottomRight = coordinates.bottomRightOffset(previous) if (xmouse.y <= bottomRight.y && xmouse.x <= bottomRight.x) { moveTo = previous } previous = helpers.previousItem(previous, item.nodeName) } if (moveTo != null) { helpers.moveBefore(item, moveTo) return } var next = helpers.nextItem(item, item.nodeName) while (next != null) { var topLeft = coordinates.topLeftOffset(next) if (topLeft.y <= xmouse.y && topLeft.x <= xmouse.x) { moveTo = next } next = helpers.nextItem(next, item.nodeName) } if (moveTo != null) { helpers.moveBefore(item, helpers.nextItem(moveTo, item.nodeName)) return } }, _onDragEnd : function(dragEvent) { ToolMan.coordinates().create(0, 0).reposition(dragEvent.group.element) } } PKK9U-'turbogears/static/js/tool-man/events.js/* Copyright (c) 2005 Tim Taylor Consulting (see LICENSE.txt) */ ToolMan._eventsFactory = { fix : function(event) { if (!event) event = window.event if (event.target) { if (event.target.nodeType == 3) event.target = event.target.parentNode } else if (event.srcElement) { event.target = event.srcElement } return event }, register : function(element, type, func) { if (element.addEventListener) { element.addEventListener(type, func, false) } else if (element.attachEvent) { if (!element._listeners) element._listeners = new Array() if (!element._listeners[type]) element._listeners[type] = new Array() var workaroundFunc = function() { func.apply(element, new Array()) } element._listeners[type][func] = workaroundFunc element.attachEvent('on' + type, workaroundFunc) } }, unregister : function(element, type, func) { if (element.removeEventListener) { element.removeEventListener(type, func, false) } else if (element.detachEvent) { if (element._listeners && element._listeners[type] && element._listeners[type][func]) { element.detachEvent('on' + type, element._listeners[type][func]) } } } } PKK9(turbogears/tests/config.cfg[global] foo.bar = "BAZ!" tg.something = 10 tg.something.other = "another thing" my.static = "%(package_dir)s/static" [/static] static_filter.on = True [logging] [[formatters]] [[[coolformat]]] format="F1 *(asctime)s *(levelname)s *(message)s" datefmt= [[handlers]] [[[mystream]]] class='StreamHandler' level='NOTSET' formatter='coolformat' args='(logout,)' [[loggers]] [[[tester]]] level='DEBUG' handlers=['mystream'] propagate=1 qualname="turbogears.tests.test_config.logconfig" PKK9 88turbogears/tests/configfile.cfg[global] foo.bar = "blurb" test.dir = "%(package_dir)s" PKK9}turbogears/tests/form.kid ${css.display()} ${js.display()}
PKK9h``"turbogears/tests/othertemplate.kid This is the other template. PKK9Oturbogears/tests/paginate.kid
data="
" PKK9l"turbogears/tests/simple.kid This is the groovy test template. Paging all defaults. PKK9㆙ <<#turbogears/tests/simplecheetah.tmpl This is the Cheetah test template. Paging all $someval. PKK9[\ turbogears/tests/test_catwalk.pyimport unittest import turbogears from turbogears import testutil from turbogears import controllers from turbogears.toolbox.catwalk import CatWalk import cherrypy import simplejson from catwalk_models import browse import timeit import time #verbose run nosetests -s -v -f test_catwalk.py #run nosetests -v -f test_catwalk.py def browse_data(model): """load some test data, only once""" if model.Artist.select().count() > 0: return #only load once genres = ['Latin','Jazz','Rock','Pop','Metal','Dance','Hall', 'Reggae','Disco','Funk','Ska','Swing','Acid','Folk','Reggaeton', 'World','Clasic','Hip-Hop','Rythm & Blues','Blues'] instruments = ['bass', 'drum'] for g in genres: model.Genre(name=g) for i in instruments: model.Instrument(name=i) for artist_id in range(15): a = model.Artist(name='Artist #%s'% artist_id) for album_id in range(15): alb = model.Album(name='Album #%s_%s' % (artist_id,album_id),artist=a) for song_id in range(15): s = model.Song(name='Song #%s_%s_%s' % (artist_id,album_id,song_id),album=alb) for g in model.Genre.select(): g.addArtist(a) class MyRoot(controllers.RootController): def index(self): pass index = turbogears.expose()(index) class Browse(unittest.TestCase): def setUp(self): browse_data(browse) cherrypy.root = MyRoot() def test_wrong_filter_format(self): cherrypy.root.catwalk = CatWalk(browse) testutil.create_request("/catwalk/browse/?object_name=Song&filters=Guantanemera&tg_format=json") response = cherrypy.response.body[0] assert 'filter_format_error' in response def test_wrong_filter_column(self): cherrypy.root.catwalk = CatWalk(browse) testutil.create_request("/catwalk/browse/?object_name=Song&filters=guacamole:2&tg_format=json") response = cherrypy.response.body[0] assert 'filter_column_error' in response def test_filters(self): cherrypy.root.catwalk = CatWalk(browse) testutil.create_request("/catwalk/browse/?object_name=Song&tg_format=json") response = cherrypy.response.body[0] values = simplejson.loads(response) assert values['total'] == 15 * 15 * 15 #without the filters we get all songs (3375) testutil.create_request("/catwalk/browse/?object_name=Song&filters=album:1&tg_format=json") response = cherrypy.response.body[0] values = simplejson.loads(response) assert values['total'] == 15 #filter by album id (only 15 songs) def test_response_fields(self): #Check that the response contains the expected keys cherrypy.root.catwalk = CatWalk(browse) testutil.create_request("/catwalk/browse/?object_name=Artist&start=3&page_size=20&tg_format=json") response = cherrypy.response.body[0] values = simplejson.loads(response) assert values.has_key('headers') assert values.has_key('rows') assert values.has_key('start') assert values.has_key('page_size') assert values.has_key('total') assert values['start'] == 3 assert values['page_size'] == 20 assert values['total'] == 15 def test_rows_joins_count(self): #Control that the count for related and multiple joins match #the number of related instances when accessed as a field cherrypy.root.catwalk = CatWalk(browse) testutil.create_request("/catwalk/browse/?object_name=Artist&tg_format=json") response = cherrypy.response.body[0] values = simplejson.loads(response) artist = browse.Artist.get(1) assert int(values['rows'][0]['genres']) == len(list(artist.genres)) assert int(values['rows'][0]['albums']) == len(list(artist.albums)) def test_rows_column_number(self): #Control that the number of columns match the number of fields in the model cherrypy.root.catwalk = CatWalk(browse) testutil.create_request("/catwalk/browse/?object_name=Artist&tg_format=json") response = cherrypy.response.body[0] values = simplejson.loads(response) assert len(values['rows'][0]) == 4 def test_rows_limit(self): #Update the limit of rows for the query and control the number of rows returned cherrypy.root.catwalk = CatWalk(browse) testutil.create_request("/catwalk/browse/?object_name=Artist&tg_format=json") response = cherrypy.response.body[0] values = simplejson.loads(response) assert values.has_key('rows') assert len(values['rows']) == 10 testutil.create_request("/catwalk/browse/?object_name=Artist&page_size=15&tg_format=json") response = cherrypy.response.body[0] values = simplejson.loads(response) assert values.has_key('rows') assert len(values['rows']) == 15 def test_header_labels(self): #Check that the returned header labels match the the model cherrypy.root.catwalk = CatWalk(browse) testutil.create_request("/catwalk/browse/?object_name=Artist&tg_format=json") response = cherrypy.response.body[0] values = simplejson.loads(response) assert len(values['headers']) == 5 for header in values['headers']: assert header['name'] in ['id','name','albums','genres', 'plays_instruments'] class TestJoinedOperations( testutil.DBTest): model = browse def setUp(self): cherrypy.root = MyRoot() cherrypy.root.catwalk = CatWalk(browse) testutil.DBTest.setUp(self) browse_data(browse) def test_addremove_related_joins(self): # check the update_join function when nondefault add/remove are used artist = self.model.Artist.get(1) assert len(artist.plays_instruments) == 0 testutil.create_request("/catwalk/updateJoins?objectName=Artist&id=1&join=plays_instruments&joinType=&joinObjectName=Instrument&joins=1%2C2&tg_format=json") assert len(artist.plays_instruments) == 2 testutil.create_request("/catwalk/updateJoins?objectName=Artist&id=1&join=plays_instruments&joinType=&joinObjectName=Instrument&joins=1&tg_format=json") assert len(artist.plays_instruments) == 1, str(artist.plays_instruments) PKA> ;%%!turbogears/tests/test_catwalk.pyc; HIc@sdkZdkZdklZdklZdklZdkZdkZdkl Z dk Z dk Z dZ dei fdYZdeifd YZd eifd YZdS( N(stestutil(s controllers(sCatWalk(sbrowsec Cs|iiidjodSnddddddd d d d d dddddddddg}ddg}x|D]}|id|qyWx|D]}|i d|qWxt dD]} |idd| }xrt dD]d}|idd| |fd|}x9t dD]+}|idd| ||fd|} qWqWx$|iiD]}|i|qbWqWdS( sload some test data, only onceiNsLatinsJazzsRocksPopsMetalsDancesHallsReggaesDiscosFunksSkasSwingsAcidsFolks ReggaetonsWorldsClasicsHip-Hops Rythm & BluessBluessbasssdrumsnameis Artist #%ss Album #%s_%ssartistsSong #%s_%s_%ssalbum(smodelsArtistsselectscountsgenress instrumentssgsGenresis Instrumentsranges artist_idsasalbum_idsAlbumsalbssong_idsSongsss addArtist( smodelsasgenressgsalbum_idsis instrumentssalbssong_idsss artist_id((s6build\bdist.win32\egg\turbogears\tests\test_catwalk.pys browse_datas.B   " -sMyRootcBs#tZdZeieZRS(NcCsdS(N((sself((s6build\bdist.win32\egg\turbogears\tests\test_catwalk.pysindex's(s__name__s __module__sindexs turbogearssexpose(((s6build\bdist.win32\egg\turbogears\tests\test_catwalk.pysMyRoot&s sBrowsecBsYtZdZdZdZdZdZdZdZdZ d Z RS( NcCstttt_dS(N(s browse_datasbrowsesMyRootscherrypysroot(sself((s6build\bdist.win32\egg\turbogears\tests\test_catwalk.pyssetUp,s cCsGttti_tidtiid}d|jpt dS(NsE/catwalk/browse/?object_name=Song&filters=Guantanemera&tg_format=jsonisfilter_format_error( sCatWalksbrowsescherrypysrootscatwalkstestutilscreate_requestsresponsesbodysAssertionError(sselfsresponse((s6build\bdist.win32\egg\turbogears\tests\test_catwalk.pystest_wrong_filter_format0s cCsGttti_tidtiid}d|jpt dS(NsD/catwalk/browse/?object_name=Song&filters=guacamole:2&tg_format=jsonisfilter_column_error( sCatWalksbrowsescherrypysrootscatwalkstestutilscreate_requestsresponsesbodysAssertionError(sselfsresponse((s6build\bdist.win32\egg\turbogears\tests\test_catwalk.pystest_wrong_filter_column6s cCsttti_tidtiid}t i |}|ddddjpt tidtiid}t i |}|ddjpt dS(Ns0/catwalk/browse/?object_name=Song&tg_format=jsonistotalis@/catwalk/browse/?object_name=Song&filters=album:1&tg_format=json( sCatWalksbrowsescherrypysrootscatwalkstestutilscreate_requestsresponsesbodys simplejsonsloadssvaluessAssertionError(sselfsvaluessresponse((s6build\bdist.win32\egg\turbogears\tests\test_catwalk.pys test_filters<s   cCsttti_tidtiid}t i |}|i dpt |i dpt |i dpt |i dpt |i dpt |ddjpt |dd jpt |dd jpt dS( NsG/catwalk/browse/?object_name=Artist&start=3&page_size=20&tg_format=jsonisheaderssrowssstarts page_sizestotaliii(sCatWalksbrowsescherrypysrootscatwalkstestutilscreate_requestsresponsesbodys simplejsonsloadssvaluesshas_keysAssertionError(sselfsvaluessresponse((s6build\bdist.win32\egg\turbogears\tests\test_catwalk.pystest_response_fieldsGs cCsttti_tidtiid}t i |}ti i d}t|dddtt|ijptt|dddtt|ijptdS(Ns2/catwalk/browse/?object_name=Artist&tg_format=jsoniisrowssgenressalbums(sCatWalksbrowsescherrypysrootscatwalkstestutilscreate_requestsresponsesbodys simplejsonsloadssvaluessArtistsgetsartistsintslenslistsgenressAssertionErrorsalbums(sselfsartistsvaluessresponse((s6build\bdist.win32\egg\turbogears\tests\test_catwalk.pystest_rows_joins_countVs 5cCsdttti_tidtiid}t i |}t |dddjpt dS(Ns2/catwalk/browse/?object_name=Artist&tg_format=jsonisrowsi(sCatWalksbrowsescherrypysrootscatwalkstestutilscreate_requestsresponsesbodys simplejsonsloadssvaluesslensAssertionError(sselfsvaluessresponse((s6build\bdist.win32\egg\turbogears\tests\test_catwalk.pystest_rows_column_numberas  cCsttti_tidtiid}t i |}|i dpt t|ddjpt tidtiid}t i |}|i dpt t|ddjpt dS(Ns2/catwalk/browse/?object_name=Artist&tg_format=jsonisrowsi s?/catwalk/browse/?object_name=Artist&page_size=15&tg_format=jsoni(sCatWalksbrowsescherrypysrootscatwalkstestutilscreate_requestsresponsesbodys simplejsonsloadssvaluesshas_keysAssertionErrorslen(sselfsvaluessresponse((s6build\bdist.win32\egg\turbogears\tests\test_catwalk.pystest_rows_limitis  cCsttti_tidtiid}t i |}t |ddjpt x9|dD]-}|dddddd gjpt qgWdS( Ns2/catwalk/browse/?object_name=Artist&tg_format=jsonisheadersisnamesidsalbumssgenressplays_instruments(sCatWalksbrowsescherrypysrootscatwalkstestutilscreate_requestsresponsesbodys simplejsonsloadssvaluesslensAssertionErrorsheader(sselfsheadersvaluessresponse((s6build\bdist.win32\egg\turbogears\tests\test_catwalk.pystest_header_labelsws  ( s__name__s __module__ssetUpstest_wrong_filter_formatstest_wrong_filter_columns test_filtersstest_response_fieldsstest_rows_joins_countstest_rows_column_numberstest_rows_limitstest_header_labels(((s6build\bdist.win32\egg\turbogears\tests\test_catwalk.pysBrowse+s      sTestJoinedOperationscBs tZeZdZdZRS(NcCs<tt_ttti_tii|t tdS(N( sMyRootscherrypysrootsCatWalksbrowsescatwalkstestutilsDBTestssetUpsselfs browse_data(sself((s6build\bdist.win32\egg\turbogears\tests\test_catwalk.pyssetUps cCs|iiid}t|idjptti dt|idjptti dt|idjptt |idS(Niis/catwalk/updateJoins?objectName=Artist&id=1&join=plays_instruments&joinType=&joinObjectName=Instrument&joins=1%2C2&tg_format=jsonis}/catwalk/updateJoins?objectName=Artist&id=1&join=plays_instruments&joinType=&joinObjectName=Instrument&joins=1&tg_format=json( sselfsmodelsArtistsgetsartistslensplays_instrumentssAssertionErrorstestutilscreate_requestsstr(sselfsartist((s6build\bdist.win32\egg\turbogears\tests\test_catwalk.pystest_addremove_related_joinss   (s__name__s __module__sbrowsesmodelssetUpstest_addremove_related_joins(((s6build\bdist.win32\egg\turbogears\tests\test_catwalk.pysTestJoinedOperationss (sunittests turbogearsstestutils controllerssturbogears.toolbox.catwalksCatWalkscherrypys simplejsonscatwalk_modelssbrowsestimeitstimes browse_datasRootControllersMyRootsTestCasesBrowsesDBTestsTestJoinedOperations(stestutilsCatWalkstimeits turbogearsscherrypysTestJoinedOperationssbrowsesunittestsMyRoots controllerssBrowses simplejsonstimes browse_data((s6build\bdist.win32\egg\turbogears\tests\test_catwalk.pys?s           WPKK9%turbogears/tests/test_command_i18n.pyimport sys import os import shutil import tempfile from datetime import datetime from turbogears import config from turbogears.command.i18n import InternationalizationTool work_dir = tempfile.mkdtemp() src_dir = os.path.join(work_dir, 'src') locale_dir = os.path.join(work_dir, 'locale') tool = None def setup(m): global tool tool = InternationalizationTool('1.0') os.mkdir(src_dir) tf = open(os.path.join(src_dir, "test.kid"), "w") tf.write(TEMPLATE) tf.close() config.update({ 'i18n.locale_dir': locale_dir, 'i18n.domain': 'testmessages', }) def teardown(m): shutil.rmtree(work_dir) TEMPLATE = """ ${css.display()} ${js.display()}
Some text to be i18n'ed
This is text that has a kid-expression ${_('which is to be i18n')}
This is english, and it shouldn't be collected
Dies ist Deutsch, und es sollte nicht aufgesammelt werden
These are some entities that we shouldn't complain about:  
""" def test_collect_template_strings(): """Verify the locale directory got created as needed.""" assert not os.path.isdir(locale_dir), "locale directory should not exist yet" sys.argv = ['i18n.py', '--src-dir', src_dir, 'collect'] tool.load_config = False tool.run() assert os.path.isdir(locale_dir), "locale directory not created" pot_content = open(os.path.join(locale_dir, "testmessages.pot")).read() assert "Some text to be i18n'ed" in pot_content assert "kid expression in attribute" in pot_content assert "normal attribute text" not in pot_content assert "it shouldn't be collected" not in pot_content assert "es sollte nicht aufgesammelt werden" not in pot_content PKA>ՙpb &turbogears/tests/test_command_i18n.pyc; HIc@sdkZdkZdkZdkZdklZdklZdklZei Z ei i e dZ ei i e dZeadZdZdZd ZdS( N(sdatetime(sconfig(sInternationalizationToolssrcslocalecCsqtdatitttiitdd}|i t |i t i hdt<dd<dS(Ns1.0stest.kidswsi18n.locale_dirs i18n.domains testmessages(sInternationalizationToolstoolsossmkdirssrc_dirsopenspathsjoinstfswritesTEMPLATEsclosesconfigsupdates locale_dir(smstf((s;build\bdist.win32\egg\turbogears\tests\test_command_i18n.pyssetups    cCstitdS(N(sshutilsrmtreeswork_dir(sm((s;build\bdist.win32\egg\turbogears\tests\test_command_i18n.pysteardownss ${css.display()} ${js.display()}
Some text to be i18n'ed
This is text that has a kid-expression ${_('which is to be i18n')}
This is english, and it shouldn't be collected
Dies ist Deutsch, und es sollte nicht aufgesammelt werden
These are some entities that we shouldn't complain about:  
cCstiit p tdddtdgt_tt _ t i tiitp tdt tii tdi}d|jptd|jptd |jptd |jptd |jptd S( s2Verify the locale directory got created as needed.s%locale directory should not exist yetsi18n.pys --src-dirscollectslocale directory not createdstestmessages.potsSome text to be i18n'edskid expression in attributesnormal attribute textsit shouldn't be collecteds#es sollte nicht aufgesammelt werdenN(sosspathsisdirs locale_dirsAssertionErrorssrc_dirssyssargvsFalsestools load_configsrunsopensjoinsreads pot_content(s pot_content((s;build\bdist.win32\egg\turbogears\tests\test_command_i18n.pystest_collect_template_strings2s  !(ssyssossshutilstempfilesdatetimes turbogearssconfigsturbogears.command.i18nsInternationalizationToolsmkdtempswork_dirspathsjoinssrc_dirs locale_dirsNonestoolssetupsteardownsTEMPLATEstest_collect_template_strings(s locale_dirsInternationalizationToolstest_collect_template_stringsswork_dirstempfilesconfigsdatetimessyssteardownsTEMPLATEssrc_dirsshutilsosssetup((s;build\bdist.win32\egg\turbogears\tests\test_command_i18n.pys?s         PKK9nc turbogears/tests/test_config.pyimport logging import ntpath import os import re import sys from cStringIO import StringIO import pkg_resources import turbogears rfn = pkg_resources.resource_filename testfile = rfn(__name__, "configfile.cfg") logout = StringIO() logging.logout = logout # last forward slash (the one before static) is hard coded in our config # file... all other path separators are calculated platform wise... def test_update_from_package(): turbogears.update_config(modulename="turbogears.tests.config") assert turbogears.config.get("foo.bar") == "BAZ!" print turbogears.config.get("my.static") assert turbogears.config.get("my.static").endswith( "turbogears%stests/static" % os.path.sep) assert turbogears.config.get("static_filter.on", path="/static") == True def test_update_from_both(): turbogears.update_config(configfile = testfile, modulename="turbogears.tests.config") print turbogears.config.get("foo.bar") assert turbogears.config.get("foo.bar") == "blurb" assert turbogears.config.get("tg.something") == 10 print turbogears.config.get("test.dir") assert turbogears.config.get("test.dir").endswith( "turbogears%stests" % os.path.sep) callnum = 0 def windows_filename(*args, **kw): """Small helper function to emulate pkg_resources.resource_filename as if it was called on a Wwindows system even if the tester is in fact using Linux or Mac OS X. We need to keep track how often the function was called, since 'turbogears.update_config' calls 'pkg_resources.resource_filename' at least twice and we onyl want to return the fake Windows path the second and following times. """ global callnum callnum += 1 if callnum > 1: return "c:\\foo\\bar\\" else: return rfn(*args, **kw) def test_update_on_windows(): """turbogears.update_config works as we intend on Windows. """ # save the original function orig_resource_fn = pkg_resources.resource_filename # monkey patch pkg resources to emulate windows pkg_resources.resource_filename = windows_filename turbogears.update_config(configfile=testfile, modulename="turbogears.tests.config") testdir = turbogears.config.get("test.dir") # update_config calls os.normpath on package_dir, but this will have no # effect on non-windows systems, so we call ntpath.normpath on those here if not sys.platform.startswith('win'): testdir = ntpath.normpath(testdir) # restore original function pkg_resources.resource_filename = orig_resource_fn assert testdir == "c:\\foo\\bar" def test_logging_config(): logout.truncate(0) log = logging.getLogger("turbogears.tests.test_config.logconfig") log.info("Testing") logged = logout.getvalue() print "Logged: %s" % logged assert re.match(r'F1 \d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d,\d\d\d INFO ' 'Testing', logged) assert turbogears.config.get("tg.new_style_logging", False) PKA>Ӣ%% turbogears/tests/test_config.pyc; HIc@sdkZdkZdkZdkZdkZdklZdkZdkZei Z e e dZ eZ e e_ dZdZdadZdZdZdS( N(sStringIOsconfigfile.cfgcCstiddtiiddjpttiidGHtiididtiipttiiddd t jptdS( Ns modulenamesturbogears.tests.configsfoo.barsBAZ!s my.staticsturbogears%stests/staticsstatic_filter.onspaths/static( s turbogearss update_configsconfigsgetsAssertionErrorsendswithsosspathssepsTrue(((s5build\bdist.win32\egg\turbogears\tests\test_config.pystest_update_from_packages  -cCstidtddtiidGHtiiddjpttiiddjpttiidGHtiidid tii ptdS( Ns configfiles modulenamesturbogears.tests.configsfoo.barsblurbs tg.somethingi stest.dirsturbogears%stests( s turbogearss update_configstestfilesconfigsgetsAssertionErrorsendswithsosspathssep(((s5build\bdist.win32\egg\turbogears\tests\test_config.pystest_update_from_boths    icOs0td7atdjodSnt||SdS(sSmall helper function to emulate pkg_resources.resource_filename as if it was called on a Wwindows system even if the tester is in fact using Linux or Mac OS X. We need to keep track how often the function was called, since 'turbogears.update_config' calls 'pkg_resources.resource_filename' at least twice and we onyl want to return the fake Windows path the second and following times. is c:\foo\bar\N(scallnumsrfnsargsskw(sargsskw((s5build\bdist.win32\egg\turbogears\tests\test_config.pyswindows_filename)s   cCsti}tt_tidtddtiid}t i i d ot i|}n|t_|djptdS(s<turbogears.update_config works as we intend on Windows. s configfiles modulenamesturbogears.tests.configstest.dirswins c:\foo\barN(s pkg_resourcessresource_filenamesorig_resource_fnswindows_filenames turbogearss update_configstestfilesconfigsgetstestdirssyssplatforms startswithsntpathsnormpathsAssertionError(sorig_resource_fnstestdir((s5build\bdist.win32\egg\turbogears\tests\test_config.pystest_update_on_windows;s     cCsytidtid}|idti}d|GHti d|pt t i i dtpt dS(Nis&turbogears.tests.test_config.logconfigsTestings Logged: %ss8F1 \d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d,\d\d\d INFO Testingstg.new_style_logging(slogoutstruncatesloggings getLoggerslogsinfosgetvaluesloggedsresmatchsAssertionErrors turbogearssconfigsgetsFalse(slogslogged((s5build\bdist.win32\egg\turbogears\tests\test_config.pystest_logging_configOs     (sloggingsntpathsossressyss cStringIOsStringIOs pkg_resourcess turbogearssresource_filenamesrfns__name__stestfileslogoutstest_update_from_packagestest_update_from_bothscallnumswindows_filenamestest_update_on_windowsstest_logging_config(stest_logging_configswindows_filenamesloggings turbogearssStringIOstest_update_from_packagestest_update_from_boths pkg_resourcesssyssreslogoutsntpathstest_update_on_windowssossrfnstestfile((s5build\bdist.win32\egg\turbogears\tests\test_config.pys?s"               PKK9lww$turbogears/tests/test_controllers.pyimport unittest import formencode import cherrypy import pkg_resources from turbogears import config, controllers, database, \ error_handler, exception_handler, expose, flash, redirect, \ startup, testutil, url, validate, validators class SubApp(controllers.RootController): [expose()] def index(self): return url("/Foo/") class MyRoot(controllers.RootController): [expose()] def index(self): pass def validation_error_handler(self, tg_source, tg_errors, *args, **kw): self.functionname = tg_source.__name__ self.values = kw self.errors = tg_errors return "Error Message" [expose(template="turbogears.tests.simple", allow_json=True)] def test(self): return dict(title="Foobar", mybool=False, someval="niggles") [expose(html="turbogears.tests.simple")] def test_deprecated(self): return dict(title="Oldbar", mybool=False, someval="giggles") [expose()] def invalid(self): return None [expose()] def pos(self, posvalue): self.posvalue = posvalue return "" [expose()] def servefile(self, tg_exceptions=None): self.servedit = True self.serve_exceptions = tg_exceptions return cherrypy.lib.cptools.serveFile( pkg_resources.resource_filename( "turbogears.tests", "test_controllers.py")) [expose()] def unicode(self): cherrypy.response.headers["Content-Type"] = "text/html" return u'\u00bfHabla espa\u00f1ol?' [expose()] def returnedtemplate(self): return dict(title="Foobar", mybool=False, someval="foo", tg_template="turbogears.tests.simple") [expose()] def returnedtemplate_short(self): return dict(title="Foobar", mybool=False, someval="foo", tg_template="turbogears.tests.simple") [expose(template="turbogears.tests.simple")] def exposetemplate_short(self): return dict(title="Foobar", mybool=False, someval="foo") [expose()] [validate(validators={'value': validators.StringBoolean()})] def istrue(self, value): self.value = value return str(value) istrue = error_handler(validation_error_handler)(istrue) [expose()] [validate(validators={'value': validators.StringBoolean()})] def nestedcall(self, value): return self.istrue(str(value)) [expose()] [validate(validators={'value': validators.StringBoolean()})] def errorchain(self, value): return "No Error" errorchain = error_handler(istrue)(errorchain) [expose(format="json", template="turbogears.tests.simple")] def returnjson(self): return dict(title="Foobar", mybool=False, someval="foo", tg_template="turbogears.tests.simple") [expose(template="turbogears.tests.simple", allow_json=False)] def allowjson(self): return dict(title="Foobar", mybool=False, someval="foo", tg_template="turbogears.tests.simple") [expose(format="json")] def impliedjson(self): return dict(title="Blah") [expose('json')] def explicitjson(self): return dict(title="Blub") [expose(template="turbogears.tests.simple", allow_json=True)] def jsonerror_handler(self): return dict(someval="errors") [expose(allow_json=True)] def jsonerror(self): raise ValueError jsonerror = exception_handler(jsonerror_handler)(jsonerror) [expose(content_type="xml/atom")] def contenttype(self): return "Foobar" [expose()] [validate(validators={ "firstname": validators.String(min=2, not_empty=True), "lastname": validators.String()})] def save(self, submit, firstname, lastname="Miller"): self.submit = submit self.firstname = firstname self.lastname = lastname self.fullname = "%s %s" % (self.firstname, self.lastname) return self.fullname save = error_handler(validation_error_handler)(save) class Registration(formencode.Schema): allow_extra_fields = True firstname = validators.String(min=2, not_empty=True) lastname = validators.String() [expose()] [validate(validators=Registration())] def save2(self, submit, firstname, lastname="Miller"): return self.save(submit, firstname, lastname) save2 = error_handler(validation_error_handler)(save2) [expose(template="turbogears.tests.simple")] def useother(self): return dict(tg_template="turbogears.tests.othertemplate") [expose(template="cheetah:turbogears.tests.simplecheetah")] def usecheetah(self): return dict(someval="chimps") rwt_called = 0 def rwt(self, func, *args, **kw): self.rwt_called += 1 func(*args, **kw) [expose(template="turbogears.tests.simple", allow_json=True)] def flash_plain(self): flash("plain") return dict(title="Foobar", mybool=False, someval="niggles") [expose(template="turbogears.tests.simple", allow_json=True)] def flash_unicode(self): flash(u"\xfcnicode") return dict(title="Foobar", mybool=False, someval="niggles") [expose(template="turbogears.tests.simple", allow_json=True)] def flash_data_structure(self): flash(dict(uni=u"\xfcnicode", testing=[1, 2, 3])) return dict(title="Foobar", mybool=False, someval="niggles") [expose(template="turbogears.tests.simple", allow_json=True)] def flash_redirect(self): flash(u"redirect \xfcnicode") redirect("/flash_redirected?tg_format=json") [expose(template="turbogears.tests.simple", allow_json=True)] def flash_redirect_with_trouble_chars(self): flash(u"$foo, k\xe4se;\tbar!") redirect("/flash_redirected?tg_format=json") [expose(template="turbogears.tests.simple", allow_json=True)] def flash_redirected(self): return dict(title="Foobar", mybool=False, someval="niggles") def exc_h_value(self, tg_exceptions=None): """Exception handler for the ValueError in raise_value_exc""" return dict(handling_value=True, exception=str(tg_exceptions)) [expose()] def raise_value_exc(self): raise ValueError('Some Error in the controller') raise_value_exc = exception_handler(exc_h_value, "isinstance(tg_exceptions, ValueError)")(raise_value_exc) def exc_h_key(self, tg_exceptions=None): """Exception handler for KeyErrors in raise_all_exc""" return dict(handling_key=True, exception=str(tg_exceptions)) def exc_h_index(self, tg_exceptions=None): """Exception handler for the ValueError in raise_value_exc""" return dict(handling_index=True, exception=str(tg_exceptions)) [expose()] def raise_index_exc(self): raise IndexError('Some IndexError') raise_index_exc = exception_handler(exc_h_index, "isinstance(tg_exceptions, IndexError)")(raise_index_exc) [expose()] def raise_all_exc(self, num=2): num = int(num) if num < 2: raise ValueError('Inferior to 2') elif num == 2: raise IndexError('Equals to 2') elif num > 2: raise KeyError('No such number 2 in the integer range') raise_all_exc = exception_handler(exc_h_index, "isinstance(tg_exceptions, IndexError)")(raise_all_exc) raise_all_exc = exception_handler(exc_h_value, "isinstance(tg_exceptions, ValueError)")(raise_all_exc) raise_all_exc = exception_handler(exc_h_key, "isinstance(tg_exceptions, KeyError)")(raise_all_exc) [expose()] def internal_redirect(self, **kwargs): raise cherrypy.InternalRedirect('/internal_redirect_target') [expose()] def internal_redirect_target(self, **kwargs): return "redirected OK" [expose()] def redirect_to_path_str(self, path): raise redirect(path + '/index') [expose()] def redirect_to_path_list(self, path): raise redirect([path, 'index']) [expose()] def redirect_to_path_tuple(self, path): raise redirect((path, 'index')) class TestRoot(unittest.TestCase): def setUp(self): cherrypy.root = None cherrypy.tree.mount_points = {} cherrypy.tree.mount(MyRoot(), "/") cherrypy.tree.mount(SubApp(), "/subthing") def tearDown(self): cherrypy.root = None cherrypy.tree.mount_points = {} def test_js_files(self): """Can access the JavaScript files""" testutil.create_request("/tg_js/MochiKit.js") assert cherrypy.response.headers["Content-Type"] in [ "application/javascript", "application/x-javascript"] assert cherrypy.response.status == "200 OK" def test_json_output(self): testutil.create_request("/test?tg_format=json") import simplejson values = simplejson.loads(cherrypy.response.body[0]) assert values == dict(title="Foobar", mybool=False, someval="niggles", tg_flash=None) assert cherrypy.response.headers["Content-Type"] == "application/json" def test_implied_json(self): testutil.create_request("/impliedjson?tg_format=json") assert '"title": "Blah"' in cherrypy.response.body[0] assert cherrypy.response.headers["Content-Type"] == "application/json" def test_explicit_json(self): testutil.create_request("/explicitjson") assert '"title": "Blub"' in cherrypy.response.body[0] assert cherrypy.response.headers["Content-Type"] == "application/json" testutil.create_request("/explicitjson?tg_format=json") assert '"title": "Blub"' in cherrypy.response.body[0] assert cherrypy.response.headers["Content-Type"] == "application/json" def test_allow_json(self): testutil.create_request("/allowjson?tg_format=json") assert cherrypy.response.headers["Content-Type"] == "text/html" def test_allow_json_config(self): """JSON output can be enabled via config.""" config.update({'tg.allow_json':True}) class JSONRoot(controllers.RootController): [expose(template="turbogears.tests.simple")] def allowjsonconfig(self): return dict(title="Foobar", mybool=False, someval="foo", tg_template="turbogears.tests.simple") cherrypy.root = JSONRoot() testutil.create_request('/allowjsonconfig?tg_format=json') assert cherrypy.response.headers["Content-Type"] == "application/json" config.update({'tg.allow_json': False}) def test_allow_json_config_false(self): """Make sure JSON can still be restricted with a global config on.""" config.update({'tg.allow_json': True}) class JSONRoot(controllers.RootController): [expose(template="turbogears.tests.simple")] def allowjsonconfig(self): return dict(title="Foobar", mybool=False, someval="foo", tg_template="turbogears.tests.simple") cherrypy.root = JSONRoot() testutil.create_request('/allowjson?tg_format=json') assert cherrypy.response.headers["Content-Type"] == "text/html" config.update({'tg.allow_json': False}) def test_json_error(self): """The error handler should return JSON if requested.""" testutil.create_request("/jsonerror") assert cherrypy.response.headers["Content-Type"] == "text/html; charset=utf-8" assert "Paging all errors" in cherrypy.response.body[0] testutil.create_request("/jsonerror?tg_format=json") assert cherrypy.response.headers["Content-Type"] == "application/json" assert '"someval": "errors"' in cherrypy.response.body[0] def test_invalid_return(self): testutil.create_request("/invalid") assert cherrypy.response.status.startswith("500") def test_strict_parameters(self): config.update({"tg.strict_parameters": True}) testutil.create_request( "/save?submit=save&firstname=Foo&lastname=Bar&badparam=1") assert cherrypy.response.status.startswith("500") assert not hasattr(cherrypy.root, "errors") def test_throw_out_random(self): """Can append random value to the URL to avoid caching problems.""" testutil.create_request("/test?tg_random=1") assert "Paging all niggles" in cherrypy.response.body[0] config.update({"tg.strict_parameters": True}) testutil.create_request("/test?tg_random=1") assert cherrypy.response.status.startswith("200") assert "Paging all niggles" in cherrypy.response.body[0] testutil.create_request("/test?tg_not_random=1") assert cherrypy.response.status.startswith("500") assert not hasattr(cherrypy.root, "errors") def test_ignore_parameters(self): config.update({"tg.strict_parameters": True}) testutil.create_request("/test?ignore_me=1") assert cherrypy.response.status.startswith("500") assert not hasattr(cherrypy.root, "errors") config.update({"tg.ignore_parameters": ['ignore_me', 'me_too']}) testutil.create_request("/test?ignore_me=1") assert "Paging all niggles" in cherrypy.response.body[0] testutil.create_request("/test?me_too=1") assert cherrypy.response.status.startswith("200") assert "Paging all niggles" in cherrypy.response.body[0] testutil.create_request("/test?me_not=1") assert cherrypy.response.status.startswith("500") assert not hasattr(cherrypy.root, "errors") def test_retrieve_dict_directly(self): d = testutil.call(cherrypy.root.returnjson) assert d["title"] == "Foobar" def test_template_output(self): testutil.create_request("/test") assert "Paging all niggles" in cherrypy.response.body[0] def test_template_deprecated(self): testutil.create_request("/test_deprecated") assert "Paging all giggles" in cherrypy.response.body[0] def test_unicode(self): testutil.create_request("/unicode") firstline = cherrypy.response.body[0].split('\n')[0].decode('utf-8') assert firstline == u'\u00bfHabla espa\u00f1ol?' def test_default_format(self): """The default format can be set via expose""" testutil.create_request("/returnjson") firstline = cherrypy.response.body[0] assert '"title": "Foobar"' in firstline testutil.create_request("/returnjson?tg_format=html") firstline = cherrypy.response.body[0] assert '"title": "Foobar"' not in firstline def test_content_type(self): """The content-type can be set via expose""" testutil.create_request("/contenttype") assert cherrypy.response.headers["Content-Type"] == "xml/atom" def test_returned_template_name(self): testutil.create_request("/returnedtemplate") data = cherrypy.response.body[0].lower() assert "" in data assert 'groovy test template' in data def test_returned_template_short(self): testutil.create_request("/returnedtemplate_short") assert "Paging all foo" in cherrypy.response.body[0] def test_expose_template_short(self): testutil.create_request("/exposetemplate_short") assert "Paging all foo" in cherrypy.response.body[0] def test_validation(self): """Data can be converted and validated""" testutil.create_request("/istrue?value=true") assert cherrypy.root.value is True testutil.create_request("/istrue?value=false") assert cherrypy.root.value is False cherrypy.root = MyRoot() testutil.create_request("/istrue?value=foo") assert not hasattr(cherrypy.root, "value") assert cherrypy.root.functionname == "istrue" testutil.create_request("/save?submit=send&firstname=John&lastname=Doe") assert cherrypy.root.fullname == "John Doe" assert cherrypy.root.submit == "send" testutil.create_request("/save?submit=send&firstname=Arthur") assert cherrypy.root.fullname == "Arthur Miller" testutil.create_request("/save?submit=send&firstname=Arthur&lastname=") assert cherrypy.root.fullname == "Arthur " testutil.create_request("/save?submit=send&firstname=D&lastname=") assert len(cherrypy.root.errors) == 1 assert cherrypy.root.errors.has_key("firstname") assert "characters" in cherrypy.root.errors["firstname"].msg.lower() testutil.create_request("/save?submit=send&firstname=&lastname=") assert len(cherrypy.root.errors) == 1 assert cherrypy.root.errors.has_key("firstname") def test_validation_chained(self): """Validation is not repeated if it already happened""" cherrypy.root.value = None testutil.create_request("/errorchain?value=true") assert cherrypy.root.value is None testutil.create_request("/errorchain?value=notbool") assert cherrypy.root.value == 'notbool' def test_validation_nested(self): """Validation is not repeated in nested method call""" cherrypy.root.value = None testutil.create_request("/nestedcall?value=true") assert cherrypy.root.value == 'True' testutil.create_request("/nestedcall?value=false") assert cherrypy.root.value == 'False' def test_validation_with_schema(self): """Data can be converted/validated with formencode.Schema instance""" testutil.create_request("/save2?submit=send&firstname=Joe&lastname=Doe") assert cherrypy.root.fullname == "Joe Doe" assert cherrypy.root.submit == "send" testutil.create_request("/save2?submit=send&firstname=Arthur&lastname=") assert cherrypy.root.fullname == "Arthur " testutil.create_request("/save2?submit=send&firstname=&lastname=") assert len(cherrypy.root.errors) == 1 assert cherrypy.root.errors.has_key("firstname") testutil.create_request("/save2?submit=send&firstname=D&lastname=") assert len(cherrypy.root.errors) == 1 assert cherrypy.root.errors.has_key("firstname") def test_other_template(self): """'tg_template' in a returned dict will use the template specified there""" testutil.create_request("/useother") assert "This is the other template" in cherrypy.response.body[0] def test_cheetah_template(self): """Cheetah templates can be used as well""" testutil.create_request("/usecheetah") body = cherrypy.response.body[0] assert "This is the Cheetah test template." in body assert "Paging all chimps." in body def test_run_with_trans(self): """run_with_transaction is called only on topmost exposed method""" oldrwt = database.run_with_transaction database.run_with_transaction = cherrypy.root.rwt testutil.create_request("/nestedcall?value=true") database.run_with_transaction = oldrwt assert cherrypy.root.value assert cherrypy.root.rwt_called == 1 def test_positional(self): """Positional parameters should work""" testutil.create_request("/pos/foo") assert cherrypy.root.posvalue == "foo" def test_flash_plain(self): """flash with strings should work""" testutil.create_request("/flash_plain?tg_format=json") import simplejson values = simplejson.loads(cherrypy.response.body[0]) assert values["tg_flash"] == "plain" assert not cherrypy.response.simple_cookie.has_key("tg_flash") def test_flash_unicode(self): """flash with unicode objects should work""" testutil.create_request("/flash_unicode?tg_format=json") import simplejson values = simplejson.loads(cherrypy.response.body[0]) assert values["tg_flash"] == u"\xfcnicode" assert not cherrypy.response.simple_cookie.has_key("tg_flash") def test_flash_on_redirect(self): """flash must survive a redirect""" testutil.create_request("/flash_redirect?tg_format=json") assert cherrypy.response.status.startswith("302") testutil.create_request(cherrypy.response.headers["Location"], headers=dict(Cookie=cherrypy.response.simple_cookie.output( header="").strip())) import simplejson values = simplejson.loads(cherrypy.response.body[0]) assert values["tg_flash"] == u"redirect \xfcnicode" def test_flash_redirect_with_trouble_chars(self): """flash redirect with chars that can cause troubles in cookies""" testutil.create_request("/flash_redirect_with_trouble_chars?tg_format=json") assert cherrypy.response.status.startswith("302") value = cherrypy.response.simple_cookie["tg_flash"].value assert '$' not in value assert ',' not in value and ';' not in value assert ' ' not in value and '\t' not in value assert 'foo' in value and 'bar' in value assert u'k\xe4se'.encode('utf-8') in value assert '!' in value testutil.create_request(cherrypy.response.headers["Location"], headers=dict(Cookie=cherrypy.response.simple_cookie.output( header="").strip())) import simplejson values = simplejson.loads(cherrypy.response.body[0]) assert values["tg_flash"] == u"$foo, k\xe4se;\tbar!" def test_double_flash(self): """latest set flash should have precedence""" # Here we are calling method that sets a flash message. However flash # cookie is still there. Turbogears should discard old flash message # from cookie and use new one, set by flash_plain(). testutil.create_request("/flash_plain?tg_format=json", headers=dict(Cookie='tg_flash="old flash"; Path=/;')) import simplejson values = simplejson.loads(cherrypy.response.body[0]) assert values["tg_flash"] == "plain" assert cherrypy.response.simple_cookie.has_key("tg_flash"), \ "Cookie clearing request should be present" flashcookie = cherrypy.response.simple_cookie['tg_flash'] assert flashcookie['expires'] == 0 def test_set_kid_outputformat_in_config(self): """the outputformat for kid can be set in the config""" config.update({'kid.outputformat': 'xhtml'}) testutil.create_request('/test') response = cherrypy.response.body[0] assert '[g%turbogears/tests/test_controllers.pyc; HIc@sdkZdkZdkZdkZdklZlZlZlZl Z l Z l Z l Z l Z lZlZlZlZdeifdYZdeifdYZdeifdYZdeifd YZdS( N( sconfigs controllerssdatabases error_handlersexception_handlersexposesflashsredirectsstartupstestutilsurlsvalidates validatorssSubAppcBstZegdZRS(NcCstdSdS(Ns/Foo/(surl(sself((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pysindex s(s__name__s __module__sexposesindex(((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pysSubApp s sMyRootc BsMtZegdZdZedddegdZeddgdZegd Zegd Z ege d Z egd Z egd Z egdZeddgdZegedhdei<gdZeeeZegedhdei<gdZegedhdei<gdZeeeZeddddgdZedddegdZeddgdZedgdZedddegdZedegdZeeeZeddgdZegedhd ei d!d"d#e<d$ei <gd%d&Z!eee!Z!d'e"i#fd(YZ$egede$gd%d)Z%eee%Z%eddgd*Z&edd+gd,Z'd-Z(d.Z)edddegd/Z*edddegd0Z+edddegd1Z,edddegd2Z-edddegd3Z.edddegd4Z/e d5Z0egd6Z1ee0d7e1Z1e d8Z2e d9Z3egd:Z4ee3d;e4Z4egd"d<Z5ee3d;e5Z5ee0d7e5Z5ee2d=e5Z5egd>Z6egd?Z7egd@Z8egdAZ9egdBZ:RS(CNcCsdS(N((sself((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pysindexscOs&|i|_||_||_dSdS(Ns Error Message(s tg_sources__name__sselfs functionnameskwsvaluess tg_errorsserrors(sselfs tg_sources tg_errorssargsskw((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pysvalidation_error_handlers   stemplatesturbogears.tests.simples allow_jsoncCstdddtddSdS(NstitlesFoobarsmyboolssomevalsniggles(sdictsFalse(sself((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pystestsshtmlcCstdddtddSdS(NstitlesOldbarsmyboolssomevalsgiggles(sdictsFalse(sself((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pystest_deprecated"scCstSdS(N(sNone(sself((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pysinvalid&scCs||_dSdS(Ns(sposvaluesself(sselfsposvalue((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pyspos*s cCs5t|_||_tiiit i ddSdS(Nsturbogears.testsstest_controllers.py( sTruesselfsservedits tg_exceptionssserve_exceptionsscherrypyslibscptoolss serveFiles pkg_resourcessresource_filename(sselfs tg_exceptions((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pys servefile/s  cCsdtiids  cCs.tidtiiidptdS(Ns/invalids500(stestutilscreate_requestscherrypysresponsesstatuss startswithsAssertionError(sself((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pystest_invalid_returnGs cCs_tihdt<tidtiiidpt t ti d pt dS(Nstg.strict_parameterss7/save?submit=save&firstname=Foo&lastname=Bar&badparam=1s500serrors( sconfigsupdatesTruestestutilscreate_requestscherrypysresponsesstatuss startswithsAssertionErrorshasattrsroot(sself((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pystest_strict_parametersKs cCstiddtiidjpttihdt<tidtii i dptdtiidjpttidtii i dptt ti d ptd S( s=Can append random value to the URL to avoid caching problems.s/test?tg_random=1sPaging all nigglesistg.strict_parameterss200s/test?tg_not_random=1s500serrorsN( stestutilscreate_requestscherrypysresponsesbodysAssertionErrorsconfigsupdatesTruesstatuss startswithshasattrsroot(sself((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pystest_throw_out_randomRs   cCs3tihdt<tidtiiidpt t ti d pt tihdddg<tiddtii d jpt tid tiiid pt dtii d jpt tid tiiidpt t ti d pt dS( Nstg.strict_parameterss/test?ignore_me=1s500serrorsstg.ignore_parameterss ignore_mesme_toosPaging all nigglesis/test?me_too=1s200s/test?me_not=1( sconfigsupdatesTruestestutilscreate_requestscherrypysresponsesstatuss startswithsAssertionErrorshasattrsrootsbody(sself((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pystest_ignore_parameters^s    cCs1titii}|ddjptdS(NstitlesFoobar(stestutilscallscherrypysroots returnjsonsdsAssertionError(sselfsd((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pystest_retrieve_dict_directlymscCs/tiddtiidjptdS(Ns/testsPaging all nigglesi(stestutilscreate_requestscherrypysresponsesbodysAssertionError(sself((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pystest_template_outputqs cCs/tiddtiidjptdS(Ns/test_deprecatedsPaging all gigglesi(stestutilscreate_requestscherrypysresponsesbodysAssertionError(sself((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pystest_template_deprecatedus cCsKtidtiididdid}|djptdS(Ns/unicodeis sutf-8u¿Habla español?( stestutilscreate_requestscherrypysresponsesbodyssplitsdecodes firstlinesAssertionError(sselfs firstline((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pys test_unicodeys &cCsftidtiid}d|jpttidtiid}d|jptdS(s(The default format can be set via exposes /returnjsonis"title": "Foobar"s/returnjson?tg_format=htmlN(stestutilscreate_requestscherrypysresponsesbodys firstlinesAssertionError(sselfs firstline((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pystest_default_format~s  cCs/tidtiiddjptdS(s&The content-type can be set via exposes /contenttypes Content-Typesxml/atomN(stestutilscreate_requestscherrypysresponsesheaderssAssertionError(sself((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pystest_content_types cCsOtidtiidi}d|jptd|jptdS(Ns/returnedtemplateissgroovy test template(stestutilscreate_requestscherrypysresponsesbodyslowersdatasAssertionError(sselfsdata((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pystest_returned_template_names cCs/tiddtiidjptdS(Ns/returnedtemplate_shortsPaging all fooi(stestutilscreate_requestscherrypysresponsesbodysAssertionError(sself((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pystest_returned_template_shorts cCs/tiddtiidjptdS(Ns/exposetemplate_shortsPaging all fooi(stestutilscreate_requestscherrypysresponsesbodysAssertionError(sself((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pystest_expose_template_shorts cCstidtiitjpttidtiitjpttt_tidt tid pttii djpttidtii djpttii djpttid tii d jpttid tii d jpttid t tiidjpttiiidptdtiidiijpttidt tiidjpttiiidptdS(s#Data can be converted and validateds/istrue?value=trues/istrue?value=falses/istrue?value=foosvaluesistrues-/save?submit=send&firstname=John&lastname=DoesJohn Doessends"/save?submit=send&firstname=Arthurs Arthur Millers,/save?submit=send&firstname=Arthur&lastname=sArthur s'/save?submit=send&firstname=D&lastname=is firstnames characterss&/save?submit=send&firstname=&lastname=N(stestutilscreate_requestscherrypysrootsvaluesTruesAssertionErrorsFalsesMyRootshasattrs functionnamesfullnamessubmitslenserrorsshas_keysmsgslower(sself((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pystest_validations.         '  cCs^tti_tidtiitjpttidtiidjptdS(s1Validation is not repeated if it already happeneds/errorchain?value=trues/errorchain?value=notboolsnotboolN(sNonescherrypysrootsvaluestestutilscreate_requestsAssertionError(sself((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pystest_validation_chaineds    cCs^tti_tidtiidjpttidtiidjptdS(s0Validation is not repeated in nested method calls/nestedcall?value=truesTrues/nestedcall?value=falsesFalseN(sNonescherrypysrootsvaluestestutilscreate_requestsAssertionError(sself((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pystest_validation_nesteds    cCstidtiidjpttiidjpttidtiidjpttidttiidjpttiii dpttid ttiidjpttiii dptd S( s?Data can be converted/validated with formencode.Schema instances-/save2?submit=send&firstname=Joe&lastname=DoesJoe Doessends-/save2?submit=send&firstname=Arthur&lastname=sArthur s'/save2?submit=send&firstname=&lastname=is firstnames(/save2?submit=send&firstname=D&lastname=N( stestutilscreate_requestscherrypysrootsfullnamesAssertionErrorssubmitslenserrorsshas_key(sself((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pystest_validation_with_schemas      cCs/tiddtiidjptdS(sF'tg_template' in a returned dict will use the template specified theres /useothersThis is the other templateiN(stestutilscreate_requestscherrypysresponsesbodysAssertionError(sself((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pystest_other_templates cCsItidtiid}d|jptd|jptdS(s%Cheetah templates can be used as wells /usecheetahis"This is the Cheetah test template.sPaging all chimps.N(stestutilscreate_requestscherrypysresponsesbodysAssertionError(sselfsbody((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pystest_cheetah_templates  cCs`ti}tiit_tid|t_tiipt tii djpt dS(s=run_with_transaction is called only on topmost exposed methods/nestedcall?value=trueiN( sdatabasesrun_with_transactionsoldrwtscherrypysrootsrwtstestutilscreate_requestsvaluesAssertionErrors rwt_called(sselfsoldrwt((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pystest_run_with_transs   cCs+tidtiidjptdS(s!Positional parameters should works/pos/foosfooN(stestutilscreate_requestscherrypysrootsposvaluesAssertionError(sself((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pystest_positionals cCsitiddk}|itiid}|ddjpttii i d ptdS(sflash with strings should works/flash_plain?tg_format=jsonNistg_flashsplain( stestutilscreate_requests simplejsonsloadsscherrypysresponsesbodysvaluessAssertionErrors simple_cookieshas_key(sselfsvaluess simplejson((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pystest_flash_plains   cCsitiddk}|itiid}|ddjpttii i d ptdS(s&flash with unicode objects should works/flash_unicode?tg_format=jsonNistg_flashuünicode( stestutilscreate_requests simplejsonsloadsscherrypysresponsesbodysvaluessAssertionErrors simple_cookieshas_key(sselfsvaluess simplejson((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pystest_flash_unicodes   cCstidtiiidpttitiiddtdtii i ddi dk }|i tiid }|d d jptdS( sflash must survive a redirects/flash_redirect?tg_format=jsons302sLocationsheaderssCookiesheadersNistg_flashuredirect ünicode(stestutilscreate_requestscherrypysresponsesstatuss startswithsAssertionErrorsheaderssdicts simple_cookiesoutputsstrips simplejsonsloadssbodysvalues(sselfs simplejsonsvalues((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pystest_flash_on_redirects + cCsatidtiiidpttiidi}d|jptd|jo d|jptd|jo d|jptd |jo d |jptd i d |jptd |jpttitii ddt dtiii ddi dk}|itiid}|ddjptdS(s<flash redirect with chars that can cause troubles in cookiess1/flash_redirect_with_trouble_chars?tg_format=jsons302stg_flashs$s,s;s s sfoosbarukäsesutf-8s!sLocationsheaderssCookiesheadersNiu$foo, käse; bar!(stestutilscreate_requestscherrypysresponsesstatuss startswithsAssertionErrors simple_cookiesvaluesencodesheaderssdictsoutputsstrips simplejsonsloadssbodysvalues(sselfs simplejsonsvaluesvalues((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pys&test_flash_redirect_with_trouble_charss !!!+ cCstiddtdddk}|itiid}|ddjpt tii i dp t d tii d}|d djpt dS( s'latest set flash should have precedences/flash_plain?tg_format=jsonsheaderssCookiestg_flash="old flash"; Path=/;Nistg_flashsplains)Cookie clearing request should be presentsexpires( stestutilscreate_requestsdicts simplejsonsloadsscherrypysresponsesbodysvaluessAssertionErrors simple_cookieshas_keys flashcookie(sselfs simplejsons flashcookiesvalues((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pystest_double_flashs   cCstihdd<tidtiid}d|jpttihdd<tidtiid}d|jptd|jpttihdd <tidtiid}d|jptd |jptd |jptd S( s1the outputformat for kid can be set in the configskid.outputformatsxhtmls/testis);?a""#turbogears/tests/test_decorator.pyc; HIc@sdkZdkTdklZdZeeZdZeeZdZeeZdZde_ eZ eeZeeZeeZdZ e d gd Z e e de d gd Zd ZegdZdZegdZdZeeZdZeeZdZeeZdZeeZdeifdYZdS(N(s*(stestutilcCsd}|SdS(NcOs|||SdS(N(sfuncsargsskw(sfuncsargsskw((s8build\bdist.win32\egg\turbogears\tests\test_decorator.pyscalls(scall(sfuncscall((s8build\bdist.win32\egg\turbogears\tests\test_decorator.pysd1s cCsd}|SdS(NcOs|||SdS(N(sfuncsargsskw(sfuncsargsskw((s8build\bdist.win32\egg\turbogears\tests\test_decorator.pyscalls(scall(sfuncscall((s8build\bdist.win32\egg\turbogears\tests\test_decorator.pysd2 s cCsd|_d}|SdS(NicOs|||SdS(N(sfuncsargsskw(sfuncsargsskw((s8build\bdist.win32\egg\turbogears\tests\test_decorator.pyscalls(sfuncsbaz2scall(sfuncscall((s8build\bdist.win32\egg\turbogears\tests\test_decorator.pysd3s  cCs ||SdS(N(sasb(sasb((s8build\bdist.win32\egg\turbogears\tests\test_decorator.pysfoosicsd}t|SdS(Ncsd}|SdS(Ncs|||SdS(N(sfuncsargsskwsn(sfuncsargsskw(sn(s8build\bdist.win32\egg\turbogears\tests\test_decorator.pyscall&s(scall(sfuncscall(sn(s8build\bdist.win32\egg\turbogears\tests\test_decorator.pysentangle%s (sentangles decorator(snsentangle((sns8build\bdist.win32\egg\turbogears\tests\test_decorator.pysaddn$s i cCs|SdS(N(sa(sa((s8build\bdist.win32\egg\turbogears\tests\test_decorator.pyspy23,sicCs|SdS(N(sa(sa((s8build\bdist.win32\egg\turbogears\tests\test_decorator.pyscomposed0scCsd}t|SdS(NcCsd}|SdS(NcOst|SdS(N(slensargs(sfuncsargsskw((s8build\bdist.win32\egg\turbogears\tests\test_decorator.pyscall5s(scall(sfuncscall((s8build\bdist.win32\egg\turbogears\tests\test_decorator.pysentangle4s (sentanglesweak_signature_decorator(sentangle((s8build\bdist.win32\egg\turbogears\tests\test_decorator.pysweakener3s cCsdS(N((((s8build\bdist.win32\egg\turbogears\tests\test_decorator.pysweakling;scCs,d}t|ddgtttfSdS(NcCsd}|SdS(NcCs||SdS(N(sfuncsb(sfuncsasb((s8build\bdist.win32\egg\turbogears\tests\test_decorator.pyscall@s(scall(sfuncscall((s8build\bdist.win32\egg\turbogears\tests\test_decorator.pysentangle?s sasb(sentangles decoratorsNone(sentangle((s8build\bdist.win32\egg\turbogears\tests\test_decorator.pys sig_changer>s cCs|SdS(N(sa(sa((s8build\bdist.win32\egg\turbogears\tests\test_decorator.pysnew_sigFscOs|||dSdS(Ni(sfuncsargsskw(sfuncsargsskw((s8build\bdist.win32\egg\turbogears\tests\test_decorator.pyssimpleIscOst|SdS(N(slensargs(sfuncsargsskw((s8build\bdist.win32\egg\turbogears\tests\test_decorator.pyssimple_weakenerMscCsdS(N((((s8build\bdist.win32\egg\turbogears\tests\test_decorator.pyssimple_weaklingQscCs|SdS(N(sa(sa((s8build\bdist.win32\egg\turbogears\tests\test_decorator.pys simple_adder1Uss TestDecoratorcBsPtZdZdZdZdZdZdZdZdZ RS( NcCsxMtiiD]<\}}|i|tij|i|ti|jqW|ititij|iti ti j|iti ti jdS(N( sbars__dict__s iteritemsskeysvaluesselfs failUnlesssfoos__name__s __module__s__doc__(sselfsvalueskey((s8build\bdist.win32\egg\turbogears\tests\test_decorator.pystest_preservation[s cCsk|ittttj|ittt|itttj|itttjdS(N(sselfs failUnlesssfunc_idsfoosbarsfunc_eqs func_original(sself((s8build\bdist.win32\egg\turbogears\tests\test_decorator.pystest_eqcscCsP|itttdj|ittd tttdjdS(Niii(sselfs failUnlessslensfunc_compositionsfoo(sself((s8build\bdist.win32\egg\turbogears\tests\test_decorator.pys test_historyiscCs|itddjdS(Nii (sselfs failUnlessspy23(sself((s8build\bdist.win32\egg\turbogears\tests\test_decorator.pystest_23compatibilitynscCs0|itidj|itidjdS(Nii(sselfs failUnlesssfoosbaz1sbaz2(sself((s8build\bdist.win32\egg\turbogears\tests\test_decorator.pystest_attributesqscCsa|itdtddj|itddjtd|itidjdS(Niiiiiscomposed(sselfs failUnlesssaddnspy23scomposeds__name__(sself((s8build\bdist.win32\egg\turbogears\tests\test_decorator.pystest_compositionus%"cCsb|ittdd!ddfj|itdddj|itdddjdS(Niis_decorator__varargss_decorator__kwargsi(sselfs failUnlesssmake_weak_signaturesbarsweaklingsnew_sig(sself((s8build\bdist.win32\egg\turbogears\tests\test_decorator.pystest_signaturezs&cCs9|itddj|itdddjdS(Nii(sselfs failUnlesss simple_adder1ssimple_weakling(sself((s8build\bdist.win32\egg\turbogears\tests\test_decorator.pystest_simple_decoratorss( s__name__s __module__stest_preservationstest_eqs test_historystest_23compatibilitystest_attributesstest_compositionstest_signaturestest_simple_decorators(((s8build\bdist.win32\egg\turbogears\tests\test_decorator.pys TestDecoratorYs       (sunitteststurbogears.decorators turbogearsstestutilsd1s decoratorsd2sd3sfoosbaz1sbarsaddnspy23scomposescomposedsweakenersweaklings sig_changersnew_sigssimplessimple_decoratorssimple_weakenerssimple_weak_signature_decoratorssimple_weaklings simple_adder1sTestCases TestDecorator(stestutilscomposedssimplesunittests sig_changersd2sd3s TestDecoratorsd1sweakenerssimple_weakenersaddnsfoosnew_sigsbarspy23s simple_adder1ssimple_weaklingsweakling((s8build\bdist.win32\egg\turbogears\tests\test_decorator.pys?sD                               PKK968E==&turbogears/tests/test_errorhandling.pyimport unittest import cherrypy from turbogears.controllers import error_handler, exception_handler, \ expose, validate, RootController, Controller from turbogears.errorhandling import FailsafeSchema from turbogears.util import bind_args from turbogears import validators from turbogears import testutil def _errors_to_str(errors): if isinstance(errors, dict): return dict(map(lambda (k, v): (k, str(v)), errors.iteritems())) else: return str(errors) class MyRoot(RootController): def defaulterrorhandler(self, tg_source, tg_errors, tg_exceptions, *args, **kw): return dict(title="Default error handler", errors=_errors_to_str(tg_errors), args=args, kw=kw) def specialisederrorhandler(self, tg_source, tg_errors, *args, **kw): return dict(title="Specialised error handler", errors=_errors_to_str(tg_errors), args=args, kw=kw) def defaulterror(self, bar=""): return dict(title="Default error provider") defaulterror = error_handler(defaulterrorhandler)(defaulterror) defaulterror = validate(validators={"bar": validators.StringBoolean()})( defaulterror) defaulterror = expose()(defaulterror) def specialisederror(self, bar="", baz=""): return dict(title="Specialised error provider") specialisederror = error_handler(defaulterrorhandler)( specialisederror) specialisederror = error_handler(specialisederrorhandler, "'baz' in tg_errors")(specialisederror) specialisederror = validate(validators={ "bar": validators.Int(not_empty=True), "baz": validators.Email()})(specialisederror) specialisederror = expose()(specialisederror) def exceptionerror(self): raise Exception("Exception 1") exceptionerror = exception_handler(defaulterrorhandler)(exceptionerror) exceptionerror = expose()(exceptionerror) def exceptionerror2(self): raise Exception("Exception 2") exceptionerror2 = exception_handler(exceptionerror2)(exceptionerror2) exceptionerror2 = expose()(exceptionerror2) def recursiveerror(self, tg_errors=None, bar=""): if tg_errors: return dict(title="Recursive error handler") else: return dict(title="Recursive error provider") recursiveerror = error_handler()(recursiveerror) recursiveerror = validate(validators={ "bar": validators.Int(not_empty=True)})(recursiveerror) recursiveerror = expose()(recursiveerror) def impliciterror(self, tg_errors=None, bar=""): if tg_errors: return dict(title="Implicit error handler", tg_errors=str(tg_errors)) else: return dict(title="Implicit error provider") impliciterror = validate(validators={ "bar": validators.Int(not_empty=True)})(impliciterror) impliciterror = expose()(impliciterror) def normalmethod(self): return dict(title="Normal method") normalmethod = expose()(normalmethod) def normalmethodcaller(self, bar=""): return dict(title="Normal method caller") normalmethodcaller = error_handler(normalmethod)(normalmethodcaller) normalmethodcaller = validate(validators={ "bar": validators.StringBoolean()})(normalmethodcaller) normalmethodcaller = expose()(normalmethodcaller) def infiniteloop(self): try: self.exceptionerror2() except Exception, e: return dict(title=str(e)) else: return dict(title="Infinite loop provider") infiniteloop = expose()(infiniteloop) def positionalargs(self, first, second, *args, **kw): self.first = first self.second = second self.third = args[0] return dict(title="Positional arguments", first=first, second=second, args=args, bar=kw["bar"]) positionalargs = error_handler(defaulterrorhandler)( positionalargs) positionalargs = validate(validators={ "bar": validators.StringBoolean(), "second": validators.Int(not_empty=True)})(positionalargs) positionalargs = expose()(positionalargs) def missingargs(self, bar=""): return dict(title="Missing args provider") missingargs = error_handler(defaulterrorhandler)(missingargs) missingargs = validate(validators={ "bar": validators.Int(not_empty=True)})(missingargs) missingargs = expose()(missingargs) def nohandler2(self, bar=""): return dict(title="No handler inner") nohandler2 = validate(validators={ "bar": validators.Int(not_empty=True)})(nohandler2) nohandler2 = expose()(nohandler2) def nohandler(self): try: self.nohandler2("abc") except NotImplementedError: return dict(title="Exception raised") else: return dict(title="No handler") nohandler = expose()(nohandler) def simpleerrorhandler(self, baz=None): return dict(title="Default error handler", baz=baz) def bindargs(self, bar=""): return dict(title="Bind arguments to error handler") bindargs = error_handler( bind_args(baz=123)(simpleerrorhandler))(bindargs) bindargs = validate(validators={ "bar": validators.Int(not_empty=True)})(bindargs) bindargs = expose()(bindargs) def notexposed(self, bar, tg_errors = None): if tg_errors: return dict(title="Not exposed error", bar=bar) else: return dict(title="Not exposed", bar=bar) notexposed = validate(validators={ "bar": validators.Int(not_empty=True)})(notexposed) def notexposedcaller(self, foo="", bar="", baz=""): return self.notexposed(bar) notexposedcaller = expose()(notexposedcaller) def continuation(self, tg_source): self.continuation = True return tg_source(self) def continuationcaller(self, bar=""): return dict(title="Continuation caller") continuationcaller = error_handler(continuation)(continuationcaller) continuationcaller = validate(validators={ "bar": validators.Int(not_empty=True)})(continuationcaller) continuationcaller = expose()(continuationcaller) def nest(self, bar=""): return dict(title="Nested") nest = error_handler(defaulterrorhandler)(nest) nest = validate(validators={"bar": validators.Int(not_empty=True)})(nest) nest = expose()(nest) def failsafenone(self, tg_errors=None, bar="", baz=""): return dict(title="No failsafe", bar=bar, baz=baz) failsafenone = validate(validators={"bar": validators.Int(not_empty=True), "baz": validators.Int(not_empty=True)})(failsafenone) failsafenone = expose()(failsafenone) def failsafevaluesdict(self, tg_errors=None, bar="", baz=""): return dict(title="Failsafe values-dict", bar=bar, baz=baz) failsafevaluesdict = validate(validators={ "bar": validators.Int(not_empty=True), "baz": validators.Int(not_empty=True)}, failsafe_schema=FailsafeSchema.values, failsafe_values={"bar": 1, "baz": 2})(failsafevaluesdict) failsafevaluesdict = expose()(failsafevaluesdict) def failsafevaluesatom(self, tg_errors=None, bar="", baz=""): return dict(title="Failsafe values-atom", bar=bar, baz=baz) failsafevaluesatom = validate(validators={ "bar": validators.Int(not_empty=True), "baz": validators.Int(not_empty=True)}, failsafe_schema=FailsafeSchema.values, failsafe_values=13)(failsafevaluesatom) failsafevaluesatom = expose()(failsafevaluesatom) def failsafemaperrors(self, tg_errors=None, bar="", baz=""): return dict(title="Failsafe map errors", bar=str(bar), baz=str(baz)) failsafemaperrors = validate(validators={ "bar": validators.Int(not_empty=True), "baz": validators.Int(not_empty=True)}, failsafe_schema=FailsafeSchema.map_errors)(failsafemaperrors) failsafemaperrors = expose()(failsafemaperrors) def failsafeformencode(self, tg_errors=None, bar="", baz=""): return dict(title="Formencode if_invalid", bar=bar, baz=baz) failsafeformencode = validate(validators={ "bar": validators.Int(if_invalid=1), "baz": validators.Int(if_invalid=2)})(failsafeformencode) failsafeformencode = expose()(failsafeformencode) def failsafedefaults(self, tg_errors=None, bar=1, baz=2): return dict(title="Failsafe map defaults", bar=bar, baz=baz) failsafedefaults = validate(validators={ "bar": validators.Int(not_empty=True), "baz": validators.Int(not_empty=True)}, failsafe_schema=FailsafeSchema.defaults)(failsafedefaults) failsafedefaults = expose()(failsafedefaults) class NestedController(Controller): def nest(self, bar=""): return dict(title="Nested") nest = error_handler()(nest) nest = validate(validators={"bar": validators.Int(not_empty=True)})(nest) nest = expose()(nest) class TestErrorHandler(unittest.TestCase): def setUp(self): cherrypy.root = MyRoot() cherrypy.root.nestedcontroller = NestedController() def test_defaultErrorHandler(self): """Default error handler.""" testutil.create_request("/defaulterror?bar=abc") self.failUnless("Default error handler" in cherrypy.response.body[0]) testutil.create_request("/defaulterror?bar=true") self.failUnless("Default error provider" in cherrypy.response.body[0]) def test_specialisedErrorHandler(self): """Error handler specialisation.""" testutil.create_request("/specialisederror?bar=abc&baz=a@b.com") self.failUnless("Default error handler" in cherrypy.response.body[0]) testutil.create_request("/specialisederror?baz=abc&bar=1") self.failUnless("Specialised error handler" in cherrypy.response.body[0]) testutil.create_request("/specialisederror?bar=1&baz=a@b.com") self.failUnless("Specialised error provider" in cherrypy.response.body[0]) def test_exceptionErrorHandler(self): """Error handler for exceptions.""" testutil.create_request("/exceptionerror") self.failUnless("Default error handler" in cherrypy.response.body[0]) def test_recursiveErrorHandler(self): """Recursive error handler.""" testutil.create_request("/recursiveerror?bar=abc") self.failUnless("Recursive error handler" in cherrypy.response.body[0]) testutil.create_request("/recursiveerror?bar=1") self.failUnless("Recursive error provider" in cherrypy.response.body[0]) def test_implicitErrorHandler(self): """Implicit error handling.""" testutil.create_request("/impliciterror?bar=abc") self.failUnless("Implicit error handler" in cherrypy.response.body[0]) testutil.create_request("/impliciterror?bar=1") self.failUnless("Implicit error provider" in cherrypy.response.body[0]) def test_normalMethodErrorHandler(self): """Normal method as an error handler.""" testutil.create_request("/normalmethodcaller?bar=abc") self.failUnless("Normal method" in cherrypy.response.body[0]) testutil.create_request("/normalmethodcaller?bar=true") self.failUnless("Normal method caller" in cherrypy.response.body[0]) def test_infiniteRecursionPrevention(self): """Infinite recursion prevention.""" testutil.create_request("/infiniteloop") self.failUnless("Exception 2" in cherrypy.response.body[0]) def test_positionalArgs(self): """Positional argument validation.""" testutil.create_request("/positionalargs/first/23/third?bar=abc") self.failUnless("Default error handler" in cherrypy.response.body[0]) testutil.create_request("/positionalargs/first/abc/third?bar=false") self.failUnless("Default error handler" in cherrypy.response.body[0]) testutil.create_request("/positionalargs/first/abc/third?bar=abc") self.failUnless("Default error handler" in cherrypy.response.body[0]) testutil.create_request("/positionalargs/first/23/third?bar=true") self.failUnless("Positional arguments" in cherrypy.response.body[0]) self.failUnless(cherrypy.root.first == "first") self.failUnless(cherrypy.root.second == 23) self.failUnless(cherrypy.root.third == "third") def test_missingArgs(self): """Arguments required in validation missing.""" testutil.create_request("/missingargs") self.failUnless("Default error handler" in cherrypy.response.body[0]) testutil.create_request("/missingargs?bar=12") self.failUnless("Missing args provider" in cherrypy.response.body[0]) def test_nohandler(self): """No error hanlder declared.""" testutil.create_request("/nohandler") self.failUnless("Exception raised" in cherrypy.response.body[0]) def test_bindArgs(self): """Arguments can be bond to an error handler.""" testutil.create_request("/bindargs") self.failUnless("123" in cherrypy.response.body[0]) def test_notExposed(self): """Validation error handling is decoupled from expose.""" testutil.create_request("/notexposedcaller?foo=a&bar=rab&baz=c") self.failUnless("Not exposed error" in cherrypy.response.body[0]) self.failUnless("rab" in cherrypy.response.body[0]) def test_continuations(self): """Continuations via error handling mechanism.""" testutil.create_request("/continuationcaller?bar=a") self.failUnless("Continuation caller" in cherrypy.response.body[0]) self.failUnless(cherrypy.root.continuation == True) def test_nested(self): """Potentially ambiguous cases.""" testutil.create_request("/nest?bar=a") self.failUnless("Default error handler" in cherrypy.response.body[0]) testutil.create_request("/nestedcontroller/nest?bar=a") self.failUnless("Nested" in cherrypy.response.body[0]) def test_failsafe(self): """Failsafe values for erroneous input.""" testutil.create_request("/failsafenone?bar=a&baz=b") self.failUnless('"bar": "a"' in cherrypy.response.body[0]) self.failUnless('"baz": "b"' in cherrypy.response.body[0]) testutil.create_request("/failsafevaluesdict?bar=a&baz=b") self.failUnless('"bar": 1' in cherrypy.response.body[0]) self.failUnless('"baz": 2' in cherrypy.response.body[0]) testutil.create_request("/failsafevaluesatom?bar=a&baz=b") self.failUnless('"bar": 13' in cherrypy.response.body[0]) self.failUnless('"baz": 13' in cherrypy.response.body[0]) testutil.create_request("/failsafemaperrors?bar=a&baz=b") self.failUnless('"bar": "Please enter an integer value"' in cherrypy.response.body[0]) self.failUnless('"baz": "Please enter an integer value"' in cherrypy.response.body[0]) testutil.create_request("/failsafeformencode?bar=a&baz=b") self.failUnless('"bar": 1' in cherrypy.response.body[0]) self.failUnless('"baz": 2' in cherrypy.response.body[0]) testutil.create_request("/failsafedefaults?bar=a&baz=b") self.failUnless('"bar": 1' in cherrypy.response.body[0]) self.failUnless('"baz": 2' in cherrypy.response.body[0]) PKA>t]$V$V'turbogears/tests/test_errorhandling.pyc; HIc@sdkZdkZdklZlZlZlZlZlZdk l Z dk l Z dk lZdk lZdZdefdYZd efd YZd eifd YZdS( N(s error_handlersexception_handlersexposesvalidatesRootControllers Controller(sFailsafeSchema(s bind_args(s validators(stestutilcCs>t|to ttd|iSn t|SdS(NcCs|\}}|t|fS(N(sksvsstr(s.0sksv((s<build\bdist.win32\egg\turbogears\tests\test_errorhandling.pyss(s isinstanceserrorssdictsmaps iteritemssstr(serrors((s<build\bdist.win32\egg\turbogears\tests\test_errorhandling.pys_errors_to_str s sMyRootc BsvtZdZdZddZeeeZedhdei<eZe eZdddZ eee Z eede Z edhdei d e <d ei <e Z e e Z d ZeeeZe eZd ZeeeZe eZedd ZeeZedhdei d e <eZe eZeddZedhdei d e <eZe eZdZe eZddZeeeZedhdei<eZe eZdZe eZdZeeeZedhdei<dei d e <eZe eZddZeeeZedhdei d e <eZe eZddZedhdei d e <eZe eZdZe eZedZddZeed deeZedhdei d e <eZe eZedZedhdei d e <eZddddZe eZdZ ddZ!ee e!Z!edhdei d e <e!Z!e e!Z!ddZ"eee"Z"edhdei d e <e"Z"e e"Z"edddZ#edhdei d e <d ei d e <e#Z#e e#Z#eddd Z$edhdei d e <d ei d e 9 turbogears/tests/test_expose.pyc; HIc@sdkZdkZdklZlZdklZdeifdYZdZ dZ dZ dZ d Z d ZdS( N(s controllerssexpose(screate_requests ExposeRootcBsmtZedgedgdZedgedddddgedddgd ZRS( Nsturbogears.tests.simplesjsoncCstdddtddSdS(NstitlesFoobarsmyboolssomevalsfoo(sdictsFalse(sself((s5build\bdist.win32\egg\turbogears\tests\test_expose.pys with_json ss accept_formatsapplication/jsons as_formats cheetah:turbogears.tests.textfmts text/plaincCstdddtddSdS(NstitlesFoobarsmyboolssomevalsfoo(sdictsFalse(sself((s5build\bdist.win32\egg\turbogears\tests\test_expose.pyswith_json_via_accepts(s__name__s __module__sexposes with_jsonswith_json_via_accept(((s5build\bdist.win32\egg\turbogears\tests\test_expose.pys ExposeRoots    cCs>tt_tdtiid}d|jptdS(Ns /with_jsonisPaging all foo(s ExposeRootscherrypysrootscreate_requestsresponsesbodysAssertionError(sbody((s5build\bdist.win32\egg\turbogears\tests\test_expose.pystest_gettinghtmls  cCs>tt_tdtiid}d|jptdS(Ns/with_json?tg_format=jsonis"title": "Foobar"(s ExposeRootscherrypysrootscreate_requestsresponsesbodysAssertionError(sbody((s5build\bdist.win32\egg\turbogears\tests\test_expose.pystest_gettingjsons  cCsMtt_tddtddtiid}d|jptdS(Ns/with_json_via_acceptsheaderssAcceptsapplication/jsonis"title": "Foobar"(s ExposeRootscherrypysrootscreate_requestsdictsresponsesbodysAssertionError(sbody((s5build\bdist.win32\egg\turbogears\tests\test_expose.pystest_gettingjsonviaaccept"s  cCs>tt_tdtiid}d|jptdS(Ns$/with_json_via_accept?tg_format=jsonis"title": "Foobar"(s ExposeRootscherrypysrootscreate_requestsresponsesbodysAssertionError(sbody((s5build\bdist.win32\egg\turbogears\tests\test_expose.pys1test_getting_json_with_accept_but_using_tg_format)s  cCsVtt_tddtddtiidGHtiiddjptdS(Ns/with_json_via_acceptsheaderssAccepts text/plainisThis is a plain text for foo.(s ExposeRootscherrypysrootscreate_requestsdictsresponsesbodysAssertionError(((s5build\bdist.win32\egg\turbogears\tests\test_expose.pystest_getting_plaintext/s  c Cs$dtifdY}|t_tddtddtiid}t i |}|tdd d t d d d t jpttiiddjpttdtiid}t i |}|tdd d t d d d t jpttiiddjptdS(NsNewRootcBs'tZedddegdZRS(Nstemplatesturbogears.tests.doesnotexists allow_jsoncCstdddtddSdS(NstitlesFoobarsmyboolssomevalsniggles(sdictsFalse(sself((s5build\bdist.win32\egg\turbogears\tests\test_expose.pystest:s(s__name__s __module__sexposesTruestest(((s5build\bdist.win32\egg\turbogears\tests\test_expose.pysNewRoot8ss/testsheaderssacceptsapplication/jsonistitlesFoobarsmyboolssomevalsnigglesstg_flashs Content-Types/test?tg_format=json(s controllerssRootControllersNewRootscherrypysrootscreate_requestsdictsresponsesbodys simplejsonsloadssvaluessFalsesNonesAssertionErrorsheaders(sbodysNewRootsvalues((s5build\bdist.win32\egg\turbogears\tests\test_expose.pystest_allow_json6s  (scherrypys simplejsons turbogearss controllerssexposesturbogears.testutilscreate_requestsRootControllers ExposeRootstest_gettinghtmlstest_gettingjsonstest_gettingjsonviaaccepts1test_getting_json_with_accept_but_using_tg_formatstest_getting_plaintextstest_allow_json( stest_gettingjsonviaacceptstest_gettinghtmlstest_getting_plaintexts simplejsons ExposeRootsexposestest_allow_jsons controllerss1test_getting_json_with_accept_but_using_tg_formatstest_gettingjsonscherrypyscreate_request((s5build\bdist.win32\egg\turbogears\tests\test_expose.pys?s        PKK9)turbogears/tests/test_form_controllers.pyfrom unittest import TestCase from datetime import datetime import cherrypy from turbogears import widgets, config, controllers, expose, mochikit, \ validate, validators, testutil class MyFormFields(widgets.WidgetsList): #XXX: Since allow_extra_fields should be removed from validators.Schema, # we need a validator for every input-expecting widget name = widgets.TextField(validator=validators.String()) age = widgets.TextField(validator=validators.Int(), default=0) date = widgets.CalendarDatePicker(validator=validators.DateConverter( if_empty=datetime.now())) myfields = MyFormFields() myform = widgets.TableForm(fields=myfields) class MyRoot(controllers.RootController): [expose(template="turbogears.tests.form")] def index(self): return dict(form=myform) [expose(template="turbogears.tests.form")] def fields(self): myfields.display = lambda **kw: kw.values() return dict(form=myfields) [expose(template="turbogears.tests.form")] def usemochi(self): return dict(mochi=mochikit, form=myform) [expose(template="turbogears.tests.othertemplate")] [validate(form=myform)] def testform(self, name, date, age, tg_errors=None): if tg_errors: self.has_errors = True self.name = name self.age = age self.date = date [expose()] [validate(form=myform)] def testform_new_style(self, name, date, age): if cherrypy.request.validation_errors: self.has_errors = True self.name = name self.age = age self.date = date def test_form_translation(): """Form input is translated into properly converted parameters""" root = MyRoot() cherrypy.root = root testutil.create_request("/testform?name=ed&date=11/05/2005&age=5") assert root.name == "ed" assert root.age == 5 def test_form_translation_new_style(): """Form input is translated into properly converted parameters""" root = MyRoot() cherrypy.root = root testutil.create_request("/testform_new_style?name=ed&date=11/05/2005&age=5&") assert root.name == "ed" assert root.age == 5 def test_invalid_form_with_error_handling(): """Invalid forms can be handled by the method""" root = cherrypy.root testutil.create_request("/testform?name=ed&age=edalso&date=11/05/2005") assert root.has_errors def test_css_should_appear(): """CSS should appear when asked for""" testutil.create_request("/") assert "calendar-system.css" in cherrypy.response.body[0] testutil.create_request("/fields") assert "calendar-system.css" in cherrypy.response.body[0] def test_javascript_should_appear(): """JavaScript should appear when asked for""" testutil.create_request("/") assert "calendar.js" in cherrypy.response.body[0] testutil.create_request("/fields") assert "calendar.js" in cherrypy.response.body[0] def test_include_mochikit(): """JSLinks (and MochiKit especially) can be included easily""" testutil.create_request("/usemochi") assert "MochiKit.js" in cherrypy.response.body[0] def test_suppress_mochikit(): """MochiKit inclusion can be suppressed""" config.update({"global": {"tg.mochikit_suppress": True}}) testutil.create_request("/usemochi") suppressed_body = cherrypy.response.body[0] # repair the fixture config.update({"global": {"tg.mochikit_suppress": False}}) testutil.create_request("/usemochi") included_body = cherrypy.response.body[0] assert "MochiKit.js" not in suppressed_body assert "MochiKit.js" in included_body def test_mochikit_everywhere(): """MochiKit can be included everywhere by setting tg.mochikit_all""" config.update({"global": {"tg.mochikit_all": True}}) testutil.create_request("/") config.update({"global": {"tg.mochikit_all": False}}) assert "MochiKit.js" in cherrypy.response.body[0] def test_mochikit_nowhere(): """Setting tg.mochikit_suppress will prevent including it everywhere""" config.update({"global": {"tg.mochikit_all": True}}) config.update({"global": {"tg.mochikit_suppress": True}}) testutil.create_request("/") config.update({"global": {"tg.mochikit_all": False}}) config.update({"global": {"tg.mochikit_suppress": False}}) assert "MochiKit.js" not in cherrypy.response.body[0] def test_include_widgets(): """Any widget can be included everywhere by setting tg.include_widgets""" config.update({"global": {"tg.include_widgets": ["mochikit"]}}) testutil.create_request("/") config.update({"global": {"tg.include_widgets": []}}) assert "MochiKit.js" in cherrypy.response.body[0] class State(object): counter = 0 class AddingValidator(validators.FancyValidator): def _to_python(self, value, state=None): state.counter += 1 return value class AddingSchema(validators.Schema): a = AddingValidator() b = AddingValidator() class AddingNestedSchema(AddingSchema): c = AddingSchema() class TestValidationState(TestCase): class Controller(controllers.RootController): [expose()] [validate(validators=AddingNestedSchema(), state_factory=State)] def validation(self, a, b, c): return 'counter: %d' % cherrypy.request.validation_state.counter def __init__(self, *args, **kw): super(TestValidationState, self).__init__(*args, **kw) def test_counter_is_incremented(self): cherrypy.root = self.Controller() # parameter values are irrelevant url = '/validation?a=1&b=2&c.a=3&c.b=4' testutil.create_request(url) body = cherrypy.response.body[0] msg = "Validation state is not handled properly" # 4 == 1 (a) + 1(b) + 1(c.a) + 1(c.b) self.failUnless('counter: 4' in body, msg) PKA>N ^0^0*turbogears/tests/test_form_controllers.pyc; HIc@sydklZdklZdkZdklZlZlZlZl Z l Z l Z l Z dei fdYZeZeideZdeifdYZd Zd Zd Zd Zd ZdZdZdZdZdZdefdYZde i fdYZ!de i"fdYZ#de#fdYZ$defdYZ%dS((sTestCase(sdatetimeN(swidgetssconfigs controllerssexposesmochikitsvalidates validatorsstestutils MyFormFieldscBsbtZeideiZeideiddZei dei de i Z RS(Ns validatorsdefaultisif_empty(s__name__s __module__swidgetss TextFields validatorssStringsnamesIntsagesCalendarDatePickers DateConvertersdatetimesnowsdate(((s?build\bdist.win32\egg\turbogears\tests\test_form_controllers.pys MyFormFieldsssfieldssMyRootcBstZeddgdZeddgdZeddgdZeddgedegedZ egedegd Z RS( Nstemplatesturbogears.tests.formcCstdtSdS(Nsform(sdictsmyform(sself((s?build\bdist.win32\egg\turbogears\tests\test_form_controllers.pysindexscCsdt_tdtSdS(NcKs |iS(N(skwsvalues(skw((s?build\bdist.win32\egg\turbogears\tests\test_form_controllers.pysssform(smyfieldssdisplaysdict(sself((s?build\bdist.win32\egg\turbogears\tests\test_form_controllers.pysfieldss cCstdtdtSdS(Nsmochisform(sdictsmochikitsmyform(sself((s?build\bdist.win32\egg\turbogears\tests\test_form_controllers.pysusemochi ssturbogears.tests.othertemplatesformcCs3|o t|_n||_||_||_dS(N(s tg_errorssTruesselfs has_errorssnamesagesdate(sselfsnamesdatesages tg_errors((s?build\bdist.win32\egg\turbogears\tests\test_form_controllers.pystestform%s    cCs9tiio t|_n||_||_||_dS(N( scherrypysrequestsvalidation_errorssTruesselfs has_errorssnamesagesdate(sselfsnamesdatesage((s?build\bdist.win32\egg\turbogears\tests\test_form_controllers.pystestform_new_style.s     ( s__name__s __module__sexposesindexsfieldssusemochisvalidatesmyformsNonestestformstestform_new_style(((s?build\bdist.win32\egg\turbogears\tests\test_form_controllers.pysMyRoots     cCsQt}|t_tid|idjpt|idjptdS(s;Form input is translated into properly converted parameterss'/testform?name=ed&date=11/05/2005&age=5sediN(sMyRootsrootscherrypystestutilscreate_requestsnamesAssertionErrorsage(sroot((s?build\bdist.win32\egg\turbogears\tests\test_form_controllers.pystest_form_translation5s    cCsQt}|t_tid|idjpt|idjptdS(s;Form input is translated into properly converted parameterss2/testform_new_style?name=ed&date=11/05/2005&age=5&sediN(sMyRootsrootscherrypystestutilscreate_requestsnamesAssertionErrorsage(sroot((s?build\bdist.win32\egg\turbogears\tests\test_form_controllers.pystest_form_translation_new_style=s    cCs+ti}tid|iptdS(s*Invalid forms can be handled by the methods,/testform?name=ed&age=edalso&date=11/05/2005N(scherrypysrootstestutilscreate_requests has_errorssAssertionError(sroot((s?build\bdist.win32\egg\turbogears\tests\test_form_controllers.pys%test_invalid_form_with_error_handlingEs  cCsZtiddtiidjpttiddtiidjptdS(s CSS should appear when asked fors/scalendar-system.cssis/fieldsN(stestutilscreate_requestscherrypysresponsesbodysAssertionError(((s?build\bdist.win32\egg\turbogears\tests\test_form_controllers.pystest_css_should_appearKs   cCsZtiddtiidjpttiddtiidjptdS(s'JavaScript should appear when asked fors/s calendar.jsis/fieldsN(stestutilscreate_requestscherrypysresponsesbodysAssertionError(((s?build\bdist.win32\egg\turbogears\tests\test_form_controllers.pystest_javascript_should_appearRs   cCs/tiddtiidjptdS(s8JSLinks (and MochiKit especially) can be included easilys /usemochis MochiKit.jsiN(stestutilscreate_requestscherrypysresponsesbodysAssertionError(((s?build\bdist.win32\egg\turbogears\tests\test_form_controllers.pystest_include_mochikitYs cCstihdhdt<<tidtiid}tihdhdt <<tidtiid}d|jpt d|jpt dS(s$MochiKit inclusion can be suppressedsglobalstg.mochikit_suppresss /usemochiis MochiKit.jsN( sconfigsupdatesTruestestutilscreate_requestscherrypysresponsesbodyssuppressed_bodysFalses included_bodysAssertionError(ssuppressed_bodys included_body((s?build\bdist.win32\egg\turbogears\tests\test_form_controllers.pystest_suppress_mochikit^s  cCsmtihdhdt<<tidtihdhdt<<dtiidjpt dS(s>MochiKit can be included everywhere by setting tg.mochikit_allsglobalstg.mochikit_alls/s MochiKit.jsiN( sconfigsupdatesTruestestutilscreate_requestsFalsescherrypysresponsesbodysAssertionError(((s?build\bdist.win32\egg\turbogears\tests\test_form_controllers.pystest_mochikit_everywherejs  cCstihdhdt<<tihdhdt<<tidtihdhdt<<tihdhdt<<dtiidjpt dS(sASetting tg.mochikit_suppress will prevent including it everywheresglobalstg.mochikit_allstg.mochikit_suppresss/s MochiKit.jsiN( sconfigsupdatesTruestestutilscreate_requestsFalsescherrypysresponsesbodysAssertionError(((s?build\bdist.win32\egg\turbogears\tests\test_form_controllers.pystest_mochikit_nowhereqs cCsptihdhddg<<tidtihdhdg<<dtiidjptdS(sCAny widget can be included everywhere by setting tg.include_widgetssglobalstg.include_widgetssmochikits/s MochiKit.jsiN(sconfigsupdatestestutilscreate_requestscherrypysresponsesbodysAssertionError(((s?build\bdist.win32\egg\turbogears\tests\test_form_controllers.pystest_include_widgetszs " sStatecBstZdZRS(Ni(s__name__s __module__scounter(((s?build\bdist.win32\egg\turbogears\tests\test_form_controllers.pysStatessAddingValidatorcBstZedZRS(NcCs|id7_|SdS(Ni(sstatescountersvalue(sselfsvaluesstate((s?build\bdist.win32\egg\turbogears\tests\test_form_controllers.pys _to_pythons(s__name__s __module__sNones _to_python(((s?build\bdist.win32\egg\turbogears\tests\test_form_controllers.pysAddingValidatorss AddingSchemacBstZeZeZRS(N(s__name__s __module__sAddingValidatorsasb(((s?build\bdist.win32\egg\turbogears\tests\test_form_controllers.pys AddingSchemas sAddingNestedSchemacBstZeZRS(N(s__name__s __module__s AddingSchemasc(((s?build\bdist.win32\egg\turbogears\tests\test_form_controllers.pysAddingNestedSchemassTestValidationStatecBs3tZdeifdYZdZdZRS(Ns ControllercBs4tZegededegdZRS(Ns validatorss state_factorycCsdtiiiSdS(Ns counter: %d(scherrypysrequestsvalidation_statescounter(sselfsasbsc((s?build\bdist.win32\egg\turbogears\tests\test_form_controllers.pys validations(s__name__s __module__sexposesvalidatesAddingNestedSchemasStates validation(((s?build\bdist.win32\egg\turbogears\tests\test_form_controllers.pys Controllers cOstt|i||dS(N(ssupersTestValidationStatesselfs__init__sargsskw(sselfsargsskw((s?build\bdist.win32\egg\turbogears\tests\test_form_controllers.pys__init__scCsR|it_d}ti|tiid}d}|i d|j|dS(Ns/validation?a=1&b=2&c.a=3&c.b=4is(Validation state is not handled properlys counter: 4( sselfs Controllerscherrypysrootsurlstestutilscreate_requestsresponsesbodysmsgs failUnless(sselfsbodysurlsmsg((s?build\bdist.win32\egg\turbogears\tests\test_form_controllers.pystest_counter_is_incrementeds  (s__name__s __module__s controllerssRootControllers Controllers__init__stest_counter_is_incremented(((s?build\bdist.win32\egg\turbogears\tests\test_form_controllers.pysTestValidationStates (&sunittestsTestCasesdatetimescherrypys turbogearsswidgetssconfigs controllerssexposesmochikitsvalidates validatorsstestutils WidgetsLists MyFormFieldssmyfieldss TableFormsmyformsRootControllersMyRootstest_form_translationstest_form_translation_new_styles%test_invalid_form_with_error_handlingstest_css_should_appearstest_javascript_should_appearstest_include_mochikitstest_suppress_mochikitstest_mochikit_everywherestest_mochikit_nowherestest_include_widgetssobjectsStatesFancyValidatorsAddingValidatorsSchemas AddingSchemasAddingNestedSchemasTestValidationState(stestutilstest_css_should_appearscherrypystest_form_translation_new_stylesdatetimesStates validatorsstest_mochikit_everywheres AddingSchemasmyforms%test_invalid_form_with_error_handlingstest_include_widgetssTestCasesmochikitstest_form_translationsTestValidationStatesconfigs MyFormFieldssmyfieldsstest_include_mochikitsexposestest_javascript_should_appearstest_mochikit_nowheresvalidatestest_suppress_mochikitsAddingNestedSchemasMyRootswidgetss controllerssAddingValidator((s?build\bdist.win32\egg\turbogears\tests\test_form_controllers.pys?s,   7 !        PKK9v;)turbogears/tests/test_genericfunctions.pyimport unittest from dispatch import generic from turbogears.genericfunctions import * mo_state = [] [generic(MultiorderGenericFunction)] def mo(a): pass [mo.when("a>0", order=2)] def mo2(next_method, a): mo_state.append(2) [mo.when("a>0")] def mo0(next_method, a): mo_state.append(0) return next_method(a) [mo.when("a>0", order=1)] def mo1(next_method, a): mo_state.append(1) return next_method(a) [mo.around("a<23")] def moa0(next_method, a): mo_state.append("a") return next_method(a) [mo.around("a<123")] def moa1(next_method, a): mo_state.append("b") return next_method(a) class TestGenericFunctions(unittest.TestCase): def test_multiorder(self): mo(2) self.failUnless(mo_state == ["a", "b", 0,1,2]) def test_getter(self): foo = 123 _get_foo = getter("foo") _get_bar = getter("bar") self.failUnless(_get_foo() == 123) foo = 2 self.failUnless(_get_foo() == 2) bar = 67 self.failUnless(_get_bar() == 67) PKA> 63  *turbogears/tests/test_genericfunctions.pyc; HIc@sdkZdklZdkTgZeegdZeidddgdZeidgdZ eiddd gd Z ei d gd Z ei d gdZ deifdYZdS(N(sgeneric(s*cCsdS(N((sa((s?build\bdist.win32\egg\turbogears\tests\test_genericfunctions.pysmo ssa>0sordericCstiddS(Ni(smo_statesappend(s next_methodsa((s?build\bdist.win32\egg\turbogears\tests\test_genericfunctions.pysmo2scCstid||SdS(Ni(smo_statesappends next_methodsa(s next_methodsa((s?build\bdist.win32\egg\turbogears\tests\test_genericfunctions.pysmo0s icCstid||SdS(Ni(smo_statesappends next_methodsa(s next_methodsa((s?build\bdist.win32\egg\turbogears\tests\test_genericfunctions.pysmo1s sa<23cCstid||SdS(Nsa(smo_statesappends next_methodsa(s next_methodsa((s?build\bdist.win32\egg\turbogears\tests\test_genericfunctions.pysmoa0s sa<123cCstid||SdS(Nsb(smo_statesappends next_methodsa(s next_methodsa((s?build\bdist.win32\egg\turbogears\tests\test_genericfunctions.pysmoa1"s sTestGenericFunctionscBstZdZdZRS(NcCs0td|itdddddgjdS(Nisasbii(smosselfs failUnlesssmo_state(sself((s?build\bdist.win32\egg\turbogears\tests\test_genericfunctions.pystest_multiorder)s cCspd}td}td}|i|djd}|i|djd}|i|djdS(Ni{sfoosbariiC(sfoosgetters_get_foos_get_barsselfs failUnlesssbar(sselfsbars_get_bars_get_foosfoo((s?build\bdist.win32\egg\turbogears\tests\test_genericfunctions.pys test_getter-s  (s__name__s __module__stest_multiorders test_getter(((s?build\bdist.win32\egg\turbogears\tests\test_genericfunctions.pysTestGenericFunctions's (sunittestsdispatchsgenericsturbogears.genericfunctionssmo_statesMultiorderGenericFunctionsmoswhensmo2smo0smo1saroundsmoa0smoa1sTestCasesTestGenericFunctions( smo1smo_statesgenericsmo2sunittestsmo0sTestGenericFunctionssmosmoa1smoa0((s?build\bdist.win32\egg\turbogears\tests\test_genericfunctions.pys?s         PKK9j !turbogears/tests/test_paginate.py"""Tests for paginate""" import unittest from urllib import quote import warnings from turbogears import config, expose, database from turbogears.controllers import RootController, url from turbogears.database import get_engine, metadata, session, mapper from turbogears.paginate import paginate, sort_ordering, sort_data from turbogears.testutil import create_request, sqlalchemy_cleanup from turbojson.jsonify import jsonify import cherrypy from sqlalchemy import Table, Column, ForeignKey, Integer, String from sqlalchemy.orm import relation try: from sqlalchemy.ext.selectresults import SelectResults as SASelectResults except ImportError: # SQLAlchemy >= 0.5 SASelectResults = None from sqlobject import SQLObject, IntCol, StringCol, connectionForURI query_methods = 'Q QA SR SO SL'.split() if SASelectResults is None: query_methods.remove('SR') config.update({"sqlalchemy.dburi": "sqlite:///:memory:"}) # sqlalchemy setup sqlalchemy_cleanup() get_engine() # sqlobject setup database.set_db_uri("sqlite:///:memory:") __connection__ = hub = database.PackageHub('test_paginate') class listlike(object): """A minimum list-like object that is needed for paginate.""" def __init__(self, *args): self._list = list(*args) def __len__(self): return len(self._list) def __getitem__(self, key): return self._list[key] def test_sort_ordering(): """Test the sort_ordering auxiliary function.""" s = [] sort_ordering(s, 'a') assert s == ['a'] sort_ordering(s, 'a') # descending order assert s == ['-a'] sort_ordering(s, 'b') assert s == ['b', '-a'] sort_ordering(s, 'c') assert s == ['c', 'b', '-a'] sort_ordering(s, 'c') # descending order assert s == ['-c', 'b', '-a'] sort_ordering(s, 'a') # 'a' again... still in descending order assert s == ['-a', '-c', 'b'] sort_ordering(s, 'a') # 'a' again... now in ascending order assert s == ['a', '-c', 'b'] sort_ordering(s, 'd') assert s == ['d', 'a', '-c', 'b'] sort_ordering(s, 'a') assert s == ['a', 'd', '-c', 'b'] def test_sort_in_memory(): """Test sorting in memory only.""" for access in range(2): if access: # ordinary attribute access with hashable keys class row(object): def __init__(self, ab): self.ab = ab self.a, self.b = self.ab = ab def __repr__(self): return self.ab def __cmp__(self, other): return cmp(self.ab, other.ab) else: # dictionary access with unhashable keys class row(dict): def __init__(self, ab): self.ab = ab self['a'], self['b'] = map(list, ab) def __repr__(self): return self.ab def __cmp__(self, other): return cmp(self.ab, other.ab) def make_data(rows): return map(row, rows.split()) ab = make_data('aa ab ba bb') aB = make_data('ab aa bb ba') Ab = make_data('ba bb aa ab') AB = make_data('bb ba ab aa') ba = make_data('aa ba ab bb') bA = make_data('ba aa bb ab') Ba = make_data('ab bb aa ba') BA = make_data('bb ab ba aa') if access: assert not isinstance(ab[0], dict) \ and getattr(ab[0], 'a', 'b') == 'a' else: assert isinstance(ab[0], dict) and ab[0].get('a', 'b') == ['a'] \ and getattr(ab[0], 'a', 'b') == 'b' assert sort_data(ab, []) == ab assert sort_data(ab, ['b'], False) == ab assert sort_data(ab, ['a']) == ab assert sort_data(ab, ['a', 'b']) == ab assert sort_data(ab, ['a', '-b']) == aB assert sort_data(ab, ['b']) == ba assert sort_data(ab, ['b', 'a']) == ba assert sort_data(ab, ['b', '-a']) == bA assert sort_data(ab, ['-a']) == Ab assert sort_data(ab, ['-a', 'b']) == Ab assert sort_data(ab, ['-a', '-b']) == AB assert sort_data(ab, ['-b']) == Ba assert sort_data(ab, ['-b', 'a']) == Ba assert sort_data(ab, ['-b', '-a']) == BA assert sort_data(aB, ['a', 'b']) == ab assert sort_data(Ab, ['a', 'b']) == ab assert sort_data(AB, ['a', 'b']) == ab assert sort_data(ba, ['a', 'b']) == ab assert sort_data(bA, ['a', 'b']) == ab assert sort_data(Ba, ['a', 'b']) == ab assert sort_data(BA, ['a', 'b']) == ab assert sort_data(aB, ['b', 'a']) == ba assert sort_data(Ab, ['b', 'a']) == ba assert sort_data(AB, ['b', 'a']) == ba assert sort_data(ba, ['b', 'a']) == ba assert sort_data(bA, ['b', 'a']) == ba assert sort_data(Ba, ['b', 'a']) == ba assert sort_data(BA, ['b', 'a']) == ba assert sort_data(aB, ['-a', 'b']) == Ab assert sort_data(Ab, ['-a', 'b']) == Ab assert sort_data(AB, ['-a', 'b']) == Ab assert sort_data(ba, ['-a', 'b']) == Ab assert sort_data(bA, ['-a', 'b']) == Ab assert sort_data(Ba, ['-a', 'b']) == Ab assert sort_data(BA, ['-a', 'b']) == Ab assert sort_data(aB, ['b', '-a']) == bA assert sort_data(Ab, ['b', '-a']) == bA assert sort_data(AB, ['b', '-a']) == bA assert sort_data(ba, ['b', '-a']) == bA assert sort_data(bA, ['b', '-a']) == bA assert sort_data(Ba, ['b', '-a']) == bA assert sort_data(BA, ['b', '-a']) == bA class Spy(object): """Helper class to test paginate's instances in cherrypy.request. We could use a special template to output paginate's attributes, but testing values/types before they are rendered (when possible) is much easier. """ def __init__(self, name=None, **expectations): self.name = name self.expectations = expectations def __str__(self): if self.name: paginate = cherrypy.request.paginates[self.name] else: paginate = cherrypy.request.paginate assert paginate in cherrypy.request.paginates.values() for k, v in self.expectations.iteritems(): if not hasattr(paginate, k): return "fail: paginate does not have '%s' attribute" % k w = getattr(paginate, k) if isinstance(v, xrange): v = list(v) if isinstance(w, xrange): w = list(w) if w != v: return "fail: expected %s=%r, got %s=%r" % (k, v, k, w) return "ok: [paginate %s ]" % \ " , ".join(["%s=%r" % (k, v) for k, v in paginate.__dict__.items()]) def assert_ok(body, key, value, raw=False): assert "ok: [paginate" in body if raw: expr = "%s=%s " % (key, value) else: expr = "%s=%r " % (key, value) # some simplejson versions escape forward slashes, so fix this body = body.replace('\\/', '/') if expr not in body: print body assert expr in body, "expected %s" % expr assert_ok = staticmethod(assert_ok) [jsonify.when('isinstance(obj, Spy)')] def jsonify_spy(obj): result = str(obj) return result class TestSpy(unittest.TestCase): """Never trust a spy""" class MyRoot(RootController): [expose()] [paginate("data")] def spy(self): data = range(100) spy = Spy() return dict(data=data, spy=spy) [expose()] [paginate("data")] def spy_correct_expectation(self): data = range(100) spy = Spy(page_count=10) return dict(data=data, spy=spy) [expose()] [paginate("data")] def spy_wrong_expectation(self): data = range(100) spy = Spy(page_count=9) return dict(data=data, spy=spy) [expose()] [paginate("data")] def spy_invalid_expectation(self): data = range(100) spy = Spy(foobar=10) return dict(data=data, spy=spy) def setUp(self): cherrypy.root = self.MyRoot() def test_spy(self): create_request('/spy') body = cherrypy.response.body[0] Spy.assert_ok(body, 'current_page', 1) try: Spy.assert_ok(body, 'current_page', 2) raise Exception("above test should have failed") except AssertionError: pass def test_correct_expectation(self): create_request('/spy_correct_expectation') body = cherrypy.response.body[0] assert "ok: [paginate" in body def test_wrong_expectation(self): create_request('/spy_wrong_expectation') body = cherrypy.response.body[0] assert "fail: expected page_count=9, got page_count=10" in body def test_invalid_expectation(self): create_request('/spy_invalid_expectation') body = cherrypy.response.body[0] assert "fail: paginate does not have 'foobar' attribute" in body def test_raw_expectation(self): create_request('/spy_correct_expectation') Spy.assert_ok(cherrypy.response.body[0], 'var_name', 'data') Spy.assert_ok(cherrypy.response.body[0], 'var_name', "'data'", raw=True) class TestPagination(unittest.TestCase): """Base class for all Paginate TestCases""" def setUp(self): cherrypy.root = self.MyRoot() def request(self, url): create_request(url) self.body = cherrypy.response.body[0] self.status = cherrypy.response.status if "fail: " in self.body: print self.body assert False, "Spy alert! Check body output for details..." class TestBasicPagination(TestPagination): class MyRoot(RootController): [expose()] [paginate("data", limit=4)] def basic(self): spy = Spy(var_name='data', pages=xrange(1, 4), limit=4, page_count=3, order=None, ordering=[], row_count=10) data = range(10) return dict(data=data, spy=spy) [expose()] [paginate("data", limit=4)] def listlike(self): spy = Spy(var_name='data', pages=xrange(1, 4), limit=4, page_count=3, order=None, ordering=[], row_count=10) data = listlike(range(10)) return dict(data=data, spy=spy) [expose()] [paginate("data", limit=4, max_limit=None)] def custom_limit(self): spy = Spy(var_name='data', order=None, ordering=[], row_count=10) data = range(10) return dict(data=data, spy=spy) [expose()] [paginate("data", limit=4, max_limit=7)] def max_limit(self): spy = Spy(var_name='data', order=None, ordering=[], row_count=10) data = range(10) return dict(data=data, spy=spy) [expose()] [paginate("data")] def default_max_pages(self): spy = Spy(var_name='data', limit=10, page_count=10, order=None, ordering=[], row_count=100) data = range(100) return dict(data=data, spy=spy) [expose()] [paginate("data", max_pages=4)] def four_max_pages(self): spy = Spy(var_name='data', limit=10, page_count=10, order=None, ordering=[], row_count=100) data = range(100) return dict(data=data, spy=spy) [expose()] [paginate("data", max_pages=3)] def three_max_pages(self): spy = Spy(var_name='data', limit=10, page_count=10, order=None, ordering=[], row_count=100) data = range(100) return dict(data=data, spy=spy) [expose()] [paginate("data", limit=4, dynamic_limit='foobar')] def invalid_dynamic(self): data = range(10) return dict(data=data) [expose()] [paginate("data", limit=4, dynamic_limit='foobar', max_limit=None)] def dynamic(self): spy = Spy(var_name='data', pages=xrange(1, 3), limit=7, page_count=2, order=None, ordering=[], row_count=10) data = range(10) return dict(data=data, spy=spy, foobar=7) [expose()] [paginate("bar")] [paginate("foo", limit=4)] def multiple(self): spy_foo = Spy(name='foo', var_name='foo', pages=xrange(1, 6), limit=4, page_count=5, order=None, ordering=[], row_count=20) spy_bar = Spy(name='bar', var_name='bar', pages=xrange(1, 4), limit=10, page_count=3, order=None, ordering=[], row_count=26) foo = range(20) bar = list('ABCDEFGHIJKLMNOPQRSTUVWXYZ') # 26 letters return dict(foo=foo, bar=bar, spy_foo=spy_foo, spy_bar=spy_bar) [expose()] [paginate("data", limit=4, max_limit=None)] def empty(self): spy = Spy(var_name='data', pages=xrange(1, 1), page_count=0, order=None, ordering=[], row_count=0, current_page=1, first_item=0, last_item=0) data = [] return dict(data=data, spy=spy) def test_pagination_old_style(self): self.request("/basic") assert '"data": [0, 1, 2, 3]' in self.body Spy.assert_ok(self.body, 'current_page', 1) Spy.assert_ok(self.body, 'first_item', 1) Spy.assert_ok(self.body, 'last_item', 4) self.request("/basic?tg_paginate_no=1") assert '"data": [0, 1, 2, 3]' in self.body Spy.assert_ok(self.body, 'current_page', 1) Spy.assert_ok(self.body, 'first_item', 1) Spy.assert_ok(self.body, 'last_item', 4) self.request("/basic?tg_paginate_no=2") assert '"data": [4, 5, 6, 7]' in self.body Spy.assert_ok(self.body, 'current_page', 2) Spy.assert_ok(self.body, 'first_item', 5) Spy.assert_ok(self.body, 'last_item', 8) self.request("/basic?tg_paginate_no=3") assert '"data": [8, 9]' in self.body Spy.assert_ok(self.body, 'current_page', 3) Spy.assert_ok(self.body, 'first_item', 9) Spy.assert_ok(self.body, 'last_item', 10) def test_pagination_new_style(self): self.request("/basic?data_tgp_no=1") assert '"data": [0, 1, 2, 3]' in self.body Spy.assert_ok(self.body, 'current_page', 1) Spy.assert_ok(self.body, 'first_item', 1) Spy.assert_ok(self.body, 'last_item', 4) self.request("/basic?data_tgp_no=2") assert '"data": [4, 5, 6, 7]' in self.body Spy.assert_ok(self.body, 'current_page', 2) Spy.assert_ok(self.body, 'first_item', 5) Spy.assert_ok(self.body, 'last_item', 8) self.request("/basic?data_tgp_no=3") assert '"data": [8, 9]' in self.body Spy.assert_ok(self.body, 'current_page', 3) Spy.assert_ok(self.body, 'first_item', 9) Spy.assert_ok(self.body, 'last_item', 10) def test_pagination_listlike(self): self.request("/listlike?data_tgp_no=2") assert '"data": [4, 5, 6, 7]' in self.body Spy.assert_ok(self.body, 'current_page', 2) Spy.assert_ok(self.body, 'first_item', 5) Spy.assert_ok(self.body, 'last_item', 8) def test_limit_override(self): # can't override limit (old style) self.request('/basic?tg_paginate_limit=2') assert '"data": [0, 1, 2, 3]' in self.body # can't override limit (new style) self.request("/basic?data_tgp_limit=2") assert '"data": [0, 1, 2, 3]' in self.body # can't override limit with upper bound self.request("/max_limit?data_tgp_limit=9") assert '"data": [0, 1, 2, 3, 4, 5, 6]' in self.body Spy.assert_ok(self.body, 'page_count', 2) Spy.assert_ok(self.body, 'limit', 7) Spy.assert_ok(self.body, 'pages', xrange(1, 3)) # can override limit (old style) self.request('/custom_limit?tg_paginate_limit=2') assert '"data": [0, 1]' in self.body Spy.assert_ok(self.body, 'page_count', 5) Spy.assert_ok(self.body, 'limit', 2) Spy.assert_ok(self.body, 'pages', xrange(1, 6)) # can override limit (new style) self.request("/custom_limit?data_tgp_limit=2") assert '"data": [0, 1]' in self.body Spy.assert_ok(self.body, 'page_count', 5) Spy.assert_ok(self.body, 'limit', 2) Spy.assert_ok(self.body, 'pages', xrange(1, 6)) # can override limit with upper bound self.request("/max_limit?data_tgp_limit=5") assert '"data": [0, 1, 2, 3, 4]' in self.body Spy.assert_ok(self.body, 'page_count', 2) Spy.assert_ok(self.body, 'limit', 5) Spy.assert_ok(self.body, 'pages', xrange(1, 3)) def test_max_pages(self): self.request("/default_max_pages") assert '"data": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]' in self.body Spy.assert_ok(self.body, 'pages', xrange(1, 6)) self.request("/default_max_pages?data_tgp_no=5") assert '"data": [40, 41, 42, 43, 44, 45, 46, 47, 48, 49]' in self.body Spy.assert_ok(self.body, 'pages', xrange(3, 8)) self.request("/three_max_pages") assert '"data": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]' in self.body Spy.assert_ok(self.body, 'pages', xrange(1, 4)) self.request("/three_max_pages?data_tgp_no=5") assert '"data": [40, 41, 42, 43, 44, 45, 46, 47, 48, 49]' in self.body Spy.assert_ok(self.body, 'pages', xrange(4, 7)) # even 'max pages' self.request("/four_max_pages") assert '"data": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]' in self.body Spy.assert_ok(self.body, 'pages', xrange(1, 5)) self.request("/four_max_pages?data_tgp_no=5") assert '"data": [40, 41, 42, 43, 44, 45, 46, 47, 48, 49]' in self.body Spy.assert_ok(self.body, 'pages', xrange(4, 8)) def test_strict_parameters(self): config.update({'tg.strict_parameters': True}) try: # old style self.request("/basic?tg_paginate_no=2") assert self.status.startswith('200') assert '"data": [4, 5, 6, 7]' in self.body Spy.assert_ok(self.body, 'current_page', 2) self.request('/custom_limit?tg_paginate_limit=2') assert self.status.startswith('200') assert '"data": [0, 1]' in self.body Spy.assert_ok(self.body, 'limit', 2) self.request("/default_max_pages?tg_paginate_no=5") assert self.status.startswith('200') assert '"data": [40, 41, 42, ' in self.body Spy.assert_ok(self.body, 'pages', xrange(3, 8)) self.request("/basic?tg_paginate_rubbish=2") assert self.status.startswith('500') assert ("basic() got an unexpected keyword argument" " 'tg_paginate_rubbish'") in self.body # new style self.request("/basic?data_tgp_no=2") assert self.status.startswith('200') assert '"data": [4, 5, 6, 7]' in self.body Spy.assert_ok(self.body, 'current_page', 2) self.request('/custom_limit?data_tgp_limit=2') assert self.status.startswith('200') assert '"data": [0, 1]' in self.body Spy.assert_ok(self.body, 'limit', 2) self.request("/default_max_pages?data_tgp_no=5") assert self.status.startswith('200') assert '"data": [40, 41, 42, ' in self.body Spy.assert_ok(self.body, 'pages', xrange(3, 8)) self.request("/basic?data_tgp_rubbish=2") assert self.status.startswith('500') assert ("basic() got an unexpected keyword argument" " 'data_tgp_rubbish'") in self.body finally: config.update({'tg.strict_parameters': False}) def test_invalid_dynamic_limit(self): self.request("/invalid_dynamic") assert self.status.startswith("500") assert 'paginate: dynamic_limit (foobar) not found in output dict' in self.body def test_dynamic_limit(self): self.request("/dynamic") assert '"data": [0, 1, 2, 3, 4, 5, 6]' in self.body self.request('/dynamic?tg_paginate_limit=2') assert '"data": [0, 1, 2, 3, 4, 5, 6]' in self.body def test_multiple(self): self.request("/multiple") assert '"foo": [0, 1, 2, 3]' in self.body assert '"bar": ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J"]' in self.body self.request("/multiple?foo_tgp_no=3") assert '"foo": [8, 9, 10, 11]' in self.body assert '"bar": ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J"]' in self.body self.request("/multiple?bar_tgp_no=2") assert '"foo": [0, 1, 2, 3]' in self.body assert '"bar": ["K", "L", "M", "N", "O", "P", "Q", "R", "S", "T"]' in self.body self.request("/multiple?foo_tgp_no=2&bar_tgp_no=3") assert '"foo": [4, 5, 6, 7]' in self.body assert '"bar": ["U", "V", "W", "X", "Y", "Z"]' in self.body def test_out_of_bound_pages(self): for number in range(-3,1): self.request("/basic?tg_paginate_no=%s" % number) assert '"data": [0, 1, 2, 3]' in self.body Spy.assert_ok(self.body, 'current_page', 1) Spy.assert_ok(self.body, 'first_item', 1) Spy.assert_ok(self.body, 'last_item', 4) for number in range(4, 7): self.request("/basic?tg_paginate_no=%s" % number) assert '"data": [8, 9]' in self.body Spy.assert_ok(self.body, 'current_page', 3) Spy.assert_ok(self.body, 'first_item', 9) Spy.assert_ok(self.body, 'last_item', 10) def test_last_page(self): self.request("/basic?tg_paginate_no=last") assert '"data": [8, 9]' in self.body Spy.assert_ok(self.body, 'current_page', 3) Spy.assert_ok(self.body, 'first_item', 9) Spy.assert_ok(self.body, 'last_item', 10) def test_href(self): self.request("/basic?data_tgp_no=0") # out of bound Spy.assert_ok(self.body, 'current_page', 1) Spy.assert_ok(self.body, 'href_first', None) Spy.assert_ok(self.body, 'href_prev', None) Spy.assert_ok(self.body, 'href_next', r"'/basic?data_tgp_no=2&data_tgp_limit=4'", raw=True) Spy.assert_ok(self.body, 'href_last', r"'/basic?data_tgp_no=last&data_tgp_limit=4'", raw=True) self.request("/basic?data_tgp_no=1") Spy.assert_ok(self.body, 'current_page', 1) Spy.assert_ok(self.body, 'href_first', None) Spy.assert_ok(self.body, 'href_prev', None) Spy.assert_ok(self.body, 'href_next', r"'/basic?data_tgp_no=2&data_tgp_limit=4'", raw=True) Spy.assert_ok(self.body, 'href_last', r"'/basic?data_tgp_no=last&data_tgp_limit=4'", raw=True) self.request("/basic?data_tgp_no=2") Spy.assert_ok(self.body, 'current_page', 2) Spy.assert_ok(self.body, 'href_first', r"'/basic?data_tgp_no=1&data_tgp_limit=4'", raw=True) Spy.assert_ok(self.body, 'href_prev', r"'/basic?data_tgp_no=1&data_tgp_limit=4'", raw=True) Spy.assert_ok(self.body, 'href_next', r"'/basic?data_tgp_no=3&data_tgp_limit=4'", raw=True) Spy.assert_ok(self.body, 'href_last', r"'/basic?data_tgp_no=last&data_tgp_limit=4'", raw=True) self.request("/basic?data_tgp_no=3") Spy.assert_ok(self.body, 'current_page', 3) Spy.assert_ok(self.body, 'href_first', r"'/basic?data_tgp_no=1&data_tgp_limit=4'", raw=True) Spy.assert_ok(self.body, 'href_prev', r"'/basic?data_tgp_no=2&data_tgp_limit=4'", raw=True) Spy.assert_ok(self.body, 'href_next', None) Spy.assert_ok(self.body, 'href_last', None) self.request("/basic?data_tgp_no=4") # out of bound! Spy.assert_ok(self.body, 'current_page', 3) Spy.assert_ok(self.body, 'href_first', r"'/basic?data_tgp_no=1&data_tgp_limit=4'", raw=True) Spy.assert_ok(self.body, 'href_prev', r"'/basic?data_tgp_no=2&data_tgp_limit=4'", raw=True) Spy.assert_ok(self.body, 'href_next', None) Spy.assert_ok(self.body, 'href_last', None) # empty data self.request("/empty") Spy.assert_ok(self.body, 'current_page', 1) Spy.assert_ok(self.body, 'href_first', None) Spy.assert_ok(self.body, 'href_prev', None) Spy.assert_ok(self.body, 'href_next', None) Spy.assert_ok(self.body, 'href_last', None) def test_with_webpath(self): config.update({'server.webpath': '/web/path'}) try: self.request("/web/path/basic?data_tgp_no=2") Spy.assert_ok(self.body, 'current_page', 2) Spy.assert_ok(self.body, 'href_first', r"'/web/path/basic?data_tgp_no=1&data_tgp_limit=4'", raw=True) Spy.assert_ok(self.body, 'href_prev', r"'/web/path/basic?data_tgp_no=1&data_tgp_limit=4'", raw=True) Spy.assert_ok(self.body, 'href_next', r"'/web/path/basic?data_tgp_no=3&data_tgp_limit=4'", raw=True) Spy.assert_ok(self.body, 'href_last', r"'/web/path/basic?data_tgp_no=last&data_tgp_limit=4'", raw=True) finally: config.update({'server.webpath': ''}) def test_empty_data(self): self.request("/empty") assert '"data": []' in self.body Spy.assert_ok(self.body, 'limit', 4) def test_zero_limit(self): self.request("/custom_limit?data_tgp_limit=0") assert '"data": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]' in self.body Spy.assert_ok(self.body, 'page_count', 1) Spy.assert_ok(self.body, 'limit', 10) Spy.assert_ok(self.body, 'pages', xrange(1, 2)) def test_empty_data_zero_limit(self): self.request("/empty?data_tgp_limit=0") assert '"data": []' in self.body Spy.assert_ok(self.body, 'page_count', 0) Spy.assert_ok(self.body, 'limit', 1) # # Test SQLAlchemy & SQLObject # class Occupation(object): pass class User(object): pass class Address(object): def __repr__(self): # using "[...]" instead of "<...>" avoids rendering "<" return "[Address %r]" % self.id class SOAddress(SQLObject): id = IntCol(), user_id = IntCol() street = StringCol() city = StringCol() def __repr__(self): # using "[...]" instead of "<...>" avoids rendering "<" return "[Address %r]" % self.id def create_tables(): """Create tables filled with test data.""" occupations_table = Table('occupations', metadata, Column('id', Integer, primary_key=True), Column('name', String(20))) users_table = Table('users', metadata, Column('id', Integer, primary_key=True), Column('name', String(20)), Column('occupation_id', Integer, ForeignKey("occupations.id"))) addresses_table = Table('addresses', metadata, Column('id', Integer, primary_key=True), Column('user_id', Integer, ForeignKey("users.id")), Column('street', String(50)), Column('city', String(40))) mapper(Occupation, occupations_table) mapper(User, users_table, properties={ 'occupation' : relation(Occupation, lazy=False), 'addresses': relation(Address, backref='user', lazy=False)}) mapper(Address, addresses_table) metadata.create_all() occupations = ( {'id': 1, 'name': 'Doctor'}, {'id': 2, 'name': 'Actor'}, {'id': 3, 'name': 'Programmer'}) users = ( {'id': 1, 'name': 'Smith', 'occupation_id': 1}, {'id': 2, 'name': 'John', 'occupation_id': 2}, {'id': 3, 'name': 'Fred', 'occupation_id': 2}, {'id': 4, 'name': 'Albert', 'occupation_id': 3}, {'id': 5, 'name': 'Nicole', 'occupation_id': None}, {'id': 6, 'name': 'Sarah', 'occupation_id': None}, {'id': 7, 'name': 'Walter', 'occupation_id': 1}, {'id': 8, 'name': 'Bush', 'occupation_id': None}); addresses = ( {'id': 1, 'user_id': None, 'street': 'street P', 'city': 'city X'}, {'id': 2, 'user_id': 2, 'street': 'street B', 'city': 'city Z'}, {'id': 3, 'user_id': 4, 'street': 'street C', 'city': 'city X'}, {'id': 4, 'user_id': 1, 'street': 'street D', 'city': 'city Y'}, {'id': 5, 'user_id': None, 'street': 'street E', 'city': 'city Z'}, {'id': 6, 'user_id': 1, 'street': 'street F', 'city': 'city Z'}, {'id': 7, 'user_id': 3, 'street': 'street G', 'city': 'city Y'}, {'id': 8, 'user_id': 7, 'street': 'street H', 'city': 'city Y'}, {'id': 9, 'user_id': 1, 'street': 'street I', 'city': 'city X'}, {'id': 10, 'user_id': 6, 'street': 'street J', 'city': 'city X'}, {'id': 11, 'user_id': 3, 'street': 'street K', 'city': 'city Z'}, {'id': 12, 'user_id': 2, 'street': 'street L', 'city': 'city X'}, {'id': 13, 'user_id': 8, 'street': 'street M', 'city': 'city X'}, {'id': 14, 'user_id': 5, 'street': 'street N', 'city': 'city Y'}, {'id': 15, 'user_id': 1, 'street': 'street O', 'city': 'city Y'}, {'id': 16, 'user_id': 3, 'street': 'street A', 'city': 'city X'}); metadata.bind.execute(occupations_table.insert(), occupations) metadata.bind.execute(users_table.insert(), users) metadata.bind.execute(addresses_table.insert(), addresses) SOAddress.createTable() # SQLObject tests will need only "addresses" for kw in addresses: print SOAddress(**kw) def drop_tables(): metadata.drop_all() class TestDatabasePagination(TestPagination): class MyRoot(RootController): def __common(self, method=None): if method == 'Q': data = session.query(Address) elif method == 'QA': data = session.query(Address).all() elif method == 'SR': data = SASelectResults(session.query(Address)) elif method == 'SO': data = SOAddress.select() elif method == 'SL': data = list(SOAddress.select()) else: raise ValueError("Invalid method %r" % method) spy = Spy(var_name='data', pages=xrange(1, 3), limit=10, page_count=2, order=None, row_count=16) return dict(data=data, spy=spy) # default_order = basestring basic1 = paginate("data", default_order="id")(__common) basic1 = expose("turbogears.tests.paginate")(basic1) # default_order = list basic2 = paginate("data", default_order=["id"])(__common) basic2 = expose("turbogears.tests.paginate")(basic2) # default_order = basestring with default_reversed (deprecated) warnings.filterwarnings('ignore', 'default_reversed is deprecated', DeprecationWarning) reversed1 = paginate("data", default_order="id", default_reversed=True)(__common) reversed1 = expose("turbogears.tests.paginate")(reversed1) # default_order = basestring reversed2 = paginate("data", default_order="-id")(__common) reversed2 = expose("turbogears.tests.paginate")(reversed2) # default_order = list with default_reversed (WRONG!) wrong_reversed = paginate("data", default_order=["id"], default_reversed=True)(__common) wrong_reversed = expose("turbogears.tests.paginate")(wrong_reversed) # default_order = list reversed3 = paginate("data", default_order=["-id"])(__common) reversed3 = expose("turbogears.tests.paginate")(reversed3) # +/+ default_compound_ordering1 = paginate("data", default_order=["city", "street"])(__common) default_compound_ordering1 = expose("turbogears.tests.paginate")(default_compound_ordering1) # +/- default_compound_ordering2 = paginate("data", default_order=["city", "-street"])(__common) default_compound_ordering2 = expose("turbogears.tests.paginate")(default_compound_ordering2) # -/+ default_compound_ordering3 = paginate("data", default_order=["-city", "street"])(__common) default_compound_ordering3 = expose("turbogears.tests.paginate")(default_compound_ordering3) # -/- default_compound_ordering4 = paginate("data", default_order=["-city", "-street"])(__common) default_compound_ordering4 = expose("turbogears.tests.paginate")(default_compound_ordering4) [expose("turbogears.tests.paginate")] [paginate("data", default_order="id")] def related(self): # only SA Query data = session.query(Address).outerjoin(['user', 'occupation']) spy = Spy(var_name='data', pages=xrange(1, 3), limit=10, page_count=2, order=None, row_count=16) return dict(data=data, spy=spy) [expose("turbogears.tests.paginate")] [paginate("data", default_order="id", limit=0)] def zero_limit(self, method=None): if method == 'Q': data = session.query(Address) elif method == 'QA': data = session.query(Address).all() elif method == 'SR': data = SASelectResults(session.query(Address)) elif method == 'SO': data = SOAddress.select() elif method == 'SL': data = list(SOAddress.select()) else: raise Exception("Invalid method") spy = Spy(var_name='data', pages=xrange(1, 2), limit=16, page_count=1, order=None, row_count=16) return dict(data=data, spy=spy) [expose("turbogears.tests.paginate")] [paginate("data", default_order="id")] def empty_with_groupby(self): data = session.query(Address) try: data = data.filter(Address.c.id < 0).group_by(Address.c.user_id) except AttributeError: # SQLAlchemy >= 0.5 data = data.filter(Address.id < 0).group_by(Address.user_id) spy = Spy(var_name='data', pages=xrange(1, 1), limit=10, page_count=0, order=None, row_count=0) return dict(data=data, spy=spy) def assert_order(self, *args): expr = 'data="%s"' % ''.join(['[Address %r]' % x for x in args]) if expr not in self.body: print self.body assert expr in self.body, "expected %s" % expr def test_basic(self): for test in "basic1", "basic2": for method in query_methods: self.request("/%s?method=%s" % (test, method)) self.assert_order(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) Spy.assert_ok(self.body, 'current_page', 1) Spy.assert_ok(self.body, 'first_item', 1) Spy.assert_ok(self.body, 'last_item', 10) Spy.assert_ok(self.body, 'ordering', ['id']) # old style self.request("/%s?method=%s&tg_paginate_no=2" % (test, method)) self.assert_order(11, 12, 13, 14, 15, 16) Spy.assert_ok(self.body, 'current_page', 2) Spy.assert_ok(self.body, 'first_item', 11) Spy.assert_ok(self.body, 'last_item', 16) Spy.assert_ok(self.body, 'ordering', ['id']) # new style self.request("/%s?method=%s&data_tgp_no=2" % (test, method)) self.assert_order(11, 12, 13, 14, 15, 16) Spy.assert_ok(self.body, 'current_page', 2) Spy.assert_ok(self.body, 'first_item', 11) Spy.assert_ok(self.body, 'last_item', 16) Spy.assert_ok(self.body, 'ordering', ['id']) def test_ordering(self): for test in "basic1", "basic2": for method in query_methods: self.request("/%s?method=%s&tg_paginate_ordering=%s" % \ (test, method, 'street')) self.assert_order(16, 2, 3, 4, 5, 6, 7, 8, 9, 10) Spy.assert_ok(self.body, 'current_page', 1) Spy.assert_ok(self.body, 'first_item', 1) Spy.assert_ok(self.body, 'last_item', 10) Spy.assert_ok(self.body, 'ordering', ['street']) self.request("/%s?method=%s&tg_paginate_no=2&tg_paginate_ordering=%s" % \ (test, method, 'street')) self.assert_order(11, 12, 13, 14, 15, 1) Spy.assert_ok(self.body, 'current_page', 2) Spy.assert_ok(self.body, 'first_item', 11) Spy.assert_ok(self.body, 'last_item', 16) Spy.assert_ok(self.body, 'ordering', ['street']) def test_strict_parameters(self): config.update({'tg.strict_parameters': True}) try: # old style self.request("/basic1?method=Q&tg_paginate_ordering=street") self.assert_order(16, 2, 3, 4, 5, 6, 7, 8, 9, 10) Spy.assert_ok(self.body, 'ordering', ['street']) # new style self.request("/basic1?method=Q&data_tgp_ordering=street") assert self.status.startswith('200') self.assert_order(16, 2, 3, 4, 5, 6, 7, 8, 9, 10) Spy.assert_ok(self.body, 'ordering', ['street']) finally: config.update({'tg.strict_parameters': False}) def test_default_reversed(self): for test in "reversed1", "reversed2", "reversed3": for method in query_methods: self.request("/%s?method=%s" % (test, method)) self.assert_order(16, 15, 14, 13, 12, 11, 10, 9, 8, 7) Spy.assert_ok(self.body, 'current_page', 1) Spy.assert_ok(self.body, 'first_item', 1) Spy.assert_ok(self.body, 'last_item', 10) Spy.assert_ok(self.body, 'ordering', ['-id']) self.request("/%s?method=%s&data_tgp_no=2" % (test, method)) self.assert_order(6, 5, 4, 3, 2, 1) Spy.assert_ok(self.body, 'current_page', 2) Spy.assert_ok(self.body, 'first_item', 11) Spy.assert_ok(self.body, 'last_item', 16) Spy.assert_ok(self.body, 'ordering', ['-id']) def test_invalid_default_reversed(self): for method in query_methods: self.request("/wrong_reversed?method=%s" % method) assert self.status.startswith("500") assert ('paginate: default_reversed (deprecated) only allowed' ' when default_order is a basestring') in self.body def test_reverse_ordering(self): for test in "basic1", "basic2": for method in query_methods: self.request("/%s?method=%s&tg_paginate_ordering=%s" % (test, method, '-street')) self.assert_order(1, 15, 14, 13, 12, 11, 10, 9, 8, 7) Spy.assert_ok(self.body, 'ordering', ['-street']) self.request("/%s?method=%s&tg_paginate_no=2&tg_paginate_ordering=%s" % (test, method, '-street')) self.assert_order(6, 5, 4, 3, 2, 16) Spy.assert_ok(self.body, 'ordering', ['-street']) def test_compound_ordering(self): for test in "basic1", "basic2": for method in query_methods: # +/+ self.request("/%s?method=%s&tg_paginate_ordering=%s" % (test, method, quote('city,street'))) self.assert_order(16, 3, 9, 10, 12, 13, 1, 4, 7, 8) Spy.assert_ok(self.body, 'ordering', ['city', 'street']) self.request("/%s?method=%s&tg_paginate_no=2&tg_paginate_ordering=%s" % (test, method, quote('city,street'))) self.assert_order(14, 15, 2, 5, 6, 11) Spy.assert_ok(self.body, 'ordering', ['city', 'street']) # +/- self.request("/%s?method=%s&tg_paginate_ordering=%s" % (test, method, quote('city,-street'))) self.assert_order(1, 13, 12, 10, 9, 3, 16, 15, 14, 8) Spy.assert_ok(self.body, 'ordering', ['city', '-street']) self.request("/%s?method=%s&tg_paginate_no=2&tg_paginate_ordering=%s" % (test, method, quote('city,-street'))) self.assert_order(7, 4, 11, 6, 5, 2) Spy.assert_ok(self.body, 'ordering', ['city', '-street']) # -/+ self.request("/%s?method=%s&tg_paginate_ordering=%s" % (test, method, quote('-city,street'))) self.assert_order(2, 5, 6, 11, 4, 7, 8, 14, 15, 16) Spy.assert_ok(self.body, 'ordering', ['-city', 'street']) self.request("/%s?method=%s&tg_paginate_no=2&tg_paginate_ordering=%s" % (test, method, quote('-city,street'))) self.assert_order(3, 9, 10, 12, 13, 1) Spy.assert_ok(self.body, 'ordering', ['-city', 'street']) # -/- self.request("/%s?method=%s&tg_paginate_ordering=%s" % (test, method, quote('-city,-street'))) self.assert_order(11, 6, 5, 2, 15, 14, 8, 7, 4, 1) Spy.assert_ok(self.body, 'ordering', ['-city', '-street']) self.request("/%s?method=%s&tg_paginate_no=2&tg_paginate_ordering=%s" % (test, method, quote('-city,-street'))) self.assert_order(13, 12, 10, 9, 3, 16) Spy.assert_ok(self.body, 'ordering', ['-city', '-street']) def test_default_compound_ordering_1(self): # +/+ for method in query_methods: self.request("/default_compound_ordering1?method=%s" % method) self.assert_order(16, 3, 9, 10, 12, 13, 1, 4, 7, 8) Spy.assert_ok(self.body, 'ordering', ['city', 'street']) self.request("/default_compound_ordering1?method=%s&tg_paginate_no=2" % method) self.assert_order(14, 15, 2, 5, 6, 11) Spy.assert_ok(self.body, 'ordering', ['city', 'street']) def test_default_compound_ordering_2(self): # +/- for method in query_methods: self.request("/default_compound_ordering2?method=%s" % method) self.assert_order(1, 13, 12, 10, 9, 3, 16, 15, 14, 8) Spy.assert_ok(self.body, 'ordering', ['city', '-street']) self.request("/default_compound_ordering2?method=%s&tg_paginate_no=2" % method) self.assert_order(7, 4, 11, 6, 5, 2) Spy.assert_ok(self.body, 'ordering', ['city', '-street']) def test_default_compound_ordering_3(self): # -/+ for method in query_methods: self.request("/default_compound_ordering3?method=%s" % method) self.assert_order(2, 5, 6, 11, 4, 7, 8, 14, 15, 16) Spy.assert_ok(self.body, 'ordering', ['-city', 'street']) self.request("/default_compound_ordering3?method=%s&tg_paginate_no=2" % method) self.assert_order(3, 9, 10, 12, 13, 1) Spy.assert_ok(self.body, 'ordering', ['-city', 'street']) def test_default_compound_ordering_4(self): # -/- for method in query_methods: self.request("/default_compound_ordering4?method=%s" % method) self.assert_order(11, 6, 5, 2, 15, 14, 8, 7, 4, 1) Spy.assert_ok(self.body, 'ordering', ['-city', '-street']) self.request("/default_compound_ordering4?method=%s&tg_paginate_no=2" % method) self.assert_order(13, 12, 10, 9, 3, 16) Spy.assert_ok(self.body, 'ordering', ['-city', '-street']) def test_related_objects_ordering_level_1(self): # +/+ self.request("/related?tg_paginate_ordering=%s" % quote('user.name,id')) self.assert_order(1, 5, 3, 13, 7, 11, 16, 2, 12, 14) Spy.assert_ok(self.body, 'ordering', ['user.name', 'id']) self.request("/related?tg_paginate_no=2&tg_paginate_ordering=%s" % quote('user.name,id')) self.assert_order(10, 4, 6, 9, 15, 8) Spy.assert_ok(self.body, 'ordering', ['user.name', 'id']) # +/- self.request("/related?tg_paginate_ordering=%s" % quote('user.name,-id')) self.assert_order(5, 1, 3, 13, 16, 11, 7, 12, 2, 14) Spy.assert_ok(self.body, 'ordering', ['user.name', '-id']) self.request("/related?tg_paginate_no=2&tg_paginate_ordering=%s" % quote('user.name,-id')) self.assert_order(10, 15, 9, 6, 4, 8) Spy.assert_ok(self.body, 'ordering', ['user.name', '-id']) # -/+ self.request("/related?tg_paginate_ordering=%s" % quote('-user.name,id')) self.assert_order(8, 4, 6, 9, 15, 10, 14, 2, 12, 7) Spy.assert_ok(self.body, 'ordering', ['-user.name', 'id']) self.request("/related?tg_paginate_no=2&tg_paginate_ordering=%s" % quote('-user.name,id')) self.assert_order(11, 16, 13, 3, 1, 5) Spy.assert_ok(self.body, 'ordering', ['-user.name', 'id']) # -/- self.request("/related?tg_paginate_ordering=%s" % quote('-user.name,-id')) self.assert_order(8, 15, 9, 6, 4, 10, 14, 12, 2, 16) Spy.assert_ok(self.body, 'ordering', ['-user.name', '-id']) self.request("/related?tg_paginate_no=2&tg_paginate_ordering=%s" % quote('-user.name,-id')) self.assert_order(11, 7, 13, 3, 5, 1) Spy.assert_ok(self.body, 'ordering', ['-user.name', '-id']) def test_related_objects_ordering_level_2(self): # +/+ self.request("/related?tg_paginate_ordering=%s" % quote('user.occupation.name,id')) self.assert_order(1, 5, 10, 13, 14, 2, 7, 11, 12, 16) Spy.assert_ok(self.body, 'ordering', ['user.occupation.name', 'id']) self.request("/related?tg_paginate_no=2&tg_paginate_ordering=%s" % quote('user.occupation.name,id')) self.assert_order(4, 6, 8, 9, 15, 3) Spy.assert_ok(self.body, 'ordering', ['user.occupation.name', 'id']) # +/- self.request("/related?tg_paginate_ordering=%s" % quote('user.occupation.name,-id')) self.assert_order(14, 13, 10, 5, 1, 16, 12, 11, 7, 2) Spy.assert_ok(self.body, 'ordering', ['user.occupation.name', '-id']) self.request("/related?tg_paginate_no=2&tg_paginate_ordering=%s" % quote('user.occupation.name,-id')) self.assert_order(15, 9, 8, 6, 4, 3) Spy.assert_ok(self.body, 'ordering', ['user.occupation.name', '-id']) # -/+ self.request("/related?tg_paginate_ordering=%s" % quote('-user.occupation.name,id')) self.assert_order(3, 4, 6, 8, 9, 15, 2, 7, 11, 12) Spy.assert_ok(self.body, 'ordering', ['-user.occupation.name', 'id']) self.request("/related?tg_paginate_no=2&tg_paginate_ordering=%s" % quote('-user.occupation.name,id')) self.assert_order(16, 1, 5, 10, 13, 14) Spy.assert_ok(self.body, 'ordering', ['-user.occupation.name', 'id']) # -/- self.request("/related?tg_paginate_ordering=%s" % quote('-user.occupation.name,-id')) self.assert_order(3, 15, 9, 8, 6, 4, 16, 12, 11, 7) Spy.assert_ok(self.body, 'ordering', ['-user.occupation.name', '-id']) self.request("/related?tg_paginate_no=2&tg_paginate_ordering=%s"# % quote('-user.occupation.name,-id')) self.assert_order(2, 14, 13, 10, 5, 1) Spy.assert_ok(self.body, 'ordering', ['-user.occupation.name', '-id']) def test_zero_limit(self): for method in query_methods: self.request("/zero_limit?method=%s" % method) self.assert_order(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16) def test_ticket_1641(self): self.request("/empty_with_groupby") self.assert_order() def setup_module(): create_tables() hub.commit() def teardown_module(): drop_tables() sqlalchemy_cleanup() PKA>Yu"turbogears/tests/test_paginate.pyc; HIc@sdZdkZdklZdkZdklZlZlZdk l Z l Z dk l Z lZlZlZdklZlZlZdklZlZdklZdkZd klZlZlZlZl Z d k!l"Z"yd k#l$Z%Wne&j o e'Z%nXd k(l)Z)l*Z*l+Z+l,Z,d i-Z.e%e'joe.i/dnei0hdd<ee ei1dei2dZ3Z4de5fdYZ6dZ7dZ8de5fdYZ9ei:dgdZ;dei<fdYZ=dei<fdYZ>de>fdYZ?d e5fd!YZ@d"e5fd#YZAd$e5fd%YZBd&e)fd'YZCd(ZDd)ZEd*e>fd+YZFd,ZGd-ZHdS(.sTests for paginateN(squote(sconfigsexposesdatabase(sRootControllersurl(s get_enginesmetadatassessionsmapper(spaginates sort_orderings sort_data(screate_requestssqlalchemy_cleanup(sjsonify(sTablesColumns ForeignKeysIntegersString(srelation(s SelectResults(s SQLObjectsIntCols StringColsconnectionForURIs Q QA SR SO SLsSRssqlalchemy.dburissqlite:///:memory:s test_paginateslistlikecBs)tZdZdZdZdZRS(s7A minimum list-like object that is needed for paginate.cGst||_dS(N(slistsargssselfs_list(sselfsargs((s7build\bdist.win32\egg\turbogears\tests\test_paginate.pys__init__)scCst|iSdS(N(slensselfs_list(sself((s7build\bdist.win32\egg\turbogears\tests\test_paginate.pys__len__,scCs|i|SdS(N(sselfs_listskey(sselfskey((s7build\bdist.win32\egg\turbogears\tests\test_paginate.pys __getitem__/s(s__name__s __module__s__doc__s__init__s__len__s __getitem__(((s7build\bdist.win32\egg\turbogears\tests\test_paginate.pyslistlike&s   cCs{g}t|d|dgjptt|d|dgjptt|d|ddgjptt|d|dddgjptt|d|dddgjptt|d|dddgjptt|d|dddgjptt|d|ddddgjptt|d|ddddgjptdS(s*Test the sort_ordering auxiliary function.sas-asbscs-csdN(sss sort_orderingsAssertionError(ss((s7build\bdist.win32\egg\turbogears\tests\test_paginate.pystest_sort_ordering3s(          c sxtdD]}|odtfdYndtfdYd}|d}|d}|d}|d } |d }|d }|d }|d }|o=t|dt ot|ddddjptnYt|dto:|didddgjot|ddddjptt|g|jptt|dgt|jptt|dg|jptt|ddg|jptt|ddg|jptt|dg|jptt|ddg|jptt|ddg|jptt|dg|jptt|ddg|jptt|ddg| jptt|dg|jptt|ddg|jptt|ddg|jptt|ddg|jptt|ddg|jptt| ddg|jptt|ddg|jptt|ddg|jptt|ddg|jptt|ddg|jptt|ddg|jptt|ddg|jptt| ddg|jptt|ddg|jptt|ddg|jptt|ddg|jptt|ddg|jptt|ddg|jptt|ddg|jptt| ddg|jptt|ddg|jptt|ddg|jptt|ddg|jptt|ddg|jptt|ddg|jptt|ddg|jptt| ddg|jptt|ddg|jptt|ddg|jptt|ddg|jptt|ddg|jptq WdS(sTest sorting in memory only.isrowcBs#tZdZdZdZRS(NcCs&||_|\|_|_|_dS(N(sabsselfsasb(sselfsab((s7build\bdist.win32\egg\turbogears\tests\test_paginate.pys__init__Ps cCs |iSdS(N(sselfsab(sself((s7build\bdist.win32\egg\turbogears\tests\test_paginate.pys__repr__SscCst|i|iSdS(N(scmpsselfsabsother(sselfsother((s7build\bdist.win32\egg\turbogears\tests\test_paginate.pys__cmp__Us(s__name__s __module__s__init__s__repr__s__cmp__(((s7build\bdist.win32\egg\turbogears\tests\test_paginate.pysrowOs  cBs#tZdZdZdZRS(NcCs*||_tt|\|d<|d|idd|ijptti|idddS(Ns/emptys "data": []slimiti(sselfsrequestsbodysAssertionErrorsSpys assert_ok(sself((s7build\bdist.win32\egg\turbogears\tests\test_paginate.pystest_empty_datas cCss|idd|ijptti|iddti|iddti|idtdddS( Ns/custom_limit?data_tgp_limit=0s&"data": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]s page_countislimiti spagesi(sselfsrequestsbodysAssertionErrorsSpys assert_oksxrange(sself((s7build\bdist.win32\egg\turbogears\tests\test_paginate.pystest_zero_limits  cCsT|idd|ijptti|iddti|idddS(Ns/empty?data_tgp_limit=0s "data": []s page_countislimiti(sselfsrequestsbodysAssertionErrorsSpys assert_ok(sself((s7build\bdist.win32\egg\turbogears\tests\test_paginate.pystest_empty_data_zero_limits (s__name__s __module__sRootControllersMyRootstest_pagination_old_stylestest_pagination_new_stylestest_pagination_listlikestest_limit_overridestest_max_pagesstest_strict_parametersstest_invalid_dynamic_limitstest_dynamic_limits test_multiplestest_out_of_bound_pagesstest_last_pages test_hrefstest_with_webpathstest_empty_datastest_zero_limitstest_empty_data_zero_limit(((s7build\bdist.win32\egg\turbogears\tests\test_paginate.pysTestBasicPagination"s"]    %  (      ,   s OccupationcBstZRS(N(s__name__s __module__(((s7build\bdist.win32\egg\turbogears\tests\test_paginate.pys OccupationssUsercBstZRS(N(s__name__s __module__(((s7build\bdist.win32\egg\turbogears\tests\test_paginate.pysUserssAddresscBstZdZRS(NcCsd|iSdS(Ns [Address %r](sselfsid(sself((s7build\bdist.win32\egg\turbogears\tests\test_paginate.pys__repr__s(s__name__s __module__s__repr__(((s7build\bdist.win32\egg\turbogears\tests\test_paginate.pysAddressss SOAddresscBs8tZefZeZeZeZdZRS(NcCsd|iSdS(Ns [Address %r](sselfsid(sself((s7build\bdist.win32\egg\turbogears\tests\test_paginate.pys__repr__s( s__name__s __module__sIntColsidsuser_ids StringColsstreetscitys__repr__(((s7build\bdist.win32\egg\turbogears\tests\test_paginate.pys SOAddresss     cCsbtdttdtdttdtd}tdttdtdttdtdtdttd}td ttdtdttd ttd td td tdtd}t t |t t |dhdt t dt<d t tdddt<t t|tihdd<dd<dd.= 0.5 ActiveMapper = None from sqlalchemy.orm import relation from turbogears import config, redirect, expose, errorhandling from turbogears.database import get_engine, metadata, session, mapper from turbogears.controllers import RootController from turbogears.testutil import create_request, sqlalchemy_cleanup, \ capture_log, print_log # Fixture class User(object): def __repr__(self): return "(User %s, password %s)" % (self.user_name, self.password) def setup_module(): global fresh_metadata, users_table, test_table, Person, Address, Test config.update({ "sqlalchemy.dburi" : "sqlite:///:memory:"}) if os.path.exists('freshtest.db'): os.unlink('freshtest.db') get_engine() fresh_metadata = MetaData() # :memory: can't be used in multiple threads fresh_metadata.bind = 'sqlite:///freshtest.db' metadata.bind.echo = True fresh_metadata.bind.echo = True users_table = Table("users", metadata, Column("user_id", Integer, primary_key=True), Column("user_name", String(40)), Column("password", String(10))) mapper(User, users_table) if ActiveMapper: class Person(ActiveMapper): class mapping: id = column(Integer, primary_key=True) name = column(String(40)) addresses = one_to_many("Address") class Address(ActiveMapper): class mapping: id = column(Integer, primary_key=True) address = column(String(40)) city = column(String(40)) person_id = column(Integer, foreign_key=ForeignKey("person.id")) else: persons_table = Table("persons", metadata, Column("id", Integer, primary_key=True), Column("name", String(40))) addresses_table = Table("addresses", metadata, Column("id", Integer, primary_key=True), Column("address", String(40)), Column("city", String(40)), Column("person_id", Integer, ForeignKey(persons_table.c.id))) class Person(object): pass class Address(object): pass mapper(Person, persons_table) mapper(Address, addresses_table, properties=dict( person=relation(Person, backref='addresses'))) test_table = Table("test", fresh_metadata, Column("id", Integer, primary_key=True), Column("val", String(40))) class Test(object): pass mapper(Test, test_table) metadata.create_all() fresh_metadata.create_all() def teardown_module(): metadata.drop_all() fresh_metadata.drop_all() fresh_metadata.bind.dispose() if os.path.exists('freshtest.db'): os.unlink('freshtest.db') sqlalchemy_cleanup() # Simple database tests def test_query_in_session(): i = users_table.insert() i.execute(user_name="globbo", password="thegreat!") query = session.query(User) globbo = query.filter_by(user_name="globbo").one() assert globbo.password == "thegreat!" users_table.delete().execute() def test_create_and_query(): i = users_table.insert() i.execute(user_name="globbo", password="thegreat!") s = users_table.select() r = s.execute() assert len(r.fetchall()) == 1 users_table.delete().execute() def test_active_mapper(): p = Person(name="Ford Prefect") a = Address(address="1 West Guildford", city="Betelgeuse") p.addresses.append(a) session.flush() session.clear() q = session.query(Person) ford = q.filter_by(name="Ford Prefect").one() assert ford is not p assert len(ford.addresses) == 1 # Exception handling class MyRoot(RootController): """A small root controller for our exception handling tests""" [expose()] def no_error(self, name): """Test controller""" Person(name=name) raise redirect("/confirm") def e_handler(self, tg_exceptions=None): """Test error handler""" cherrypy.response.code = 501 return "An exception occurred: %r (%s)" % ((tg_exceptions,)*2) [expose()] def create_person(self, id, docom=0, doerr=0, doflush=0): """Test controller""" Person(id=id) if int(docom): cherrypy.request.sa_transaction.commit() if int(doerr) == 1: raise Exception('User generated exception') if int(doerr) == 2: raise turbogears.redirect('/') if int(doflush): try: session.flush() except Exception: if int(doflush) == 1: raise return "No exceptions occurred" create_person = errorhandling.exception_handler(e_handler)(create_person) def test_implicit_trans_no_error(): """If a controller runs sucessfully, the transaction is commited.""" capture_log("turbogears.database") cherrypy.root = MyRoot() create_request("/no_error?name=A.%20Dent") print_log() session.clear() q = session.query(Person) arthur = q.filter_by(name="A. Dent").one() def test_raise_sa_exception(): """If a controller causes an SA exception, it is raised properly.""" capture_log("turbogears.database") cherrypy.root = MyRoot() create_request("/create_person?id=20") output = cherrypy.response.body[0] assert 'No exceptions occurred' in output create_request("/create_person?id=20") output = cherrypy.response.body[0] # SA 0.3 uses SQLError, 0.4 DBAPIError assert 'SQLError' in output or 'DBAPIError' in output def test_user_exception(): """If a controller raises an exception, transactions are rolled back.""" cherrypy.root = MyRoot() create_request("/create_person?id=21&doerr=1") session.clear() # should be done automatically, but just in case assert Person.query().get(21) is None def test_user_redirect(): """If a controller redirects, transactions are committed.""" cherrypy.root = MyRoot() create_request("/create_person?id=22&doerr=2") session.clear() # should be done automatically, but just in case assert Person.query().get(22) is not None def test_cntrl_commit(): """It's safe to commit a transaction in the controller.""" cherrypy.root = MyRoot() create_request("/create_person?id=23&docom=1") assert 'InvalidRequestError' not in cherrypy.response.body[0] def test_cntrl_flush(): """It's safe to flush in the controller.""" cherrypy.root = MyRoot() create_request("/create_person?id=24&doflush=1") assert 'No exceptions occurred' in cherrypy.response.body[0] create_request("/create_person?id=24&doflush=0") assert 'IntegrityError' in cherrypy.response.body[0] create_request("/create_person?id=24&doflush=1") assert 'IntegrityError' in cherrypy.response.body[0] create_request("/create_person?id=24&doflush=2") assert 'No exceptions occurred' in cherrypy.response.body[0] # Exception handling with rollback class RbRoot(RootController): """A small root controller for our transaction rollback tests""" def handerr(self, id): """Test error handler""" Person(id=int(id)+1) return dict() [expose()] def doerr(self, id, dorb=0): """Test controller""" Person(id=id) if int(dorb): cherrypy.request.sa_transaction.rollback() raise Exception('test') doerr = errorhandling.exception_handler(handerr)(doerr) def test_exc_rollback(): """"An exception within a controller method causes a rollback.""" cherrypy.root = RbRoot() create_request('/doerr?id=25') assert Person.query().get(25) is None assert Person.query().get(26) is not None def test_exc_done_rollback(): """No problems with error handler if controller manually rollbacks.""" cherrypy.root = RbRoot() create_request('/doerr?id=27&dorb=1') assert cherrypy.response.body[0] == '{"tg_flash": null}' # Session freshness tests class FreshRoot(RootController): """A small root controller for our session freshness tests""" [expose()] def test1(self): assert session.query(Test).get(1).val == 'a' return dict() [expose()] def test2(self): session.query(Test).get(1).val = 'b' return dict() [expose()] def test3(self): assert session.query(Test).get(1).val == 'b' return dict() def test_session_freshness(): """Check for session freshness. Changes made to the data in thread B should be reflected in thread A. """ fresh_metadata.bind.execute(test_table.insert(), dict(id=1, val='a')) cherrypy.root = FreshRoot() create_request("/test1") assert cherrypy.response.status.startswith("200") assert 'AssertionError' not in cherrypy.response.body[0] # Call test2 in a different thread class ThreadB(threading.Thread): def run(self): create_request("/test2") assert cherrypy.response.status.startswith("200") assert 'AssertionError' not in cherrypy.response.body[0] thrdb = ThreadB() thrdb.start() thrdb.join() create_request("/test3") assert cherrypy.response.status.startswith("200") assert 'AssertionError' not in cherrypy.response.body[0] PKA>ՂEE$turbogears/tests/test_sqlalchemy.pyc; HIc@sdZdkZdkZdkZdkZdklZlZlZl Z l Z l Z ydk l Z lZlZWn&ej oeZ dklZnXdklZlZlZlZdklZlZlZlZdklZdkl Z l!Z!l"Z"l#Z#d e$fd YZ%d Z&d Z'd Z(dZ)dZ*defdYZ+dZ,dZ-dZ.dZ/dZ0dZ1defdYZ2dZ3dZ4defdYZ5dZ6dS(sTests for SQLAlchemy supportN(sMetaDatasTablesColumns ForeignKeysIntegersString(s ActiveMapperscolumns one_to_many(srelation(sconfigsredirectsexposes errorhandling(s get_enginesmetadatassessionsmapper(sRootController(screate_requestssqlalchemy_cleanups capture_logs print_logsUsercBstZdZRS(NcCsd|i|ifSdS(Ns(User %s, password %s)(sselfs user_namespassword(sself((s9build\bdist.win32\egg\turbogears\tests\test_sqlalchemy.pys__repr__s(s__name__s __module__s__repr__(((s9build\bdist.win32\egg\turbogears\tests\test_sqlalchemy.pysUsersc CsVtihdd<tiidotidnttadt_ t t i _ t ti _ t dt tdtdt tdtd td td atttto0d tfd YadtfdYant dt tdtdt tdtd }t dt tdtdt tdtd tdtd tdtt|ii}d tfdYadtfdYatt|tt|dtdttddt dttdtdt tdtd adtfdYa tt tt i!ti!dS( Nssqlalchemy.dburissqlite:///:memory:s freshtest.dbssqlite:///freshtest.dbsuserssuser_ids primary_keys user_namei(spasswordi sPersoncBstZdfdYZRS(NsmappingcBs8tZeedeZeedZedZ RS(Ns primary_keyi(sAddress( s__name__s __module__scolumnsIntegersTruesidsStringsnames one_to_manys addresses(((s9build\bdist.win32\egg\turbogears\tests\test_sqlalchemy.pysmapping4s(s__name__s __module__smapping(((s9build\bdist.win32\egg\turbogears\tests\test_sqlalchemy.pysPerson3ssAddresscBstZdfdYZRS(NsmappingcBsVtZeedeZeedZeedZeede dZ RS(Ns primary_keyi(s foreign_keys person.id( s__name__s __module__scolumnsIntegersTruesidsStringsaddressscitys ForeignKeys person_id(((s9build\bdist.win32\egg\turbogears\tests\test_sqlalchemy.pysmapping:s (s__name__s __module__smapping(((s9build\bdist.win32\egg\turbogears\tests\test_sqlalchemy.pysAddress9sspersonssidsnames addressessaddressscitys person_idcBstZRS(N(s__name__s __module__(((s9build\bdist.win32\egg\turbogears\tests\test_sqlalchemy.pysPersonMscBstZRS(N(s__name__s __module__(((s9build\bdist.win32\egg\turbogears\tests\test_sqlalchemy.pysAddressPss propertiesspersonsbackrefstestsvalsTestcBstZRS(N(s__name__s __module__(((s9build\bdist.win32\egg\turbogears\tests\test_sqlalchemy.pysTest[s("sconfigsupdatesosspathsexistssunlinks get_enginesMetaDatasfresh_metadatasbindsTruesmetadatasechosTablesColumnsIntegersStrings users_tablesmappersUsers ActiveMappersPersonsAddresss persons_tables ForeignKeyscsidsaddresses_tablesobjectsdictsrelations test_tablesTests create_all(s persons_tablesaddresses_table((s9build\bdist.win32\egg\turbogears\tests\test_sqlalchemy.pys setup_modulesJ          (   cCsPtititiitiidotidnt dS(Ns freshtest.db( smetadatasdrop_allsfresh_metadatasbindsdisposesosspathsexistssunlinkssqlalchemy_cleanup(((s9build\bdist.win32\egg\turbogears\tests\test_sqlalchemy.pysteardown_moduleds    cCstti}|iddddtit}|iddi}|i djpt ti idS(Ns user_namesglobbospasswords thegreat!( s users_tablesinsertsisexecutessessionsquerysUsers filter_bysonesglobbospasswordsAssertionErrorsdelete(sisglobbosquery((s9build\bdist.win32\egg\turbogears\tests\test_sqlalchemy.pystest_query_in_sessionos  cCsnti}|iddddti}|i}t|idjpt ti idS(Ns user_namesglobbospasswords thegreat!i( s users_tablesinsertsisexecutesselectsssrslensfetchallsAssertionErrorsdelete(sisssr((s9build\bdist.win32\egg\turbogears\tests\test_sqlalchemy.pystest_create_and_queryws     cCstdd}tdddd}|ii|tititi t}|i ddi }||j ptt|idjptdS(Nsnames Ford Prefectsaddresss1 West Guildfordscitys Betelgeusei(sPersonspsAddresssas addressessappendssessionsflushsclearsquerysqs filter_bysonesfordsAssertionErrorslen(sasfordsqsp((s9build\bdist.win32\egg\turbogears\tests\test_sqlalchemy.pystest_active_mappers  sMyRootcBs^tZdZegdZedZegddddZei eeZRS(s8A small root controller for our exception handling testscCstd|tddS(sTest controllersnames/confirmN(sPersonsnamesredirect(sselfsname((s9build\bdist.win32\egg\turbogears\tests\test_sqlalchemy.pysno_errors cCsdti_d|fdSdS(sTest error handlerisAn exception occurred: %r (%s)iN(scherrypysresponsescodes tg_exceptions(sselfs tg_exceptions((s9build\bdist.win32\egg\turbogears\tests\test_sqlalchemy.pys e_handlers icCstd|t|otiiint|djot dnt|djot i dnt|oByt iWqt j o!t|djoqqXndSdS(sTest controllersidisUser generated exceptionis/sNo exceptions occurredN(sPersonsidsintsdocomscherrypysrequestssa_transactionscommitsdoerrs Exceptions turbogearssredirectsdoflushssessionsflush(sselfsidsdocomsdoerrsdoflush((s9build\bdist.win32\egg\turbogears\tests\test_sqlalchemy.pys create_persons   ( s__name__s __module__s__doc__sexposesno_errorsNones e_handlers create_persons errorhandlingsexception_handler(((s9build\bdist.win32\egg\turbogears\tests\test_sqlalchemy.pysMyRoots     cCs\tdtt_tdttitit }|i ddi }dS(s>If a controller runs sucessfully, the transaction is commited.sturbogears.databases/no_error?name=A.%20DentsnamesA. DentN(s capture_logsMyRootscherrypysrootscreate_requests print_logssessionsclearsquerysPersonsqs filter_bysonesarthur(sqsarthur((s9build\bdist.win32\egg\turbogears\tests\test_sqlalchemy.pystest_implicit_trans_no_errors    cCstdtt_tdtiid}d|jpttdtiid}d|jp d|jptdS(s>If a controller causes an SA exception, it is raised properly.sturbogears.databases/create_person?id=20isNo exceptions occurredsSQLErrors DBAPIErrorN( s capture_logsMyRootscherrypysrootscreate_requestsresponsesbodysoutputsAssertionError(soutput((s9build\bdist.win32\egg\turbogears\tests\test_sqlalchemy.pystest_raise_sa_exceptions    cCsGtt_tdtitiidt jpt dS(sBIf a controller raises an exception, transactions are rolled back.s/create_person?id=21&doerr=1iN( sMyRootscherrypysrootscreate_requestssessionsclearsPersonsquerysgetsNonesAssertionError(((s9build\bdist.win32\egg\turbogears\tests\test_sqlalchemy.pystest_user_exceptions    cCsGtt_tdtitiidt j pt dS(s6If a controller redirects, transactions are committed.s/create_person?id=22&doerr=2iN( sMyRootscherrypysrootscreate_requestssessionsclearsPersonsquerysgetsNonesAssertionError(((s9build\bdist.win32\egg\turbogears\tests\test_sqlalchemy.pystest_user_redirects    cCs8tt_tddtiidjptdS(s4It's safe to commit a transaction in the controller.s/create_person?id=23&docom=1sInvalidRequestErroriN(sMyRootscherrypysrootscreate_requestsresponsesbodysAssertionError(((s9build\bdist.win32\egg\turbogears\tests\test_sqlalchemy.pystest_cntrl_commits  cCstt_tddtiidjpttddtiidjpttddtiidjpttddtiidjptdS(s%It's safe to flush in the controller.s/create_person?id=24&doflush=1sNo exceptions occurredis/create_person?id=24&doflush=0sIntegrityErrors/create_person?id=24&doflush=2N(sMyRootscherrypysrootscreate_requestsresponsesbodysAssertionError(((s9build\bdist.win32\egg\turbogears\tests\test_sqlalchemy.pystest_cntrl_flushs     sRbRootcBsBtZdZdZegddZeieeZRS(s:A small root controller for our transaction rollback testscCs"tdt|dtSdS(sTest error handlersidiN(sPersonsintsidsdict(sselfsid((s9build\bdist.win32\egg\turbogears\tests\test_sqlalchemy.pyshanderrsicCs>td|t|otiiintddS(sTest controllersidstestN( sPersonsidsintsdorbscherrypysrequestssa_transactionsrollbacks Exception(sselfsidsdorb((s9build\bdist.win32\egg\turbogears\tests\test_sqlalchemy.pysdoerrs   (s__name__s __module__s__doc__shanderrsexposesdoerrs errorhandlingsexception_handler(((s9build\bdist.win32\egg\turbogears\tests\test_sqlalchemy.pysRbRoots    cCs`tt_tdtiidtjpttiidtj ptdS(s;"An exception within a controller method causes a rollback.s /doerr?id=25iiN( sRbRootscherrypysrootscreate_requestsPersonsquerysgetsNonesAssertionError(((s9build\bdist.win32\egg\turbogears\tests\test_sqlalchemy.pystest_exc_rollbacks   #cCs8tt_tdtiiddjptdS(s@No problems with error handler if controller manually rollbacks.s/doerr?id=27&dorb=1is{"tg_flash": null}N(sRbRootscherrypysrootscreate_requestsresponsesbodysAssertionError(((s9build\bdist.win32\egg\turbogears\tests\test_sqlalchemy.pystest_exc_done_rollbacks  s FreshRootcBsGtZdZegdZegdZegdZRS(s7A small root controller for our session freshness testscCs4titididjpttSdS(Nisa(ssessionsquerysTestsgetsvalsAssertionErrorsdict(sself((s9build\bdist.win32\egg\turbogears\tests\test_sqlalchemy.pystest1s)cCs&dtitid_tSdS(Nsbi(ssessionsquerysTestsgetsvalsdict(sself((s9build\bdist.win32\egg\turbogears\tests\test_sqlalchemy.pystest2scCs4titididjpttSdS(Nisb(ssessionsquerysTestsgetsvalsAssertionErrorsdict(sself((s9build\bdist.win32\egg\turbogears\tests\test_sqlalchemy.pystest3s)(s__name__s __module__s__doc__sexposestest1stest2stest3(((s9build\bdist.win32\egg\turbogears\tests\test_sqlalchemy.pys FreshRoot s      cCstiititddddtt_t dti i i dpt dti idjpt d tifd Y}|}|i|it d ti i i dpt dti idjpt d S( smCheck for session freshness. Changes made to the data in thread B should be reflected in thread A. sidisvalsas/test1s200sAssertionErrorisThreadBcBstZdZRS(NcCsItdtiiidptdtiidjptdS(Ns/test2s200sAssertionErrori(screate_requestscherrypysresponsesstatuss startswithsAssertionErrorsbody(sself((s9build\bdist.win32\egg\turbogears\tests\test_sqlalchemy.pysrun*s (s__name__s __module__srun(((s9build\bdist.win32\egg\turbogears\tests\test_sqlalchemy.pysThreadB)ss/test3N(sfresh_metadatasbindsexecutes test_tablesinsertsdicts FreshRootscherrypysrootscreate_requestsresponsesstatuss startswithsAssertionErrorsbodys threadingsThreadsThreadBsthrdbsstartsjoin(sThreadBsthrdb((s9build\bdist.win32\egg\turbogears\tests\test_sqlalchemy.pystest_session_freshnesss(      (7s__doc__scherrypysoss threadings turbogearss sqlalchemysMetaDatasTablesColumns ForeignKeysIntegersStringssqlalchemy.ext.activemappers ActiveMapperscolumns one_to_manys ImportErrorsNonessqlalchemy.ormsrelationsconfigsredirectsexposes errorhandlingsturbogears.databases get_enginesmetadatassessionsmappersturbogears.controllerssRootControllersturbogears.testutilscreate_requestssqlalchemy_cleanups capture_logs print_logsobjectsUsers setup_modulesteardown_modulestest_query_in_sessionstest_create_and_querystest_active_mappersMyRootstest_implicit_trans_no_errorstest_raise_sa_exceptionstest_user_exceptionstest_user_redirectstest_cntrl_commitstest_cntrl_flushsRbRootstest_exc_rollbackstest_exc_done_rollbacks FreshRootstest_session_freshness(-stest_raise_sa_exceptionscherrypystest_user_exceptionssessionsrelationstest_exc_rollbacks FreshRootsredirectstest_active_mappers turbogearss ForeignKeystest_exc_done_rollbacksteardown_modulesRbRootsUsersIntegersconfigs setup_modulesmetadatastest_cntrl_flushstest_cntrl_commits errorhandlings ActiveMappers get_enginesColumnsexposesRootControllerssqlalchemy_cleanupstest_user_redirects print_logstest_implicit_trans_no_errorstest_create_and_querysStringsmappers one_to_manys capture_logscolumnscreate_requestsMyRootstest_session_freshnesss threadingstest_query_in_sessionsTablesMetaDatasos((s9build\bdist.win32\egg\turbogears\tests\test_sqlalchemy.pys?s:$+  J   "      PKK9Lm::"turbogears/tests/test_sqlobject.py"""Tests for SQLObject database operations""" from turbogears import database from sqlobject import dbconnection import cherrypy from turbogears.controllers import RootController _engine = database._engine def setup(module): # turn off SQLAlchemy for these tests global _engine _engine = database._engine database._engine = None def teardown(module): database._engine = _engine def test_registry(): """hubs appear in a registry""" hub = database.AutoConnectHub("sqlite:///:memory:") try: assert hub in database.hub_registry finally: database.hub_registry.clear() def test_alwaysTransaction(): """hub.getConnection always returns a Transaction""" hub = database.AutoConnectHub("sqlite:///:memory:") try: assert isinstance(hub.getConnection(), dbconnection.Transaction) database.end_all() assert not isinstance(hub.threadingLocal.connection, dbconnection.Transaction) finally: database.hub_registry.clear() class DatabaseStandIn: committed = False rolled_back = False ended = False successful_called = False def commit(self): self.committed = True def rollback(self): self.rolled_back = True def end(self): self.ended = True def successful(self): self.successful_called = True def failure(self): self.failure_called = True raise Warning("Oh my!") def redirect(self): self.redirect_called = True raise cherrypy.HTTPRedirect("/") def test_good_transaction(): """successful runs automatically commit""" dsi = DatabaseStandIn() database.hub_registry.add(dsi) try: database.run_with_transaction(dsi.successful) assert dsi.successful_called assert dsi.committed assert dsi.ended finally: database.hub_registry.clear() def test_bad_transaction(): """failed runs automatically rollback""" dsi = DatabaseStandIn() database.hub_registry.add(dsi) try: try: database.run_with_transaction(dsi.failure) assert False, "exception should have been raised" except: pass assert dsi.failure_called assert dsi.rolled_back assert dsi.ended finally: database.hub_registry.clear() def test_redirection(): """Redirects count as successful runs, not failures""" dsi = DatabaseStandIn() database.hub_registry.add(dsi) try: try: database.run_with_transaction(dsi.redirect) except cherrypy.HTTPRedirect: pass assert dsi.redirect_called assert dsi.committed assert dsi.ended finally: database.hub_registry.clear() def test_so_to_dict(): """Conversion to dictionary works properly""" hub = database.AutoConnectHub("sqlite:///:memory:") try: from sqlobject import IntCol from sqlobject.inheritance import InheritableSQLObject class Parent(InheritableSQLObject): _connection = hub a = IntCol() class Child(Parent): _connection = hub b = IntCol() Parent.createTable() Child.createTable() p = Parent(a=1) c = Child(a=1, b=2) p_dict = database.so_to_dict(p) assert p_dict['a'] == 1 c_dict = database.so_to_dict(c) assert c_dict['a'] == 1 assert c_dict['b'] == 2 assert None == c_dict.get('childName', None) assert None == p_dict.get('childName', None) finally: database.hub_registry.clear() PKA> #turbogears/tests/test_sqlobject.pyc; HIc@sdZdklZdklZdkZdklZeiadZ dZ dZ dZ d fd YZ d Zd Zd ZdZdS(s'Tests for SQLObject database operations(sdatabase(s dbconnectionN(sRootControllercCstiatt_dS(N(sdatabases_enginesNone(smodule((s8build\bdist.win32\egg\turbogears\tests\test_sqlobject.pyssetup s cCs tt_dS(N(s_enginesdatabase(smodule((s8build\bdist.win32\egg\turbogears\tests\test_sqlobject.pysteardownscCs?tid}z|tijptWdtiiXdS(shubs appear in a registryssqlite:///:memory:N(sdatabasesAutoConnectHubshubs hub_registrysAssertionErrorsclear(shub((s8build\bdist.win32\egg\turbogears\tests\test_sqlobject.pys test_registrys cCsstid}zOt|itipttit|i i ti ptWdti i XdS(s.hub.getConnection always returns a Transactionssqlite:///:memory:N( sdatabasesAutoConnectHubshubs isinstances getConnections dbconnections TransactionsAssertionErrorsend_allsthreadingLocals connections hub_registrysclear(shub((s8build\bdist.win32\egg\turbogears\tests\test_sqlobject.pystest_alwaysTransactions  %sDatabaseStandIncBsVtZeZeZeZeZdZdZdZ dZ dZ dZ RS(NcCs t|_dS(N(sTruesselfs committed(sself((s8build\bdist.win32\egg\turbogears\tests\test_sqlobject.pyscommit0scCs t|_dS(N(sTruesselfs rolled_back(sself((s8build\bdist.win32\egg\turbogears\tests\test_sqlobject.pysrollback3scCs t|_dS(N(sTruesselfsended(sself((s8build\bdist.win32\egg\turbogears\tests\test_sqlobject.pysend6scCs t|_dS(N(sTruesselfssuccessful_called(sself((s8build\bdist.win32\egg\turbogears\tests\test_sqlobject.pys successful9scCst|_tddS(NsOh my!(sTruesselfsfailure_calledsWarning(sself((s8build\bdist.win32\egg\turbogears\tests\test_sqlobject.pysfailure<s cCst|_tiddS(Ns/(sTruesselfsredirect_calledscherrypys HTTPRedirect(sself((s8build\bdist.win32\egg\turbogears\tests\test_sqlobject.pysredirect@s ( s__name__s __module__sFalses committeds rolled_backsendedssuccessful_calledscommitsrollbacksends successfulsfailuresredirect(((s8build\bdist.win32\egg\turbogears\tests\test_sqlobject.pysDatabaseStandIn)s     cCsut}tii|zGti|i|ipt|i pt|i ptWdtii XdS(s$successful runs automatically commitN( sDatabaseStandInsdsisdatabases hub_registrysaddsrun_with_transactions successfulssuccessful_calledsAssertionErrors committedsendedsclear(sdsi((s8build\bdist.win32\egg\turbogears\tests\test_sqlobject.pystest_good_transactionEs cCst}tii|zfy%ti|itp tdWnnX|i pt|i pt|i ptWdtii XdS(s"failed runs automatically rollbacks!exception should have been raisedN( sDatabaseStandInsdsisdatabases hub_registrysaddsrun_with_transactionsfailuresFalsesAssertionErrorsfailure_calleds rolled_backsendedsclear(sdsi((s8build\bdist.win32\egg\turbogears\tests\test_sqlobject.pystest_bad_transactionRs cCst}tii|zdyti|iWntij onX|i pt |i pt |i pt Wdtii XdS(s0Redirects count as successful runs, not failuresN(sDatabaseStandInsdsisdatabases hub_registrysaddsrun_with_transactionsredirectscherrypys HTTPRedirectsredirect_calledsAssertionErrors committedsendedsclear(sdsi((s8build\bdist.win32\egg\turbogears\tests\test_sqlobject.pystest_redirectioncs c sXtidz4dkldkl}d|fdY}d|fdY}|i |i |dd }|dd d d }ti |}|dd jptti |}|dd jpt|d d jptt|id tjptt|id tjptWd tiiXd S(s'Conversion to dictionary works properlyssqlite:///:memory:(sIntCol(sInheritableSQLObjectsParentcstZZZRS(N(s__name__s __module__shubs _connectionsIntColsa((shubsIntCol(s8build\bdist.win32\egg\turbogears\tests\test_sqlobject.pysParentzssChildcstZZZRS(N(s__name__s __module__shubs _connectionsIntColsb((sIntColshub(s8build\bdist.win32\egg\turbogears\tests\test_sqlobject.pysChild~ssaisbis childNameN(sdatabasesAutoConnectHubshubs sqlobjectsIntColssqlobject.inheritancesInheritableSQLObjectsParentsChilds createTablespscs so_to_dictsp_dictsAssertionErrorsc_dictsNonesgets hub_registrysclear( scsc_dictshubsParentsp_dictspsIntColsChildsInheritableSQLObject((shubsIntCols8build\bdist.win32\egg\turbogears\tests\test_sqlobject.pystest_so_to_dictss(     $(s__doc__s turbogearssdatabases sqlobjects dbconnectionscherrypysturbogears.controllerssRootControllers_enginessetupsteardowns test_registrystest_alwaysTransactionsDatabaseStandInstest_good_transactionstest_bad_transactionstest_redirectionstest_so_to_dict( stest_good_transactionstest_redirectionscherrypysdatabasesteardownstest_so_to_dictssetupsDatabaseStandInsRootControllerstest_bad_transactions dbconnections test_registrystest_alwaysTransaction((s8build\bdist.win32\egg\turbogears\tests\test_sqlobject.pys?s          PKK9I !turbogears/tests/test_testutil.pyimport unittest import cherrypy from turbogears import controllers, expose, redirect, testutil class MyRoot(controllers.RootController): def set_name(self, name): cookies = cherrypy.response.simple_cookie cookies['name'] = name return "Hello " + name set_name = expose()(set_name) def get_name(self): cookies = cherrypy.request.simple_cookie if 'name' in cookies: return cookies['name'].value else: return "cookie not found" get_name = expose()(get_name) def get_unicode_name(self): """Return a nonsense string of non-ascii characters""" cherrypy.response.headers['Content-Type'] = 'text/plain; encoding=utf-8' return u'\u1234\u9876\u3456'.encode('utf-8') get_unicode_name = expose()(get_unicode_name) def redirect(self): raise redirect("foo") redirect = expose()(redirect) class TestControllers(unittest.TestCase): def setUp(self): cherrypy.root = None cherrypy.tree.mount_points = {} cherrypy.tree.mount(MyRoot(), "/") self.root = cherrypy.root def tearDown(self): cherrypy.root = None cherrypy.tree.mount_points = {} def test_browser_session(self): bs = testutil.BrowsingSession() bs.goto('/get_name') assert bs.response == 'cookie not found' bs.goto('/set_name?name=me') bs.goto('/get_name') assert bs.response == 'me' def test_browser_session_for_two_users(self): bs1 = testutil.BrowsingSession() bs2 = testutil.BrowsingSession() bs1.goto('/set_name?name=bs1') bs2.goto('/set_name?name=bs2') bs1.goto('/get_name') assert bs1.response == 'bs1' bs2.goto('/get_name') assert bs2.response == 'bs2' def test_unicode_response(self): bs = testutil.BrowsingSession() bs.goto('/get_unicode_name') assert bs.response == u'\u1234\u9876\u3456'.encode('utf-8') assert bs.unicode_response == u'\u1234\u9876\u3456' assert type(bs.unicode_response) == unicode def test_index(self): "Test that call_with_request is usable if controller uses redirect" try: testutil.call(self.root.redirect) self.fail("no redirect exception raised") except cherrypy.HTTPRedirect, e: assert e.status in [302, 303] self.assertEquals(1, len(e.urls)) assert e.urls[0].endswith("foo") PKA>dKQQ"turbogears/tests/test_testutil.pyc; HIc@sgdkZdkZdklZlZlZlZdeifdYZdei fdYZ dS(N(s controllerssexposesredirectstestutilsMyRootcBshtZdZeeZdZeeZdZeeZdZeeZRS(NcCs"tii}||dtZdZdZdZdZdZdZRS(NcCs;tt_hti_tiitdti|_dS(Ns/(sNonescherrypysrootstrees mount_pointssmountsMyRootsself(sself((s7build\bdist.win32\egg\turbogears\tests\test_testutil.pyssetUp s  cCstt_hti_dS(N(sNonescherrypysrootstrees mount_points(sself((s7build\bdist.win32\egg\turbogears\tests\test_testutil.pystearDown&s cCseti}|id|idjpt|id|id|idjptdS(Ns /get_namescookie not founds/set_name?name=mesme(stestutilsBrowsingSessionsbssgotosresponsesAssertionError(sselfsbs((s7build\bdist.win32\egg\turbogears\tests\test_testutil.pystest_browser_session*s     cCs~ti}ti}|id|id|id|idjpt|id|idjptdS(Ns/set_name?name=bs1s/set_name?name=bs2s /get_namesbs1sbs2(stestutilsBrowsingSessionsbs1sbs2sgotosresponsesAssertionError(sselfsbs1sbs2((s7build\bdist.win32\egg\turbogears\tests\test_testutil.pys"test_browser_session_for_two_users2s      cCsqti}|id|ididjpt|idjptt|it jptdS(Ns/get_unicode_nameu ሴ顶㑖sutf-8( stestutilsBrowsingSessionsbssgotosresponsesencodesAssertionErrorsunicode_responsestypesunicode(sselfsbs((s7build\bdist.win32\egg\turbogears\tests\test_testutil.pystest_unicode_response<s    cCsy$ti|ii|idWnltij o]}|i ddgjpt |i dt |i |i didpt nXdS(sATest that call_with_request is usable if controller uses redirectsno redirect exception raisedi.i/iisfooN(stestutilscallsselfsrootsredirectsfailscherrypys HTTPRedirectsesstatussAssertionErrors assertEqualsslensurlssendswith(sselfse((s7build\bdist.win32\egg\turbogears\tests\test_testutil.pys test_indexCs(s__name__s __module__ssetUpstearDownstest_browser_sessions"test_browser_session_for_two_usersstest_unicode_responses test_index(((s7build\bdist.win32\egg\turbogears\tests\test_testutil.pysTestControllerss     ( sunittestscherrypys turbogearss controllerssexposesredirectstestutilsRootControllersMyRootsTestCasesTestControllers(sredirectstestutilscherrypysTestControllerssunittestsMyRoots controllerssexpose((s7build\bdist.win32\egg\turbogears\tests\test_testutil.pys?s  PKK9eturbogears/tests/test_util.py import sys from StringIO import StringIO from turbogears import config, util def test_deprecated(): def some_old_function(x, y): """some old function""" return x + y some_old_function = util.deprecated('this is old')(some_old_function) assert "some old function" in some_old_function.__doc__ some_old_function.__name__ == 'some_old_function' stderr, sys.stderr = sys.stderr, StringIO() try: assert some_old_function(1, 2) == 3 finally: stderr, sys.stderr = sys.stderr, stderr assert 'DeprecationWarning: this is old' in stderr.getvalue() stderr.close() def test_call_on_stack(): def recurse(level): if level: return recurse(level-1) return util.call_on_stack('recurse', dict()) assert not recurse(0) assert recurse(1) def recurse(level, arg=None): if level: return recurse(level-1, arg) return util.call_on_stack('recurse', dict(arg='true'), 3) assert not recurse(3, 'true') assert recurse(4, 'true') assert not recurse(4, 'false') def test_remove_keys(): assert util.remove_keys(dict(x=1, y=2, z=3), 'xz') == dict(y=2) def test_has_arg(): def fun(x, z=2): pass assert util.has_arg(fun, 'x') assert not util.has_arg(fun, 'y') assert util.has_arg(fun, 'z') def test_arg_index(): def fun(a, b, y=3, z=4): pass assert util.arg_index(fun, 'a') == 0 assert util.arg_index(fun, 'b') == 1 assert util.arg_index(fun, 'c') is None assert util.arg_index(fun, 'y') == 2 assert util.arg_index(fun, 'z') == 3 def test_parse_http_accept_header(): t = util.parse_http_accept_header assert t(None) == [] assert t('') == [] assert t('text/html') == ['text/html'] assert t('text/html;level=1') == ['text/html;level=1'] assert t(' text/html; level=1 ') == ['text/html; level=1'] assert t('audio/*, audio/mid') == ['audio/*', 'audio/mid'] assert t('audio/*; q=0.2, audio/mid') == ['audio/mid', 'audio/*'] assert t('audio/*; q=0.2, audio/mid; q=0.3') == ['audio/mid', 'audio/*'] assert t('audio/*; q=0.3, audio/mid; q=0.2') == ['audio/*', 'audio/mid'] assert t('audio/*, audio/mid; q=0.2') == ['audio/*', 'audio/mid'] assert t('audio/*, audio/mid; q=0') == ['audio/*'] assert t('''text/plain; q=0.5, text/html, text/x-dvi; q=0.8, text/x-c''') == ['text/html', 'text/x-c', 'text/x-dvi', 'text/plain'] assert t('''text/*;q=0.3, text/html;q=0.7, text/html;level=1, text/html;level=2;q=0.4, */*;q=0.5''') == ['text/html;level=1', 'text/html', '*/*', 'text/html;level=2', 'text/*'] assert t('compress;q=0.5, gzip;q=1.0') == ['gzip', 'compress'] assert t('gzip;q=1.0, identity; q=0.5, *;q=0') == ['gzip', 'identity'] assert t('da, en-gb;q=0.8, en;q=0.7') == ['da', 'en-gb', 'en'] assert t('da, en-gb;q=0.7, en;q=0.8') == ['da', 'en', 'en-gb'] assert t('da;q=0.75, en-gb;q=0.099, en;q=0.8') == ['en', 'da', 'en-gb'] def test_preferred_from_http_accept_header(): t = util.simplify_http_accept_header assert t(None) is None assert t('') == '' assert t('text/html') == 'text/html' assert t('text/html;level=1') == 'text/html' assert t(' text/html; level=1 ') == 'text/html' assert t('audio/*, audio/mid') == 'audio/*' assert t('audio/*; q=0.2, audio/mid') == 'audio/mid' assert t('audio/*; q=0.2, audio/mid; q=0.3') == 'audio/mid' assert t('audio/*; q=0.3, audio/mid; q=0.2') == 'audio/*' assert t('audio/*, audio/mid; q=0.2') == 'audio/*' assert t('audio/*, audio/mid; q=0') == 'audio/*' assert t('''text/plain; q=0.5, text/html, text/x-dvi; q=0.8, text/x-c''') == 'text/html' assert t('''text/*;q=0.3, text/html;q=0.7, text/html;level=1, text/html;level=2;q=0.4, */*;q=0.5''') == 'text/html' assert t('''text/*;q=0.3, text/plain;q=0.7, text/html;level=1, text/sgml;q=0.4, */*;q=0.5''') == 'text/html' assert t('''text/*;q=0.3, text/plain;q=0.7, text/html;level=1;q=0.6, text/sgml;q=0.4, */*;q=0.5''') == 'text/plain' assert t('compress;q=0.5, gzip;q=1.0') == 'gzip' assert t('gzip;q=1.0, identity; q=0.5, *;q=0') == 'gzip' assert t('da, en-gb;q=0.8, en;q=0.7') == 'da' assert t('da, en-gb;q=0.7, en;q=0.8') == 'da' assert t('da;q=0.75, en-gb;q=0.099, en;q=0.8') == 'en' def test_quote_cookie(): assert util.quote_cookie ('Hello, W\xf6rld') \ == 'Hello%2C%20W\xf6rld' assert util.quote_cookie ('$1;\tinsert coin!') \ == '%241%3B%09insert%20coin!' def test_unquote_cookie(): assert util.unquote_cookie ('Hello%2C%20W\xf6rld!') \ == 'Hello, W\xf6rld!' assert util.unquote_cookie ('%241%3B%09insert%20coin!') \ == '$1;\tinsert coin!' def test_get_template_encoding_default(): assert util.get_template_encoding_default() == 'utf-8' def test_get_mime_type_for_format(): assert util.get_mime_type_for_format('plain') == 'text/plain' assert util.get_mime_type_for_format('text') == 'text/plain' assert util.get_mime_type_for_format('html') == 'text/html' assert util.get_mime_type_for_format('xhtml') == 'text/html' assert util.get_mime_type_for_format('xml') == 'text/xml' assert util.get_mime_type_for_format('json') == 'application/json' assert util.get_mime_type_for_format('foo') == 'text/html' config.update({'global': {'tg.format_mime_types': {'xhtml': 'application/xhtml+xml', 'foo': 'text/bar'}}}) assert util.get_mime_type_for_format('xhtml') == 'application/xhtml+xml' assert util.get_mime_type_for_format('json') == 'application/json' assert util.get_mime_type_for_format('foo') == 'text/bar' config.update({'global': {'tg.format_mime_types': {}}}) assert util.get_mime_type_for_format('xhtml') == 'text/html' assert util.get_mime_type_for_format('foo') == 'text/html' def test_mime_type_has_charset(): assert not util.mime_type_has_charset(None) assert not util.mime_type_has_charset('foo/bar') assert util.mime_type_has_charset('text/foobar') assert util.mime_type_has_charset('application/xml') assert util.mime_type_has_charset('application/foo+xml') assert util.mime_type_has_charset('application/javascript') assert not util.mime_type_has_charset('application/foobar') assert not util.mime_type_has_charset('application/json') def test_find_precision(): assert util.find_precision(0) == 0 assert util.find_precision(42) == 0 assert util.find_precision(0.1) == 1 assert util.find_precision(1234567.8) == 1 assert util.find_precision(34.25) == 2 assert util.find_precision(1234567.123) == 3 assert util.find_precision(123.1234567) == 7 def test_copy_if_mutable(): test_values = ((None, False), ('foo', False), (42, False), ((1, 2), False), ([1, 2], True), ({1: 2}, True)) for value, mutable in test_values: if mutable: assert util.copy_if_mutable(value) == value assert util.copy_if_mutable(value) is not value ret = util.copy_if_mutable(value, True) assert ret[0] == value assert ret[0] is not value assert ret[1] is True else: assert util.copy_if_mutable(value) is value ret = util.copy_if_mutable(value, True) assert ret[0] is value assert ret[1] is False def test_fixentities(): assert util.fixentities('Chip & Chap') \ == 'Chip & Chap' assert util.fixentities('<"<©>">') \ == '<"<©>">' PKA>H|U--turbogears/tests/test_util.pyc; HIc@sdkZdklZdklZlZdZdZdZdZdZ dZ d Z d Z d Z d Zd ZdZdZdZdZdS(N(sStringIO(sconfigsutilcCsd}tid|}d|ijpt|idjtitf\}t_z!|dddjptWdti|f\}t_Xd|i jpt|i dS( NcCs ||SdS(ssome old functionN(sxsy(sxsy((s3build\bdist.win32\egg\turbogears\tests\test_util.pyssome_old_function ss this is oldssome old functionssome_old_functioniiisDeprecationWarning: this is old( ssome_old_functionsutils deprecateds__doc__sAssertionErrors__name__ssyssstderrsStringIOsgetvaluesclose(ssome_old_functionsstderr((s3build\bdist.win32\egg\turbogears\tests\test_util.pystest_deprecateds  !csdd ptdpttddd ptddptdd ptdS( Ncs0|o|dSntidtSdS(Nisrecurse(slevelsrecursesutils call_on_stacksdict(slevel(srecurse(s3build\bdist.win32\egg\turbogears\tests\test_util.pysrecursesiics<|o|d|SntidtdddSdS(Nisrecursesargstruei(slevelsrecursesargsutils call_on_stacksdict(slevelsarg(srecurse(s3build\bdist.win32\egg\turbogears\tests\test_util.pysrecurse%sistrueisfalse(srecursesAssertionErrorsNone(srecurse((srecurses3build\bdist.win32\egg\turbogears\tests\test_util.pystest_call_on_stacks cCsBtitdddddddtddjptdS(Nsxisyiszisxz(sutils remove_keyssdictsAssertionError(((s3build\bdist.win32\egg\turbogears\tests\test_util.pystest_remove_keys/scCs_dd}ti|dptti|d ptti|dptdS(NicCsdS(N((sxsz((s3build\bdist.win32\egg\turbogears\tests\test_util.pysfun6ssxsysz(sfunsutilshas_argsAssertionError(sfun((s3build\bdist.win32\egg\turbogears\tests\test_util.pys test_has_arg4s cCsddd}ti|ddjptti|ddjptti|dtjptti|d d jptti|d djptdS( NiicCsdS(N((sasbsysz((s3build\bdist.win32\egg\turbogears\tests\test_util.pysfun@ssaisbiscsyisz(sfunsutils arg_indexsAssertionErrorsNone(sfun((s3build\bdist.win32\egg\turbogears\tests\test_util.pystest_arg_index>s     cCsMti}|tgjpt|dgjpt|ddgjpt|ddgjpt|ddgjpt|dddgjpt|d ddgjpt|d ddgjpt|d ddgjpt|d ddgjpt|d dgjpt|dddddgjpt|ddddddgjpt|dddgjpt|dddgjpt|ddddgjpt|ddddgjpt|d dddgjptdS(!Nss text/htmlstext/html;level=1s text/html; level=1 stext/html; level=1saudio/*, audio/midsaudio/*s audio/midsaudio/*; q=0.2, audio/mids audio/*; q=0.2, audio/mid; q=0.3s audio/*; q=0.3, audio/mid; q=0.2saudio/*, audio/mid; q=0.2saudio/*, audio/mid; q=0sAtext/plain; q=0.5, text/html, text/x-dvi; q=0.8, text/x-cstext/x-cs text/x-dvis text/plains\text/*;q=0.3, text/html;q=0.7, text/html;level=1, text/html;level=2;q=0.4, */*;q=0.5s*/*stext/html;level=2stext/*scompress;q=0.5, gzip;q=1.0sgzipscompresss"gzip;q=1.0, identity; q=0.5, *;q=0sidentitysda, en-gb;q=0.8, en;q=0.7sdasen-gbsensda, en-gb;q=0.7, en;q=0.8s"da;q=0.75, en-gb;q=0.099, en;q=0.8(sutilsparse_http_accept_headerstsNonesAssertionError(st((s3build\bdist.win32\egg\turbogears\tests\test_util.pystest_parse_http_accept_headerJs&      &)  ##cCsti}|ttjpt|ddjpt|ddjpt|ddjpt|ddjpt|ddjpt|ddjpt|d djpt|d djpt|d djpt|d djpt|d djpt|ddjpt|ddjpt|ddjpt|ddjpt|ddjpt|ddjpt|ddjpt|ddjptdS(Nss text/htmlstext/html;level=1s text/html; level=1 saudio/*, audio/midsaudio/*saudio/*; q=0.2, audio/mids audio/mids audio/*; q=0.2, audio/mid; q=0.3s audio/*; q=0.3, audio/mid; q=0.2saudio/*, audio/mid; q=0.2saudio/*, audio/mid; q=0sAtext/plain; q=0.5, text/html, text/x-dvi; q=0.8, text/x-cs\text/*;q=0.3, text/html;q=0.7, text/html;level=1, text/html;level=2;q=0.4, */*;q=0.5sUtext/*;q=0.3, text/plain;q=0.7, text/html;level=1, text/sgml;q=0.4, */*;q=0.5s[text/*;q=0.3, text/plain;q=0.7, text/html;level=1;q=0.6, text/sgml;q=0.4, */*;q=0.5s text/plainscompress;q=0.5, gzip;q=1.0sgzips"gzip;q=1.0, identity; q=0.5, *;q=0sda, en-gb;q=0.8, en;q=0.7sdasda, en-gb;q=0.7, en;q=0.8s"da;q=0.75, en-gb;q=0.099, en;q=0.8sen(sutilssimplify_http_accept_headerstsNonesAssertionError(st((s3build\bdist.win32\egg\turbogears\tests\test_util.pys&test_preferred_from_http_accept_headerds* cCs>tiddjpttiddjptdS(Ns Hello, WrldsHello%2C%20Wrlds$1; insert coin!s%241%3B%09insert%20coin!(sutils quote_cookiesAssertionError(((s3build\bdist.win32\egg\turbogears\tests\test_util.pystest_quote_cookiescCs>tiddjpttiddjptdS(NsHello%2C%20Wrld!s Hello, Wrld!s%241%3B%09insert%20coin!s$1; insert coin!(sutilsunquote_cookiesAssertionError(((s3build\bdist.win32\egg\turbogears\tests\test_util.pystest_unquote_cookiescCstidjptdS(Nsutf-8(sutilsget_template_encoding_defaultsAssertionError(((s3build\bdist.win32\egg\turbogears\tests\test_util.pys"test_get_template_encoding_defaultsc Cstiddjpttiddjpttiddjpttiddjpttiddjpttid d jpttid djpttihd hd hdd<d d<<<tiddjpttid d jpttid djpttihd hd h<<tiddjpttid djptdS(Nsplains text/plainstextshtmls text/htmlsxhtmlsxmlstext/xmlsjsonsapplication/jsonsfoosglobalstg.format_mime_typessapplication/xhtml+xmlstext/bar(sutilsget_mime_type_for_formatsAssertionErrorsconfigsupdate(((s3build\bdist.win32\egg\turbogears\tests\test_util.pystest_get_mime_type_for_formats1cCstit pttid pttidpttidpttidpttidpttid pttid ptdS(Nsfoo/bars text/foobarsapplication/xmlsapplication/foo+xmlsapplication/javascriptsapplication/foobarsapplication/json(sutilsmime_type_has_charsetsNonesAssertionError(((s3build\bdist.win32\egg\turbogears\tests\test_util.pystest_mime_type_has_charsetscCstiddjpttiddjpttiddjpttiddjpttiddjpttidd jpttid d jptdS( Nii*f0.10000000000000001if 1234567.8f34.25if1234567.1229999999if123.12345670000001i(sutilsfind_precisionsAssertionError(((s3build\bdist.win32\egg\turbogears\tests\test_util.pystest_find_precisionsc CsjttfdtfdtfddftfddgtfhddtiddjpttiddjptdS(NsChip & ChapsChip & Chaps<"<©>">s<"<©>">(sutils fixentitiessAssertionError(((s3build\bdist.win32\egg\turbogears\tests\test_util.pystest_fixentitiess(ssyssStringIOs turbogearssconfigsutilstest_deprecatedstest_call_on_stackstest_remove_keyss test_has_argstest_arg_indexstest_parse_http_accept_headers&test_preferred_from_http_accept_headerstest_quote_cookiestest_unquote_cookies"test_get_template_encoding_defaultstest_get_mime_type_for_formatstest_mime_type_has_charsetstest_find_precisionstest_copy_if_mutablestest_fixentities(s test_has_argsutils"test_get_template_encoding_defaultstest_mime_type_has_charsetsStringIOstest_parse_http_accept_headerstest_remove_keysstest_quote_cookiessysstest_copy_if_mutablestest_call_on_stacks&test_preferred_from_http_accept_headerstest_get_mime_type_for_formatstest_unquote_cookiestest_find_precisionsconfigstest_fixentitiesstest_arg_indexstest_deprecated((s3build\bdist.win32\egg\turbogears\tests\test_util.pys?s"            PKK9hE E #turbogears/tests/test_validators.pyfrom turbogears import validators def test_booleanstrings(): """'False', 'false', 'True', 'true' should be proper boolean values""" b = validators.StringBoolean(if_empty=False) assert 'false' == b.from_python(False) assert 'true' == b.from_python(True) assert 'false' == b.from_python(0) assert 'true' == b.from_python(1) assert b.to_python("True") is True assert b.to_python("False") is False assert b.to_python("true") is True assert b.to_python("false") is False assert b.to_python("") is False assert b.to_python(None) is False try: b.to_python("foobar") assert False, "random strings should fail validation" except validators.Invalid: pass def test_datetimeconverter(): import datetime date = datetime.datetime(2005,11,22,18,22) dt = validators.DateTimeConverter() assert date == dt.to_python(date), "Accepts datetime OK" assert date == dt.to_python(dt.from_python(date)), "Good datetime passes validation" try: dt.to_python("foo") assert False, "random strings should fail validation" except validators.Invalid: pass def test_jsonvalidator(): v = validators.JSONValidator() origlist = ["Foo", "Bar", "Baz"] json = v.from_python(origlist) assert json == '["Foo", "Bar", "Baz"]' jsonlist = v.to_python(json) assert origlist == jsonlist def test_unicodestring_validator(): v = validators.UnicodeString() assert u'TurboGears' == v.to_python('TurboGears') assert 'TurboGears' == v.from_python('TurboGears') v = validators.UnicodeString(inputEncoding='cp1251') assert repr(v.to_python('\xf0\xf3\xeb\xe8\xf2')) == \ "u'\u0440\u0443\u043b\u0438\u0442'" assert v.from_python(u'\u0440\u0443\u043b\u0438\u0442') == \ '\xd1\x80\xd1\x83\xd0\xbb\xd0\xb8\xd1\x82' # in utf-8 encoding v = validators.UnicodeString() try: # feed cp1251 encoded data when utf8 is expected print repr(v.to_python('\xf0\xf3\xeb\xe8\xf2')) assert 0, 'malformed data not detected' except validators.Invalid: pass def test_number_validador(): assert validators.Number.to_python("45") == 45 # test for ticket #955 assert validators.Number.to_python(45) == 45 def test_empty_field_storage(): from cgi import FieldStorage empty_field_storage = FieldStorage() try: v = validators.FieldStorageUploadConverter( not_empty=True).to_python(empty_field_storage) except validators.Invalid: v = None assert v is None, 'mandatory filename not ensured' # test for ticket #1705 try: v = validators.FieldStorageUploadConverter( not_empty=False).to_python(empty_field_storage) except validators.Invalid: v = None assert v is empty_field_storage, 'optional filename not validated' PKA>N6^$turbogears/tests/test_validators.pyc; HIc@sGdklZdZdZdZdZdZdZdS((s validatorscCsstidt}d|itjptd|itjptd|idjptd|idjpt|idtjpt|idtjpt|idtjpt|idtjpt|idtjpt|ittjpty"|id tp td Wnti j onXd S( s@'False', 'false', 'True', 'true' should be proper boolean valuessif_emptysfalsestrueiisTruesFalsessfoobars%random strings should fail validationN( s validatorss StringBooleansFalsesbs from_pythonsAssertionErrorsTrues to_pythonsNonesInvalid(sb((s9build\bdist.win32\egg\turbogears\tests\test_validators.pystest_booleanstringss" cCsdk}|iddddd}ti}||i|jp td||i|i|jp tdy"|idtp tdWnti j onXdS( Nii iisAccepts datetime OKsGood datetime passes validationsfoos%random strings should fail validation( sdatetimesdates validatorssDateTimeConvertersdts to_pythonsAssertionErrors from_pythonsFalsesInvalid(sdatesdtsdatetime((s9build\bdist.win32\egg\turbogears\tests\test_validators.pystest_datetimeconverters   ) cCseti}dddg}|i|}|djpt|i|}||jptdS(NsFoosBarsBazs["Foo", "Bar", "Baz"]( s validatorss JSONValidatorsvsoriglists from_pythonsjsonsAssertionErrors to_pythonsjsonlist(soriglistsjsonsjsonlistsv((s9build\bdist.win32\egg\turbogears\tests\test_validators.pystest_jsonvalidator#s  cCsti}d|idjptd|idjpttidd}t|iddjpt|iddjptti}y)t|idGHd p td Wntij onXdS( Nu TurboGearss TurboGearss inputEncodingscp1251ss!u'\u0440\u0443\u043b\u0438\u0442'u рулитs рулитismalformed data not detected(s validatorss UnicodeStringsvs to_pythonsAssertionErrors from_pythonsreprsInvalid(sv((s9build\bdist.win32\egg\turbogears\tests\test_validators.pystest_unicodestring_validator+s # cCsDtiiddjpttiiddjptdS(Ns45i-(s validatorssNumbers to_pythonsAssertionError(((s9build\bdist.win32\egg\turbogears\tests\test_validators.pystest_number_validador<s cCsdkl}|}ytidti|}Wntij o t }nX|t jp t dytidt i|}Wntij o t }nX||jp t ddS(N(s FieldStorages not_emptysmandatory filename not ensuredsoptional filename not validated( scgis FieldStoragesempty_field_storages validatorssFieldStorageUploadConvertersTrues to_pythonsvsInvalidsNonesAssertionErrorsFalse(sempty_field_storages FieldStoragesv((s9build\bdist.win32\egg\turbogears\tests\test_validators.pystest_empty_field_storageAs    N(s turbogearss validatorsstest_booleanstringsstest_datetimeconverterstest_jsonvalidatorstest_unicodestring_validatorstest_number_validadorstest_empty_field_storage(stest_unicodestring_validatorstest_datetimeconverterstest_number_validadorstest_jsonvalidatorstest_booleanstringss validatorsstest_empty_field_storage((s9build\bdist.win32\egg\turbogears\tests\test_validators.pys?s     PKK9""turbogears/tests/test_view.py# -*- coding: utf-8 -*- from turbogears import view, config import unittest class TestView(unittest.TestCase): def setUp(self): if not view.engines: view.load_engines() def test_cycle(self): oe = view.base.cycle(('odd','even')) assert str(oe) == str(None) assert oe.next() == 'odd' assert str(oe) == 'odd' assert oe.next() == 'even' assert oe.value == 'even' assert oe.next() == 'odd' assert oe.value == 'odd' def test_selector(self): assert view.base.selector(False) is None assert view.base.selector(True) == 'selected' def test_checker(self): assert view.base.checker(False) is None assert view.base.checker(True) == 'checked' def test_ipeek(self): seq = xrange(3, 6) assert view.base.ipeek(seq) assert list(seq) == range(3, 6) seq = xrange(3, 3) assert not view.base.ipeek(seq) assert list(seq) == [] def test_UnicodeValueAppearingInATemplateIsFine(self): ustr = u"micro-eXtreme Programming ( µ XP): Embedding XP Within Standard Projects" info = dict(someval=ustr) val = view.render(info, template="turbogears.tests.simple") self.failUnless(u"Paging all " + ustr in val.decode("utf-8")) def test_templateRetrievalByPath(self): config.update({'server.environment' : 'development'}) from turbokid import kidsupport ks = kidsupport.KidSupport() cls = ks.load_template("turbogears.tests.simple") assert cls is not None t = cls() t.someval = "hello" filled = str(t) assert "groovy" in filled assert "html" in filled # the following import should not fail, if everything is working correctly: import turbogears.tests.simple def test_default_output_encoding(self): info = dict(someval="someval") template = "turbogears.tests.simple" headers = {} # default encoding is utf-8 val = view.render(info, template, headers=headers) assert headers.get('Content-Type') == 'text/html; charset=utf-8' # encoding can be changed and will be added to existing content type try: config.update({'kid.encoding': 'iso-8859-1'}) headers['Content-Type'] = 'text/html' view.render(info, template, headers=headers) assert headers.get('Content-Type') == 'text/html; charset=iso-8859-1' finally: config.update({'kid.encoding': 'utf-8'}) def test_content_types(self): info = dict(someval="someval") template = "turbogears.tests.simple" headers = {} view.render(info, template, headers=headers) assert headers.get('Content-Type') == 'text/html; charset=utf-8' headers = {} view.render(info, template, headers=headers, format='html') assert headers.get('Content-Type') == 'text/html; charset=utf-8' headers = {} view.render(info, template, headers=headers, format='html-strict') assert headers.get('Content-Type') == 'text/html; charset=utf-8' headers = {} view.render(info, template, headers=headers, format='xhtml') assert headers.get('Content-Type') == 'text/html; charset=utf-8' headers = {} view.render(info, template, headers=headers, format='xhtml-strict') assert headers.get('Content-Type') == 'text/html; charset=utf-8' headers = {} view.render(info, template, headers=headers, format='xml') assert headers.get('Content-Type') == 'text/xml; charset=utf-8' headers = {} view.render(info, template, headers=headers, format='json') assert headers.get('Content-Type') == 'application/json' config.update({'global': {'tg.format_mime_types': {'xhtml': 'application/xhtml+xml'}}}) headers = {} view.render(info, template, headers=headers, format='xhtml') assert headers.get('Content-Type') == 'application/xhtml+xml; charset=utf-8' headers = {} view.render(info, template, headers=headers, format='xhtml-strict') assert headers.get('Content-Type') == 'application/xhtml+xml; charset=utf-8' config.update({'global': {'tg.format_mime_types': {}}}) def test_plain_format(self): info = dict(someval="dumbos") template = "turbogears.tests.simple" headers = {} plain = view.render(info, template, headers=headers, format='plain') assert headers.get('Content-Type') == 'text/plain; charset=utf-8' assert plain.strip() == ('This is the groovy test template.' ' Paging all dumbos.') headers = {} text = view.render(info, template, headers=headers, format='text') assert headers.get('Content-Type') == 'text/plain; charset=utf-8' assert text == plain try: view.render(info, template, headers=headers, format='dumbo') except KeyError: pass else: assert False, "'dumbo' should not be accepted as format" PKA>D ^^turbogears/tests/test_view.pyc; HIc@s9dklZlZdkZdeifdYZdS((sviewsconfigNsTestViewcBsbtZdZdZdZdZdZdZdZdZ d Z d Z RS( NcCsti otindS(N(sviewsenginess load_engines(sself((s3build\bdist.win32\egg\turbogears\tests\test_view.pyssetUp s cCstiiddf}t|ttjpt|idjptt|djpt|idjpt|idjpt|idjpt|idjptdS(Nsoddseven( sviewsbasescyclesoesstrsNonesAssertionErrorsnextsvalue(sselfsoe((s3build\bdist.win32\egg\turbogears\tests\test_view.pys test_cycle s cCsDtiittjpttiitdjptdS(Nsselected(sviewsbasesselectorsFalsesNonesAssertionErrorsTrue(sself((s3build\bdist.win32\egg\turbogears\tests\test_view.pys test_selectors cCsDtiittjpttiitdjptdS(Nschecked(sviewsbasescheckersFalsesNonesAssertionErrorsTrue(sself((s3build\bdist.win32\egg\turbogears\tests\test_view.pys test_checkers cCstdd}tii|ptt|tddjpttdd}tii| ptt|gjptdS(Nii(sxrangesseqsviewsbasesipeeksAssertionErrorslistsrange(sselfsseq((s3build\bdist.win32\egg\turbogears\tests\test_view.pys test_ipeeks #cCsNd}td|}ti|dd}|id||idjdS(NuImicro-eXtreme Programming ( µ XP): Embedding XP Within Standard Projectsssomevalstemplatesturbogears.tests.simpleu Paging all sutf-8( sustrsdictsinfosviewsrendersvalsselfs failUnlesssdecode(sselfsinfosustrsval((s3build\bdist.win32\egg\turbogears\tests\test_view.pys+test_UnicodeValueAppearingInATemplateIsFine'scCstihdd<dkl}|i}|id}|tj pt |}d|_ t |}d|jpt d|jpt dk}dS(Nsserver.environments development(s kidsupportsturbogears.tests.simpleshellosgroovyshtml(sconfigsupdatesturbokids kidsupports KidSupportskss load_templatesclssNonesAssertionErrorstssomevalsstrsfilledsturbogears.tests.simples turbogears(sselfs kidsupports turbogearssksstsfilledscls((s3build\bdist.win32\egg\turbogears\tests\test_view.pystest_templateRetrievalByPath-s     cCstdd}d}h}ti||d|}|iddjptzWt i hdd<d|d(cCstdd}d}h}ti||d|dd}|iddjpt|i d jpth}ti||d|dd }|iddjpt||jpty ti||d|dd Wnt j onXt p td dS( Nssomevalsdumbossturbogears.tests.simplesheaderssformatsplains Content-Typestext/plain; charset=utf-8s4This is the groovy test template. Paging all dumbos.stextsdumbos('dumbo' should not be accepted as format( sdictsinfostemplatesheaderssviewsrendersplainsgetsAssertionErrorsstripstextsKeyErrorsFalse(sselfsinfosplainsheadersstemplatestext((s3build\bdist.win32\egg\turbogears\tests\test_view.pystest_plain_formatms ( s__name__s __module__ssetUps test_cycles test_selectors test_checkers test_ipeeks+test_UnicodeValueAppearingInATemplateIsFinestest_templateRetrievalByPathstest_default_output_encodingstest_content_typesstest_plain_format(((s3build\bdist.win32\egg\turbogears\tests\test_view.pysTestViews        "(s turbogearssviewsconfigsunittestsTestCasesTestView(sunittestsTestViewsconfigsview((s3build\bdist.win32\egg\turbogears\tests\test_view.pys?s PKK9΍""turbogears/tests/textfmt.tmplThis is a plain text for $someval.PKK9֟turbogears/tests/util.pyfrom turbogears.testutil import * from warnings import warn warn("turbogears.tests.util has been replaced by turbogears.testutil", DeprecationWarning, 2) PKA>'WWturbogears/tests/util.pyc; HIc@s(dkTdklZededdS((s*(swarns>turbogears.tests.util has been replaced by turbogears.testutiliN(sturbogears.testutilswarningsswarnsDeprecationWarning(swarn((s.build\bdist.win32\egg\turbogears\tests\util.pys?s PKK9turbogears/tests/__init__.pyPKA>9΂turbogears/tests/__init__.pyc; HIc@sdS(N((((s2build\bdist.win32\egg\turbogears\tests\__init__.pys?sPKK9mJx)turbogears/tests/catwalk_models/browse.pyfrom sqlobject import * __connection__ = connectionForURI("sqlite:///:memory:") hub = __connection__ class Genre(SQLObject): name = StringCol() artists = RelatedJoin('Artist') class Artist(SQLObject): name = StringCol() genres = RelatedJoin('Genre') albums = MultipleJoin('Album') plays_instruments = RelatedJoin('Instrument', addRemoveName='anInstrument', joinColumn='artist_id', otherColumn='plays_instrument_id', intermediateTable='artist_plays_instrument') class Album(SQLObject): name = StringCol() artist = ForeignKey('Artist') songs = MultipleJoin('Song') class Instrument(SQLObject): name = StringCol() played_by = RelatedJoin( 'Artist', joinColumn='artist_id', otherColumn='plays_instrument_id', intermediateTable='artist_plays_instrument') class Song(SQLObject): name = StringCol() album = ForeignKey('Album') Genre.createTable(ifNotExists=True) Artist.createTable(ifNotExists=True) Album.createTable(ifNotExists=True) Song.createTable(ifNotExists=True) Instrument.createTable(ifNotExists=True) PKA>Sļ *turbogears/tests/catwalk_models/browse.pyc; HIc@sdkTedZeZdefdYZdefdYZdefdYZdefd YZd efd YZ ei d e ei d e ei d e e i d e ei d e d S((s*ssqlite:///:memory:sGenrecBstZeZedZRS(NsArtist(s__name__s __module__s StringColsnames RelatedJoinsartists(((s?build\bdist.win32\egg\turbogears\tests\catwalk_models\browse.pysGenres sArtistc BsMtZeZedZedZeddddddd d d ZRS( NsGenresAlbums Instruments addRemoveNames anInstruments joinColumns artist_ids otherColumnsplays_instrument_idsintermediateTablesartist_plays_instrument( s__name__s __module__s StringColsnames RelatedJoinsgenress MultipleJoinsalbumssplays_instruments(((s?build\bdist.win32\egg\turbogears\tests\catwalk_models\browse.pysArtist s    sAlbumcBs)tZeZedZedZRS(NsArtistsSong(s__name__s __module__s StringColsnames ForeignKeysartists MultipleJoinssongs(((s?build\bdist.win32\egg\turbogears\tests\catwalk_models\browse.pysAlbums  s InstrumentcBs/tZeZedddddddZRS(NsArtists joinColumns artist_ids otherColumnsplays_instrument_idsintermediateTablesartist_plays_instrument(s__name__s __module__s StringColsnames RelatedJoins played_by(((s?build\bdist.win32\egg\turbogears\tests\catwalk_models\browse.pys Instruments  sSongcBstZeZedZRS(NsAlbum(s__name__s __module__s StringColsnames ForeignKeysalbum(((s?build\bdist.win32\egg\turbogears\tests\catwalk_models\browse.pysSongs s ifNotExistsN( s sqlobjectsconnectionForURIs__connection__shubs SQLObjectsGenresArtistsAlbums InstrumentsSongs createTablesTrue(sAlbumshubsArtistsSongs Instruments__connection__sGenre((s?build\bdist.win32\egg\turbogears\tests\catwalk_models\browse.pys?s  PKK90Ĉ-turbogears/tests/catwalk_models/model_list.pyfrom sqlobject import SQLObject, StringCol, IntCol, connectionForURI __connection__ = connectionForURI("sqlite:///:memory:") hub = __connection__ class FirstClass(SQLObject): name = StringCol(title="This is a title",length=200,default="new name") class SecondClass(SQLObject): name = StringCol() class ThirdClass(SQLObject): name = StringCol() FirstClass.createTable(ifNotExists=True) SecondClass.createTable(ifNotExists=True) ThirdClass.createTable(ifNotExists=True) PKA>5]z,.turbogears/tests/catwalk_models/model_list.pyc; HIc@sdklZlZlZlZedZeZdefdYZdefdYZdefdYZ ei de ei de e i de d S( (s SQLObjects StringColsIntColsconnectionForURIssqlite:///:memory:s FirstClasscBs#tZeddddddZRS(NstitlesThis is a titleslengthisdefaultsnew name(s__name__s __module__s StringColsname(((sCbuild\bdist.win32\egg\turbogears\tests\catwalk_models\model_list.pys FirstClassss SecondClasscBstZeZRS(N(s__name__s __module__s StringColsname(((sCbuild\bdist.win32\egg\turbogears\tests\catwalk_models\model_list.pys SecondClass ss ThirdClasscBstZeZRS(N(s__name__s __module__s StringColsname(((sCbuild\bdist.win32\egg\turbogears\tests\catwalk_models\model_list.pys ThirdClass ss ifNotExistsN( s sqlobjects SQLObjects StringColsIntColsconnectionForURIs__connection__shubs FirstClasss SecondClasss ThirdClasss createTablesTrue( s SQLObjects FirstClasssconnectionForURIshubsIntCols__connection__s SecondClasss ThirdClasss StringCol((sCbuild\bdist.win32\egg\turbogears\tests\catwalk_models\model_list.pys?s PKK9Ч2turbogears/tests/catwalk_models/model_structure.pyfrom sqlobject import SQLObject, StringCol, IntCol, connectionForURI __connection__ = connectionForURI("sqlite:///:memory:") hub = __connection__ class StringTest(SQLObject): name = StringCol(title="This is a title",length=200,default="new name") StringTest.createTable(ifNotExists=True) class NumTest(SQLObject): an_integer = IntCol(title="This is an integer",default=123) NumTest.createTable(ifNotExists=True) PKA>$ 3turbogears/tests/catwalk_models/model_structure.pyc; HIc@sdklZlZlZlZedZeZdefdYZeide defdYZ e ide dS((s SQLObjects StringColsIntColsconnectionForURIssqlite:///:memory:s StringTestcBs#tZeddddddZRS(NstitlesThis is a titleslengthisdefaultsnew name(s__name__s __module__s StringColsname(((sHbuild\bdist.win32\egg\turbogears\tests\catwalk_models\model_structure.pys StringTestss ifNotExistssNumTestcBstZeddddZRS(NstitlesThis is an integersdefaulti{(s__name__s __module__sIntCols an_integer(((sHbuild\bdist.win32\egg\turbogears\tests\catwalk_models\model_structure.pysNumTest sN( s sqlobjects SQLObjects StringColsIntColsconnectionForURIs__connection__shubs StringTests createTablesTruesNumTest(s SQLObjectsconnectionForURIshubs StringTestsNumTestsIntCols__connection__s StringCol((sHbuild\bdist.win32\egg\turbogears\tests\catwalk_models\model_structure.pys?s  PKK9oڦ.turbogears/tests/catwalk_models/single_join.pyfrom sqlobject import * __connection__ = connectionForURI("sqlite:///:memory:") hub = __connection__ class Client(SQLObject): name = StringCol() physical_address=SingleJoin('Address') #shipping_address=SingleJoin('Address') class Address(SQLObject): client=ForeignKey('Client',default=None) street=StringCol() Client.createTable(ifNotExists=True) Address.createTable(ifNotExists=True) PKA>DV11/turbogears/tests/catwalk_models/single_join.pyc; HIc@sidkTedZeZdefdYZdefdYZeideeidedS((s*ssqlite:///:memory:sClientcBstZeZedZRS(NsAddress(s__name__s __module__s StringColsnames SingleJoinsphysical_address(((sDbuild\bdist.win32\egg\turbogears\tests\catwalk_models\single_join.pysClients sAddresscBs#tZeddeZeZRS(NsClientsdefault(s__name__s __module__s ForeignKeysNonesclients StringColsstreet(((sDbuild\bdist.win32\egg\turbogears\tests\catwalk_models\single_join.pysAddress ss ifNotExistsN( s sqlobjectsconnectionForURIs__connection__shubs SQLObjectsClientsAddresss createTablesTrue(shubsClients__connection__sAddress((sDbuild\bdist.win32\egg\turbogears\tests\catwalk_models\single_join.pys?s  PKK9+turbogears/tests/catwalk_models/__init__.pyPKA>I M,turbogears/tests/catwalk_models/__init__.pyc; HIc@sdS(N((((sAbuild\bdist.win32\egg\turbogears\tests\catwalk_models\__init__.pys?sPKK9 8;turbogears/tests/catwalk_models/catwalk-session/session.pkl}q(U model_orderq]q(U SecondClassqU FirstClassqU ThirdClassqeUcolumnsq}q(UAddressq Ustreetq UArtistq Unameq uUorderq }qUAlbumq]q(UartistIDqUidqUsongsqUnameqesUhidden_columnsq}qUAlbumq]q(UidqUsongsqesu.PKK9wَyy2turbogears/tests/locale/en/LC_MESSAGES/messages.mo$,K-Project-Id-Version: PACKAGE VERSION POT-Creation-Date: Thu Oct 07 15:40:37 2004 PO-Revision-Date: 2005-11-10 09:23+0200 Last-Translator: Dan Jacob Language-Team: LANGUAGE MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit Generated-By: pygettext.py 1.5 PKK9& ,MM2turbogears/tests/locale/en/LC_MESSAGES/messages.po# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR ORGANIZATION # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: Thu Oct 07 15:40:37 2004\n" "PO-Revision-Date: 2005-11-10 09:23+0200\n" "Last-Translator: Dan Jacob \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=iso-8859-1\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: pygettext.py 1.5\n" msgid "Welcome" msgstr "" msgid "You have %i apple" msgstr "" msgid "You have %i apples" msgstr "" PKK9?PP2turbogears/tests/locale/fi/LC_MESSAGES/messages.mo*l "(,07;DHPT] akovz K%.29?HNW Zdjsy       ';%d/%m/%YAprAprilAugAugustDecDecemberFebFebruaryFriFridayJanJanuaryJulJulyJunJuneMarMarchMayMonMondayNovNovemberOctOctoberSatSaturdaySepSeptemberSunSundayThuThursdayTueTuesdayWedWednesdayWelcomeYou have %i appleYou have %i applesProject-Id-Version: PACKAGE VERSION POT-Creation-Date: Thu Oct 07 15:40:37 2004 PO-Revision-Date: 2005-11-10 09:23+0200 Last-Translator: Dan Jacob Language-Team: LANGUAGE MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit Generated-By: pygettext.py 1.5 %d.%m.%YhuhtihuhtikuueloelokuujoulujoulukuuhelmihelmikuupeperjantaitammitammikuuheinheinkuukeskeskuumaalismaaliskuutoukomamaanantaimarrasmarraskuulokalokakuulalauantaisyyssyyskuususunnuntaitotorstaititiistaikekeskiviikkoTervetuloaSinulla on %i omenaSinulla on %i omenaaPKK9m~~2turbogears/tests/locale/fi/LC_MESSAGES/messages.po# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR ORGANIZATION # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: Thu Oct 07 15:40:37 2004\n" "PO-Revision-Date: 2005-11-10 09:23+0200\n" "Last-Translator: Dan Jacob \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=iso-8859-1\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: pygettext.py 1.5\n" msgid "Welcome" msgstr "Tervetuloa" msgid "You have %i apple" msgstr "Sinulla on %i omena" msgid "You have %i apples" msgstr "Sinulla on %i omenaa" PKK9;VGEEturbogears/toolbox/base.py"""Graphical user interface for managing TurboGears projects""" import pkg_resources import cherrypy import turbogears from turbogears.util import get_project_name, setlike from turbogears import controllers, expose class Info(controllers.Controller): """TurboGears System Information. Lists your TurboGears packages and version information. """ __label__ = "System Info" __version__ = "0.1" __author__ = "Ronald Jaramillo" __email__ = "ronald@checkandshare.com" __copyright__ = "Copyright 2005 Ronald Jaramillo" __license__ = "MIT" icon = "/tg_static/images/info.png" [expose(template='turbogears.toolbox.info')] def index(self): from turbogears.command.info import retrieve_info packages, plugins = retrieve_info() return dict(packages=packages, plugins=plugins) class WidgetBrowser(controllers.Controller): """The widget browser. Browse usage samples, description and source code for the available TurboGears Widgets. """ __label__ = "Widget Browser" __version__ = "0.1" __author__ = "Kevin Dangoor" __email__ = "dangoor+turbogears@gmail.com" __copyright__ = "Copyright 2005 Kevin Dangoor" __license__ = "MIT" all_descs = None icon = "/tg_static/images/widgets.png" [expose(template="turbogears.toolbox.widgets")] def index(self, name=None): from turbogears import widgets from turbogears.widgets import js_location, Tabber, SyntaxHighlighter all_descs = self.all_descs if not all_descs: widgets.load_widgets() all_descs = dict() for widgetdesc in widgets.all_widgets: wd = widgetdesc() all_descs[wd.full_class_name.replace('.', '_')] = wd self.all_descs = all_descs if name: all_descs = {name: all_descs[name]} desclist = all_descs.values() desclist.sort(cmp=lambda x, y: cmp(x.name.lower(), y.name.lower())) output = dict(descs=desclist, viewing_one=name != None) if name: # do not extend desclist! desclist = desclist + [Tabber(), SyntaxHighlighter()] css = setlike() js = dict() for location in js_location: js[location] = setlike() for widgetdesc in desclist: if not name and widgetdesc.show_separately: continue css.add_all(widgetdesc.retrieve_css()) for script in widgetdesc.retrieve_javascript(): js[getattr(script, 'location', js_location.head)].add(script) output['widget_css'] = css for location in js: output['widget_js_%s' % str(location)] = js[location] return output def __getattr__(self, widgetname): try: return self.all_descs[widgetname] except: raise AttributeError(widgetname) class Toolbox(controllers.RootController): def __init__(self): self.toolbox = self.get_tools() def tool_icon(self, tool): icon = getattr(tool, 'icon', '') if icon: return icon def get_tools(self): project_name = get_project_name() toolbox = [] for i in pkg_resources.iter_entry_points("turbogears.toolboxcommand"): tool = i.load() args = { 'path': i.name, 'label': getattr(tool, '__label__', i.name), 'description': getattr(tool, '__doc__', ''), 'version': getattr(tool, '__version__', ''), 'author': getattr(tool, '__author__', ''), 'email': getattr(tool, '__email__', ''), 'copyright': getattr(tool, '__copyright__', ''), 'license': getattr(tool, '__license__', ''), 'icon': self.tool_icon(tool), 'disabled': False} if project_name or not getattr(tool, 'need_project', False): try: setattr(self, i.name, tool()) except Exception, e: args["description"] = str(e) or 'Tool could not be loaded.' args["disabled"] = 'disabled' else: args["description"] += '\nNeeds project.' args["disabled"] = 'disabled' toolbox.append(args) return toolbox def arrange_in_pairs(self, tools): p = [[], []] for idx, tool in enumerate(tools): p[idx%2].append(tool) pairs = zip(p[0], p[1]) if len(p[0]) > len(p[1]): pairs.append([p[0][-1], None]) if len(p[0]) < len(p[1]): pairs.append([p[1][-1], None]) return pairs [expose(template="turbogears.toolbox.main")] def index(self): return dict(toolbox = self.arrange_in_pairs(self.toolbox), project = get_project_name()) [expose()] def noaccess(self): return """

No access for %s

By default only localhost (127.0.0.1) has access to the Toolbox

You can provide access to your client by passing your host address to Toolbox as a parameter. Ex:

                tg-admin toolbox -c %s
            
""" % (cherrypy.request.remoteAddr,cherrypy.request.remoteAddr) PKA> turbogears/toolbox/base.pyc; ѸHIc@sdZdkZdkZdkZdklZlZdklZlZdei fdYZ dei fdYZ dei fd YZ dS( s9Graphical user interface for managing TurboGears projectsN(sget_project_namessetlike(s controllerssexposesInfocBsQtZdZdZdZdZdZdZdZdZ e dd gd Z RS( saTurboGears System Information. Lists your TurboGears packages and version information. s System Infos0.1sRonald Jaramillosronald@checkandshare.comsCopyright 2005 Ronald JaramillosMITs/tg_static/images/info.pngstemplatesturbogears.toolbox.infocCs3dkl}|\}}td|d|SdS(N(s retrieve_infospackagessplugins(sturbogears.command.infos retrieve_infospackagesspluginssdict(sselfspackagess retrieve_infosplugins((s0build\bdist.win32\egg\turbogears\toolbox\base.pysindexs ( s__name__s __module__s__doc__s __label__s __version__s __author__s __email__s __copyright__s __license__siconsexposesindex(((s0build\bdist.win32\egg\turbogears\toolbox\base.pysInfo s s WidgetBrowsercBsctZdZdZdZdZdZdZdZe Z dZ e dd ge d Z d ZRS( szThe widget browser. Browse usage samples, description and source code for the available TurboGears Widgets. sWidget Browsers0.1s Kevin Dangoorsdangoor+turbogears@gmail.comsCopyright 2005 Kevin DangoorsMITs/tg_static/images/widgets.pngstemplatesturbogears.toolbox.widgetscCsdkl} dkl}l}l}|i} | oV| it } x3| i D](}|}|| |i iddBssdescss viewing_oneslocations widget_csss widget_js_%s("s turbogearsswidgetssturbogears.widgetss js_locationsTabbersSyntaxHighlightersselfs all_descss load_widgetssdicts all_widgetss widgetdescswdsfull_class_namesreplacesnamesvaluessdesclistssortsNonesoutputssetlikescsssjsslocationsshow_separatelysadd_alls retrieve_csssretrieve_javascriptsscriptsgetattrsheadsaddsstr(sselfsnamesTabberswdsdesclistsscripts js_locationsSyntaxHighlighterslocationswidgetssoutputsjss all_descsscsss widgetdesc((s0build\bdist.win32\egg\turbogears\toolbox\base.pysindex4sH           ( cCs)y|i|SWnt|nXdS(N(sselfs all_descss widgetnamesAttributeError(sselfs widgetname((s0build\bdist.win32\egg\turbogears\toolbox\base.pys __getattr__Zs(s__name__s __module__s__doc__s __label__s __version__s __author__s __email__s __copyright__s __license__sNones all_descssiconsexposesindexs __getattr__(((s0build\bdist.win32\egg\turbogears\toolbox\base.pys WidgetBrowser!s  &sToolboxcBsXtZdZdZdZdZeddgdZegdZRS( NcCs|i|_dS(N(sselfs get_toolsstoolbox(sself((s0build\bdist.win32\egg\turbogears\toolbox\base.pys__init__cscCs%t|dd}|o|SndS(Nsicons(sgetattrstoolsicon(sselfstoolsicon((s0build\bdist.win32\egg\turbogears\toolbox\base.pys tool_iconfscCst}g}xtidD]n}|i}hd|i<dt |d|i<dt |dd<dt |d d<d t |d d<d t |d d<dt |dd<dt |dd<d|i |<dt <}|pt |dt  oWyt||i|Wqtj o*}t|pd|dNo access for %s

By default only localhost (127.0.0.1) has access to the Toolbox

You can provide access to your client by passing your host address to Toolbox as a parameter. Ex:

                tg-admin toolbox -c %s
            
(scherrypysrequests remoteAddr(sself((s0build\bdist.win32\egg\turbogears\toolbox\base.pysnoaccesss( s__name__s __module__s__init__s tool_icons get_toolssarrange_in_pairssexposesindexsnoaccess(((s0build\bdist.win32\egg\turbogears\toolbox\base.pysToolboxas      (s__doc__s pkg_resourcesscherrypys turbogearssturbogears.utilsget_project_namessetlikes controllerssexposes ControllersInfos WidgetBrowsersRootControllersToolbox( sInfos turbogearsssetlikesexposesget_project_names pkg_resourcess controllerss WidgetBrowserscherrypysToolbox((s0build\bdist.win32\egg\turbogears\toolbox\base.pys?s   @PKK9p:turbogears/toolbox/console.kid Interpreter

Toolbox » WebConsole

>>>

Multiline (code-block) Input:


PKK9#q@@turbogears/toolbox/info.kid TurboGears Toolbox

Toolbox » Info

TurboGears Version Info

  • ${package}

Installed Plugins

${name}

  • ${plugin}
PKK9*LLturbogears/toolbox/main.kid TurboGears Toolbox

Toolbox

Welcome to the TurboGears ToolBox

A collection of web based tools for TurboGears applications.

Note: Some functions are not available as the toolbox was not started in a valid TurboGears project directory.

${tool['label']}

${tool['description']}
PKK9ILssturbogears/toolbox/master.kid Your title goes here ${css.display()} ${js.display()}
${js.display()}
${js.display()}
PKK9;  turbogears/toolbox/shell.pyimport turbogears from turbogears import controllers, expose import sys import StringIO from code import InteractiveConsole class WebConsole(controllers.RootController): """Web based Python interpreter""" __label__ = 'WebConsole' icon = "/tg_static/images/shell.png" def __init__(self, width=80): self.console = None try: sys.ps1 except AttributeError: sys.ps1 = '>>> ' try: sys.ps2 except AttributeError: sys.ps2 = '... ' def process_request(self, line): more, output = self._process_request(line) return dict(more=more, output=output) process_request = expose()(process_request) def process_multiline_request(self, block): outlines = [] lines = [line for line in block.split('\n')] for line in lines: more, output = self._process_request(line) if output[-1] == '\n': # we'll handle the newlines later. output = output[:-1] outlines.append(output) return dict(more=more, output='\n'.join(outlines)) process_multiline_request = expose()(process_multiline_request) def _process_request(self, line): if len(self.console.buffer): prompt = sys.ps2 else: prompt = sys.ps1 myout = StringIO.StringIO() output = "%s%s" % (prompt, line) # hopefully python doesn't interrupt in this block lest we'll get some curious output. try: sys.stdout = myout sys.stderr = myout more = self.console.push(line) finally: sys.stdout = sys.__stdout__ sys.stderr = sys.__stderr__ stdout = myout.getvalue() if stdout: output = '%s\n%s' % (output, stdout) return more, output.rstrip() def new_console(self): locs = dict(__name__='tg-admin', __doc__=None, reload_console=self.new_console) mod = turbogears.util.get_model() if mod: locs.update(mod.__dict__) self.console = InteractiveConsole(locals=locs) def index(self): if not self.console: self.new_console() return dict() index = expose(template="turbogears.toolbox.console")(index) PKA>lu2turbogears/toolbox/shell.pyc; ѸHIc@sXdkZdklZlZdkZdkZdklZdeifdYZdS(N(s controllerssexpose(sInteractiveConsoles WebConsolecBstZdZdZdZddZdZeeZdZeeZdZ dZ d Z ed d e Z RS( sWeb based Python interpreters WebConsoles/tg_static/images/shell.pngiPcCsat|_y tiWntj odt_nXy tiWntj odt_nXdS(Ns>>> s... (sNonesselfsconsolessyssps1sAttributeErrorsps2(sselfswidth((s1build\bdist.win32\egg\turbogears\toolbox\shell.pys__init__s   cCs,|i|\}}td|d|SdS(Nsmoresoutput(sselfs_process_requestslinesmoresoutputsdict(sselfslinesoutputsmore((s1build\bdist.win32\egg\turbogears\toolbox\shell.pysprocess_requestscCsg}gi}|idD]}||q~}xO|D]G}|i|\}}|ddjo|d }n|i|q=Wt d|ddi |SdS(Ns ismoresoutput( soutlinessappends_[1]sblockssplitslineslinessselfs_process_requestsmoresoutputsdictsjoin(sselfsblocksliness_[1]soutputslinesoutlinessmore((s1build\bdist.win32\egg\turbogears\toolbox\shell.pysprocess_multiline_request s0cCst|iio ti}n ti}ti}d||f}z(|t_ |t_ |ii|}Wdtit_ tit_ X|i}|od||f}n||ifSdS(Ns%s%ss%s %s(slensselfsconsolesbufferssyssps2spromptsps1sStringIOsmyoutslinesoutputsstdoutsstderrspushsmores __stdout__s __stderr__sgetvaluesrstrip(sselfslinespromptsstdoutsmyoutsoutputsmore((s1build\bdist.win32\egg\turbogears\toolbox\shell.pys_process_request0s         cCs^tdddtd|i}tii}|o|i |i nt d||_ dS(Ns__name__stg-admins__doc__sreload_consoleslocals( sdictsNonesselfs new_consoleslocss turbogearssutils get_modelsmodsupdates__dict__sInteractiveConsolesconsole(sselfslocssmod((s1build\bdist.win32\egg\turbogears\toolbox\shell.pys new_consoleIs cCs$|i o|intSdS(N(sselfsconsoles new_consolesdict(sself((s1build\bdist.win32\egg\turbogears\toolbox\shell.pysindexQs stemplatesturbogears.toolbox.console( s__name__s __module__s__doc__s __label__sicons__init__sprocess_requestsexposesprocess_multiline_requests_process_requests new_consolesindex(((s1build\bdist.win32\egg\turbogears\toolbox\shell.pys WebConsoles      ( s turbogearss controllerssexposessyssStringIOscodesInteractiveConsolesRootControllers WebConsole(ssyss turbogearssStringIOsexposes WebConsoles controllerssInteractiveConsole((s1build\bdist.win32\egg\turbogears\toolbox\shell.pys?s    PKK929oGturbogears/toolbox/widgets.kid TurboGears Widget Browser

Toolbox » Widget Browser » ${descs[0].name}

Description

                

Source Code

PKK9d *@@:turbogears/toolbox/designer/static/diagram/images/back.gifGIF89a !, ˬ\rVxtP;PKK9ǡ  <turbogears/toolbox/designer/static/diagram/images/shadow.pngPNG  IHDR n pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_F2IDATxbd``f 000|%VGb!V3HXQ}0iIENDB`PKK9?lґ Cturbogears/toolbox/designer/static/diagram/images/shadow_bottom.pngPNG  IHDR?}} pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_FIDATxڱ 0@ћDEm7~hF >$IJa}6<Hށo{pK/^4I|^ py$Iʡj8!*^$I]e]`n&I-IRN?g+nIENDB`PKK9XM M Cturbogears/toolbox/designer/static/diagram/images/shadow_corner.pngPNG  IHDR pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_FhIDATx\ @ b_ܓAni 0f23&<3g/T8a Yq2&,W`r1v[ڀO8}IENDB`PKK9lS Bturbogears/toolbox/designer/static/diagram/images/shadow_right.pngPNG  IHDR$b pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_FIDATx1NQ Eћd" bKAPA# 6cuU:Z}N_;Trwĥ>WkR=zքKuePn"YWp,Oղ^78e{!%Џ YIENDB`PKK9g5turbogears/toolbox/designer/static/diagram/js/ajax.js/* ajax_command(method, target, data_func, return_func); ajax_manage(id, event, method, target, data_func, return_func); */ var GET = 1; var POST = 2; function ajax_command(method, target, data_func, return_func) { var xmlhttp = new XMLHTTP(); var data = null; /* default - no data */ var callback_response = function() { if (xmlhttp.getReadyState() == 4) { if (xmlhttp.getStatus() == 200) { return_func(xmlhttp.getResponseText()); } else { xmlhttp.error("problem retrieving data"); } } /* response complete */ } /* callback_response */ xmlhttp.setResponse(callback_response); data = data_func(); /* request them from some user-specified routine */ switch (method) { case GET: var newtarget = (/\?/.test(target) ? target+"&"+data : target+"?"+data); xmlhttp.open("GET",newtarget,true); break; case POST: xmlhttp.open("POST",target,true); xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); break; } /* method */ xmlhttp.send(data); /* off we go */ } function ajax_manage(id, event, method, target, data_func, return_func) { var element = document.getElementById(id); if (!element) { alert("Element '"+id+"' not found"); return; } if (method == POST && !XMLHTTP_supported()) { alert("IFRAME mode active -> POSTs not allowed"); return; } var callback_request = function() { ajax_command(method,target,data_func,return_func); } /* callback_request */ universalAttacher(element,event,callback_request); } function XMLHTTP_error(text) { alert('XMLHTTP error: "'+text+'", sorry...'); } function XMLHTTP_open(method, target, async) { if (this.iframe) { this.temp_src = target; } else { this.obj.open(method, target, async); } } function XMLHTTP_send(data) { if (this.iframe) { this.ifr.src = this.temp_src; } else { this.obj.send(data); } } function XMLHTTP_setResponse(callback) { if (this.iframe) { universalAttacher(this.ifr,"load",callback); } else { this.obj.onreadystatechange = callback; } } function XMLHTTP_getResponseText() { if (this.iframe) { var data = this.ifr.contentWindow.document.body.innerHTML; /* uncomment this to save memory and confuse gecko: */ /* this.ifr.parentNode.removeChild(this.ifr); */ return data; } else { return this.obj.responseText; } } function XMLHTTP_getResponseXML() { if (this.iframe) { this.error("IFRAME mode active -> XML data not supported"); return ""; } else { return this.obj.responseXML; } } function XMLHTTP_getReadyState() { if (this.iframe) { return 4; } else { return this.obj.readyState; } } function XMLHTTP_getStatus() { if (this.iframe) { return 200; } else { return this.obj.status; } } function XMLHTTP_setRequestHeader(name,value) { if (!this.iframe) { this.obj.setRequestHeader(name,value); } } function XMLHTTP_isIframe() { return this.iframe; } function XMLHTTP() { this.iframe = false; this.open = XMLHTTP_open; this.send = XMLHTTP_send; this.error = XMLHTTP_error; this.setResponse = XMLHTTP_setResponse; this.getResponseText = XMLHTTP_getResponseText; this.getResponseXML = XMLHTTP_getResponseXML; this.getReadyState = XMLHTTP_getReadyState; this.getStatus = XMLHTTP_getStatus; this.setRequestHeader = XMLHTTP_setRequestHeader; this.isIframe = XMLHTTP_isIframe; this.obj = false; if (window.XMLHttpRequest) { /* gecko */ this.obj = new XMLHttpRequest(); } else if (window.ActiveXObject) { /* ie */ this.obj = new ActiveXObject("Microsoft.XMLHTTP"); } if (!this.obj) { /* no luck -> iframe */ this.iframe = true; this.ifr = document.createElement("iframe"); this.ifr.style.display = "none"; this.ifr.src = "javascript:;"; document.body.appendChild(this.ifr); } } function XMLHTTP_supported() { var dummy = new XMLHTTP(); return (!dummy.isIframe()); } PKK9Ħ9 9turbogears/toolbox/designer/static/diagram/js/animator.js/* WWW SQL Designer, (C) 2005 Ondra Zara, o.z.fw@seznam.cz This file is part of WWW SQL Designer. WWW SQL Designer is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. WWW SQL Designer is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with WWW SQL Designer; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ var animation_lock = 0; /* kolik prave bezi animaci */ var animation_end_queue = Array(); /* az skonci _posledni_ animace, tohle vsecko spustime */ function animation_queue_add(funcRef) { var i = get_free_index(animation_end_queue); animation_end_queue[i] = funcRef; } function animation_function(row_element,direction,endFunc) { var h = parseInt(row_element.style.height); h=h+direction; row_element.style.height = h+"px"; if ((direction == 1 && h < ROW_HEIGHT) || (direction == -1 && h > 1)) { var funcRef = function() { animation_function(row_element,direction,endFunc); } setTimeout(funcRef,DELAY); } else { var funcRef = function() { end_animation(row_element,direction,endFunc); } setTimeout(funcRef,0); } } function start_animation(row_element,direction,endFunc) { animation_lock++; var number = parseInt(row_element.getAttribute("parent_number")); table_array[number].hideShadow(); var h; if (direction == 1) { h = 1; } if (direction == -1) { h = ROW_HEIGHT; } row_element.style.height = h+ "px"; var funcRef = function() { animation_function(row_element,direction,endFunc); } setTimeout(funcRef,DELAY); } function end_animation(row_element,direction,endFunc) { animation_lock--; if (endFunc) { /* na konci kazde animace muze neco byt */ endFunc(); } if (!animation_lock) { /* az skonci posledni animace, jeste neco pustime */ for (var i=0;i([^<]*)<\/table_1>/); var table_2 = relation.match(/([^<]*)<\/table_2>/); var row_1 = relation.match(/([^<]*)<\/row_1>/); var row_2 = relation.match(/([^<]*)<\/row_2>/); add_relation(table_1[1],row_1[1],table_2[1],row_2[1]); } function import_xml_row(table, row) { var r; var head = row.match(/]*>/); var id = head[0].match(/id="([^"]*)"/); var title = row.match(/([^<]*)<\/title>/); var stype = row.match(/<type>([^<]*)<\/type>/); var type=0; for (var i=0;i<SQL_TYPES_DEFAULT.length;i++) { if (stype[1] == SQL_TYPES_DEFAULT[i]) { type = i; } } if (id) { r=table.addRow(title[1],type,id[1]); } else { r=table.addRow(title[1],type); } var def = row.match(/<default>([^<]*)<\/default>/); r.setDef(def[1]); var index = head[0].match(/index="[^"]*"/); if (index) { r.setIndex(); } var pk = head[0].match(/pk="[^"]*"/); if (pk) { r.setPK(); } var fk = head[0].match(/fk="[^"]*"/); if (fk) { r.setFK(); } var nn = head[0].match(/nn="[^"]*"/); if (nn) { r.setNN(); } var spec = head[0].match(/special="([^"]*)"/); if (spec) { r.setSpec(spec[1]); } } function import_xml_table(table) { var t; var head = table.match(/<table[^>]*>/); var id = head[0].match(/id="([^"]*)"/); var title = head[0].match(/title="([^"]*)"/); var x = head[0].match(/x="([^"]*)"/); var y = head[0].match(/y="([^"]*)"/); if (id) { t = add_table(x[1],y[1],title[1],id[1]); } else { t = add_table(x[1],y[1],title[1]); } var rows = table.match(/<row[^>]*>.*?<\/row>/g); for (var i=0;i<rows.length;i++) { import_xml_row(t,rows[i]); } } function import_xml(data) { /* nacte data z drive ulozeneho souboru */ /* zadne newliny, delaji bordel */ data = data.replace(/[\n\r]/g,''); /* jen vnitrek globalniho tagu <sql> */ var clear = data.match(/<sql>(.*)<\/sql>/); if (!clear) { alert('No data!'); return; } /* vsechno vycistime */ clear_tables(); /* a jedeme - tabulky */ var tables = clear[1].match(/<table[^>]*>.*?<\/table>/g); for (var i=0;i<tables.length;i++) { import_xml_table(tables[i]); } /* vposled relace */ var relations = clear[1].match(/<relation[^>]*>.*?<\/relation>/g); for (var i=0;i<relations.length;i++) { import_xml_relation(relations[i]); } } function export_xml() { /* vyexportuje data do xml souboru. priklad: <?xml version="1.0" ?> <!-- WWWSQLEditor XML export --> <sql> <table id="3" title="tabulka" x="30" y="50"> <row id="0" pk="pk"> <default>0</default> <title>id Integer Integer 0 id_neco String hodnota 3 4 0 0 */ /* hlavicka */ var x,y; var str, row; var data = '\n'; data += '\n'; data += '\n'; /* tabulky a radky */ for (var i=0;i\n'; for (var j=0;j\n'; data += '\t\t\t'+row._title.innerHTML+'\n'; data += '\t\t\t'+row.def+'\n'; data += '\t\t\t'+SQL_TYPES_DEFAULT[row.type]+'\n'; data += '\t\t\n'; } /* pro vsechny radky */ data += '\t
\n'; } /* pokud tabulka existuje */ } /* pro vsechny tabulky */ /* relace */ var table_1, table_2, row_1, row_2; for (var k=0;k\n'; data += '\t\t'+row_1+'\n'; data += '\t\t'+table_2+'\n'; data += '\t\t'+row_2+'\n'; data += '\t\n'; } } /* paticka */ data += ''; return data; } function io_show(import_btn) { var btn = document.getElementById("import"); if (import_btn) { btn.style.display = "block"; } else { btn.style.display = "none"; } var area = document.getElementById("area"); area.parentNode.style.display = "block"; }PKK96D@@5turbogears/toolbox/designer/static/diagram/js/main.js/* WWW SQL Designer, (C) 2005 Ondra Zara, o.z.fw@seznam.cz This file is part of WWW SQL Designer. WWW SQL Designer is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. WWW SQL Designer is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with WWW SQL Designer; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ var drag_lock = 0; /* hybeme-li tabulkou */ var new_table_flag = 0; /* cekame-li na click pro vytvoreni nove tabulky */ var new_table_name = ""; /* jak se bude nova jmenovat */ var table_array = Array(); /* ukazatele na tabulky */ var relation_array = Array(); /* ukazatele na relace */ var drag_start; /* prvni element dragu */ var rel_hover_lock = -1; /* mame zvyraznenou relaci */ var mouse_x,mouse_y; /* souradnice */ var table_admin, row_admin, io_admin; /* tooly na baru */ /* --------------------------------------------------------------------------- */ function renumber_indexes(limit) { var zIndex; for (var i=0;i limit) table_array[i]._div.style.zIndex = zIndex-1; } } function get_max_zIndex() { var max_zIndex = 0; var zIndex; for (var i=0;i max_zIndex) max_zIndex = zIndex; } } return max_zIndex; } function raise_table(number) { row_admin.manageTable(table_array[number]); table_admin.manageTable(table_array[number]); for (var i=0;i bude posun */ var rel; var src = universalSource(co); var index = drag_start.getAttribute("parent_number"); if (index != null) { var moving_elm = table_array[index]._div; var new_x = parseInt(moving_elm.style.left) + (co.clientX - mouse_x); var new_y = parseInt(moving_elm.style.top) + (co.clientY - mouse_y); table_array[index].moveTo(new_x,new_y); table_array[index].updateMini(); mouse_x = co.clientX; mouse_y = co.clientY; } else { /* necim hybeme, ale nema to parent number -> tak je to mapa */ var moving_elm = document.getElementById("map_"); var offs_x = co.clientX - mouse_x; var offs_y = co.clientY - mouse_y; var coef = DESK_SIZE / MAP_SIZE; window.scrollBy(coef * offs_x, coef * offs_y); mouse_x = co.clientX; mouse_y = co.clientY; update_map_(); } } } function global_event_resize(co) { update_map_(); update_bar(); } function global_event_scroll(co) { update_map_(); update_bar(); } /* ------------------------------------------------------------------------------------ */ function get_target_tablerow(x, y) { var table=-1; var row=-1; var table_left, table_top, table_width, table_height; var row_left, row_top, row_width, row_height; /* pro dane souradnice vratime odpovidajici tabulku a radku. -1 pokud nee. */ for (var i=0;i table_left && x < table_left + table_width && y > table_top && y < table_top + table_height) { table = i; } for (var j=0;j row_left && x < row_left + row_width && y > row_top && y < row_top + row_height) { row = j; } } /* if not null */ } /* for vsecky radky */ } /* if not null */ } /* for vsechny tabulky */ return [table,row]; } function add_table(x,y,title,custom_index) { var count = get_free_index(table_array); if (custom_index) { count = custom_index; } var max_zIndex = get_max_zIndex(); var root=document.getElementById("root"); /* sem tabulku napojime */ var table = new Table(x,y,count,max_zIndex+1,title); /* to je ona */ table_array[count] = table; /* dame si objekt do pole */ root.appendChild(table._div); /* a pridame i do HTML stromu */ table.updateMini(); raise_table(count); var bar = document.getElementById("bar"); bar.style.zIndex = max_zIndex+2; var map = document.getElementById("map"); map.style.zIndex = max_zIndex+2; return table; } function remove_table(index,no_animation) { for (var i=0;i avail_width) { actual_x = 10; actual_y += 10 + max_height; max_height = 0; } table_array[i].moveTo(actual_x,actual_y); actual_x += 10 + table_width; if (table_height > max_height) { max_height = table_height; } } } for (var j=0;j je-li vybrano _title => html element _div => html element */ function abstractParent_setTitle(text) { this._title.innerHTML = text; } function abstractParent_destroy() { this._div.parentNode.removeChild(this._div); if (this._mini) { this._mini.parentNode.removeChild(this._mini); } } function abstractParent_select() { this._div.className = this._div.className + " " + this._div.className + "_selected"; this.selected = true; } function abstractParent_deselect() { this._div.className = this._div.getAttribute("defaultClassName"); this.selected = false; } function abstractParent(type, parent_number, row_number, className) { this._div = document.createElement("div"); this._title = document.createElement("div"); this._title.className = "title"; this._div.className = className; this._div.setAttribute("defaultClassName",className); this._div.setAttribute("parent_number",parent_number); this._div.setAttribute("row_number",row_number); this._div.setAttribute("element_type",type); this._title.setAttribute("parent_number",parent_number); this._title.setAttribute("row_number",row_number); this._title.setAttribute("element_type",TYPE_TITLE); this._div.appendChild(this._title); this.selected = false; this.select = abstractParent_select; this.deselect = abstractParent_deselect; this.destroy = abstractParent_destroy; this.setTitle = abstractParent_setTitle; /* universalAttacher(this._div,"mousedown",global_event_mousedown); */ } /* objekt Row setPK(), losePK() - primary key setFK(), loseFK() - foreign key setIndex(), loseIndex() - index setNN(), loseNN() - not null setDef() - default updateTitle() - updatne title="xxx" atribut setTitle() - updatne title="xxx" atribut setType() - updatne typ a defaultni hodnotu updateSpecial() - updatne special updateColor() - updatne pozadi dle datoveho typu _special - drzadlo na specialni PK a FK, vpravo pk - je-li primary key fk - je-li foreign key index - je-li index nn - je-li notnull def - defaultni hodnota type - datovy typ (resp. jeho index) spec - delka ci vycet */ function Row_setPK() { this.pk = 1; this.setIndex(); this.updateTitle(); this.updateSpecial(); this._title.style.fontWeight = "bold"; } function Row_losePK() { this.pk = 0; this.updateTitle(); this.updateSpecial(); this._title.style.fontWeight = "normal"; } function Row_setFK() { this.fk = 1; this.updateTitle(); this.updateSpecial(); } function Row_loseFK() { this.fk = 0; this.updateTitle(); this.updateSpecial(); } function Row_setNN() { this.nn = 1; this.updateTitle(); } function Row_loseNN() { this.nn = 0; this.updateTitle(); } function Row_setIndex() { this.index = 1; this.updateTitle(); this._title.style.fontStyle = "italic"; } function Row_loseIndex() { this.index = 0; this.updateTitle(); this._title.style.fontStyle = "normal"; } function Row_updateTitle() { str = this._title.innerHTML + ": "; str += SQL_TYPES_DEFAULT[this.type]; if (SQL_TYPES_SPEC[this.type]) { str += "(" + this.spec + ")"; } str += ", default: '" + this.def + "'"; if (this.pk) { str += ", Primary key"; } if (this.fk) { str += ", Foreign key"; } if (this.nn) { str += ", NOT NULL"; } if (this.index) { str += ", Index"; } //this._div.setAttribute("title",str); //this._title.setAttribute("title",str); } function Row_setDef(value) { this.def = value; this.updateTitle(); } function Row_setSpec(value) { this.spec = value; this.updateTitle(); } function Row_setType(type) { this.type = type; this.def = SQL_TYPES_VALUES[type]; this.updateTitle(); this.updateColor(); } function Row_updateSpecial() { var str = ""; if (this.pk) str += "PK"; if (this.pk && this.fk) str += ","; if (this.fk) str += "FK"; this._special.innerHTML = str; } function Row_updateColor() { var total = 0; for (var i=0;i right_2 ? top_table_1 + top_row_1 : top_table_2 + top_row_2); end_x = Math.min(right_1, right_2) - RELATION_THICKNESS; end_y = (right_1 < right_2 ? top_table_1 + top_row_1 : top_table_2 + top_row_2); center_x = start_x + RELATION_OFFSET; /* korekce kvuli borderu... */ start_x--; end_x--; } } /* a jedem */ this.elem_1.style.left = Math.min(start_x, center_x) + "px"; this.elem_1.style.top = start_y + "px" this.elem_1.style.width = Math.abs(center_x - start_x) + "px"; this.elem_2.style.left = center_x; this.elem_2.style.top = Math.min(start_y, end_y); this.elem_2.style.height = Math.abs(end_y - start_y) + RELATION_THICKNESS + "px"; this.elem_3.style.left = Math.min(center_x, end_x) + "px"; this.elem_3.style.top = end_y + "px" this.elem_3.style.width = Math.abs(center_x - end_x) + "px"; } Relation.prototype = new abstractParent(); function Relation(parent_1, row_1, parent_2, row_2, id) { this.base = abstractParent; this.base(TYPE_RELATION, id, row_1, "relation"); this._title.parentNode.removeChild(this._title); this.update = Relation_update; /* funkce na aktualizaci car */ this.show = Relation_show; /* ukazani */ this.hide = Relation_hide; /* schovani */ this.parent_1 = parent_1; /* prvni rodicovska tabulka */ this.parent_2 = parent_2; /* druha rodicovska tabulka */ this.row_1 = row_1; /* prvni rodicovska radka */ this.row_2 = row_2; /* druha rodicovska radka */ this.elem_1 = document.createElement("div"); this.elem_2 = document.createElement("div"); this.elem_3 = document.createElement("div"); this.elem_1.style.height = RELATION_THICKNESS; this.elem_2.style.width = RELATION_THICKNESS; this.elem_3.style.height = RELATION_THICKNESS; this.elem_1.setAttribute("element_type",TYPE_RELATION_PART); this.elem_2.setAttribute("element_type",TYPE_RELATION_PART); this.elem_3.setAttribute("element_type",TYPE_RELATION_PART); this._div.appendChild(this.elem_1); this._div.appendChild(this.elem_2); this._div.appendChild(this.elem_3); } /* objekt Table: moveTo() - posun na zadane souradnice addRow() - prida radku removeRow() - odebere radku selectRow() - vybere radku appendRelation() - prida relaci removeRelation() - zrusi relaci updateWidth() - aktualizuje sirku updateMini() - aktualizuje minimapku updateShadow() - aktualizuje rozbite stiny showRelations() - ukaze relevantni relace hideRelations() - schova relevantni relace rows => pole radku _rows => html drzak radku relations => pole relaci, ktere se tykaji teto tabulky */ function Table_updateMini() { var w = parseInt(this._div.offsetWidth); var h = parseInt(this._div.offsetHeight); var l = parseInt(this._div.style.left); var t = parseInt(this._div.style.top); this._mini.style.width = Math.round(w * MAP_SIZE / DESK_SIZE) + "px"; this._mini.style.height = Math.round(h * MAP_SIZE / DESK_SIZE) + "px"; this._mini.style.left = Math.round(l * MAP_SIZE / DESK_SIZE) + "px"; this._mini.style.top = Math.round(t * MAP_SIZE / DESK_SIZE) + "px"; } function Table_moveTo(x,y) { this._div.style.left = x + "px"; this._div.style.top = y + "px"; this.updateMini(); } function Table_addRow(title,type,custom_index) { var count = get_free_index(this.rows); if (custom_index) count = custom_index; var row = new Row(this.number,count,title,type); /* to je ona */ this.rows[count] = row; /* dame si objekt do pole */ this._rows.appendChild(row._div); /* a pridame i do HTML stromu */ this.updateWidth(); var x = this; var endFuncRef = function() { x.updateMini(); x.updateShadow(); for (var i=0;i max) { max = this.rows[i]._title.innerHTML.length; } } } var new_ = Math.max(TABLE_WIDTH,80+max*LETTER_WIDTH); this._div.style.width = new_ + "px"; if (new_ != orig) { this.updateMini(); /* pokud jsme tabulce zmenili rozmery, musime aktualizovat relace */ for (var i=0;iLlʳNy˯ o}tRNS@fIDATxb```0edd fbiFF FFv;0/(& $e@|z^ ̺̅<" ’turbogears/toolbox/designer/static/javascript/modelDesigner.jsvar nameMsg = 'The name will be converted from mixed-case to undescored-separated to be used as column name.'; var alternateMsg = 'This boolean (default False) indicates if the column can be used as an ID for the field'; var notnullMsg = 'If true, None/NULL is not allowed for this column.'; var uniqueMsg = 'If true, when SQLObject creates a table it will declare this column to be UNIQUE.'; var defaultMsg = 'The default value for this column. Used when creating a new row.'; var dbNameMsg = 'Name of the column in the database.'; var titleMsg = 'Descriptive name for your field'; var designer = {}; designer.currentModel = ''; designer.ordered_models = []; designer.models = {}; designer.column_types = { 'StringCol':{}, 'IntCol':{}, 'FloatCol':{}, 'DateCol':{}, 'DateTimeCol':{}, 'BoolCol':{}, 'EnumCol':{}, 'DecimalCol':{}, 'CurrencyCol':{}, 'BLOBCol':{}, 'PickleCol':{}, 'UnicodeCol':{}, 'MultipleJoin':{}, 'SingleJoin':{}, 'ForeignKey':{}, 'RelatedJoin':{} }; designer.tableRowInput = function(label,name,value,help_tip) { var props = (designer.exists(help_tip))? {'title':help_tip}:null; return TR(props, TD({'class':'label','valign':'top'},label +' :'), TD({'class':'field','valign':'top'}, createDOM('INPUT',{'type':'text', 'value':value, 'id':name}) ) ); } designer.tableRowSelect = function(field_name,label,values,value) { var sel = createDOM('SELECT', {'id':field_name}); for(var i=0;i=0;i--) { if(el.options[i]!=null && el.options[i].selected) el.options[i]=null; } designer.updateDefaultEnum(column_name); designer.save(); } designer.updateDefaultEnum = function(column_name) { var el = document.getElementById(column_name); var d =document.getElementById('column_default'); var sel = d.options[d.selectedIndex].value; for(var i=d.options.length-1;i>=0;i--) d.options[i] = null; d.options[d.length]= new Option('','',false,false); for(var i=0;i 0) { f.raise_table(0); f.reposition_tables(); } } designer.code_saved = function(result) { alert(result['status']); } designer.save_code_and_create_tables = function() { var code = document.getElementById('code_view').value; ordered_models = ''; for(var model in designer.sortedModels()) { if(ordered_models!='') ordered_models+=','; ordered_models+= designer.models[model].name; } var d = postJSONDoc('save_and_create','code='+ code +'&order='+ ordered_models); d.addCallback(designer.code_saved); } designer.save_generated_code = function() { var code = document.getElementById('code_view').value; var d = postJSONDoc('save','code='+ code); d.addCallback(designer.code_saved); } designer.save = function(save_as) { var name = document.myform.model_name.value; if(name=='None' || name == '') return; var d = {'name':name,'models':designer.models,'ordered_models':designer.ordered_models }; var state = serializeJSON(d); var params = 'state='+ state; if( designer.exists(save_as) ) params+='&name='+ save_as var d = postJSONDoc('save_state',params); if( designer.exists(save_as) ) d.addCallback(designer.state_saved); } designer.loadSessionList = function() { var d = postJSONDoc('session_list',''); d.addCallback(designer.renderSessionList); } designer.renderSessionList = function(result) { if(!designer.exists(result['models'])) return; var el = document.getElementById('sample_models'); var tmp_file_exists = (el.options[1].value == 'model_designer_session_file')? true:false; for(var i=el.options.length-1;i>=0;i--) el.options[i] = null; el.options[0]= new Option('Sample models','none',false,false); if(tmp_file_exists) el.options[1]= new Option('Existing Designer Session','model_designer_session_file',false,true); for(var i=0;i< result['models'].length;i++) { el.options[el.length]= new Option(result['models'][i], result['models'][i], false, false); } } designer.state_saved = function(result) { if(result['state']) { alert('Your Session has been saved'); designer.loadSessionList(); } else { alert('Fail to save your Session'); } } function postJSONDoc(url,postVars) { var req = getXMLHttpRequest(); req.open('POST',url,true); req.setRequestHeader('Content-type','application/x-www-form-urlencoded'); var data = postVars; var d = sendXMLHttpRequest(req,data); return d.addCallback(evalJSONRequest); } designer.codeView = function() { designer.minimazeCanvas(); var code = ''; for(var model in designer.sortedModels()) { code+= designer.modelCode(designer.models[model]); } var code_view = createDOM('TEXTAREA', {'id':'code_view','class':'py','name':'code'}); if(document.myform.model_exists.value=='1') { var write_model = createDOM('BUTTON', { 'onclick':"designer.save_generated_code()", 'title':'Write to model file', 'style':'cursor:pointer;font-size:10px;width:160px' },'Write model file' ); var generate_model = createDOM('BUTTON', { 'onclick':"designer.save_code_and_create_tables()", 'title':'Write to model file and create tables', 'style':'cursor:pointer;font-size:10px;width:200px' },'Write to file and Create Tables' ); //generate_model = ''; code_view = DIV({'margin-bottom':'50px'}, write_model, generate_model, code_view ); } replaceChildNodes('canvas',code_view); var element = document.getElementById('code_view'); element.value = code; // instantiate a brush var highlighter = null; var registered = new Object(); var propertyName = 'value'; for(var brush in dp.sh.Brushes) { var aliases = dp.sh.Brushes[brush].Aliases; if(aliases == null) continue; for(var i = 0; i < aliases.length; i++) registered[aliases[i]] = brush; } var highlighter = new dp.sh.Brushes[registered['py']](); element.style.display = 'none'; highlighter.addGutter = true; highlighter.addControls = true; highlighter.firstLine = 1; highlighter.Highlight(element[propertyName]); var div = document.createElement('DIV'); div.className = 'dp-highlighter'; div.appendChild(highlighter.ol); element.parentNode.insertBefore(div, element); } function blankSlate() { designer.currentModel=''; designer.models = {}; designer.ordered_models=[]; replaceChildNodes('models',''); replaceChildNodes('canvas',''); } var dragsort = ToolMan.dragsort() var junkdrawer = ToolMan.junkdrawer() function endModelDrag(item) { var group = item.toolManDragGroup var list = group.element.parentNode var id = list.getAttribute("id") if (id == null) return; group.register('dragend', function() { saveModelOrder(junkdrawer.serializeList(list)) }); } function saveModelOrder(list) { alert(list); } function setHandle(item) { item.toolManDragGroup.setHandle(findHandle(item) ); } function findHandle(item) { var children = item.getElementsByTagName("td"); for (var i = 0; i < children.length; i++) { var child = children[i] if (child.getAttribute("class") == null) continue if (child.getAttribute("class").indexOf("handle") >= 0) return child } return item; } PKK9J5turbogears/toolbox/designer/static/sessions/Survey.js{"name":"survey","models":{"Survey":{"name":"Survey","parent_class":"SQLObject","table_name":"","id_name":"","columns":{"name":{"type":"StringCol","column_name":"name","column_title":"Name","column_default":"","column_length":"250","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":""},"description":{"type":"StringCol","column_name":"description","column_title":"Description","column_default":"","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":""},"questions":{"type":"MultipleJoin","name":"questions","join_type":"MultipleJoin","other_class_name":"Question","other_method_name":"survey"},"publish":{"type":"BoolCol","column_name":"publish","column_db_name":"","column_title":"Publish","column_default":"False","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":""}, "answers":{"type":"MultipleJoin","column_name":"answers","join_type":"MultipleJoin","other_class_name":"Answer","other_method_name":"survey"}},"relations":{},"ordered_columns":["name","description","publish","questions"]}, "Question":{"name":"Question","parent_class":"SQLObject","table_name":"","id_name":"","columns":{"survey":{"type":"ForeignKey","column_name":"survey","column_title":"","column_default":"","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":"","other_class_name":"Survey","other_method_name":"questions","original_other_class_name":"","original_other_method_name":"","join_type":"MultipleJoin"},"options":{"type":"MultipleJoin","name":"options","join_type":"MultipleJoin","other_class_name":"Option","other_method_name":"question"}, "answeredValue":{"type":"MultipleJoin","column_name":"answeredValue","join_type":"MultipleJoin","other_class_name":"AnswerValue","other_method_name":"question"}, "text":{"type":"StringCol","column_name":"text","column_db_name":"","column_title":"Question Text","column_default":"","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":""},"question_type":{"type":"EnumCol","column_name":"question_type","column_db_name":"","column_title":"","column_default":"text","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":"","enum_values":["text","textarea","radio","select","checkbox"]}},"relations":{},"ordered_columns":["text","question_type","survey","options","answeredValue"]}, "Answer":{"name":"Answer","parent_class":"SQLObject","table_name":"","id_name":"","columns":{"answered":{"type":"DateTimeCol","column_name":"answered","column_db_name":"","column_title":"Answered","column_default":"datetime.now","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":""},"survey":{"type":"ForeignKey","column_name":"survey","column_db_name":"","column_title":"","column_default":"","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":"","other_class_name":"Survey","other_method_name":"answers","original_other_class_name":"","original_other_method_name":"","join_type":"MultipleJoin"}, "values":{"type":"MultipleJoin","column_name":"values","join_type":"MultipleJoin","other_class_name":"AnswerValue","other_method_name":"answer"} },"relations":{}}, "AnswerValue":{"name":"AnswerValue","parent_class":"SQLObject","table_name":"","id_name":"","columns":{ "answer":{"type":"ForeignKey","column_name":"values","column_db_name":"","column_title":"","column_default":"","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":"","other_class_name":"Answer","other_method_name":"values","original_other_class_name":"","original_other_method_name":"","join_type":"MultipleJoin"} ,"value":{"type":"StringCol","column_name":"value","column_db_name":"","column_title":"","column_default":"","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":""},"question":{"type":"ForeignKey","column_name":"question","column_db_name":"","column_title":"","column_default":"","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":"","other_class_name":"Question","other_method_name":"answeredValue","original_other_class_name":"","original_other_method_name":"","join_type":"MultipleJoin"}},"relations":{},"ordered_columns":["value","answer"]},"Option":{"name":"Option","parent_class":"SQLObject","table_name":"options_table","id_name":"","columns":{"option_text":{"type":"StringCol","column_name":"option_text","column_title":"Option Text","column_default":"","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":""},"question":{"type":"ForeignKey","column_name":"question","column_title":"","column_default":"","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":"","other_class_name":"Question","other_method_name":"options","original_other_class_name":"","original_other_method_name":"","join_type":"MultipleJoin"}},"relations":{}}},"ordered_models":["Survey","Question","Option","Answer","AnswerValue"]} PKK984S 9turbogears/toolbox/designer/static/sessions/TurboTunes.js{"name":"survey","models":{"Genre":{"name":"Genre","parent_class":"SQLObject","table_name":"","id_name":"","columns":{"name":{"type":"StringCol","column_name":"name","column_title":"","column_default":"","column_length":"200","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":""},"artists":{"type":"RelatedJoin","column_name":"artists","column_title":"","column_default":"","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":"","other_class_name":"Artist","other_method_name":"genres","original_other_class_name":"","original_other_method_name":"","join_type":"RelatedJoin"}},"relations":{}},"Artist":{"name":"Artist","parent_class":"SQLObject","table_name":"","id_name":"","columns":{"genres":{"type":"RelatedJoin","name":"genres","join_type":"RelatedJoin","other_class_name":"Genre","other_method_name":"artists"},"name":{"type":"StringCol","column_name":"name","column_title":"","column_default":"","column_length":"200","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":""},"albums":{"type":"MultipleJoin","column_name":"albums","column_title":"","column_default":"","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":"","other_class_name":"Album","other_method_name":"artist","original_other_class_name":"","original_other_method_name":"","join_type":"MultipleJoin"}},"relations":{},"ordered_columns":["name","genres","albums"]},"Album":{"name":"Album","parent_class":"SQLObject","table_name":"","id_name":"","columns":{"artist":{"type":"ForeignKey","name":"artist","join_type":"MultipleJoin","other_class_name":"Artist","other_method_name":"albums"},"name":{"type":"StringCol","column_name":"name","column_title":"","column_default":"","column_length":"200","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":""},"songs":{"type":"MultipleJoin","column_name":"songs","column_title":"","column_default":"","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":"","other_class_name":"Song","other_method_name":"album","original_other_class_name":"","original_other_method_name":"","join_type":"MultipleJoin"}},"relations":{},"ordered_columns":["name","artist","songs"]},"Song":{"name":"Song","parent_class":"SQLObject","table_name":"","id_name":"","columns":{"album":{"type":"ForeignKey","name":"album","join_type":"MultipleJoin","other_class_name":"Album","other_method_name":"songs"},"name":{"type":"StringCol","column_name":"name","column_title":"","column_default":"","column_length":"200","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":""}},"relations":{},"ordered_columns":["name","album"]}},"ordered_models":["Genre","Artist","Album","Song"]} PKK9&&&6turbogears/toolbox/designer/static/sessions/WebShop.js{"name":"survey","models":{"Category":{"name":"Category","parent_class":"SQLObject","table_name":"","id_name":"","columns":{"name":{"type":"StringCol","column_name":"name","column_db_name":"","column_title":"","column_default":"","column_length":"200","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":""},"description":{"type":"StringCol","column_name":"description","column_db_name":"","column_title":"","column_default":"","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":""}},"relations":{}},"Product":{"name":"Product","parent_class":"SQLObject","table_name":"","id_name":"","columns":{"name":{"type":"StringCol","column_name":"name","column_db_name":"","column_title":"","column_default":"","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":""},"description":{"type":"StringCol","column_name":"description","column_db_name":"","column_title":"","column_default":"","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":""},"price":{"type":"CurrencyCol","column_name":"price","column_db_name":"","column_title":"","column_default":"","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":""},"orderedItems":{"type":"MultipleJoin","column_name":"orderedItems","join_type":"MultipleJoin","other_class_name":"OrderItem","other_method_name":"product"},"bagItems":{"type":"MultipleJoin","column_name":"bagItems","column_db_name":"","column_title":"","column_default":"","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":"","other_class_name":"BagItem","other_method_name":"product","original_other_class_name":"BagItem","original_other_method_name":"product","join_type":"MultipleJoin"}},"relations":{},"ordered_columns":["name","description","price","bagItems","orderedItems"]},"Customer":{"name":"Customer","parent_class":"SQLObject","table_name":"","id_name":"","columns":{"password":{"type":"StringCol","column_name":"password","column_db_name":"","column_title":"","column_default":"","column_length":"200","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"True","column_not_none":"","column_alternate_id":""},"username":{"type":"StringCol","column_name":"username","column_db_name":"","column_title":"","column_default":"","column_length":"200","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":""},"name":{"type":"StringCol","column_name":"name","column_db_name":"","column_title":"","column_default":"","column_length":"200","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":""},"email":{"type":"StringCol","column_name":"email","column_db_name":"","column_title":"","column_default":"","column_length":"200","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"True","column_not_none":"","column_alternate_id":""},"address":{"type":"SingleJoin","column_name":"address","column_db_name":"","column_title":"","column_default":"","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":"","other_class_name":"Address","other_method_name":"customer","original_other_class_name":"","original_other_method_name":"","join_type":"SingleJoin"},"orders":{"type":"MultipleJoin","column_name":"orders","join_type":"MultipleJoin","other_class_name":"Order","other_method_name":"customer"}},"relations":{},"ordered_columns":["name","username","password","email"]},"Address":{"name":"Address","parent_class":"SQLObject","table_name":"","id_name":"","columns":{"street":{"type":"StringCol","column_name":"street","column_db_name":"","column_title":"","column_default":"","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":""},"zipcode":{"type":"StringCol","column_name":"zipcode","column_db_name":"","column_title":"","column_default":"","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":""},"city":{"type":"StringCol","column_name":"city","column_db_name":"","column_title":"","column_default":"","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":""},"country":{"type":"StringCol","column_name":"country","column_db_name":"","column_title":"","column_default":"","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":""},"customer":{"type":"ForeignKey","column_name":"customer","join_type":"SingleJoin","other_class_name":"Customer","other_method_name":"address"}},"relations":{}},"ShoppingBag":{"name":"ShoppingBag","parent_class":"SQLObject","table_name":"","id_name":"","columns":{"sessionString":{"type":"StringCol","column_name":"sessionString","column_db_name":"","column_title":"","column_default":"","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":""},"started":{"type":"DateTimeCol","column_name":"started","column_db_name":"","column_title":"","column_default":"","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":""},"items":{"type":"MultipleJoin","column_name":"items","join_type":"MultipleJoin","other_class_name":"BagItem","other_method_name":"bag"}},"relations":{}},"BagItem":{"name":"BagItem","parent_class":"SQLObject","table_name":"","id_name":"","columns":{"bag":{"type":"ForeignKey","column_name":"bag","column_db_name":"","column_title":"","column_default":"","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":"","other_class_name":"ShoppingBag","other_method_name":"items","original_other_class_name":"","original_other_method_name":"","join_type":"MultipleJoin"},"product":{"type":"ForeignKey","column_name":"product","column_db_name":"","column_title":"","column_default":"","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":"","other_class_name":"Product","other_method_name":"bagItems","original_other_class_name":"","original_other_method_name":"","join_type":"MultipleJoin"}},"relations":{}},"Order":{"name":"Order","parent_class":"SQLObject","table_name":"","id_name":"","columns":{"placed":{"type":"DateTimeCol","column_name":"placed","column_db_name":"","column_title":"","column_default":"","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":""},"customer":{"type":"ForeignKey","column_name":"customer","column_db_name":"","column_title":"","column_default":"","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":"","other_class_name":"Customer","other_method_name":"orders","original_other_class_name":"","original_other_method_name":"","join_type":"MultipleJoin"},"status":{"type":"EnumCol","column_name":"status","column_db_name":"","column_title":"","column_default":"processing","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":"","enum_values":["confirmed","onhold","paid","shipped","processing"]},"items":{"type":"MultipleJoin","column_name":"items","join_type":"MultipleJoin","other_class_name":"OrderItem","other_method_name":"order"}},"relations":{}},"OrderItem":{"name":"OrderItem","parent_class":"SQLObject","table_name":"","id_name":"","columns":{"order":{"type":"ForeignKey","column_name":"order","column_db_name":"","column_title":"","column_default":"","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":"","other_class_name":"Order","other_method_name":"items","original_other_class_name":"","original_other_method_name":"","join_type":"MultipleJoin"},"quantity":{"type":"IntCol","column_name":"quantity","column_db_name":"","column_title":"","column_default":"","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":""},"product":{"type":"ForeignKey","column_name":"product","column_db_name":"","column_title":"","column_default":"","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":"","other_class_name":"Product","other_method_name":"orderedItems","original_other_class_name":"","original_other_method_name":"","join_type":"MultipleJoin"}},"relations":{}}},"ordered_models":[]} PKK9'66turbogears/view/base.py"""Template processing for TurboGears view templates.""" import sys import re import logging from itertools import chain from itertools import cycle as icycle from urllib import quote_plus import cherrypy import pkg_resources import turbogears from turbogears import identity, config from turbogears.i18n import i18n_filter, get_locale from turbogears.util import Bunch, \ adapt_call, deprecated, get_template_encoding_default, \ get_mime_type_for_format, mime_type_has_charset log = logging.getLogger("turbogears.view") baseTemplates = [] variable_providers = [] root_variable_providers = [] engines = dict() class MetaDeprecatedVariableProviders(type): def __new__(cls, name, bases, dict): deprecate = deprecated( "Use variable_providers instead of variableProviders.") for key, value in dict.items(): if key == "__metaclass__": continue if callable(value): dict[key] = deprecate(value) return type.__new__(cls, name, bases, dict) class DeprecatedVariableProviders(list): __metaclass__ = MetaDeprecatedVariableProviders def append(self, *args, **kw): super(DeprecatedVariableProviders, self).append(*args, **kw) def count(self, *args, **kw): return super(DeprecatedVariableProviders, self).count(*args, **kw) def extend(self, *args, **kw): super(DeprecatedVariableProviders, self).extend(*args, **kw) def index(self, *args, **kw): return super(DeprecatedVariableProviders, self).index(*args, **kw) def insert(self, *args, **kw): super(DeprecatedVariableProviders, self).insert(*args, **kw) def pop(self, *args, **kw): return super(DeprecatedVariableProviders, self).pop(*args, **kw) def remove(self, *args, **kw): super(DeprecatedVariableProviders, self).remove(*args, **kw) def reverse(self, *args, **kw): super(DeprecatedVariableProviders, self).reverse(*args, **kw) def sort(self, *args, **kw): super(DeprecatedVariableProviders, self).sort(*args, **kw) variableProviders = DeprecatedVariableProviders() def _choose_engine(template): if isinstance(template, basestring): colon = template.find(":") if colon > -1: enginename = template[:colon] template = template[colon+1:] else: engine = engines.get(template, None) if engine: return engine, None, template enginename = config.get("tg.defaultview", "kid") else: enginename = config.get("tg.defaultview", "kid") engine = engines.get(enginename, None) if not engine: raise KeyError, \ "Template engine %s is not installed" % enginename return engine, template, enginename def render(info, template=None, format=None, headers=None, mapping=None, fragment=False): """Renders data in the desired format. @param info: the data itself @type info: dict @param format: "html", "xml" or "json" @type format: string @param headers: for response headers, primarily the content type @type headers: dict @param fragment: passed through to tell the template if only a fragment of a page is desired @type fragment: bool @param template: name of the template to use @type template: string """ template = format == 'json' and 'json' or info.pop( "tg_template", template) if not info.has_key("tg_flash"): if config.get("tg.empty_flash", True): info["tg_flash"] = None engine, template, enginename = _choose_engine(template) if format: if format == 'plain': if enginename == 'genshi': format = 'text' elif format == 'text': if enginename == 'kid': format = 'plain' else: format = enginename == 'json' and 'json' or config.get( "%s.outputformat" % enginename, 'html') if isinstance(headers, dict): # Determine the proper content type and charset for the response. # We simply derive the content type from the format here # and use the charset specified in the configuration setting. # This could be improved by also examining the engine and the output. content_type = headers.get('Content-Type') if not content_type: if format: content_format = format if isinstance(content_format, (tuple, list)): content_format = content_format[0] if isinstance(content_format, str): content_format = content_format.split( )[0].split('-' , 1)[0].lower() else: content_format = 'html' else: content_format = 'html' content_type = get_mime_type_for_format(content_format) if mime_type_has_charset( content_type) and '; charset=' not in content_type: charset = get_template_encoding_default(enginename) if charset: content_type += '; charset=' + charset headers['Content-Type'] = content_type args, kw = adapt_call(engine.render, args= [], kw = dict(info=info, format=format, fragment=fragment, template=template, mapping=mapping), start=1) return engine.render(**kw) def transform(info, template): """Create ElementTree representation of the output.""" engine, template, enginename = _choose_engine(template) return engine.transform(info, template) def loadBaseTemplates(): """Load base templates for use by other templates. By listing templates in turbogears.view.baseTemplates, these templates will automatically be loaded so that the "import" statement in a template will work. """ log.debug("Loading base templates") for template in baseTemplates: engine, template, enginename = _choose_engine(template) if sys.modules.has_key(template): del sys.modules[template] engine.load_template(template) class cycle: """Loops forever over an iterator. Wraps the itertools.cycle method, but provides a way to get the current value via the 'value' attribute. """ value = None def __init__(self, iterable): self._cycle = icycle(iterable) def __str__(self): return self.value.__str__() def __repr__(self): return self.value.__repr__() def next(self): self.value = self._cycle.next() return self.value def selector(expression): """If the expression is true, return the string 'selected'. Useful for HTML