diff --git a/Java/.metadata/.lock b/Java/.metadata/.lock deleted file mode 100644 index e69de29..0000000 diff --git a/Java/.metadata/.mylyn/.taskListIndex/segments_1 b/Java/.metadata/.mylyn/.taskListIndex/segments_1 deleted file mode 100644 index 654b582..0000000 Binary files a/Java/.metadata/.mylyn/.taskListIndex/segments_1 and /dev/null differ diff --git a/Java/.metadata/.mylyn/.taskListIndex/write.lock b/Java/.metadata/.mylyn/.taskListIndex/write.lock deleted file mode 100644 index e69de29..0000000 diff --git a/Java/.metadata/.mylyn/repositories.xml.zip b/Java/.metadata/.mylyn/repositories.xml.zip deleted file mode 100644 index 0b52935..0000000 Binary files a/Java/.metadata/.mylyn/repositories.xml.zip and /dev/null differ diff --git a/Java/.metadata/.mylyn/tasks.xml.zip b/Java/.metadata/.mylyn/tasks.xml.zip deleted file mode 100644 index 487e63e..0000000 Binary files a/Java/.metadata/.mylyn/tasks.xml.zip and /dev/null differ diff --git a/Java/.metadata/.plugins/org.eclipse.core.resources/.history/1a/c04ca844a035001819299fe2ee296412 b/Java/.metadata/.plugins/org.eclipse.core.resources/.history/1a/c04ca844a035001819299fe2ee296412 deleted file mode 100644 index 2d81990..0000000 --- a/Java/.metadata/.plugins/org.eclipse.core.resources/.history/1a/c04ca844a035001819299fe2ee296412 +++ /dev/null @@ -1,7 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=9 -org.eclipse.jdt.core.compiler.compliance=9 -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=9 diff --git a/Java/.metadata/.plugins/org.eclipse.core.resources/.history/46/a0e5f979a035001819299fe2ee296412 b/Java/.metadata/.plugins/org.eclipse.core.resources/.history/46/a0e5f979a035001819299fe2ee296412 deleted file mode 100644 index 60656ce..0000000 --- a/Java/.metadata/.plugins/org.eclipse.core.resources/.history/46/a0e5f979a035001819299fe2ee296412 +++ /dev/null @@ -1,4 +0,0 @@ - -public class Programm { - -} diff --git a/Java/.metadata/.plugins/org.eclipse.core.resources/.history/76/90f6fd5ba035001819299fe2ee296412 b/Java/.metadata/.plugins/org.eclipse.core.resources/.history/76/90f6fd5ba035001819299fe2ee296412 deleted file mode 100644 index e69de29..0000000 diff --git a/Java/.metadata/.plugins/org.eclipse.core.resources/.history/7c/7034c9d6a035001819299fe2ee296412 b/Java/.metadata/.plugins/org.eclipse.core.resources/.history/7c/7034c9d6a035001819299fe2ee296412 deleted file mode 100644 index f560277..0000000 --- a/Java/.metadata/.plugins/org.eclipse.core.resources/.history/7c/7034c9d6a035001819299fe2ee296412 +++ /dev/null @@ -1,6 +0,0 @@ - -public class Program { - public void Main() { - print("HELLO"); - } -} diff --git a/Java/.metadata/.plugins/org.eclipse.core.resources/.history/89/606493709f3500181474caf82ab45883 b/Java/.metadata/.plugins/org.eclipse.core.resources/.history/89/606493709f3500181474caf82ab45883 deleted file mode 100644 index ae92de1..0000000 --- a/Java/.metadata/.plugins/org.eclipse.core.resources/.history/89/606493709f3500181474caf82ab45883 +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/Java/.metadata/.plugins/org.eclipse.core.resources/.history/8a/50cc90709f3500181474caf82ab45883 b/Java/.metadata/.plugins/org.eclipse.core.resources/.history/8a/50cc90709f3500181474caf82ab45883 deleted file mode 100644 index d95e60e..0000000 --- a/Java/.metadata/.plugins/org.eclipse.core.resources/.history/8a/50cc90709f3500181474caf82ab45883 +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/Java/.metadata/.plugins/org.eclipse.core.resources/.history/a6/d0938f709f3500181474caf82ab45883 b/Java/.metadata/.plugins/org.eclipse.core.resources/.history/a6/d0938f709f3500181474caf82ab45883 deleted file mode 100644 index dac7e52..0000000 --- a/Java/.metadata/.plugins/org.eclipse.core.resources/.history/a6/d0938f709f3500181474caf82ab45883 +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/Java/.metadata/.plugins/org.eclipse.core.resources/.history/b/1068fd79a035001819299fe2ee296412 b/Java/.metadata/.plugins/org.eclipse.core.resources/.history/b/1068fd79a035001819299fe2ee296412 deleted file mode 100644 index f560277..0000000 --- a/Java/.metadata/.plugins/org.eclipse.core.resources/.history/b/1068fd79a035001819299fe2ee296412 +++ /dev/null @@ -1,6 +0,0 @@ - -public class Program { - public void Main() { - print("HELLO"); - } -} diff --git a/Java/.metadata/.plugins/org.eclipse.core.resources/.history/b9/e09c94709f3500181474caf82ab45883 b/Java/.metadata/.plugins/org.eclipse.core.resources/.history/b9/e09c94709f3500181474caf82ab45883 deleted file mode 100644 index 19d441e..0000000 --- a/Java/.metadata/.plugins/org.eclipse.core.resources/.history/b9/e09c94709f3500181474caf82ab45883 +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/Java/.metadata/.plugins/org.eclipse.core.resources/.history/f9/007a92709f3500181474caf82ab45883 b/Java/.metadata/.plugins/org.eclipse.core.resources/.history/f9/007a92709f3500181474caf82ab45883 deleted file mode 100644 index 6022480..0000000 --- a/Java/.metadata/.plugins/org.eclipse.core.resources/.history/f9/007a92709f3500181474caf82ab45883 +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/Java/.metadata/.plugins/org.eclipse.core.resources/.projects/First Java Thing/.indexes/af/history.index b/Java/.metadata/.plugins/org.eclipse.core.resources/.projects/First Java Thing/.indexes/af/history.index deleted file mode 100644 index 9cebe0b..0000000 Binary files a/Java/.metadata/.plugins/org.eclipse.core.resources/.projects/First Java Thing/.indexes/af/history.index and /dev/null differ diff --git a/Java/.metadata/.plugins/org.eclipse.core.resources/.projects/First Java Thing/.indexes/e4/history.index b/Java/.metadata/.plugins/org.eclipse.core.resources/.projects/First Java Thing/.indexes/e4/history.index deleted file mode 100644 index 21f057e..0000000 Binary files a/Java/.metadata/.plugins/org.eclipse.core.resources/.projects/First Java Thing/.indexes/e4/history.index and /dev/null differ diff --git a/Java/.metadata/.plugins/org.eclipse.core.resources/.projects/First Java Thing/.markers b/Java/.metadata/.plugins/org.eclipse.core.resources/.projects/First Java Thing/.markers deleted file mode 100644 index 3853c93..0000000 Binary files a/Java/.metadata/.plugins/org.eclipse.core.resources/.projects/First Java Thing/.markers and /dev/null differ diff --git a/Java/.metadata/.plugins/org.eclipse.core.resources/.projects/First Java Thing/org.eclipse.jdt.core/state.dat b/Java/.metadata/.plugins/org.eclipse.core.resources/.projects/First Java Thing/org.eclipse.jdt.core/state.dat deleted file mode 100644 index e2d78da..0000000 Binary files a/Java/.metadata/.plugins/org.eclipse.core.resources/.projects/First Java Thing/org.eclipse.jdt.core/state.dat and /dev/null differ diff --git a/Java/.metadata/.plugins/org.eclipse.core.resources/.projects/Testing Java/.indexes/af/history.index b/Java/.metadata/.plugins/org.eclipse.core.resources/.projects/Testing Java/.indexes/af/history.index deleted file mode 100644 index 46790e9..0000000 Binary files a/Java/.metadata/.plugins/org.eclipse.core.resources/.projects/Testing Java/.indexes/af/history.index and /dev/null differ diff --git a/Java/.metadata/.plugins/org.eclipse.core.resources/.projects/Testing Java/.markers b/Java/.metadata/.plugins/org.eclipse.core.resources/.projects/Testing Java/.markers deleted file mode 100644 index 7302c44..0000000 Binary files a/Java/.metadata/.plugins/org.eclipse.core.resources/.projects/Testing Java/.markers and /dev/null differ diff --git a/Java/.metadata/.plugins/org.eclipse.core.resources/.projects/Testing Java/1.tree b/Java/.metadata/.plugins/org.eclipse.core.resources/.projects/Testing Java/1.tree deleted file mode 100644 index 5156ff7..0000000 Binary files a/Java/.metadata/.plugins/org.eclipse.core.resources/.projects/Testing Java/1.tree and /dev/null differ diff --git a/Java/.metadata/.plugins/org.eclipse.core.resources/.projects/Testing Java/org.eclipse.jdt.core/state.dat b/Java/.metadata/.plugins/org.eclipse.core.resources/.projects/Testing Java/org.eclipse.jdt.core/state.dat deleted file mode 100644 index e2d78da..0000000 Binary files a/Java/.metadata/.plugins/org.eclipse.core.resources/.projects/Testing Java/org.eclipse.jdt.core/state.dat and /dev/null differ diff --git a/Java/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/history.version b/Java/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/history.version deleted file mode 100644 index 25cb955..0000000 --- a/Java/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/history.version +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/Java/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.index b/Java/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.index deleted file mode 100644 index 8081ad3..0000000 Binary files a/Java/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.index and /dev/null differ diff --git a/Java/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.version b/Java/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.version deleted file mode 100644 index 6b2aaa7..0000000 --- a/Java/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.version +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/Java/.metadata/.plugins/org.eclipse.core.resources/.root/2.tree b/Java/.metadata/.plugins/org.eclipse.core.resources/.root/2.tree deleted file mode 100644 index 12b177a..0000000 Binary files a/Java/.metadata/.plugins/org.eclipse.core.resources/.root/2.tree and /dev/null differ diff --git a/Java/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources b/Java/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources deleted file mode 100644 index 79e9e2d..0000000 Binary files a/Java/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources and /dev/null differ diff --git a/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.core.resources.prefs b/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.core.resources.prefs deleted file mode 100644 index dffc6b5..0000000 --- a/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.core.resources.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -version=1 diff --git a/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.debug.ui.prefs b/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.debug.ui.prefs deleted file mode 100644 index 9dd00d6..0000000 --- a/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.debug.ui.prefs +++ /dev/null @@ -1,3 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.debug.ui.PREF_LAUNCH_PERSPECTIVES=\r\n\r\n -preferredTargets=default\:default| diff --git a/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.epp.logging.aeri.ide.prefs b/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.epp.logging.aeri.ide.prefs deleted file mode 100644 index c186df8..0000000 --- a/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.epp.logging.aeri.ide.prefs +++ /dev/null @@ -1,4 +0,0 @@ -eclipse.preferences.version=1 -resetSendMode=KEEP -resetSendModeOn=0 -sendMode=NOTIFY diff --git a/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.core.prefs b/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index a78d373..0000000 --- a/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,8 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.codeComplete.visibilityCheck=enabled -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=9 -org.eclipse.jdt.core.compiler.compliance=9 -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=9 diff --git a/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.junit.prefs b/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.junit.prefs deleted file mode 100644 index 31df02c..0000000 --- a/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.junit.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.junit.content_assist_favorite_static_members_migrated=true diff --git a/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.launching.prefs b/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.launching.prefs deleted file mode 100644 index 5b703c1..0000000 --- a/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.launching.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.launching.PREF_VM_XML=\r\n\r\n \r\n \r\n \r\n\r\n diff --git a/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.ui.prefs b/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.ui.prefs deleted file mode 100644 index 17eee80..0000000 --- a/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.ui.prefs +++ /dev/null @@ -1,16 +0,0 @@ -content_assist_disabled_computers=org.eclipse.jdt.ui.textProposalCategory\u0000org.eclipse.recommenders.calls.rcp.proposalCategory.templates\u0000org.eclipse.mylyn.java.ui.javaAllProposalCategory\u0000org.eclipse.jdt.ui.javaAllProposalCategory\u0000org.eclipse.jdt.ui.javaTypeProposalCategory\u0000org.eclipse.jdt.ui.javaNoTypeProposalCategory\u0000org.eclipse.recommenders.chain.rcp.proposalCategory.chain\u0000 -content_assist_number_of_computers=24 -content_assist_proposals_background=255,255,255 -content_assist_proposals_foreground=0,0,0 -eclipse.preferences.version=1 -org.eclipse.jdt.internal.ui.navigator.layout=2 -org.eclipse.jdt.internal.ui.navigator.librariesnode=true -org.eclipse.jdt.ui.formatterprofiles.version=13 -org.eclipse.jdt.ui.text.code_templates_migrated=true -org.eclipse.jdt.ui.text.custom_code_templates= -org.eclipse.jdt.ui.text.custom_templates= -org.eclipse.jdt.ui.text.templates_migrated=true -spelling_locale=en_GB -spelling_locale_initialized=true -useAnnotationsPrefPage=true -useQuickDiffPrefPage=true diff --git a/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jst.j2ee.webservice.ui.prefs b/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jst.j2ee.webservice.ui.prefs deleted file mode 100644 index 553bb96..0000000 --- a/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jst.j2ee.webservice.ui.prefs +++ /dev/null @@ -1,2 +0,0 @@ -areThereWebServices=false -eclipse.preferences.version=1 diff --git a/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jst.jsp.core.prefs b/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jst.jsp.core.prefs deleted file mode 100644 index c5a248f..0000000 --- a/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jst.jsp.core.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jst.jsp.core.internal.java.search.JSPIndexManager=JSP Index Manager v3.9.2_20171107_01 diff --git a/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.m2e.discovery.prefs b/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.m2e.discovery.prefs deleted file mode 100644 index 67b1d96..0000000 --- a/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.m2e.discovery.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.m2e.discovery.pref.projects= diff --git a/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.context.core.prefs b/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.context.core.prefs deleted file mode 100644 index 43e97e4..0000000 --- a/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.context.core.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -mylyn.attention.migrated=true diff --git a/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.java.ui.prefs b/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.java.ui.prefs deleted file mode 100644 index 2a6fe50..0000000 --- a/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.java.ui.prefs +++ /dev/null @@ -1,3 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.mylyn.java.ui.run.count.3_10_0=1 -org.eclipse.mylyn.java.ui.run.count.3_1_0=1 diff --git a/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.monitor.ui.prefs b/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.monitor.ui.prefs deleted file mode 100644 index 8d462a6..0000000 --- a/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.monitor.ui.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.mylyn.monitor.activity.tracking.enabled.checked=true diff --git a/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.tasks.ui.prefs b/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.tasks.ui.prefs deleted file mode 100644 index 2b60c21..0000000 --- a/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.tasks.ui.prefs +++ /dev/null @@ -1,5 +0,0 @@ -eclipse.preferences.version=1 -migrated.task.repositories.secure.store=true -org.eclipse.mylyn.tasks.ui.filters.nonmatching=true -org.eclipse.mylyn.tasks.ui.filters.nonmatching.encouraged=true -org.eclipse.mylyn.tasks.ui.welcome.message=true diff --git a/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.pde.api.tools.prefs b/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.pde.api.tools.prefs deleted file mode 100644 index d2ed603..0000000 --- a/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.pde.api.tools.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -knownEEFragments= diff --git a/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.rse.core.prefs b/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.rse.core.prefs deleted file mode 100644 index 224d4c3..0000000 --- a/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.rse.core.prefs +++ /dev/null @@ -1,4 +0,0 @@ -activeuserprofiles=Bens-PC;Team -eclipse.preferences.version=1 -org.eclipse.rse.systemtype.local.systemType.defaultUserId=Ben -useridperkey=Bens-PC.Local\=Ben; diff --git a/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.rse.ui.prefs b/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.rse.ui.prefs deleted file mode 100644 index b6b0ab0..0000000 --- a/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.rse.ui.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.rse.preferences.order.connections=Bens-PC.Local diff --git a/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.team.ui.prefs b/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.team.ui.prefs deleted file mode 100644 index 56cd496..0000000 --- a/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.team.ui.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.team.ui.first_time=false diff --git a/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.editors.prefs b/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.editors.prefs deleted file mode 100644 index 61f3bb8..0000000 --- a/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.editors.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -overviewRuler_migration=migrated_3.1 diff --git a/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.ide.prefs b/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.ide.prefs deleted file mode 100644 index 9e495b3..0000000 --- a/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.ide.prefs +++ /dev/null @@ -1,6 +0,0 @@ -PROBLEMS_FILTERS_MIGRATE=true -SWITCH_PERSPECTIVE_ON_PROJECT_CREATION=always -eclipse.preferences.version=1 -platformState=1522581813063 -quickStart=false -tipsAndTricks=true diff --git a/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.workbench.prefs b/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.workbench.prefs deleted file mode 100644 index 61df215..0000000 --- a/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.workbench.prefs +++ /dev/null @@ -1,4 +0,0 @@ -//org.eclipse.ui.commands/state/org.eclipse.ui.navigator.resources.nested.changeProjectPresentation/org.eclipse.ui.commands.radioState=false -//org.eclipse.ui.commands/state/org.eclipse.wst.xml.views.XPathView.processor.xpathprocessor/org.eclipse.ui.commands.radioState=xpath10 -PLUGINS_NOT_ACTIVATED_ON_STARTUP=;org.eclipse.m2e.discovery; -eclipse.preferences.version=1 diff --git a/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.wst.jsdt.ui.prefs b/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.wst.jsdt.ui.prefs deleted file mode 100644 index 9a47a1e..0000000 --- a/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.wst.jsdt.ui.prefs +++ /dev/null @@ -1,11 +0,0 @@ -eclipse.preferences.version=1 -fontPropagated=true -org.eclipse.jface.textfont=1|Consolas|10.0|0|WINDOWS|1|0|0|0|0|0|0|0|0|1|0|0|0|0|Consolas; -org.eclipse.wst.jsdt.internal.ui.navigator.layout=1 -org.eclipse.wst.jsdt.ui.editor.tab.width= -org.eclipse.wst.jsdt.ui.formatterprofiles.version=11 -org.eclipse.wst.jsdt.ui.javadoclocations.migrated=true -proposalOrderMigrated=true -tabWidthPropagated=true -useAnnotationsPrefPage=true -useQuickDiffPrefPage=true diff --git a/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.wst.sse.ui.prefs b/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.wst.sse.ui.prefs deleted file mode 100644 index 9c01656..0000000 --- a/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.wst.sse.ui.prefs +++ /dev/null @@ -1,4 +0,0 @@ -content_assist_number_of_computers=22 -eclipse.preferences.version=1 -useAnnotationsPrefPage=true -useQuickDiffPrefPage=true diff --git a/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.wst.ws.service.policy.prefs b/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.wst.ws.service.policy.prefs deleted file mode 100644 index 6696959..0000000 --- a/Java/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.wst.ws.service.policy.prefs +++ /dev/null @@ -1,3 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.wst.ws.service.policy.ui.servicepols.wsiprofilecomp.wsiap.defaultProtocol=http\://schemas.xmlsoap.org/wsdl/soap/ -org.eclipse.wst.ws.service.policy.ui.servicepols.wsiprofilecomp.wsissbp.defaultProtocol=http\://schemas.xmlsoap.org/wsdl/soap/ diff --git a/Java/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi b/Java/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi deleted file mode 100644 index 4bf36f0..0000000 --- a/Java/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi +++ /dev/null @@ -1,3164 +0,0 @@ - - - - activeSchemeId:org.eclipse.ui.defaultAcceleratorConfiguration - ModelMigrationProcessor.001 - - - - - - - - topLevel - shellMaximized - - - - - persp.actionSet:org.eclipse.mylyn.doc.actionSet - persp.actionSet:org.eclipse.mylyn.tasks.ui.navigation - persp.actionSet:org.eclipse.ui.cheatsheets.actionSet - persp.actionSet:org.eclipse.rse.core.search.searchActionSet - persp.actionSet:org.eclipse.search.searchActionSet - persp.actionSet:org.eclipse.ui.edit.text.actionSet.annotationNavigation - persp.actionSet:org.eclipse.ui.edit.text.actionSet.navigation - persp.actionSet:org.eclipse.ui.edit.text.actionSet.convertLineDelimitersTo - persp.actionSet:org.eclipse.ui.externaltools.ExternalToolsSet - persp.actionSet:org.eclipse.ui.actionSet.keyBindings - persp.actionSet:org.eclipse.ui.actionSet.openFiles - persp.actionSet:org.eclipse.wst.jsdt.chromium.debug.ui.actionSets - persp.actionSet:org.eclipse.jst.j2ee.J2eeMainActionSet - persp.actionSet:org.eclipse.jdt.ui.JavaActionSet - persp.actionSet:org.eclipse.debug.ui.launchActionSet - persp.actionSet:org.eclipse.debug.ui.debugActionSet - persp.actionSet:org.eclipse.ui.NavigateActionSet - persp.viewSC:org.eclipse.ui.navigator.ProjectExplorer - persp.viewSC:org.eclipse.wst.server.ui.ServersView - persp.viewSC:org.eclipse.datatools.connectivity.DataSourceExplorerNavigator - persp.viewSC:org.eclipse.ui.views.BookmarkView - persp.viewSC:org.eclipse.ui.views.ContentOutline - persp.viewSC:org.eclipse.ui.views.PropertySheet - persp.viewSC:org.eclipse.ui.views.ResourceNavigator - persp.viewSC:org.eclipse.wst.common.snippets.internal.ui.SnippetsView - persp.viewSC:org.eclipse.ui.views.AllMarkersView - persp.viewSC:org.eclipse.mylyn.tasks.ui.views.tasks - persp.viewSC:org.eclipse.search.ui.views.SearchView - persp.viewSC:org.eclipse.ui.console.ConsoleView - persp.showIn:org.eclipse.ui.navigator.ProjectExplorer - persp.actionSet:org.eclipse.wst.ws.explorer.explorer - persp.newWizSC:org.eclipse.m2e.core.wizards.Maven2ProjectWizard - persp.showIn:org.eclipse.tm.terminal.view.ui.TerminalsView - persp.perspSC:org.eclipse.debug.ui.DebugPerspective - persp.perspSC:org.eclipse.jdt.ui.JavaPerspective - persp.perspSC:org.eclipse.ui.resourcePerspective - persp.perspSC:org.eclipse.wst.web.ui.webDevPerspective - persp.newWizSC:org.eclipse.jst.j2ee.ui.project.facet.EarProjectWizard - persp.newWizSC:org.eclipse.jst.servlet.ui.project.facet.WebProjectWizard - persp.newWizSC:org.eclipse.jst.ejb.ui.project.facet.EjbProjectWizard - persp.newWizSC:org.eclipse.jst.j2ee.jca.ui.internal.wizard.ConnectorProjectWizard - persp.newWizSC:org.eclipse.jst.j2ee.ui.project.facet.appclient.AppClientProjectWizard - persp.newWizSC:org.eclipse.wst.web.ui.internal.wizards.SimpleWebProjectWizard - persp.newWizSC:org.eclipse.jpt.ui.wizard.newJpaProject - persp.newWizSC:org.eclipse.jst.servlet.ui.internal.wizard.AddServletWizard - persp.newWizSC:org.eclipse.jst.ejb.ui.internal.wizard.AddSessionBeanWizard - persp.newWizSC:org.eclipse.jst.ejb.ui.internal.wizard.AddMessageDrivenBeanWizard - persp.newWizSC:org.eclipse.jpt.ui.wizard.newEntity - persp.newWizSC:org.eclipse.jst.ws.creation.ui.wizard.serverwizard - persp.newWizSC:org.eclipse.ui.wizards.new.folder - persp.newWizSC:org.eclipse.ui.wizards.new.file - persp.actionSet:org.eclipse.wst.server.ui.internal.webbrowser.actionSet - persp.actionSet:org.eclipse.debug.ui.breakpointActionSet - persp.actionSet:org.eclipse.eclemma.ui.CoverageActionSet - persp.showIn:org.eclipse.eclemma.ui.CoverageView - persp.newWizSC:org.eclipse.jpt.jpa.ui.wizard.newJpaProject - persp.perspSC:org.eclipse.jpt.ui.jpaPerspective - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - persp.actionSet:org.eclipse.mylyn.doc.actionSet - persp.actionSet:org.eclipse.mylyn.tasks.ui.navigation - persp.actionSet:org.eclipse.ui.cheatsheets.actionSet - persp.actionSet:org.eclipse.rse.core.search.searchActionSet - persp.actionSet:org.eclipse.search.searchActionSet - persp.actionSet:org.eclipse.ui.edit.text.actionSet.annotationNavigation - persp.actionSet:org.eclipse.ui.edit.text.actionSet.navigation - persp.actionSet:org.eclipse.ui.edit.text.actionSet.convertLineDelimitersTo - persp.actionSet:org.eclipse.ui.externaltools.ExternalToolsSet - persp.actionSet:org.eclipse.ui.actionSet.keyBindings - persp.actionSet:org.eclipse.ui.actionSet.openFiles - persp.actionSet:org.eclipse.wst.jsdt.chromium.debug.ui.actionSets - persp.actionSet:org.eclipse.debug.ui.launchActionSet - persp.actionSet:org.eclipse.jdt.ui.JavaActionSet - persp.actionSet:org.eclipse.jdt.ui.JavaElementCreationActionSet - persp.actionSet:org.eclipse.ui.NavigateActionSet - persp.viewSC:org.eclipse.jdt.ui.PackageExplorer - persp.viewSC:org.eclipse.jdt.ui.TypeHierarchy - persp.viewSC:org.eclipse.jdt.ui.SourceView - persp.viewSC:org.eclipse.jdt.ui.JavadocView - persp.viewSC:org.eclipse.search.ui.views.SearchView - persp.viewSC:org.eclipse.ui.console.ConsoleView - persp.viewSC:org.eclipse.ui.views.ContentOutline - persp.viewSC:org.eclipse.ui.views.ProblemView - persp.viewSC:org.eclipse.ui.views.ResourceNavigator - persp.viewSC:org.eclipse.ui.views.TaskList - persp.viewSC:org.eclipse.ui.views.ProgressView - persp.viewSC:org.eclipse.ui.navigator.ProjectExplorer - persp.viewSC:org.eclipse.ui.texteditor.TemplatesView - persp.viewSC:org.eclipse.pde.runtime.LogView - persp.newWizSC:org.eclipse.jdt.ui.wizards.JavaProjectWizard - persp.newWizSC:org.eclipse.jdt.ui.wizards.NewPackageCreationWizard - persp.newWizSC:org.eclipse.jdt.ui.wizards.NewClassCreationWizard - persp.newWizSC:org.eclipse.jdt.ui.wizards.NewInterfaceCreationWizard - persp.newWizSC:org.eclipse.jdt.ui.wizards.NewEnumCreationWizard - persp.newWizSC:org.eclipse.jdt.ui.wizards.NewAnnotationCreationWizard - persp.newWizSC:org.eclipse.jdt.ui.wizards.NewSourceFolderCreationWizard - persp.newWizSC:org.eclipse.jdt.ui.wizards.NewSnippetFileCreationWizard - persp.newWizSC:org.eclipse.jdt.ui.wizards.NewJavaWorkingSetWizard - persp.newWizSC:org.eclipse.ui.wizards.new.folder - persp.newWizSC:org.eclipse.ui.wizards.new.file - persp.newWizSC:org.eclipse.ui.editors.wizards.UntitledTextFileWizard - persp.perspSC:org.eclipse.jdt.ui.JavaBrowsingPerspective - persp.perspSC:org.eclipse.debug.ui.DebugPerspective - persp.viewSC:org.eclipse.mylyn.tasks.ui.views.tasks - persp.newWizSC:org.eclipse.mylyn.tasks.ui.wizards.new.repository.task - persp.showIn:org.eclipse.jdt.ui.PackageExplorer - persp.showIn:org.eclipse.team.ui.GenericHistoryView - persp.showIn:org.eclipse.ui.views.ResourceNavigator - persp.showIn:org.eclipse.ui.navigator.ProjectExplorer - persp.perspSC:org.eclipse.wst.jsdt.ui.JavaPerspective - persp.actionSet:org.eclipse.debug.ui.breakpointActionSet - persp.actionSet:org.eclipse.jdt.debug.ui.JDTDebugActionSet - persp.showIn:org.eclipse.egit.ui.RepositoriesView - persp.viewSC:org.eclipse.tm.terminal.view.ui.TerminalsView - persp.showIn:org.eclipse.tm.terminal.view.ui.TerminalsView - persp.newWizSC:org.eclipse.jdt.junit.wizards.NewTestCaseCreationWizard - persp.actionSet:org.eclipse.jdt.junit.JUnitActionSet - persp.actionSet:org.eclipse.eclemma.ui.CoverageActionSet - persp.showIn:org.eclipse.eclemma.ui.CoverageView - persp.viewSC:org.eclipse.ant.ui.views.AntView - - - - org.eclipse.e4.primaryNavigationStack - - - - - - - - - - - - - - - - - - - org.eclipse.e4.secondaryNavigationStack - - - - - - - - org.eclipse.e4.secondaryDataStack - - - - - - - - - - - - - - - - - - - - - - - View - categoryTag:Help - - - - - View - categoryTag:General - - ViewMenu - menuContribution:menu - - - - - - - View - categoryTag:Help - - - - org.eclipse.e4.primaryDataStack - EditorStack - active - - - Editor - org.eclipse.jdt.ui.CompilationUnitEditor - removeOnHide - active - activeOnClose - - - - - - - - View - categoryTag:General - - ViewMenu - menuContribution:menu - - - - - - - View - categoryTag:General - - - - - View - categoryTag:Java - - - - - View - categoryTag:Java Browsing - - - - - - View - categoryTag:General - - ViewMenu - menuContribution:menu - - - - - - - View - categoryTag:General - - - - - View - categoryTag:Server - - - - - View - categoryTag:Data Management - - - - - View - categoryTag:General - - - - - - View - categoryTag:General - - ViewMenu - menuContribution:menu - - - - - - - View - categoryTag:General - - - - - View - categoryTag:General - - - - - View - categoryTag:General - - - - - View - categoryTag:General - - - - - View - categoryTag:General - - - - - - View - categoryTag:General - - ViewMenu - menuContribution:menu - - - - - - - - View - categoryTag:Mylyn - - ViewMenu - menuContribution:menu - - - - - - - - View - categoryTag:Java - - ViewMenu - menuContribution:menu - - - - - - - View - categoryTag:Java - - - - - View - categoryTag:Java - - - - - View - categoryTag:General - - - - - View - categoryTag:Git - - - - - View - categoryTag:Terminal - - - - - View - categoryTag:Java - - - - - View - categoryTag:Ant - - - - toolbarSeparator - - - - Draggable - - - - toolbarSeparator - - - - Draggable - - - Draggable - - - Draggable - - - Draggable - - - Draggable - - - Draggable - - - Draggable - - - toolbarSeparator - - - - Draggable - - - - toolbarSeparator - - - - toolbarSeparator - - - - Draggable - - - stretch - SHOW_RESTORE_MENU - - - Draggable - HIDEABLE - SHOW_RESTORE_MENU - - - - - stretch - - - Draggable - - - Draggable - - - - - TrimStack - Draggable - - - - - - - platform:win32 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - platform:win32 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Editor - - - - - View - categoryTag:Ant - - - - - View - categoryTag:Gradle - - - - - View - categoryTag:Gradle - - - - - View - categoryTag:Data Management - - - - - View - categoryTag:Data Management - - - - - View - categoryTag:Data Management - - - - - View - categoryTag:Debug - - - - - View - categoryTag:Debug - - - - - View - categoryTag:Debug - - - - - View - categoryTag:Debug - - - - - View - categoryTag:Debug - - - - - View - categoryTag:Debug - - - - - View - categoryTag:Debug - - - - - View - categoryTag:Java - - - - - View - categoryTag:Git - - - - - View - categoryTag:Git - - - - - View - categoryTag:Git - - - - - View - categoryTag:Git - - - - - View - categoryTag:Git - - - - - View - categoryTag:General - - - - - View - categoryTag:Help - - - - - View - categoryTag:Debug - - - - - View - categoryTag:Java - - - - - View - categoryTag:Java - - - - - View - categoryTag:Java - - - - - View - categoryTag:Java Browsing - - - - - View - categoryTag:Java Browsing - - - - - View - categoryTag:Java Browsing - - - - - View - categoryTag:Java Browsing - - - - - View - categoryTag:Java - - - - - View - categoryTag:General - - - - - View - categoryTag:Java - - - - - View - categoryTag:Java - - - - - View - categoryTag:JPA - - - - - View - categoryTag:JPA - - - - - View - categoryTag:JavaServer Faces - - - - - View - categoryTag:JavaServer Faces - - - - - View - categoryTag:Web Services - - - - - View - categoryTag:Maven - - - - - View - categoryTag:Maven - - - - - View - categoryTag:Mylyn - - - - - View - categoryTag:Mylyn - - - - - View - categoryTag:Mylyn - - - - - View - categoryTag:Oomph - - - - - View - categoryTag:API Tools - - - - - View - categoryTag:Plug-in Development - - - - - View - categoryTag:Plug-in Development - - - - - View - categoryTag:Plug-in Development - - - - - View - categoryTag:Plug-in Development - - - - - View - categoryTag:Plug-in Development - - - - - View - categoryTag:Code Recommenders - - - - - View - categoryTag:Code Recommenders - - - - - View - categoryTag:Code Recommenders - - - - - View - categoryTag:Code Recommenders - - - - - View - categoryTag:Remote Systems - - - - - View - categoryTag:Remote Systems - - - - - View - categoryTag:Remote Systems - - - - - View - categoryTag:Remote Systems - - - - - View - categoryTag:Remote Systems - - - - - View - categoryTag:Remote Systems - - - - - View - categoryTag:Remote Systems - - - - - View - categoryTag:General - - - - - View - categoryTag:General - - - - - View - categoryTag:Team - - - - - View - categoryTag:Team - - - - - View - categoryTag:Terminal - - - - - View - categoryTag:Other - - - - - View - categoryTag:General - - - - - View - categoryTag:General - - - - - View - categoryTag:Help - - - - - View - categoryTag:General - - - - - View - categoryTag:General - - - - - View - categoryTag:General - - - - - View - categoryTag:General - - - - - View - categoryTag:General - - - - - View - categoryTag:General - - - - - View - categoryTag:General - - - - - View - categoryTag:General - - - - - View - categoryTag:General - - - - - View - categoryTag:General - - - - - View - categoryTag:General - - - - - View - categoryTag:General - - - - - View - categoryTag:Debug - - - - - View - categoryTag:JavaScript - - - - - View - categoryTag:JavaScript - - - - - View - categoryTag:JavaScript - - - - - View - categoryTag:JavaScript - - - - - View - categoryTag:JavaScript - - - - - View - categoryTag:Server - - - - - View - categoryTag:XML - - - - - View - categoryTag:XML - - - - - View - categoryTag:XML - - - - - View - categoryTag:XML - - - - - View - categoryTag:XML - - - - - - - glue - move_after:PerspectiveSpacer - SHOW_RESTORE_MENU - - - move_after:Spacer Glue - HIDEABLE - SHOW_RESTORE_MENU - - - glue - move_after:SearchField - SHOW_RESTORE_MENU - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Java/.metadata/.plugins/org.eclipse.epp.logging.aeri.ide/org.eclipse.epp.logging.aeri.ide.server/http-cache.lucene60/segments_1 b/Java/.metadata/.plugins/org.eclipse.epp.logging.aeri.ide/org.eclipse.epp.logging.aeri.ide.server/http-cache.lucene60/segments_1 deleted file mode 100644 index 5abf834..0000000 Binary files a/Java/.metadata/.plugins/org.eclipse.epp.logging.aeri.ide/org.eclipse.epp.logging.aeri.ide.server/http-cache.lucene60/segments_1 and /dev/null differ diff --git a/Java/.metadata/.plugins/org.eclipse.epp.logging.aeri.ide/org.eclipse.epp.logging.aeri.ide.server/http-cache.lucene60/write.lock b/Java/.metadata/.plugins/org.eclipse.epp.logging.aeri.ide/org.eclipse.epp.logging.aeri.ide.server/http-cache.lucene60/write.lock deleted file mode 100644 index e69de29..0000000 diff --git a/Java/.metadata/.plugins/org.eclipse.epp.logging.aeri.ide/org.eclipse.epp.logging.aeri.ide.server/local-history.lucene60/_0.cfe b/Java/.metadata/.plugins/org.eclipse.epp.logging.aeri.ide/org.eclipse.epp.logging.aeri.ide.server/local-history.lucene60/_0.cfe deleted file mode 100644 index 37bae3e..0000000 Binary files a/Java/.metadata/.plugins/org.eclipse.epp.logging.aeri.ide/org.eclipse.epp.logging.aeri.ide.server/local-history.lucene60/_0.cfe and /dev/null differ diff --git a/Java/.metadata/.plugins/org.eclipse.epp.logging.aeri.ide/org.eclipse.epp.logging.aeri.ide.server/local-history.lucene60/_0.cfs b/Java/.metadata/.plugins/org.eclipse.epp.logging.aeri.ide/org.eclipse.epp.logging.aeri.ide.server/local-history.lucene60/_0.cfs deleted file mode 100644 index 8ff91e4..0000000 Binary files a/Java/.metadata/.plugins/org.eclipse.epp.logging.aeri.ide/org.eclipse.epp.logging.aeri.ide.server/local-history.lucene60/_0.cfs and /dev/null differ diff --git a/Java/.metadata/.plugins/org.eclipse.epp.logging.aeri.ide/org.eclipse.epp.logging.aeri.ide.server/local-history.lucene60/_0.si b/Java/.metadata/.plugins/org.eclipse.epp.logging.aeri.ide/org.eclipse.epp.logging.aeri.ide.server/local-history.lucene60/_0.si deleted file mode 100644 index 29dde65..0000000 Binary files a/Java/.metadata/.plugins/org.eclipse.epp.logging.aeri.ide/org.eclipse.epp.logging.aeri.ide.server/local-history.lucene60/_0.si and /dev/null differ diff --git a/Java/.metadata/.plugins/org.eclipse.epp.logging.aeri.ide/org.eclipse.epp.logging.aeri.ide.server/local-history.lucene60/segments_1 b/Java/.metadata/.plugins/org.eclipse.epp.logging.aeri.ide/org.eclipse.epp.logging.aeri.ide.server/local-history.lucene60/segments_1 deleted file mode 100644 index c528981..0000000 Binary files a/Java/.metadata/.plugins/org.eclipse.epp.logging.aeri.ide/org.eclipse.epp.logging.aeri.ide.server/local-history.lucene60/segments_1 and /dev/null differ diff --git a/Java/.metadata/.plugins/org.eclipse.epp.logging.aeri.ide/org.eclipse.epp.logging.aeri.ide.server/local-history.lucene60/write.lock b/Java/.metadata/.plugins/org.eclipse.epp.logging.aeri.ide/org.eclipse.epp.logging.aeri.ide.server/local-history.lucene60/write.lock deleted file mode 100644 index e69de29..0000000 diff --git a/Java/.metadata/.plugins/org.eclipse.epp.logging.aeri.ide/org.eclipse.epp.logging.aeri.ide.server/server-config.json b/Java/.metadata/.plugins/org.eclipse.epp.logging.aeri.ide/org.eclipse.epp.logging.aeri.ide.server/server-config.json deleted file mode 100644 index e86ad51..0000000 --- a/Java/.metadata/.plugins/org.eclipse.epp.logging.aeri.ide/org.eclipse.epp.logging.aeri.ide.server/server-config.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "version": "v1", - "title": "Eclipse", - "timestamp": 1522581911859, - "ttl": 10080, - "helpUrl": "https://dev.eclipse.org/recommenders/community/aeri/v2/help/", - "feedbackUrl": "https://www.codetrails.com/error-analytics/", - "aboutUrl": "https://wiki.eclipse.org/EPP/Logging", - "submitUrl": "https://dev.eclipse.org/recommenders/community/confess/0.6/reports/", - "maxReportSize": 262144, - "problemsUrl": "https://www.eclipse.org/downloads/download.php?r\u003d1\u0026file\u003d/technology/epp/logging/problems.zip", - "problemsTtl": 20160, - "interestUrl": "https://dev.eclipse.org/recommenders/community/confess/v2/interest", - "connectTimeout": 10, - "socketTimeout": 10, - "acceptedProducts": [ - "org.eclipse.*", - "org.fordiac.*" - ], - "acceptedPlugins": [ - "org.apache.log4j.*", - "org.eclipse.*", - "org.fordiac.*" - ], - "acceptedPackages": [ - "ch.qos.*", - "com.cforcoding.*", - "com.google.*", - "com.gradleware.tooling.*", - "com.mountainminds.eclemma.*", - "com.naef.*", - "com.sun.*", - "java.*", - "javafx.*", - "javax.*", - "org.apache.*", - "org.eclipse.*", - "org.fordiac.*", - "org.gradle.*", - "org.jacoco.*", - "org.osgi.*", - "org.slf4j.*", - "sun.*" - ], - "requiredPackages": [ - "com.cforcoding.*", - "com.gradleware.tooling.*", - "com.mountainminds.eclemma.*", - "com.naef.*", - "org.eclipse.*", - "org.fordiac.*", - "org.gradle.*", - "org.jacoco.*" - ], - "acceptOtherPackages": false, - "acceptUiFreezes": true, - "ignoredStatuses": [ - ":java.io.IOException:There is not enough space on the disk", - ":java.net.*:", - "org.eclipse.core.filesystem::Could not delete*", - "org.eclipse.core.filesystem::Could not move*", - "org.eclipse.core.resources:org.eclipse.core.internal.resources.ResourceException:Resource is out of sync with the file system*", - "org.eclipse.core.runtime::Invalid input url*", - "org.eclipse.epp.mpc.ui:java.io.IOException:", - "org.eclipse.equinox.p2.*::", - "org.eclipse.jface:java.io.IOException:Unable to resolve plug-in*", - "org.eclipse.oomph.setup.core:$org.apache.http.ConnectionClosedException:", - "org.eclipse.pde.core::The current target platform contains errors*", - "org.eclipse.ui::Conflicting handlers for*" - ], - "problemsZipLastDownloadTimestamp": 0 -} \ No newline at end of file diff --git a/Java/.metadata/.plugins/org.eclipse.jdt.core/751949421.index b/Java/.metadata/.plugins/org.eclipse.jdt.core/751949421.index deleted file mode 100644 index d8ce7f8..0000000 Binary files a/Java/.metadata/.plugins/org.eclipse.jdt.core/751949421.index and /dev/null differ diff --git a/Java/.metadata/.plugins/org.eclipse.jdt.core/assumedExternalFilesCache b/Java/.metadata/.plugins/org.eclipse.jdt.core/assumedExternalFilesCache deleted file mode 100644 index 593f470..0000000 Binary files a/Java/.metadata/.plugins/org.eclipse.jdt.core/assumedExternalFilesCache and /dev/null differ diff --git a/Java/.metadata/.plugins/org.eclipse.jdt.core/externalFilesCache b/Java/.metadata/.plugins/org.eclipse.jdt.core/externalFilesCache deleted file mode 100644 index 593f470..0000000 Binary files a/Java/.metadata/.plugins/org.eclipse.jdt.core/externalFilesCache and /dev/null differ diff --git a/Java/.metadata/.plugins/org.eclipse.jdt.core/externalLibsTimeStamps b/Java/.metadata/.plugins/org.eclipse.jdt.core/externalLibsTimeStamps deleted file mode 100644 index 593f470..0000000 Binary files a/Java/.metadata/.plugins/org.eclipse.jdt.core/externalLibsTimeStamps and /dev/null differ diff --git a/Java/.metadata/.plugins/org.eclipse.jdt.core/index.db b/Java/.metadata/.plugins/org.eclipse.jdt.core/index.db deleted file mode 100644 index e69de29..0000000 diff --git a/Java/.metadata/.plugins/org.eclipse.jdt.core/indexNamesMap.txt b/Java/.metadata/.plugins/org.eclipse.jdt.core/indexNamesMap.txt deleted file mode 100644 index 0295c3b..0000000 --- a/Java/.metadata/.plugins/org.eclipse.jdt.core/indexNamesMap.txt +++ /dev/null @@ -1 +0,0 @@ -INDEX VERSION 1.130 diff --git a/Java/.metadata/.plugins/org.eclipse.jdt.core/javaLikeNames.txt b/Java/.metadata/.plugins/org.eclipse.jdt.core/javaLikeNames.txt deleted file mode 100644 index 8586397..0000000 --- a/Java/.metadata/.plugins/org.eclipse.jdt.core/javaLikeNames.txt +++ /dev/null @@ -1 +0,0 @@ -java \ No newline at end of file diff --git a/Java/.metadata/.plugins/org.eclipse.jdt.core/nonChainingJarsCache b/Java/.metadata/.plugins/org.eclipse.jdt.core/nonChainingJarsCache deleted file mode 100644 index 593f470..0000000 Binary files a/Java/.metadata/.plugins/org.eclipse.jdt.core/nonChainingJarsCache and /dev/null differ diff --git a/Java/.metadata/.plugins/org.eclipse.jdt.core/savedIndexNames.txt b/Java/.metadata/.plugins/org.eclipse.jdt.core/savedIndexNames.txt deleted file mode 100644 index 4a10298..0000000 --- a/Java/.metadata/.plugins/org.eclipse.jdt.core/savedIndexNames.txt +++ /dev/null @@ -1,2 +0,0 @@ -INDEX VERSION 1.130+D:\Programming\Languages\Java\.metadata\.plugins\org.eclipse.jdt.core -751949421.index diff --git a/Java/.metadata/.plugins/org.eclipse.jdt.core/variablesAndContainers.dat b/Java/.metadata/.plugins/org.eclipse.jdt.core/variablesAndContainers.dat deleted file mode 100644 index 8fcf66c..0000000 Binary files a/Java/.metadata/.plugins/org.eclipse.jdt.core/variablesAndContainers.dat and /dev/null differ diff --git a/Java/.metadata/.plugins/org.eclipse.jdt.launching/.install.xml b/Java/.metadata/.plugins/org.eclipse.jdt.launching/.install.xml deleted file mode 100644 index b5e081c..0000000 --- a/Java/.metadata/.plugins/org.eclipse.jdt.launching/.install.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/Java/.metadata/.plugins/org.eclipse.jdt.launching/libraryInfos.xml b/Java/.metadata/.plugins/org.eclipse.jdt.launching/libraryInfos.xml deleted file mode 100644 index 1321efb..0000000 --- a/Java/.metadata/.plugins/org.eclipse.jdt.launching/libraryInfos.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/Java/.metadata/.plugins/org.eclipse.jdt.ui/OpenTypeHistory.xml b/Java/.metadata/.plugins/org.eclipse.jdt.ui/OpenTypeHistory.xml deleted file mode 100644 index a4ee3cb..0000000 --- a/Java/.metadata/.plugins/org.eclipse.jdt.ui/OpenTypeHistory.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/Java/.metadata/.plugins/org.eclipse.jdt.ui/QualifiedTypeNameHistory.xml b/Java/.metadata/.plugins/org.eclipse.jdt.ui/QualifiedTypeNameHistory.xml deleted file mode 100644 index 9e390f5..0000000 --- a/Java/.metadata/.plugins/org.eclipse.jdt.ui/QualifiedTypeNameHistory.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/Java/.metadata/.plugins/org.eclipse.jdt.ui/dialog_settings.xml b/Java/.metadata/.plugins/org.eclipse.jdt.ui/dialog_settings.xml deleted file mode 100644 index f26c8d8..0000000 --- a/Java/.metadata/.plugins/org.eclipse.jdt.ui/dialog_settings.xml +++ /dev/null @@ -1,26 +0,0 @@ - -
-
- - - - - -
-
- - -
-
- -
-
-
-
- -
-
-
-
-
-
diff --git a/Java/.metadata/.plugins/org.eclipse.jst.j2ee.ui/dialog_settings.xml b/Java/.metadata/.plugins/org.eclipse.jst.j2ee.ui/dialog_settings.xml deleted file mode 100644 index bf7a32d..0000000 --- a/Java/.metadata/.plugins/org.eclipse.jst.j2ee.ui/dialog_settings.xml +++ /dev/null @@ -1,6 +0,0 @@ - -
- - - -
diff --git a/Java/.metadata/.plugins/org.eclipse.jst.j2ee.web/webLibrariesCache.index b/Java/.metadata/.plugins/org.eclipse.jst.j2ee.web/webLibrariesCache.index deleted file mode 100644 index 19c26c0..0000000 Binary files a/Java/.metadata/.plugins/org.eclipse.jst.j2ee.web/webLibrariesCache.index and /dev/null differ diff --git a/Java/.metadata/.plugins/org.eclipse.jst.j2ee/earLibrariesCache.index b/Java/.metadata/.plugins/org.eclipse.jst.j2ee/earLibrariesCache.index deleted file mode 100644 index 165f927..0000000 Binary files a/Java/.metadata/.plugins/org.eclipse.jst.j2ee/earLibrariesCache.index and /dev/null differ diff --git a/Java/.metadata/.plugins/org.eclipse.m2e.logback.configuration/logback.1.8.3.20180227-2137.xml b/Java/.metadata/.plugins/org.eclipse.m2e.logback.configuration/logback.1.8.3.20180227-2137.xml deleted file mode 100644 index e33758c..0000000 --- a/Java/.metadata/.plugins/org.eclipse.m2e.logback.configuration/logback.1.8.3.20180227-2137.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - %date [%thread] %-5level %logger{35} - %msg%n - - - OFF - - - - - ${org.eclipse.m2e.log.dir}/0.log - - ${org.eclipse.m2e.log.dir}/%i.log - 1 - 10 - - - 100MB - - - %date [%thread] %-5level %logger{35} - %msg%n - - - - - - WARN - - - - - - - - - - - - - - - diff --git a/Java/.metadata/.plugins/org.eclipse.oomph.setup/workspace.setup b/Java/.metadata/.plugins/org.eclipse.oomph.setup/workspace.setup deleted file mode 100644 index 1f73e14..0000000 --- a/Java/.metadata/.plugins/org.eclipse.oomph.setup/workspace.setup +++ /dev/null @@ -1,6 +0,0 @@ - - diff --git a/Java/.metadata/.plugins/org.eclipse.pde.core/.cache/clean-cache.properties b/Java/.metadata/.plugins/org.eclipse.pde.core/.cache/clean-cache.properties deleted file mode 100644 index eaae66b..0000000 --- a/Java/.metadata/.plugins/org.eclipse.pde.core/.cache/clean-cache.properties +++ /dev/null @@ -1,2 +0,0 @@ -#Cached timestamps -#Sun Apr 01 12:35:56 BST 2018 diff --git a/Java/.metadata/.plugins/org.eclipse.rse.core/initializerMarks/org.eclipse.rse.internal.core.RSELocalConnectionInitializer.mark b/Java/.metadata/.plugins/org.eclipse.rse.core/initializerMarks/org.eclipse.rse.internal.core.RSELocalConnectionInitializer.mark deleted file mode 100644 index e69de29..0000000 diff --git a/Java/.metadata/.plugins/org.eclipse.rse.core/profiles/PRF.bens-pc_67/FP.local.files_0/node.properties b/Java/.metadata/.plugins/org.eclipse.rse.core/profiles/PRF.bens-pc_67/FP.local.files_0/node.properties deleted file mode 100644 index 5294fe1..0000000 --- a/Java/.metadata/.plugins/org.eclipse.rse.core/profiles/PRF.bens-pc_67/FP.local.files_0/node.properties +++ /dev/null @@ -1,57 +0,0 @@ -# RSE DOM Node -00-name=Bens-PC\:local.files -01-type=FilterPool -03-attr.default=true -03-attr.deletable=true -03-attr.id=local.files -03-attr.nonRenamable=false -03-attr.owningParentName=null -03-attr.release=200 -03-attr.singleFilterStringOnly=false -03-attr.singleFilterStringOnlyESet=false -03-attr.stringsCaseSensitive=true -03-attr.supportsDuplicateFilterStrings=false -03-attr.supportsNestedFilters=true -03-attr.type=default -06-child.00000.00-name=My Home -06-child.00000.01-type=Filter -06-child.00000.03-attr.default=false -06-child.00000.03-attr.filterType=default -06-child.00000.03-attr.id=My Home -06-child.00000.03-attr.nonChangable=false -06-child.00000.03-attr.nonDeletable=false -06-child.00000.03-attr.nonRenamable=false -06-child.00000.03-attr.promptable=false -06-child.00000.03-attr.relativeOrder=0 -06-child.00000.03-attr.release=200 -06-child.00000.03-attr.singleFilterStringOnly=false -06-child.00000.03-attr.stringsCaseSensitive=false -06-child.00000.03-attr.stringsNonChangable=false -06-child.00000.03-attr.supportsDuplicateFilterStrings=false -06-child.00000.03-attr.supportsNestedFilters=true -06-child.00000.06-child.00000.00-name=C\:\\Users\\Ben\\* -06-child.00000.06-child.00000.01-type=FilterString -06-child.00000.06-child.00000.03-attr.default=false -06-child.00000.06-child.00000.03-attr.string=C\:\\Users\\Ben\\* -06-child.00000.06-child.00000.03-attr.type=default -06-child.00001.00-name=Drives -06-child.00001.01-type=Filter -06-child.00001.03-attr.default=false -06-child.00001.03-attr.filterType=default -06-child.00001.03-attr.id=Drives -06-child.00001.03-attr.nonChangable=false -06-child.00001.03-attr.nonDeletable=false -06-child.00001.03-attr.nonRenamable=false -06-child.00001.03-attr.promptable=false -06-child.00001.03-attr.relativeOrder=0 -06-child.00001.03-attr.release=200 -06-child.00001.03-attr.singleFilterStringOnly=false -06-child.00001.03-attr.stringsCaseSensitive=false -06-child.00001.03-attr.stringsNonChangable=false -06-child.00001.03-attr.supportsDuplicateFilterStrings=false -06-child.00001.03-attr.supportsNestedFilters=true -06-child.00001.06-child.00000.00-name=* -06-child.00001.06-child.00000.01-type=FilterString -06-child.00001.06-child.00000.03-attr.default=false -06-child.00001.06-child.00000.03-attr.string=* -06-child.00001.06-child.00000.03-attr.type=default diff --git a/Java/.metadata/.plugins/org.eclipse.rse.core/profiles/PRF.bens-pc_67/H.local_16/node.properties b/Java/.metadata/.plugins/org.eclipse.rse.core/profiles/PRF.bens-pc_67/H.local_16/node.properties deleted file mode 100644 index 05c7a89..0000000 --- a/Java/.metadata/.plugins/org.eclipse.rse.core/profiles/PRF.bens-pc_67/H.local_16/node.properties +++ /dev/null @@ -1,25 +0,0 @@ -# RSE DOM Node -00-name=Local -01-type=Host -03-attr.description= -03-attr.hostname=LOCALHOST -03-attr.offline=false -03-attr.promptable=false -03-attr.systemType=org.eclipse.rse.systemtype.local -03-attr.type=Local -06-child.00000.00-name=Local Connector Service -06-child.00000.01-type=ConnectorService -06-child.00000.03-attr.group=Local Connector Service -06-child.00000.03-attr.port=0 -06-child.00000.03-attr.useSSL=false -06-child.00000.06-child.00000.00-name=Local Files -06-child.00000.06-child.00000.01-type=SubSystem -06-child.00000.06-child.00000.03-attr.hidden=false -06-child.00000.06-child.00000.03-attr.type=local.files -06-child.00000.06-child.00000.06-child.00000.00-name=Bens-PC___Bens-PC\:local.files -06-child.00000.06-child.00000.06-child.00000.01-type=FilterPoolReference -06-child.00000.06-child.00000.06-child.00000.03-attr.refID=local.files -06-child.00000.06-child.00001.00-name=Local Shells -06-child.00000.06-child.00001.01-type=SubSystem -06-child.00000.06-child.00001.03-attr.hidden=false -06-child.00000.06-child.00001.03-attr.type=local.shells diff --git a/Java/.metadata/.plugins/org.eclipse.rse.core/profiles/PRF.bens-pc_67/node.properties b/Java/.metadata/.plugins/org.eclipse.rse.core/profiles/PRF.bens-pc_67/node.properties deleted file mode 100644 index cbd10fc..0000000 --- a/Java/.metadata/.plugins/org.eclipse.rse.core/profiles/PRF.bens-pc_67/node.properties +++ /dev/null @@ -1,7 +0,0 @@ -# RSE DOM Node -00-name=Bens-PC -01-type=Profile -03-attr.defaultPrivate=true -03-attr.isActive=true -05-ref.00000=FP.local.files_0 -05-ref.00001=H.local_16 diff --git a/Java/.metadata/.plugins/org.eclipse.ui.ide/dialog_settings.xml b/Java/.metadata/.plugins/org.eclipse.ui.ide/dialog_settings.xml deleted file mode 100644 index 690670e..0000000 --- a/Java/.metadata/.plugins/org.eclipse.ui.ide/dialog_settings.xml +++ /dev/null @@ -1,8 +0,0 @@ - -
-
- - - -
-
diff --git a/Java/.metadata/.plugins/org.eclipse.ui.intro/dialog_settings.xml b/Java/.metadata/.plugins/org.eclipse.ui.intro/dialog_settings.xml deleted file mode 100644 index f118f02..0000000 --- a/Java/.metadata/.plugins/org.eclipse.ui.intro/dialog_settings.xml +++ /dev/null @@ -1,4 +0,0 @@ - -
- -
diff --git a/Java/.metadata/.plugins/org.eclipse.ui.intro/introstate b/Java/.metadata/.plugins/org.eclipse.ui.intro/introstate deleted file mode 100644 index 236d56c..0000000 --- a/Java/.metadata/.plugins/org.eclipse.ui.intro/introstate +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/Java/.metadata/.plugins/org.eclipse.ui.workbench/dialog_settings.xml b/Java/.metadata/.plugins/org.eclipse.ui.workbench/dialog_settings.xml deleted file mode 100644 index 851c296..0000000 --- a/Java/.metadata/.plugins/org.eclipse.ui.workbench/dialog_settings.xml +++ /dev/null @@ -1,15 +0,0 @@ - -
-
- - - - - - - - - - -
-
diff --git a/Java/.metadata/.plugins/org.eclipse.ui.workbench/workingsets.xml b/Java/.metadata/.plugins/org.eclipse.ui.workbench/workingsets.xml deleted file mode 100644 index 01d6377..0000000 --- a/Java/.metadata/.plugins/org.eclipse.ui.workbench/workingsets.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/Java/.metadata/.plugins/org.eclipse.wst.jsdt.core/externalLibsTimeStamps b/Java/.metadata/.plugins/org.eclipse.wst.jsdt.core/externalLibsTimeStamps deleted file mode 100644 index 7708119..0000000 Binary files a/Java/.metadata/.plugins/org.eclipse.wst.jsdt.core/externalLibsTimeStamps and /dev/null differ diff --git a/Java/.metadata/.plugins/org.eclipse.wst.jsdt.core/indexes/savedIndexNames.txt b/Java/.metadata/.plugins/org.eclipse.wst.jsdt.core/indexes/savedIndexNames.txt deleted file mode 100644 index d5052eb..0000000 --- a/Java/.metadata/.plugins/org.eclipse.wst.jsdt.core/indexes/savedIndexNames.txt +++ /dev/null @@ -1,6 +0,0 @@ -INDEX VERSION 1.4+D:\Programming\Languages\Java\.metadata\.plugins\org.eclipse.wst.jsdt.core\indexes -1900981994.index -3405275606.index -217724285.index -1876955144.index -1657421994.index diff --git a/Java/.metadata/.plugins/org.eclipse.wst.jsdt.core/libraries/baseBrowserLibrary.js b/Java/.metadata/.plugins/org.eclipse.wst.jsdt.core/libraries/baseBrowserLibrary.js deleted file mode 100644 index 2fc99ea..0000000 --- a/Java/.metadata/.plugins/org.eclipse.wst.jsdt.core/libraries/baseBrowserLibrary.js +++ /dev/null @@ -1,5393 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008, 2013 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ - -/** - * Object DOMException() - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @augments Object - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - * @see Object - */ -function DOMException(){}; -DOMException.prototype = new Object(); -/** - * Constant DOMException.INDEX_SIZE_ERR=1 - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @constant - * @type Number - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -DOMException.INDEX_SIZE_ERR=1; -/** - * Constant DOMException.DOMSTRING_SIZE_ERR=2 - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @constant - * @type Number - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -DOMException.DOMSTRING_SIZE_ERR=2; -/** - * Constant DOMException.HIERARCHY_REQUEST_ERR=3 - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @constant - * @type Number - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -DOMException.HIERARCHY_REQUEST_ERR=3; -/** - * Constant DOMException.WRONG_DOCUMENT_ERR=4 - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @constant - * @type Number - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -DOMException.WRONG_DOCUMENT_ERR=4; -/** - * Constant DOMException.INVALID_CHARACTER_ERR=5 - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @constant - * @type Number - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -DOMException.INVALID_CHARACTER_ERR=5; -/** - * Constant DOMException.NO_DATA_ALLOWED_ER=6 - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @constant - * @type Number - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -DOMException.NO_DATA_ALLOWED_ER=6; -/** - * Constant DOMException.NO_MODIFICATION_ALLOWED_ERR=7 - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @constant - * @type Number - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -DOMException.NO_MODIFICATION_ALLOWED_ERR=7; -/** - * Constant DOMException.NOT_FOUND_ERR=8 - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @constant - * @type Number - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -DOMException.NOT_FOUND_ERR=8; -/** - * Constant DOMException.NOT_SUPPORTED_ERR=9 - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @constant - * @type Number - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -DOMException.NOT_SUPPORTED_ERR=9; -/** - * Constant DOMException.INUSE_ATTRIBUTE_ERR=10 - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @constant - * @type Number - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -DOMException.INUSE_ATTRIBUTE_ERR=10; -/** - * Constant DOMException.INVALID_STATE_ERR=11 - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @constant - * @type Number - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -DOMException.INVALID_STATE_ERR=11; -/** - * Constant DOMException.SYNTAX_ERR=12 - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @constant - * @type Number - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -DOMException.SYNTAX_ERR=12; -/** - * Constant DOMException.INVALID_MODIFICATION_ER=13 - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @constant - * @type Number - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -DOMException.INVALID_MODIFICATION_ER=13; -/** - * Constant DOMException.NAMESPACE_ERR=14 - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @constant - * @type Number - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -DOMException.NAMESPACE_ERR=14; -/** - * Constant DOMException.NVALID_ACCESS_ERR=15 - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @constant - * @type Number - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -DOMException.INVALID_ACCESS_ERR=15; -/** - * Property code - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @type Number - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -DOMException.prototype.code=0; - -/** - * Object DOMImplementation() - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @augments Object - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - * @see Object - */ -function DOMImplementation(){}; -DOMImplementation.prototype = new Object(); -/** - * function hasFeature(feature, version) - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @param {String} feature - * @param {String} version - * @returns {Boolean} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -DOMImplementation.prototype.hasFeature = function(feature, version){return false;}; -/** - * function createDocumentType(qualifiedName, publicId, systemId) - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @param {String} qualifiedName - * @param {String} publicId - * @param {String} systemId - * @returns {DocumentType} - * @throws DOMException - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - * @see DocumentType - */ -DOMImplementation.prototype.createDocumentType = function(qualifiedName, publicId, systemId){return new DocumentType();}; -/** - * function createDocument(namespaceURI, qualifiedName, doctype) - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @param {String} namespaceURI - * @param {String} qualifiedName - * @param {DocumentType} doctype - * @returns {Document} - * @throws DOMException - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - * @see Document - */ -DOMImplementation.prototype.createDocument = function(namespaceURI, qualifiedName, doctype){return new HTMLDocument();}; - -/** - * Object DocumentFragment() - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @augments Node - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - * @see Node - */ -function DocumentFragment(){}; -DocumentFragment.prototype=new Node(); - -/** - * Object Document() - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @augments Node - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - * @see Node - */ -function Document(){}; -Document.prototype = new Node(); -/** - * Property defaultView - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @type Window - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - * @see Window - */ -Document.prototype.defaultView = new Window(); -/** - * Property doctype - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @type DocumentType - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - * @see DocumentType - */ -Document.prototype.doctype = new DocumentType(); -/** - * Property implementation - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @type DOMImplementation - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - * @see DOMImplementation - */ -Document.prototype.implementation = new DOMImplementation(); -/** - * Property documentElement - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @type Element - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - * @see Element - */ -Document.prototype.documentElement= new HTMLElement(); -/** - * Property styleSheets - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @type Array - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Document.prototype.styleSheets= new Array(); -/** - * function createElement(tagName) - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @param {String} tagName - * @returns {Element} - * @throws DOMException - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - * @see Element - */ -Document.prototype.createElement=function(tagName){return new HTMLElement();}; -/** - * function createDocumentFragment() - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @returns {DocumentFragment} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - * @see DocumentFragment - */ -Document.prototype.createDocumentFragment=function(){return new DocumentFragment();}; -/** - * function createTextNode(data) - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @param {String} data - * @returns {Text} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - * @see Text - */ -Document.prototype.createTextNode=function(data){return new Text();}; -/** - * function createComment(data) - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @param {String} data - * @returns {Comment} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - * @see Comment - */ -Document.prototype.createComment=function(data){return new Comment();}; -/** - * function createCDATASection(data) - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @param {String} data - * @returns {CDATASection} - * @throws DOMException - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - * @see CDATASection - */ -Document.prototype.createCDATASection=function(data){}; -/** - * function createProcessingInstruction(target, data) - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @type ProcessingInstruction - * @param {String} target - * @param {String} data - * @returns {ProcessingInstruction} - * @throws DOMException - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - * @see ProcessingInstruction -*/ -Document.prototype.createProcessingInstruction=function(target, data){return new ProcessingInstruction();}; -/** - * function createAttribute(name) - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @param {String} name - * @returns {Attr} - * @throws DOMException - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - * @see Attr - */ -Document.prototype.createAttribute=function(name){return new Attr();}; -/** - * function createEntityReference(name) - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @param {String} name - * @returns {EntityReference} - * @throws DOMException - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - * @see EntityReference - */ -Document.prototype.createEntityReference=function(name){return new EntityReference();}; -/** - * function getElementsByTagName(tagname) - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @param {String} tagname - * @returns {NodeList} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - * @see NodeList - */ -Document.prototype.getElementsByTagName=function(tagname){return new NodeList();}; -/** - * function importNode(importedNode, deep) - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @param {Node} importedNode - * @param {Boolean} deep - * @returns {Node} - * @throws DOMException - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - * @see Node - */ -Document.prototype.importNode=function(importedNode, deep){return new Node();}; -/** - * function createElementNS(namespaceURI, qualifiedName) - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @param {String} namespaceURI - * @param {String} qualifiedName - * @returns {Element} - * @throws DOMException - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - * @see Element - */ -Document.prototype.createElementNS=function(namespaceURI, qualifiedName){return new HTMLElement();}; -/** - * function createEvent(String eventType) - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @param {String} eventType - * @returns {Object} - * @throws DOMException - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - * @see Element - */ -Document.prototype.createEvent=function(eventType){return new Object();}; -/** - * function createAttributeNS(namespaceURI, qualifiedName) - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @param {String} namespaceURI - * @param {String} qualifiedName - * @returns {Attr} - * @throws DOMException - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - * @see Attr - */ -Document.prototype.createAttributeNS=function(namespaceURI, qualifiedName){return new Attr();}; -/** - * function getElementsByTagNameNS(namespaceURI, localName) - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @param {String} namespaceURI - * @param {String} localName - * @returns {NodeList} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - * @see NodeList - */ -Document.prototype.getElementsByTagNameNS=function(namespaceURI, localName){return new NodeList();}; -/** - * function getElementById(elementId) - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @param {String} elementId - * @returns {Element} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - * @see Element - */ -Document.prototype.getElementById=function(elementId){return new HTMLElement();}; - -/** - * Object Node() - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @augments Object - * @constructor - * @memberOf Node - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - * @see EventTarget - */ -function Node(){}; -Node.prototype=new EventTarget(); -/** - * Constant Node.ELEMENT_NODE=1 - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @constant - * @type Number - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Node.ELEMENT_NODE=1; -/** - * Constant Node.ATTRIBUTE_NODE=2 - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @constant - * @type Number - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Node.ATTRIBUTE_NODE=2; -/** - * Constant Node.TEXT_NODE=3 - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @constant - * @type Number - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Node.TEXT_NODE=3; -/** - * Constant Node.CDATA_SECTION_NODE=4 - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @constant - * @type Number - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Node.CDATA_SECTION_NODE=4; -/** - * Constant Node.ENTITY_REFERENCE_NODE=5 - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @constant - * @type Number - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Node.ENTITY_REFERENCE_NODE=5; -/** - * Constant Node.ENTITY_NODE=6 - * @type Number - * @memberOf Node - * @see Node - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - - * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html -*/ -Node.ENTITY_NODE=6; -/** - * Constant Node.PROCESSING_INSTRUCTION_NODE=7 - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @constant - * @type Number - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Node.PROCESSING_INSTRUCTION_NODE=7; -/** - * Constant Node.COMMENT_NODE=8 - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @constant - * @type Number - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Node.COMMENT_NODE=8; -/** - * Constant Node.DOCUMENT_NODE=9 - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @constant - * @type Number - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Node.DOCUMENT_NODE=9; -/** - * Constant Node.DOCUMENT_TYPE_NODE=10 - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @constant - * @type Number - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Node.DOCUMENT_TYPE_NODE=10; -/** - * Constant Node.DOCUMENT_FRAGMENT_NODE=11 - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @constant - * @type Number - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Node.DOCUMENT_FRAGMENT_NODE=11; -/** - * Constant Node.NOTATION_NODE=12 - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @constant - * @type Number - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Node.NOTATION_NODE=12; -/** - * Property nodeName - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Node.prototype.nodeName = ""; -/** - * Property nodeValue - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @type String - * @throws DOMException - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Node.prototype.nodeValue = ""; -/** - * Property nodeType - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @type Number - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Node.prototype.nodeType = 0; -/** - * Property parentNode - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @type Node - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - * @see Node - */ -Node.prototype.parentNode=new Node(); -/** - * Property childNodes - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @type NodeList - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - * @see NodeList -*/ -Node.prototype.childNodes=new NodeList(); -/** - * Property firstChild - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @type Node - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - * @see Node - */ -Node.prototype.firstChild=new Node(); -/** - * Property lastChild - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @type Node - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - * @see Node - */ -Node.prototype.lastChild=new Node(); -/** - * Property previousSibling - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @type Node - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - * @see Node - */ -Node.prototype.previousSibling=new Node(); -/** - * Property nextSibling - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @type Node - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - * @see Node - */ -Node.prototype.nextSibling=new Node(); -/** - * Property attributes - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @type NamedNodeMap - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - * @see NamedNodeMap - */ -Node.prototype.attributes=new NamedNodeMap(); -/** - * Property ownerDocument - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @type Document - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - * @see Document - */ -Node.prototype.ownerDocument = new HTMLDocument(); -/** - * Property namespaceURI - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Node.prototype.namespaceURI=""; -/** - * Property prefix - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @type String - * @throws DOMException - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Node.prototype.prefix = ""; -/** - * Property localName - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Node.prototype.localName= ""; -/** - * function insertBefore(newChild, refChild) - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @param {Node} newChild - * @param {Node} refChild - * @returns {Node} - * @throws DOMException - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - * @see Node - */ -Node.prototype.insertBefore = function(newChild, refChild){return new Node();}; -/** - * function replaceChild(newChild, oldChild) - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @param {Node} newChild - * @param {Node} oldChild - * @returns {Node} - * @throws DOMException - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - * @see Node - */ -Node.prototype.replaceChild = function(newChild, oldChild){return new Node();}; -/** - * function removeChild(oldChild) - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @param {Node} oldChild - * @returns {Node} - * @throws DOMException - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - * @see Node - */ -Node.prototype.removeChild = function(oldChild){return new Node();}; -/** - * function appendChild(newChild) - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @param {Node} newChild - * @returns {Node} - * @throws DOMException - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - * @see Node - */ -Node.prototype.appendChild = function(newChild){return new Node();}; -/** - * function hasChildNodes() - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @returns {Boolean} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Node.prototype.hasChildNodes=function(){return false;}; -/** - * function cloneNode(deep) - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @param {Boolean} deep - * @returns {Node} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - * @see Node - */ -Node.prototype.cloneNode=function(deep){return new Node();}; -/** - * function normalize() - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Node.prototype.normalize = function(){}; -/** - * function isSupported(feature, version) - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @param {String} feature - * @param {String} version - * @returns {Boolean} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Node.prototype.isSupported=function(feature, version){return false;}; -/** - * function hasAttributes() - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @returns {Boolean} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Node.prototype.hasAttributes=function(){return false;}; - -/** - * Object NodeList() - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @augments Object - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - * @see Object - */ -function NodeList(){}; -NodeList.prototype = new Object(); -/** - * Property length - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @type Number - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -NodeList.prototype.length=0; -/** - * function item(index) - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * Note: This object can also be dereferenced using square bracket notation (e.g. obj[1]). Dereferencing with an integer index is equivalent to invoking the item method with that index - * - * @param {Number} index - * @returns {Node} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - * @see Node -*/ -NodeList.prototype.item = function(index){return new Node();}; - -/** - * Object NamedNodeMap() - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @augments Object - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - * @see Object - */ -function NamedNodeMap(){}; -NamedNodeMap.prototype = new Object(); -/** - * Property length - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @type Number - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -NamedNodeMap.prototype.length=0; -/** - * function getNamedItem(name) - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @param {String} name - * @returns {Node} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - * @see Node - */ -NamedNodeMap.prototype.getNamedItem=function(name){return new Node();}; -/** - * function setNamedItem(arg) - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @param {Node} arg - * @returns {Node} - * @throws DOMException - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - * @see Node - */ -NamedNodeMap.prototype.setNamedItem=function(arg){return new Node();}; -/** - * function removeNamedItem(name) - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @param {String} name - * @returns {Node} - * @throws DOMException - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - * @see Node - */ -NamedNodeMap.prototype.removeNamedItem=function(name){return new Node();}; -/** - * function item(index) - * Note: This object can also be dereferenced using square bracket notation (e.g. obj[1]). Dereferencing with an integer index is equivalent to invoking the item method with that index. - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @param {Number} index - * @returns {Node} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - * @see Node - */ -NamedNodeMap.prototype.item=function(index){return new Node();}; -/** - * function getNamedItemNS(namespaceURI, localName) - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @param {String} namespaceURI - * @param {String} localName - * @returns {Node} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - * @see Node - */ -NamedNodeMap.prototype.getNamedItemNS=function(namespaceURI, localName){return new Node();}; -/** - * function setNamedItemNS(arg) - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @param {Node} arg - * @returns {Node} - * @throws DOMException - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - * @see Node - */ -NamedNodeMap.prototype.setNamedItemNS=function(arg){return new Node();}; -/** - * function removeNamedItemNS(namespaceURI, localName) - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @param {String} namespaceURI - * @param {String} localName - * @returns {Node} - * @throws DOMException - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - * @see Node - */ -NamedNodeMap.prototype.removeNamedItemNS=function(namespaceURI, localName){return new Node();}; - -/** - * Object CharacterData() - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @augments Node - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - * @see Node - */ -function CharacterData(){}; -CharacterData.prototype=new Node(); -/** - * Property data - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @type String - * @throws DOMException - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -CharacterData.prototype.data=""; -/** - * Property length - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @type Number - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -CharacterData.prototype.length=0; -/** - * function substringData(offset, count) - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @param {Number} offset - * @param {Number} count - * @returns {String} - * @throws DOMException - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -CharacterData.prototype.substringData=function(offset, count){return "";}; -/** - * function appendData(arg) - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @param {String} arg - * @throws DOMException - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -CharacterData.prototype.appendData=function(arg){}; -/** - * function insertData(offset, arg) - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @param {Number} offset - * @param {String} arg - * @throws DOMException - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -CharacterData.prototype.insertData=function(offset, arg){}; -/** - * function deleteData(offset, count) - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @param {Number} offset - * @param {Number} count - * @throws DOMException - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -CharacterData.prototype.deleteData=function(offset, count){}; -/** - * function replaceData(offset, count, arg) - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @param {Number} offset - * @param {Number} count - * @param {String} arg - * @throws DOMException - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -CharacterData.prototype.replaceData=function(offset, count, arg){}; - -/** - * Object Attr() - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @augments Node - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - * @see Node - */ -function Attr(){}; -Attr.prototype = new Node(); -/** - * Property name - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Attr.prototype.name = ""; -/** - * Property specified - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @type Boolean - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Attr.prototype.specified = false; -/** - * Property value - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @type String - * @throws DOMException - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Attr.prototype.value = ""; -/** - * Property ownerElement - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @type Element - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - * @see Element - */ -Attr.prototype.ownerElement = new Element(); - -/** - * Object Element() - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @augments Node - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - * @see Node - */ -function Element(){}; -Element.prototype=new Node(); -/** - * Property tagName - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Element.prototype.tagName=""; -/** - * function addEventListener(Stirng type, Function listener, Boolean useCapture) - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @param {String} type - * @param {Function} listener - * @param {Boolean} useCapture - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Element.prototype.addEventListener=function(type, listener, useCapture){}; -/** - * function attachEvent(String type, Function listener) - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @param {String} type - * @param {Function} listener - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Element.prototype.attachEvent=function(type, listener){}; -/** - * function detachEvent(String type, Function listener) - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @param {String} type - * @param {Function} listener - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Element.prototype.detachEvent=function(type, listener){}; -/** - * function dispatchEvent(Object event) - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @param {Object} event - * @returns {Boolean} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Element.prototype.dispatchEvent=function(event){return false;}; -/** - * function getAttribute(name) - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @param {String} name - * @returns {String} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Element.prototype.getAttribute=function(name){return "";}; -/** - * function setAttribute(name, value) - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @param {String} name - * @param {String} value - * @throws DOMException - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Element.prototype.setAttribute=function(name, value){}; -/** - * function removeAttribute(name) - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @param {String} name - * @throws DOMException - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Element.prototype.removeAttribute=function(name){}; -/** - * function getAttributeNode(name) - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @param {String} name - * @returns {Attr} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Element.prototype.getAttributeNode=function(name){return new Attr();}; -/** - * function setAttributeNode(newAttr) - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @param {Attr} newAttr - * @returns {Attr} - * @throws DOMException - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Element.prototype.setAttributeNode=function(newAttr){return new Attr();}; -/** - * function removeAttributeNode(oldAttr) - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @param {Attr} oldAttr - * @returns {Attr} - * @throws DOMException - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Element.prototype.removeAttributeNode=function(oldAttr){return new Attr();}; -/** - * function getElementsByTagName(name) - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @param {String} name - * @returns {NodeList} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Element.prototype.getElementsByTagName=function(name){return new NodeList();}; -/** - * function getAttributeNS(namespaceURI, localName) - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @param {String} namespaceURI - * @param {String} localName - * @returns {String} - * @throws DOMException - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Element.prototype.getAttributeNS=function(namespaceURI, localName){return "";}; -/** - * function setAttributeNS(namespaceURI, qualifiedName, value) - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @param {String} namespaceURI - * @param {String} qualifiedName - * @param {String} value - * @throws DOMException - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Element.prototype.setAttributeNS=function(namespaceURI, qualifiedName, value){}; -/** - * function removeAttributeNS(namespaceURI, localName) - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @param {String} namespaceURI - * @param {String} localName - * @throws DOMException - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Element.prototype.removeAttributeNS=function(namespaceURI, localName){}; -/** - * function getAttributeNodeNS(namespaceURI, localName) - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @param {String} namespaceURI - * @param {String} localName - * @returns {Attr} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Element.prototype.getAttributeNodeNS=function(namespaceURI, localName){return new Attr();}; -/** - * function setAttributeNodeNS(newAttr) - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @param {Attr} newAttr - * @returns {Attr} - * @throws DOMException - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Element.prototype.setAttributeNodeNS=function(newAttr){return new Attr();}; -/** - * function getElementsByTagNameNS(namespaceURI, localName) - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @param {String} namespaceURI - * @param {String} localName - * @returns {NodeList} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Element.prototype.getElementsByTagNameNS=function(namespaceURI, localName){return new NodeList();}; -/** - * function hasAttribute(name) - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @param {String} name - * @returns {Boolean} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Element.prototype.hasAttribute=function(name){return false;}; -/** - * function hasAttributeNS(namespaceURI, localName) - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @param {String} namespaceURI - * @param {String} localName - * @returns {Boolean} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Element.prototype.hasAttributeNS=function(namespaceURI, localName){return false;}; - -/** - * Object Text() - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @augments CharacterData - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - * @see CharacterData - */ -function Text(){}; -Text.prototype = new CharacterData(); -/** - * function splitText(offset) - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @param {Number} offset - * @returns {Text} - * @throws DOMException - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - * @see Text - */ -Text.prototype.splitText = function(offset) {return new Text();}; - -/** - * Object Comment() - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @augments CharacterData - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - * @see CharacterData - */ -function Comment(){}; -Comment.prototype = new CharacterData(); - -/** - * Object CDATASection() - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @augments Text - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - * @see Text - */ -function CDATASection(){}; -CDATASection.prototype = new Text(); - -/** - * Object DocumentType() - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @augments Node - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - * @see Node - */ -function DocumentType(){}; -DocumentType.prototype = new Node(); -/** - * Property name - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -DocumentType.prototype.name=""; -/** - * Property entities - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @type NamedNodeMap - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -DocumentType.prototype.entities = new NamedNodeMap(); -/** - * Property notations - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @type NamedNodeMap - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -DocumentType.prototype.notations=new NamedNodeMap(); -/** - * Property publicId - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -DocumentType.prototype.publicId=""; -/** - * Property systemId - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -DocumentType.prototype.systemId=""; -/** - * Property internalSubset - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -DocumentType.prototype.internalSubset=""; - -/** - * Object Notation() - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @augments Node - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - * @see Node - */ -function Notation(){}; -Notation.prototype=new Node(); -/** - * Property publicId - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Notation.prototype.publicId=""; -/** - * Property systemId - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Notation.prototype.systemId=""; - -/** - * Object Entity() - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @augments Node - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - * @see Node - */ -function Entity(){}; -Entity.prototype=new Node(); -/** - * Property publicId - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Entity.prototype.publicId=""; -/** - * Property systemId - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Entity.prototype.systemId=""; -/** - * Property notationName - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Entity.prototype.notationName=""; - -/** - * Object EntityReference() - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @augments Node - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - * @see Node - */ -function EntityReference(){}; -EntityReference.prototype=new Node(); - -/** - * Object ProcessingInstruction() - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @augments Node - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - * @see Node - */ -function ProcessingInstruction(){}; -ProcessingInstruction.prototype=new Node(); -/** - * Property target - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -ProcessingInstruction.prototype.target=""; -/** - * Property target - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * - * @type String - * @throws DOMException - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -ProcessingInstruction.prototype.data=""; - - -/*HTML DOM Below this line*/ - -/** - * Object HTMLCollection() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @augments Object - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -function HTMLCollection(){}; -HTMLCollection.prototype = new Object(); -/** - * Property length - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type Number - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLCollection.prototype.length=0; -/** - * function item(index) - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @param {Number} index - * @returns {Node} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLCollection.prototype.item = function(index){return new Node();}; -/** - * function namedItem(name) - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @param {String} name - * @returns {Node} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLCollection.prototype.namedItem = function(index){return new Node();}; - -/** - * Object HTMLOptionsCollection() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @augments Object - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -function HTMLOptionsCollection(){}; -HTMLOptionsCollection.prototype = new Object(); -/** - * Property length - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type Number - * @throws DOMException - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLOptionsCollection.prototype.length=0; -/** - * function item(index) - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @param {Number} index - * @returns {Node} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLOptionsCollection.prototype.item = function(index){return new Node();}; -/** - * function namedItem(name) - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @param {String} name - * @returns {Node} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLOptionsCollection.prototype.namedItem = function(index){return new Node();}; - -/** - * Object HTMLDocument() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @augments Document - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - * @see Document - */ -function HTMLDocument(){}; -HTMLDocument.prototype = new Document(); -/** - * Property title - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLDocument.prototype.title=""; -/** - * Property referrer - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLDocument.prototype.referrer=""; -/** - * Property domain - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLDocument.prototype.domain=""; -/** - * Property URL - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLDocument.prototype.URL=""; -/** - * Property body - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type HTMLElement - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLDocument.prototype.body=new HTMLElement(); -/** - * Property images - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type HTMLCollection - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLDocument.prototype.images=new HTMLCollection(); -/** - * Property applets - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type HTMLCollection - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLDocument.prototype.applets=new HTMLCollection(); -/** - * Property links - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type HTMLCollection - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLDocument.prototype.links=new HTMLCollection(); -/** - * Property forms - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type HTMLCollection - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLDocument.prototype.forms=new HTMLCollection(); -/** - * Property anchors - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type HTMLCollection - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLDocument.prototype.anchors=new HTMLCollection(); -/** - * Property cookie - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @throws DOMException - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLDocument.prototype.cookie=""; -/** - * Property lastModified - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLDocument.prototype.lastModified=""; -/** - * function open() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLDocument.prototype.open = function(){}; -/** - * function close() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLDocument.prototype.close = function(){}; -/** - * function write(text) - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @param {String} text - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLDocument.prototype.write = function(text){}; -/** - * function writeln(text) - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @param {String} text - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLDocument.prototype.writeln = function(text){}; -/** - * function getElementsByName(elementName) - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @param {String} elementName - * @returns {NodeList} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLDocument.prototype.getElementsByName = function(elementName){return new NodeList();}; - -/** - * Object HTMLElement() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @augments Element - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - * @see Element - */ -function HTMLElement(){}; -HTMLElement.prototype = new Element(); -/** - * Property id - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLElement.prototype.id=""; -/** - * Property title - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLElement.prototype.title=""; -/** - * Property lang - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLElement.prototype.lang=""; -/** - * Property dir - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLElement.prototype.dir=""; -/** - * Property className - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLElement.prototype.className=""; -/** - * Property innerHTML - * - * @type String - */ -HTMLElement.prototype.innerHTML=""; -/** - * Property offsetHeight - * - * @type Number - */ -HTMLElement.prototype.offsetHeight=0; -/** - * Property offsetWidth - * - * @type Number - */ -HTMLElement.prototype.offsetWidth=0; -/** - * Property offsetLeft - * - * @type Number - */ -HTMLElement.prototype.offsetLeft=0; -/** - * Property offsetTop - * - * @type Number - */ -HTMLElement.prototype.offsetTop=0; -/** - * Property offsetParent - * - * @type HTMLElement - */ -HTMLElement.prototype.offsetParent = new HTMLElement(); -/** - * Property scrollHeight - * - * @type Number - */ -HTMLElement.prototype.scrollHeight=0; -/** - * Property scrollWidth - * - * @type Number - */ -HTMLElement.prototype.scrollWidth=0; -/** - * Property scrollLeft - * - * @type Number - */ -HTMLElement.prototype.scrollLeft=0; -/** - * Property scrollTop - * - * @type Number - */ -HTMLElement.prototype.scrollTop=0; -/** - * Property style - * - * @type CSS2Properties - */ -HTMLElement.prototype.style = new CSS2Properties(); - -/** - * Object HTMLHtmlElement() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @augments HTMLElement - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - * @see HTMLElement - */ -function HTMLHtmlElement(){}; -HTMLHtmlElement.prototype = new HTMLElement(); -/** - * Property version - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLHtmlElement.prototype.version=""; - -/** - * Object HTMLHeadElement() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @augments HTMLElement - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - * @see HTMLElement - */ -function HTMLHeadElement(){}; -HTMLHeadElement.prototype = new HTMLElement(); -/** - * Property profile - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLHeadElement.prototype.profile=""; - -/** - * Object HTMLLinkElement() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @augments HTMLElement - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - * @see HTMLElement - */ -function HTMLLinkElement(){}; -HTMLLinkElement.prototype = new HTMLElement(); -/** - * Property disabled - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type Boolean - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLLinkElement.prototype.disabled=false; -/** - * Property charset - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLLinkElement.prototype.charset=""; -/** - * Property href - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLLinkElement.prototype.href=""; -/** - * Property hreflang - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLLinkElement.prototype.hreflang=""; -/** - * Property media - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLLinkElement.prototype.media=""; -/** - * Property rel - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLLinkElement.prototype.rel=""; -/** - * Property rev - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLLinkElement.prototype.rev=""; -/** - * Property target - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLLinkElement.prototype.target=""; -/** - * Property type - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLLinkElement.prototype.type=""; - -/** - * Object HTMLTitleElement() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @augments HTMLElement - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - * @see HTMLElement - */ -function HTMLTitleElement(){}; -HTMLTitleElement.prototype = new HTMLElement(); -/** - * Property text - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTitleElement.prototype.text=""; - -/** - * Object HTMLMetaElement() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @augments HTMLElement - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - * @see HTMLElement - */ -function HTMLMetaElement(){}; -HTMLMetaElement.prototype = new HTMLElement(); -/** - * Property content - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLMetaElement.prototype.content=""; -/** - * Property httpEquiv - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLMetaElement.prototype.httpEquiv=""; -/** - * Property name - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLMetaElement.prototype.name=""; -/** - * Property scheme - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLMetaElement.prototype.scheme=""; - -/** - * Object HTMLBaseElement() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @augments HTMLElement - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - * @see HTMLElement - */ -function HTMLBaseElement(){}; -HTMLBaseElement.prototype = new HTMLElement(); -/** - * Property href - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLBaseElement.prototype.href=""; -/** - * Property target - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLBaseElement.prototype.target=""; - -/** - * Object HTMLIsIndexElement() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @augments HTMLElement - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - * @see HTMLElement - */ -function HTMLIsIndexElement(){}; -HTMLIsIndexElement.prototype = new HTMLElement(); -/** - * Property form - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type HTMLFormElement - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLIsIndexElement.prototype.form=new HTMLFormElement(); -/** - * Property prompt - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLIsIndexElement.prototype.prompt=""; - -/** - * Object HTMLStyleElement() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @augments HTMLElement - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - * @see HTMLElement - */ -function HTMLStyleElement(){}; -HTMLStyleElement.prototype = new HTMLElement(); -/** - * Property disabled - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type Boolean - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLStyleElement.prototype.disabled=false; -/** - * Property media - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLStyleElement.prototype.media=""; -/** - * Property type - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLStyleElement.prototype.type=""; - -/** - * Object HTMLBodyElement() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @augments HTMLElement - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - * @see HTMLElement - */ -function HTMLBodyElement(){}; -HTMLBodyElement.prototype = new HTMLElement(); -/** - * Property aLink - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLBodyElement.prototype.aLink=""; -/** - * Property background - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLBodyElement.prototype.background=""; -/** - * Property bgColor - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLBodyElement.prototype.bgColor=""; -/** - * Property link - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLBodyElement.prototype.link=""; -/** - * Property text - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLBodyElement.prototype.text=""; -/** - * Property vLink - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLBodyElement.prototype.vLink=""; - -/** - * Object HTMLFormElement() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @augments HTMLElement - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - * @see HTMLElement - */ -function HTMLFormElement(){}; -HTMLFormElement.prototype = new HTMLElement(); -/** - * Property elements - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type HTMLCollection - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLFormElement.prototype.elements=new HTMLCollection(); -/** - * Property length - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type Number - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLFormElement.prototype.length=0; -/** - * Property name - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLFormElement.prototype.name=""; -/** - * Property acceptCharset - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLFormElement.prototype.acceptCharset=""; -/** - * Property action - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLFormElement.prototype.action=""; -/** - * Property enctype - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLFormElement.prototype.enctype=""; -/** - * Property method - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLFormElement.prototype.method=""; -/** - * Property target - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLFormElement.prototype.target=""; -/** - * function submit() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLFormElement.prototype.submit = function(){}; -/** - * function reset() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLFormElement.prototype.reset = function(){}; - -/** - * Object HTMLSelectElement() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @augments HTMLElement - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - * @see HTMLElement - */ -function HTMLSelectElement(){}; -HTMLSelectElement.prototype = new HTMLElement(); -/** - * Property type - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLSelectElement.prototype.type=""; -/** - * Property selectedIndex - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type Number - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLSelectElement.prototype.selectedIndex=0; -/** - * Property value - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLSelectElement.prototype.value=""; -/** - * Property length - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type Number - * @throws DOMException - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLSelectElement.prototype.length=0; -/** - * Property form - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type HTMLFormElement - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLSelectElement.prototype.form = new HTMLFormElement(); -/** - * Property options - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type HTMLOptionsCollection - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLSelectElement.prototype.options= new HTMLOptionsCollection(); -/** - * Property disabled - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type Boolean - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLSelectElement.prototype.disabled=false; -/** - * Property multiple - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type Boolean - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLSelectElement.prototype.multiple=false; -/** - * Property name - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLSelectElement.prototype.name=""; -/** - * Property size - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type Number - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLSelectElement.prototype.size=0; -/** - * Property tabIndex - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type Number - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLSelectElement.prototype.tabIndex=0; -/** - * function add(element, before) - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @param {HTMLElement} element - * @param {HTMLElement} before - * @throws DOMException - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLSelectElement.prototype.add = function(element, before){}; -/** - * function remove(index) - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @param {Number} index - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLSelectElement.prototype.remove = function(index){}; -/** - * function blur() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLSelectElement.prototype.blur = function(){}; -/** - * function focus() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLSelectElement.prototype.focus = function(){}; - -/** - * Object HTMLOptGroupElement() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @augments HTMLElement - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - * @see HTMLElement - */ -function HTMLOptGroupElement(){}; -HTMLOptGroupElement.prototype = new HTMLElement(); -/** - * Property disabled - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type Boolean - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLOptGroupElement.prototype.disabled=false; -/** - * Property label - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLOptGroupElement.prototype.label=""; - -/** - * Object Option() - * @constructor - * @param {String} text - * @param {String} value - * @param {Boolean} defaultSelected - * @param {Boolean} selected - */ -function Option(text, value, defaultSelected, selected){}; -Option.prototype = new HTMLOptionElement(); -/** - * Object HTMLOptionElement() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @augments HTMLElement - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - * @see HTMLElement - */ -function HTMLOptionElement(){}; -HTMLOptionElement.prototype = new HTMLElement(); -/** - * Property form - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type HTMLFormElement - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLOptionElement.prototype.form = new HTMLFormElement(); -/** - * Property defaultSelected - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type Boolean - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLOptionElement.prototype.defaultSelected=false; -/** - * Property text - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLOptionElement.prototype.text=""; -/** - * Property index - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type Number - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLOptionElement.prototype.index=0; -/** - * Property disabled - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type Boolean - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLOptionElement.prototype.disabled=false; -/** - * Property label - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLOptionElement.prototype.label=""; -/** - * Property selected - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type Boolean - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLOptionElement.prototype.selected=false; -/** - * Property value - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLOptionElement.prototype.value=""; - -/** - * Object HTMLInputElement() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @augments HTMLElement - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - * @see HTMLElement - */ -function HTMLInputElement(){}; -HTMLInputElement.prototype = new HTMLElement(); -/** - * Property defaultValue - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLInputElement.prototype.defaultValue=""; -/** - * Property defaultChecked - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type Boolean - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLInputElement.prototype.defaultChecked=false; -/** - * Property form - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type HTMLFormElement - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLInputElement.prototype.form = new HTMLFormElement(); -/** - * Property accept - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLInputElement.prototype.accept=""; -/** - * Property accessKey - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLInputElement.prototype.accessKey=""; -/** - * Property align - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLInputElement.prototype.align=""; -/** - * Property alt - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLInputElement.prototype.alt=""; -/** - * Property checked - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type Boolean - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLInputElement.prototype.checked=false; -/** - * Property disabled - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type Boolean - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLInputElement.prototype.disabled=false; -/** - * Property masLength - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type Number - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLInputElement.prototype.maxLenght=0; -/** - * Property name - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLInputElement.prototype.name=""; -/** - * Property readOnly - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type Boolean - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLInputElement.prototype.readOnly=false; -/** - * Property size - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type Number - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLInputElement.prototype.size=0; -/** - * Property src - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLInputElement.prototype.src=""; -/** - * Property tabIndex - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type Number - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLInputElement.prototype.tabIndex=0; -/** - * Property type - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLInputElement.prototype.type=""; -/** - * Property useMap - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLInputElement.prototype.useMap=""; -/** - * Property value - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLInputElement.prototype.value=""; -/** - * function blur() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLInputElement.prototype.blur = function(){}; -/** - * function focus() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLInputElement.prototype.focus = function(){}; -/** - * function select() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLInputElement.prototype.select = function(){}; -/** - * function click() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLInputElement.prototype.click = function(){}; - -/** - * Object HTMLTextAreaElement() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @augments HTMLElement - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - * @see HTMLElement - */ -function HTMLTextAreaElement(){}; -HTMLTextAreaElement.prototype = new HTMLElement(); -/** - * Property defaultValue - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTextAreaElement.prototype.defaultValue=""; -/** - * Property form - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type HTMLFormElement - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTextAreaElement.prototype.form= new HTMLFormElement(); -/** - * Property accessKey - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTextAreaElement.prototype.accessKey=""; -/** - * Property cols - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type Number - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTextAreaElement.prototype.cols=0; -/** - * Property disabled - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type Boolean - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTextAreaElement.prototype.disabled=false; -/** - * Property name - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTextAreaElement.prototype.name=""; -/** - * Property readOnly - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type Boolean - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTextAreaElement.prototype.readOnly=false; -/** - * Property rows - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type Number - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTextAreaElement.prototype.rows=0; -/** - * Property tabIndex - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type Number - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTextAreaElement.prototype.tabIndex=0; -/** - * Property type - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTextAreaElement.prototype.type=""; -/** - * Property value - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTextAreaElement.prototype.value=""; -/** - * function blur() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTextAreaElement.prototype.blur = function(){}; -/** - * function focus() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTextAreaElement.prototype.focus = function(){}; -/** - * function select() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTextAreaElement.prototype.select = function(){}; - -/** - * Object HTMLButtonElement() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @augments HTMLElement - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - * @see HTMLElement - */ -function HTMLButtonElement(){}; -HTMLButtonElement.prototype = new HTMLElement(); -/** - * Property form - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type HTMLFormElement - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLButtonElement.prototype.form = new HTMLFormElement(); -/** - * Property accessKey - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLButtonElement.prototype.accessKey = ""; -/** - * Property disabled - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type Boolean - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLButtonElement.prototype.disabled=false; -/** - * Property name - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLButtonElement.prototype.name=""; -/** - * Property tabIndex - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type Number - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLButtonElement.prototype.tabIndex=0; -/** - * Property type - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLButtonElement.prototype.type=""; -/** - * Property value - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLButtonElement.prototype.value=""; - -/** - * Object HTMLLabelElement() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @augments HTMLElement - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - * @see HTMLElement - */ -function HTMLLabelElement(){}; -HTMLLabelElement.prototype = new HTMLElement(); -/** - * Property form - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type HTMLFormElement - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLLabelElement.prototype.form = new HTMLFormElement(); -/** - * Property accessKey - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLLabelElement.prototype.accessKey=""; -/** - * Property htmlFor - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLLabelElement.prototype.htmlFor=""; - -/** - * Object HTMLFieldSetElement() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @augments HTMLElement - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - * @see HTMLElement - */ -function HTMLFieldSetElement(){}; -HTMLFieldSetElement.prototype = new HTMLElement(); -/** - * Property form - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type HTMLFormElement - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLFieldSetElement.prototype.form = new HTMLFormElement(); - -/** - * Object HTMLLegendElement() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @augments HTMLElement - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - * @see HTMLElement - */ -function HTMLLegendElement(){}; -HTMLLegendElement.prototype = new HTMLElement(); -/** - * Property form - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type HTMLFormElement - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLLegendElement.prototype.form = new HTMLFormElement(); -/** - * Property accessKey - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLLegendElement.prototype.accessKey=""; -/** - * Property align - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLLegendElement.prototype.align=""; - -/** - * Object HTMLUListElement() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @augments HTMLElement - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - * @see HTMLElement - */ -function HTMLUListElement(){}; -HTMLUListElement.prototype = new HTMLElement(); -/** - * Property compact - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type Boolean - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLUListElement.prototype.compact=false; -/** - * Property type - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLUListElement.prototype.type=""; - -/** - * Object HTMLOListElement() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @augments HTMLElement - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - * @see HTMLElement - */ -function HTMLOListElement(){}; -HTMLOListElement.prototype = new HTMLElement(); -/** - * Property compact - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type Boolean - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLOListElement.prototype.compact=false; -/** - * Property start - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type Number - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLOListElement.prototype.start=0; -/** - * Property type - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLOListElement.prototype.type=""; - -/** - * Object HTMLDListElement() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @augments HTMLElement - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - * @see HTMLElement - */ -function HTMLDListElement(){}; -HTMLDListElement.prototype = new HTMLElement(); -/** - * Property compact - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type Boolean - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLDListElement.prototype.compact=false; - -/** - * Object HTMLDirectoryElement() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @augments HTMLElement - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - * @see HTMLElement - */ -function HTMLDirectoryElement(){}; -HTMLDirectoryElement.prototype = new HTMLElement(); -/** - * Property compact - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type Boolean - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLDirectoryElement.prototype.compact=false; - -/** - * Object HTMLMenuElement() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @augments HTMLElement - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - * @see HTMLElement - */ -function HTMLMenuElement(){}; -HTMLMenuElement.prototype = new HTMLElement(); -/** - * Property compact - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type Boolean - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLMenuElement.prototype.compact=false; - -/** - * Object HTMLLIElement() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @augments HTMLElement - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - * @see HTMLElement - */ -function HTMLLIElement(){}; -HTMLLIElement.prototype = new HTMLElement(); -/** - * Property type - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLLIElement.prototype.type=""; -/** - * Property value - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type Number - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLLIElement.prototype.value=0; - -/** - * Object HTMLDivElement() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @augments HTMLElement - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - * @see HTMLElement - */ -function HTMLDivElement(){}; -HTMLDivElement.prototype = new HTMLElement(); -/** - * Property align - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLDivElement.prototype.align=""; - -/** - * Object HTMLParagraphElement() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @augments HTMLElement - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - * @see HTMLElement - */ -function HTMLParagraphElement(){}; -HTMLParagraphElement.prototype = new HTMLElement(); -/** - * Property align - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLParagraphElement.prototype.align=""; - -/** - * Object HTMLHeadingElement() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @augments HTMLElement - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - * @see HTMLElement - */ -function HTMLHeadingElement(){}; -HTMLHeadingElement.prototype = new HTMLElement(); -/** - * Property align - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLHeadingElement.prototype.align=""; - -/** - * Object HTMLQuoteElement() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @augments HTMLElement - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - * @see HTMLElement - */ -function HTMLQuoteElement(){}; -HTMLQuoteElement.prototype = new HTMLElement(); -/** - * Property align - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLQuoteElement.prototype.align=""; - -/** - * Object HTMLPreElement() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @augments HTMLElement - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - * @see HTMLElement - */ -function HTMLPreElement(){}; -HTMLPreElement.prototype = new HTMLElement(); -/** - * Property width - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type Number - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLPreElement.prototype.width=0; - -/** - * Object HTMLBRElement() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @augments HTMLElement - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - * @see HTMLElement - */ -function HTMLBRElement(){}; -HTMLBRElement.prototype = new HTMLElement(); -/** - * Property clear - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLBRElement.prototype.clear=""; - -/** - * Object HTMLBaseFontElement() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @augments HTMLElement - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - * @see HTMLElement - */ -function HTMLBaseFontElement(){}; -HTMLBaseFontElement.prototype = new HTMLElement(); -/** - * Property color - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLBaseFontElement.prototype.color=""; -/** - * Property face - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLBaseFontElement.prototype.face=""; -/** - * Property size - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type Number - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLBaseFontElement.prototype.size=0; - -/** - * Object HTMLBaseFontElement() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @augments HTMLElement - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - * @see HTMLElement - */ -function HTMLFontElement(){}; -HTMLFontElement.prototype = new HTMLElement(); -/** - * Property color - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLFontElement.prototype.color=""; -/** - * Property face - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLFontElement.prototype.face=""; -/** - * Property size - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type Number - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLFontElement.prototype.size=0; - -/** - * Object HTMLHRElement() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @augments HTMLElement - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - * @see HTMLElement - */ -function HTMLHRElement(){}; -HTMLHRElement.prototype = new HTMLElement(); -/** - * Property align - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLHRElement.prototype.align=""; -/** - * Property noShade - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type Boolean - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLHRElement.prototype.noShade=false; -/** - * Property size - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLHRElement.prototype.size=""; -/** - * Property width - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLHRElement.prototype.width=""; - -/** - * Object HTMLModElement() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @augments HTMLElement - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - * @see HTMLElement - */ -function HTMLModElement(){}; -HTMLModElement.prototype = new HTMLElement(); -/** - * Property cite - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLModElement.prototype.cite=""; -/** - * Property dateTime - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLModElement.prototype.dateTime=""; - -/** - * Object HTMLAnchorElement() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @augments HTMLElement - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - * @see HTMLElement - */ -function HTMLAnchorElement(){}; -HTMLAnchorElement.prototype = new HTMLElement(); -/** - * Property accessKey - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLAnchorElement.prototype.accessKey=""; -/** - * Property charset - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLAnchorElement.prototype.charset=""; -/** - * Property coords - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLAnchorElement.prototype.coords=""; -/** - * Property href - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLAnchorElement.prototype.href=""; -/** - * Property hreflang - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLAnchorElement.prototype.hreflang=""; -/** - * Property name - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLAnchorElement.prototype.name=""; -/** - * Property rel - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLAnchorElement.prototype.rel=""; -/** - * Property rev - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLAnchorElement.prototype.rev=""; -/** - * Property shape - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLAnchorElement.prototype.shape=""; -/** - * Property tabIndex - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type Number - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLAnchorElement.prototype.tabIndex=0; -/** - * Property target - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLAnchorElement.prototype.target=""; -/** - * Property type - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLAnchorElement.prototype.type=""; -/** - * function blur() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLAnchorElement.prototype.blur = function(){}; -/** - * function focus() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLAnchorElement.prototype.focus = function(){}; - -/** - * Object Image() - * @constructor - * @param {Number} width - * @param {Number} height - */ -function Image(width, height){}; -Image.prototype = new HTMLImageElement(); -/** - * Object HTMLImageElement() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @augments HTMLElement - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - * @see HTMLElement - */ -function HTMLImageElement(){}; -HTMLImageElement.prototype = new HTMLElement(); -/** - * Property name - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLImageElement.prototype.name=""; -/** - * Property align - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLImageElement.prototype.align=""; -/** - * Property alt - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLImageElement.prototype.alt=""; -/** - * Property border - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLImageElement.prototype.border=""; -/** - * Property height - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type Number - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLImageElement.prototype.height=0; -/** - * Property hspace - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type Number - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLImageElement.prototype.hspace=0; -/** - * Property isMap - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type Boolean - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLImageElement.prototype.isMap=false; -/** - * Property longDesc - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLImageElement.prototype.longDesc=""; -/** - * Property src - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLImageElement.prototype.src=""; -/** - * Property useMap - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLImageElement.prototype.useMap=""; -/** - * Property vspace - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type Number - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLImageElement.prototype.vspace=0; -/** - * Property width - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type Number - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLImageElement.prototype.width=0; - -/** - * Object HTMLObjectElement() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @augments HTMLElement - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - * @see HTMLElement - */ -function HTMLObjectElement(){}; -HTMLObjectElement.prototype = new HTMLElement(); -/** - * Property form - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type HTMLFormElement - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLObjectElement.prototype.form = new HTMLFormElement(); -/** - * Property code - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLObjectElement.prototype.code=""; -/** - * Property align - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLObjectElement.prototype.align=""; -/** - * Property archive - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLObjectElement.prototype.archive=""; -/** - * Property border - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLObjectElement.prototype.border=""; -/** - * Property codeBase - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLObjectElement.prototype.codeBase=""; -/** - * Property codeType - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLObjectElement.prototype.codeType=""; -/** - * Property data - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLObjectElement.prototype.data=""; -/** - * Property declare - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type Boolean - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLObjectElement.prototype.declare=false; -/** - * Property height - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLObjectElement.prototype.height=""; -/** - * Property hspace - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type Number - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLObjectElement.prototype.hspace=0; -/** - * Property name - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLObjectElement.prototype.name=""; -/** - * Property standby - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLObjectElement.prototype.standby=""; -/** - * Property tabIndex - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type Number - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLObjectElement.prototype.tabIndex=0; -/** - * Property type - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLObjectElement.prototype.type=""; -/** - * Property useMap - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLObjectElement.prototype.useMap=""; -/** - * Property vspace - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type Number - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLObjectElement.prototype.vspace=0; -/** - * Property width - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLObjectElement.prototype.width=""; -/** - * Property contentDocument - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type Document - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLObjectElement.prototype.contentDocument= new HTMLDocument(); - -/** - * Object HTMLParamElement() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @augments HTMLElement - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - * @see HTMLElement - */ -function HTMLParamElement(){}; -HTMLParamElement.prototype = new HTMLElement(); -/** - * Property name - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLParamElement.prototype.name=""; -/** - * Property type - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLParamElement.prototype.type=""; -/** - * Property value - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLParamElement.prototype.value=""; -/** - * Property valueType - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLParamElement.prototype.valueType=""; - -/** - * Object HTMLAppletElement() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @augments HTMLElement - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - * @see HTMLElement - */ -function HTMLAppletElement(){}; -HTMLAppletElement.prototype = new HTMLElement(); -/** - * Property align - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLAppletElement.prototype.align=""; -/** - * Property alt - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLAppletElement.prototype.alt=""; -/** - * Property archive - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLAppletElement.prototype.archive=""; -/** - * Property code - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLAppletElement.prototype.code=""; -/** - * Property codeBase - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLAppletElement.prototype.codeBase=""; -/** - * Property height - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLAppletElement.prototype.hight=""; -/** - * Property hspace - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type Number - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLAppletElement.prototype.hspace=0; -/** - * Property name - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLAppletElement.prototype.name=""; -/** - * Property object - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLAppletElement.prototype.object=""; -/** - * Property vspace - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type Number - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLAppletElement.prototype.vspace=0; -/** - * Property width - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLAppletElement.prototype.width=""; - -/** - * Object HTMLMapElement() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @augments HTMLElement - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - * @see HTMLElement - */ -function HTMLMapElement(){}; -HTMLMapElement.prototype = new HTMLElement(); -/** - * Property areas - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type HTMLCollection - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLMapElement.prototype.areas = new HTMLCollection(); -/** - * Property name - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLMapElement.prototype.name=""; - -/** - * Object HTMLAreaElement() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @augments HTMLElement - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - * @see HTMLElement - */ -function HTMLAreaElement(){}; -HTMLAreaElement.prototype = new HTMLElement(); -/** - * Property accessKey - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLAreaElement.prototype.accessKey=""; -/** - * Property alt - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLAreaElement.prototype.alt=""; -/** - * Property coords - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLAreaElement.prototype.coords=""; -/** - * Property href - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLAreaElement.prototype.href=""; -/** - * Property noHref - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type Boolean - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLAreaElement.prototype.noHref=false; -/** - * Property shape - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLAreaElement.prototype.shape=""; -/** - * Property tabIndex - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type Number - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLAreaElement.prototype.tabIndex=0; -/** - * Property target - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLAreaElement.prototype.target=""; - -/** - * Object HTMLScriptElement() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @augments HTMLElement - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - * @see HTMLElement - */ -function HTMLScriptElement(){}; -HTMLScriptElement.prototype = new HTMLElement(); -/** - * Property text - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLScriptElement.prototype.text=""; -/** - * Property htmlFor - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLScriptElement.prototype.htmlFor=""; -/** - * Property event - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLScriptElement.prototype.event=""; -/** - * Property charset - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLScriptElement.prototype.charset=""; -/** - * Property defer - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLScriptElement.prototype.defer=""; -/** - * Property src - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLScriptElement.prototype.src=""; -/** - * Property type - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLScriptElement.prototype.type=""; - -/** - * Object HTMLTableElement() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @augments HTMLElement - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - * @see HTMLElement - */ -function HTMLTableElement(){}; -HTMLTableElement.prototype = new HTMLElement(); -/** - * Property caption - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type HTMLTableCaptionElement - * @throws DOMException - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTableElement.prototype.caption = new HTMLTableCaptionElement(); -/** - * Property tHead - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type HTMLTableSectionElement - * @throws DOMException - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTableElement.prototype.tHead = new HTMLTableSelectionElement(); -/** - * Property tFoot - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type HTMLTableSectionElement - * @throws DOMException - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTableElement.prototype.tFoot = new HTMLTableSelectionElement(); -/** - * Property rows - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type HTMLCollection - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTableElement.prototype.rows = new HTMLCollection(); -/** - * Property tBodies - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type HTMLCollection - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTableElement.prototype.tBodies = new HTMLCollection(); -/** - * Property align - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTableElement.prototype.align=""; -/** - * Property bgColor - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTableElement.prototype.bgColor=""; -/** - * Property border - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTableElement.prototype.border=""; -/** - * Property cellPadding - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTableElement.prototype.cellPadding=""; -/** - * Property cellSpacing - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTableElement.prototype.cellSpacing=""; -/** - * Property frame - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTableElement.prototype.frame=""; -/** - * Property rules - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTableElement.prototype.rules=""; -/** - * Property summary - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTableElement.prototype.summary=""; -/** - * Property width - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTableElement.prototype.width=""; -/** - * function createTHead(); - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @returns {HTMLElement} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTableElement.prototype.createTHead = function(){return new HTMLElement();}; -/** - * function deleteTHead(); - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTableElement.prototype.deleteTHead = function(){}; -/** - * function createTFoot(); - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @returns {HTMLElement} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTableElement.prototype.createTFoot = function(){return new HTMLElement();}; -/** - * function deleteTFoot(); - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTableElement.prototype.deleteTFoot = function(){}; -/** - * function createCaption(); - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @returns {HTMLElement} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTableElement.prototype.createCaption = function(){return new HTMLElement();}; -/** - * function deleteCaption(); - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTableElement.prototype.deleteCaption = function(){}; -/** - * function insertRow(index) - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @param {Number} index - * @returns {HTMLElement} - * @throws DOMException - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTableElement.prototype.insertRow = function(index){return new HTMLElement();}; -/** - * function deleteRow(index) - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @param {Number} index - * @throws DOMException - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTableElement.prototype.deleteRow = function(index){}; - -/** - * Object HTMLTableCaptionElement() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @augments HTMLElement - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - * @see HTMLElement - */ -function HTMLTableCaptionElement(){}; -HTMLTableCaptionElement.prototype = new HTMLElement(); -/** - * Property align - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTableCaptionElement.prototype.align=""; - -/** - * Object HTMLTableColElement() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @augments HTMLElement - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - * @see HTMLElement - */ -function HTMLTableColElement(){}; -HTMLTableColElement.prototype = new HTMLElement(); -/** - * Property align - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTableColElement.prototype.align=""; -/** - * Property ch - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTableColElement.prototype.ch=""; -/** - * Property chOff - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTableColElement.prototype.chOff=""; -/** - * Property span - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type Number - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTableColElement.prototype.span=0; -/** - * Property vAlign - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTableColElement.prototype.vAlign=""; -/** - * Property width - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTableColElement.prototype.width=""; - -/** - * Object HTMLTableSelectionElement() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @augments HTMLElement - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - * @see HTMLElement - */ -function HTMLTableSelectionElement(){}; -HTMLTableSelectionElement.prototype = new HTMLElement(); -/** - * Property align - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTableSelectionElement.prototype.align=""; -/** - * Property ch - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTableSelectionElement.prototype.ch=""; -/** - * Property chOff - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTableSelectionElement.prototype.chOff=""; -/** - * Property vAlign - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTableSelectionElement.prototype.vAlign=""; -/** - * Property rows - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTableSelectionElement.prototype.rows=""; -/** - * function insertRow(index) - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @param {Number} index - * @returns {HTMLElement} - * @throws DOMException - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTableSelectionElement.prototype.insertRow = function(index){return new HTMLElement();}; -/** - * function deleteRow(index) - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @param {Number} index - * @throws DOMException - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTableSelectionElement.prototype.deleteRow = function(index){}; - -/** - * Object HTMLTableRowElement() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @augments HTMLElement - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - * @see HTMLElement - */ -function HTMLTableRowElement(){}; -HTMLTableRowElement.prototype = new HTMLElement(); -/** - * Property rowIndex - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type Number - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTableRowElement.prototype.rowIndex=0; -/** - * Property sectionRowIndex - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type Number - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTableRowElement.prototype.sectionRowIndex=0; -/** - * Property cells - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type HTMLCollection - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTableRowElement.prototype.cells = new HTMLCollection(); -/** - * Property align - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTableRowElement.prototype.align=""; -/** - * Property bgColor - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTableRowElement.prototype.bgColor=""; -/** - * Property ch - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTableRowElement.prototype.ch=""; -/** - * Property chOff - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTableRowElement.prototype.chOff=""; -/** - * Property vAlign - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTableRowElement.prototype.vAlign=""; -/** - * function insertCell(index) - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @param {Number} index - * @returns {HTMLElement} - * @throws DOMException - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTableRowElement.prototype.insertCell = function(index){return new HTMLElement();}; -/** - * function insertCell(index) - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @param {Number} index - * @throws DOMException - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTableRowElement.prototype.deleteCell = function(index){}; - -/** - * Object HTMLTableRowElement() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @augments HTMLElement - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - * @see HTMLElement - */ -function HTMLTableCellElement(){}; -HTMLTableCellElement.prototype = new HTMLElement(); -/** - * Property cellIndex - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type Number - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTableCellElement.prototype.cellIndex=0; -/** - * Property abbr - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTableCellElement.prototype.abbr=""; -/** - * Property align - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTableCellElement.prototype.align=""; -/** - * Property axis - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTableCellElement.prototype.axis=""; -/** - * Property bgColor - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTableCellElement.prototype.bgColor=""; -/** - * Property ch - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTableCellElement.prototype.ch=""; -/** - * Property chOff - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTableCellElement.prototype.chOff=""; -/** - * Property colSpan - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type Number - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTableCellElement.prototype.colSpan=0; -/** - * Property headers - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTableCellElement.prototype.headers=""; -/** - * Property height - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTableCellElement.prototype.height=""; -/** - * Property noWrap - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type Boolean - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTableCellElement.prototype.noWrap=false; -/** - * Property rowSpan - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type Number - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTableCellElement.prototype.rowSpan=0; -/** - * Property scope - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTableCellElement.prototype.scope=""; -/** - * Property vAlign - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTableCellElement.prototype.vAlign=""; -/** - * Property width - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLTableCellElement.prototype.width=""; - -/** - * Object HTMLFrameSetElement() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @augments HTMLElement - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - * @see HTMLElement - */ -function HTMLFrameSetElement(){}; -HTMLFrameSetElement.prototype = new HTMLElement(); -/** - * Property cols - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLFrameSetElement.prototype.cols=""; -/** - * Property rows - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLFrameSetElement.prototype.rows=""; - -/** - * Object HTMLFrameElement() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @augments HTMLElement - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - * @see HTMLElement - */ -function HTMLFrameElement(){}; -HTMLFrameElement.prototype = new HTMLElement(); -/** - * Property frameBorder - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLFrameElement.prototype.frameBorder=""; -/** - * Property longDesc - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLFrameElement.prototype.longDesc=""; -/** - * Property marginHeight - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLFrameElement.prototype.marginHeight=""; -/** - * Property marginWidth - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLFrameElement.prototype.marginWidth=""; -/** - * Property name - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLFrameElement.prototype.name=""; -/** - * Property noResize - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type Boolean - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLFrameElement.prototype.noResize=false; -/** - * Property scrolling - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLFrameElement.prototype.scrolling=""; -/** - * Property src - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLFrameElement.prototype.src=""; -/** - * Property contentDocument - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type Document - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLFrameElement.prototype.contentDocument= new HTMLDocument(); - -/** - * Object HTMLIFrameElement() - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @augments HTMLElement - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - * @see HTMLElement - */ -function HTMLIFrameElement(){}; -HTMLIFrameElement.prototype = new HTMLElement(); -/** - * Property align - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLIFrameElement.prototype.align=""; -/** - * Property frameBorder - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLIFrameElement.prototype.frameBorder=""; -/** - * Property height - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLIFrameElement.prototype.height=""; -/** - * Property longDesc - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLIFrameElement.prototype.longDesc=""; -/** - * Property marginHeight - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLIFrameElement.prototype.marginHeight=""; -/** - * Property marginWidth - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLIFrameElement.prototype.marginWidth=""; -/** - * Property name - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLIFrameElement.prototype.name=""; -/** - * Property scrolling - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLIFrameElement.prototype.scrolling=""; -/** - * Property src - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLIFrameElement.prototype.src=""; -/** - * Property width - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLIFrameElement.prototype.width=""; -/** - * Property contentDocument - * http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html - * - * @type Document - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model HTML Specification. - */ -HTMLIFrameElement.prototype.contentDocument= new HTMLDocument(); - -/* Stylesheets */ -/** - * Object CSS2Properties() - * http://www.w3.org/TR/2000/REC-DOM-Level-2-Style-20001113/ecma-script-binding.html - * - * @augments Object - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Style Specification. - */ -function CSS2Properties(){}; -CSS2Properties.prototype = new Object(); \ No newline at end of file diff --git a/Java/.metadata/.plugins/org.eclipse.wst.jsdt.core/libraries/browserWindow.js b/Java/.metadata/.plugins/org.eclipse.wst.jsdt.core/libraries/browserWindow.js deleted file mode 100644 index cfbf452..0000000 --- a/Java/.metadata/.plugins/org.eclipse.wst.jsdt.core/libraries/browserWindow.js +++ /dev/null @@ -1,618 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008, 2013 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -function BarProp(){}; -BarProp.prototype = new Array(); - -/** - * Object Window() - * @super Global - * @constructor - * @since Common Usage, no standard -*/ -function Window(){}; -Window.prototype = new EventTarget(); -Window.prototype.self = new Window(); -Window.prototype.window = new Window(); -Window.prototype.frames = new Array(); -/** - * Property closed - * @type Boolean - * @memberOf Window - */ -Window.prototype.closed = new Boolean(); -/** - * Property defaultStatus - * @type String - * @memberOf Window - */ -Window.prototype.defaultStatus = ""; -/** - * Property document - * @type Document - * @memberOf Window - */ -Window.prototype.document= new HTMLDocument(); -/** - * Property history - * @type History - * @memberOf Window - */ -Window.prototype.history= new History(); -/** - * Property location - * @type Location - * @memberOf Window - */ -Window.prototype.location=new Location(); -/** - * Property name - * @type String - * @memberOf Window - */ -Window.prototype.name = ""; -/** - * Property navigator - * @type Navigator - * @memberOf Window - */ -Window.prototype.navigator = new Navigator(); -/** - * Property opener - * @type Window - * @memberOf Window - */ -Window.prototype.opener = new Window(); -/** - * Property outerWidth - * @type Number - * @memberOf Window - */ -Window.prototype.outerWidth = 0; -/** - * Property outerHeight - * @type Number - * @memberOf Window - */ -Window.prototype.outerHeight = 0; -/** - * Property pageXOffset - * @type Number - * @memberOf Window - */ -Window.prototype.pageXOffset = 0; -/** - * Property pageYOffset - * @type Number - * @memberOf Window - */ -Window.prototype.pageYOffset = 0; -/** - * Property parent - * @type Window - * @memberOf Window - */ -Window.prototype.parent = new Window(); -/** - * Property screen - * @type Screen - * @memberOf Window - */ -Window.prototype.screen = new Screen(); -/** - * Property status - * @type String - * @memberOf Window - */ -Window.prototype.status = ""; -/** - * Property top - * @type Window - * @memberOf Window - */ -Window.prototype.top = new Window(); - - -/* - * These properties may need to be moved into a browswer specific library. - */ - - /** - * Property innerWidth - * @type Number - * @memberOf Window - */ -Window.prototype.innerWidth = 0; -/** - * Property innerHeight - * @type Number - * @memberOf Window - */ -Window.prototype.innerHeight = 0; -/** - * Property screenX - * @type Number - * @memberOf Window - */ -Window.prototype.screenX = 0; -/** - * Property screenY - * @type Number - * @memberOf Window - */ -Window.prototype.screenY = 0; -/** - * Property screenLeft - * @type Number - * @memberOf Window - */ -Window.prototype.screenLeft = 0; -/** - * Property screenTop - * @type Number - * @memberOf Window - */ -Window.prototype.screenTop = 0; -//Window.prototype.event = new Event(); -Window.prototype.length = 0; -Window.prototype.scrollbars= new BarProp(); -Window.prototype.scrollX=0; -Window.prototype.scrollY=0; -Window.prototype.content= new Window(); -Window.prototype.menubar= new BarProp(); -Window.prototype.toolbar= new BarProp(); -Window.prototype.locationbar= new BarProp(); -Window.prototype.personalbar= new BarProp(); -Window.prototype.statusbar= new BarProp(); -Window.prototype.directories= new BarProp(); -Window.prototype.scrollMaxX=0; -Window.prototype.scrollMaxY=0; -Window.prototype.fullScreen=""; -Window.prototype.frameElement=""; -/* End properites */ - -/** - * function alert() - * @param {String} message - * @memberOf Window - */ -Window.prototype.alert = function(message){}; -/** - * function blur() - * @memberOf Window - */ -Window.prototype.blur = function(){}; -/** - * function clearInterval(intervalID) - * @param intervalID - * @memberOf Window - */ -Window.prototype.clearInterval = function(intervalID){}; -/** - * function clearTimeout(intervalID) - * @param intervalID - * @memberOf Window - */ -Window.prototype.clearTimeout = function(intervalID){}; -/** - * function close() - * @memberOf Window - */ -Window.prototype.close = function(){}; -/** - * function confirm() - * @param {String} arg - * @memberOf Window - * @returns {Boolean} - */ -Window.prototype.confirm = function(arg){return false;}; -/** - * function focus() - * @memberOf Window - */ -Window.prototype.focus = function(){}; -/** - * function getComputedStyle(element, pseudoElt ) - * @param {Element} element - * @param {String} pseudoElt - * @memberOf Window - * @returns {Object} - */ -Window.prototype.getComputedStyle = function(element,pseudoElt ){return new Object();}; -/** - * function moveTo(x, y) - * @param {Number} x - * @param {Number} y - * @memberOf Window - */ -Window.prototype.moveTo = function(x,y){}; -/** - * function moveBy(deltaX, deltaY) - * @param {Number} deltaX - * @param {Number} deltaY - * @memberOf Window - */ -Window.prototype.moveBy = function(deltaX,deltaY){}; -/** - * function open(optionalArg1, optionalArg2, optionalArg3, optionalArg4) - * @param {String} url - * @param {String} windowName - * @param {String} windowFeatures - * @param {Boolean} optionalArg4 - * @memberOf Window - * @returns {Window} - */ -Window.prototype.open = function(url, windowName, windowFeatures, optionalArg4){return new Window();}; -/** - * function print() - * @memberOf Window - */ -Window.prototype.print = function(){}; -/** - * function prompt(text, value) - * @param {String} text - * @param {String} value - * @memberOf Window - * @returns {String} - */ -Window.prototype.prompt = function(text, value){return "";}; -/** - * function resizeTo(newOuterWidth,newOuterHeight) - * @param {Number} newOuterWidth - * @param {Number} newOuterHeighr - * @memberOf Window - */ -Window.prototype.resizeTo=function(newOuterWidth,newOuterHeight){}; -/** - * function resizeBy(deltaX, deltaY) - * @param {Number} deltaX - * @param {Number} deltaY - * @memberOf Window - */ -Window.prototype.resizeBy=function(deltaX,deltaY){}; -/** - * function scrollTo(x,y) - * @param {Number} x - * @param {Number} y - * @memberOf Window - */ -Window.prototype.scrollTo=function(x,y){}; -/** - * function scrollBy(pixelX,pixelY) - * @param {Number} pixelX - * @param {Number} pixelY - * @memberOf Window - */ -Window.prototype.scrollBy=function(pixelX,pixelY){}; -/** - * function setInterval(arg1, arg2) - * @param {Function} callback - * @param {Number} delay - * @memberOf Window - * @returns {Number} - */ -Window.prototype.setInterval=function(callback, delay){return 0;}; -/** - * function setTimeout(callback, delay) - * @param {Function} callback - * @param {Number} delay - * @memberOf Window - * @returns {Number} - */ -Window.prototype.setTimeout=function(callback, delay){ return 0;}; -/** - * function atob(encodedData) - * @param {String} encodedData - * @memberOf Window - * @returns {String} - */ -Window.prototype.atob=function(encodedData){return "";}; -/** - * function btoa(arg) - * @param {String} stringToEncode - * @memberOf Window - * @returns {String} - */ -Window.prototype.btoa=function(stringToEncode){return "";}; -/** - * function setResizable(resizable) - * @param {Boolean} resizable - * @memberOf Window - */ -Window.prototype.setResizable=function(resizable){}; - -Window.prototype.captureEvents=function(eventType){}; -Window.prototype.releaseEvents=function(eventType){}; -Window.prototype.routeEvent=function(eventType){}; -Window.prototype.enableExternalCapture=function(){}; -Window.prototype.disableExternalCapture=function(){}; -Window.prototype.find=function(){}; -Window.prototype.back=function(){}; -Window.prototype.forward=function(){}; -Window.prototype.home=function(){}; -Window.prototype.stop=function(){}; -/** - * @param {Number} pixelX - * @param {Number} pixelY - */ -Window.prototype.scroll=function(pixelX,pixelY){}; -/* End functions */ - -/** - * Object History() - * @super Object - * @constructor - * @since Common Usage, no standard - */ -function History(){}; -History.prototype=new Object(); -History.prototype.history = new History(); -/** - * Property length - * @type Number - * @memberOf History - */ -History.prototype.length = 0; -/** - * function back() - * @memberOf History - */ -History.prototype.back = function(){}; -/** - * function forward() - * @memberOf History - */ -History.prototype.forward = function(){}; -/** - * function back() - * @param arg - * @memberOf History - */ -History.prototype.go = function(arg){}; - -/** - * Object Location() - * @super Object - * @constructor - * @since Common Usage, no standard - */ -function Location(){}; -Location.prototype = new Object(); -Location.prototype.location = new Location(); -/** - * Property hash - * @type String - * @memberOf Location - */ -Location.prototype.hash = ""; -/** - * Property host - * @type String - * @memberOf Location - */ -Location.prototype.host = ""; -/** - * Property hostname - * @type String - * @memberOf Location - */ -Location.prototype.hostname = ""; -/** - * Property href - * @type String - * @memberOf Location - */ -Location.prototype.href = ""; -/** - * Property pathname - * @type String - * @memberOf Location - */ -Location.prototype.pathname = ""; -/** - * Property port - * @type String - * @memberOf Location - */ -Location.prototype.port = ""; -/** - * Property protocol - * @type String - * @memberOf Location - */ -Location.prototype.protocol = ""; -/** - * Property search - * @type String - * @memberOf Location - */ -Location.prototype.search = ""; -/** - * function assign(arg) - * @param {String} arg - * @memberOf Location - */ -Location.prototype.assign = function(arg){}; -/** - * function reload(optionalArg) - * @param {Boolean} optionalArg - * @memberOf Location - */ -Location.prototype.reload = function(optionalArg){}; -/** - * function replace(arg) - * @param {String} arg - * @memberOf Location - */ -Location.prototype.replace = function(arg){}; - -/** - * Object Navigator() - * @super Object - * @constructor - * @since Common Usage, no standard -*/ -function Navigator(){}; -Navigator.prototype = new Object(); -Navigator.prototype.navigator = new Navigator(); -/** - * Property appCodeName - * @type String - * @memberOf Navigator - */ -Navigator.prototype.appCodeName = ""; -/** - * Property appName - * @type String - * @memberOf Navigator - */ -Navigator.prototype.appName = ""; -/** - * Property appVersion - * @type String - * @memberOf Navigator - */ -Navigator.prototype.appVersion = ""; -/** - * Property cookieEnabled - * @type Boolean - * @memberOf Navigator - */ -Navigator.prototype.cookieEnabled = new Boolean(); -/** - * Property mimeTypes - * @type Array - * @memberOf Navigator - */ -Navigator.prototype.mimeTypes = new Array(); -/** - * Property platform - * @type String - * @memberOf Navigator - */ -Navigator.prototype.platform = ""; -/** - * Property plugins - * @type Array - * @memberOf Navigator - */ -Navigator.prototype.plugins = new Array(); -/** - * Property userAgent - * @type String - * @memberOf Navigator - */ -Navigator.prototype.userAgent = ""; -/** - * function javaEnabled() - * @returns {Boolean} - * @memberOf Navigator - */ -Navigator.prototype.javaEnabled = function(){return false;}; - -/** - * Object Screen() - * @super Object - * @constructor - * @since Common Usage, no standard -*/ -function Screen(){}; -Screen.prototype = new Object(); -Screen.prototype.screen = new Screen(); -/** - * Property availHeight - * @type Number - * @memberOf Screen - */ -Navigator.prototype.availHeight = 0; -/** - * Property availWidth - * @type Number - * @memberOf Screen - */ -Navigator.prototype.availWidth = 0; -/** - * Property colorDepth - * @type Number - * @memberOf Screen - */ -Navigator.prototype.colorDepth = 0; -/** - * Property height - * @type Number - * @memberOf Screen - */ -Navigator.prototype.height = 0; -/** - * Property width - * @type Number - * @memberOf Screen - */ -Navigator.prototype.width = 0; - -Event.prototype=new Object(); -// PhaseType -Event.prototype.CAPTURING_PHASE = 1; -Event.prototype.AT_TARGET = 2; -Event.prototype.BUBBLING_PHASE = 3; - -Event.prototype.type=""; -Event.prototype.target=new EventTarget(); -Event.prototype.currentTarget=new EventTarget(); -Event.prototype.eventPhase=0; -Event.prototype.bubbles=false; -Event.prototype.cancelable=false; -Event.prototype.timeStamp=0; -Event.prototype.stopPropagation=function(){}; -Event.prototype.preventDefault=function(){}; -/** - * @param {String} eventTypeArg - * @param {Boolean} canBubbleArg - * @param {Boolean} cancelableArg - */ -Event.prototype.initEvent=function(eventTypeArg, - canBubbleArg, - cancelableArg){}; -function EventListener(){}; -EventListener.prototype=new Object(); -/** - * @param {Event} event - * @memberOf EventListener - */ -EventListener.prototype.handleEvent=function(event){}; - -function EventTarget(){}; -EventTarget.prototype=new Object(); -/* - * These functions may need to be moved into a browser specific library. - */ -/** - * @memberOf Window - * @param event {Event} - * @throws {EventException} - */ -EventTarget.prototype.dispatchEvent=function(event){}; - -// https://developer.mozilla.org/en-US/docs/DOM/element.addEventListener -/** - * @memberOf Window - * @param {String} type - * @param {EventListener} listener - * @param {Boolean} useCapture - */ -EventTarget.prototype.addEventListener=function(type, listener, useCapture){}; -// https://developer.mozilla.org/en-US/docs/DOM/element.removeEventListener -/** - * @memberOf Window - * @param {String} type - * @param {EventListener} listener - * @param {Boolean} useCapture - */ -EventTarget.prototype.removeEventListener=function(type, listener, useCapture){}; diff --git a/Java/.metadata/.plugins/org.eclipse.wst.jsdt.core/libraries/dom5.js b/Java/.metadata/.plugins/org.eclipse.wst.jsdt.core/libraries/dom5.js deleted file mode 100644 index d199ab6..0000000 --- a/Java/.metadata/.plugins/org.eclipse.wst.jsdt.core/libraries/dom5.js +++ /dev/null @@ -1,922 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2013 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - ******************************************************************************/ - -/** - * function querySelector(selectors) - * http://www.w3.org/TR/2012/PR-selectors-api-20121213 - * @param {String} selectors - * @memberOf Document - * @returns {Element} - */ -Document.prototype.querySelector=function(selectors){return new Element();}; - -/** - * function querySelectorAll(selectors) - * http://www.w3.org/TR/2012/PR-selectors-api-20121213 - * @param {String} selectors - * @memberOf Document - * @returns {NodeList} - */ -Document.prototype.querySelectorAll=function(selectors){return new NodeList();}; - -/** - * function querySelector(selectors) - * http://www.w3.org/TR/2012/PR-selectors-api-20121213 - * @param {String} selectors - * @memberOf DocumentFragment - * @returns {Element} - */ -DocumentFragment.prototype.querySelector=function(selectors){return new Element();}; - -/** - * function querySelectorAll(selectors) - * http://www.w3.org/TR/2012/PR-selectors-api-20121213 - * @param {String} selectors - * @memberOf DocumentFragment - * @returns {NodeList} - */ -DocumentFragment.prototype.querySelectorAll=function(selectors){return new NodeList();}; - -/** - * function querySelector(selectors) - * http://www.w3.org/TR/2012/PR-selectors-api-20121213 - * @param {String} selectors - * @memberOf Element - * @returns {Element} - */ -Element.prototype.querySelector=function(selectors){return new Element();}; - -/** - * function querySelectorAll(selectors) - * http://www.w3.org/TR/2012/PR-selectors-api-20121213 - * @param {String} selectors - * @memberOf Element - * @returns {NodeList} - */ -Element.prototype.querySelectorAll=function(selectors){return new NodeList();}; - -/** - * Property state - * @type Object - * @memberOf History - */ -History.prototype.state=new Object(); - -/** - * function pushState(data,title,url) - * http://www.w3.org/TR/2012/CR-html5-20121217/browsers.html#history - * @param {Object} data - * @param {String} title - * @param {String} url - optional - * @memberOf History - */ -History.prototype.pushState=function(data,title,url){}; - -/** - * function replaceState(data,title,url) - * http://www.w3.org/TR/2012/CR-html5-20121217/browsers.html#history - * @param {Object} data - * @param {String} title - * @param {String} url - optional - * @memberOf History - */ -History.prototype.replaceState=function(data,title,url){}; - -/** - * Property sessionStorage - * http://www.w3.org/TR/2011/CR-webstorage-20111208 - * @type Storage - * @memberOf Window - */ -Window.prototype.sessionStorage=new Storage(); - -/** - * Property localStorage - * http://www.w3.org/TR/2011/CR-webstorage-20111208 - * @type Storage - * @memberOf Window - */ -Window.prototype.localStorage=new Storage(); - -/** - * Object Storage - * http://www.w3.org/TR/2011/CR-webstorage-20111208 - */ -function Storage(){}; -Storage.prototype=new Object(); - -/** - * Property length - * http://www.w3.org/TR/2011/CR-webstorage-20111208 - * @type Number - * @memberOf Storage - */ -Storage.prototype.length=new Number(); - -/** - * function key(index) - * http://www.w3.org/TR/2011/CR-webstorage-20111208 - * @param {Number} index - * @memberOf Storage - * @returns String - */ -Storage.prototype.key=function(index){return new String();}; - -/** - * function getItem(key) - * http://www.w3.org/TR/2011/CR-webstorage-20111208 - * @param {String} key - * @memberOf Storage - * @returns String - */ -Storage.prototype.getItem=function(key){return new String();}; - -/** - * function setItem(key,value) - * http://www.w3.org/TR/2011/CR-webstorage-20111208 - * @param {String} key - * @param {String} value - * @memberOf Storage - */ -Storage.prototype.setItem=function(key,value){}; - -/** - * function removeItem(key) - * http://www.w3.org/TR/2011/CR-webstorage-20111208 - * @param {String} key - * @memberOf Storage - */ -Storage.prototype.removeItem=function(key){}; - -/** - * function clear() - * http://www.w3.org/TR/2011/CR-webstorage-20111208 - * @memberOf Storage - */ -Storage.prototype.clear=function(){}; - -/** - * Object WebSocket - * http://www.w3.org/TR/2012/CR-websockets-20120920 - * @constructor - * @param {String} url - */ -function WebSocket(url){}; -WebSocket.prototype=new Object(); - -/** - * Constant WebSocket.CONNECTING=0 - * http://www.w3.org/TR/2012/CR-websockets-20120920 - * @constant - * @type Number - */ -WebSocket.prototype.CONNECTING=0; - -/** - * Constant WebSocket.OPEN=1 - * http://www.w3.org/TR/2012/CR-websockets-20120920 - * @constant - * @type Number - */ -WebSocket.prototype.OPEN=1; - -/** - * Constant WebSocket.CLOSING=2 - * http://www.w3.org/TR/2012/CR-websockets-20120920 - * @constant - * @type Number - */ -WebSocket.prototype.CLOSING=2; - -/** - * Constant WebSocket.CLOSED=3 - * http://www.w3.org/TR/2012/CR-websockets-20120920 - * @constant - * @type Number - */ -WebSocket.prototype.CLOSED=3; - -/** - * Property url - * http://www.w3.org/TR/2012/CR-websockets-20120920 - * @type String - * @memberOf WebSocket - */ -WebSocket.prototype.url=new String(); - -/** - * Property readyState - * http://www.w3.org/TR/2012/CR-websockets-20120920 - * @type Number - * @memberOf WebSocket - */ -WebSocket.prototype.readyState=new Number(); - -/** - * Property bufferedAmount - * http://www.w3.org/TR/2012/CR-websockets-20120920 - * @type Number - * @memberOf WebSocket - */ -WebSocket.prototype.bufferedAmount=new Number(); - -/** - * Property extensions - * http://www.w3.org/TR/2012/CR-websockets-20120920 - * @type String - * @memberOf WebSocket - */ -WebSocket.prototype.extensions=new String(); - -/** - * Property protocol - * http://www.w3.org/TR/2012/CR-websockets-20120920 - * @type String - * @memberOf WebSocket - */ -WebSocket.prototype.protocol=new String(); - -/** - * Property binaryType - * http://www.w3.org/TR/2012/CR-websockets-20120920 - * @type String - * @memberOf WebSocket - */ -WebSocket.prototype.binaryType=new String(); - -/** - * function close(code,reason) - * http://www.w3.org/TR/2012/CR-websockets-20120920 - * @param {Number} code - optional - * @param {String} reason - optional - * @memberOf WebSocket - */ -WebSocket.prototype.close=function(code,reason){}; - -/** - * function send(data) - * http://www.w3.org/TR/2012/CR-websockets-20120920 - * @param {Object} data - may be a String, Blob, ArrayBuffer, or ArrayBufferView - * @memberOf WebSocket - */ -WebSocket.prototype.send=function(data){}; - -/** - * Property geolocation - * http://www.w3.org/TR/2012/PR-geolocation-API-20120510 - * @type Geolocation - * @memberOf Navigator - */ -Navigator.prototype.geolocation=new Geolocation(); - -/** - * Object Geolocation - * http://www.w3.org/TR/2012/PR-geolocation-API-20120510 - */ -function Geolocation(){}; -Geolocation.prototype=new Object(); - -/** - * function getCurrentPosition(successCallback,errorCallback,options) - * http://www.w3.org/TR/2012/PR-geolocation-API-20120510/ - * @param {Function} successCallback (Position pos) - * @param {Function} errorCallback (PositionError error) - optional - * @param {PositionOptions} options - optional - * @memberOf Geolocation - */ -Geolocation.prototype.getCurrentPosition=function(successCallback,errorCallback,options){}; - -/** - * function watchPosition(successCallback,errorCallback,options) - * http://www.w3.org/TR/2012/PR-geolocation-API-20120510/ - * @param {Function} successCallback (Position pos) - * @param {Function} errorCallback (PositionError error) - optional - * @param {PositionOptions} options - optional - * @memberOf Geolocation - * @returns {Number} - */ -Geolocation.prototype.watchPosition=function(successCallback,errorCallback,options){return new Number();}; - -/** - * function clearWatch(watchId) - * http://www.w3.org/TR/2012/PR-geolocation-API-20120510 - * @param {Number} watchId - * @memberOf Geolocation - */ -Geolocation.prototype.clearWatch=function(watchId){}; - -/** - * Object Coordinates - * http://www.w3.org/TR/2012/PR-geolocation-API-20120510 - */ -function Coordinates(){}; -Coordinates.prototype=new Object(); - -/** - * Property latitude - * http://www.w3.org/TR/2012/PR-geolocation-API-20120510 - * @type Number - * @memberOf Coordinates - */ -Coordinates.prototype.latitude=new Number();; - -/** - * Property longitude - * http://www.w3.org/TR/2012/PR-geolocation-API-20120510 - * @type Number - * @memberOf Coordinates - */ -Coordinates.prototype.longitude=new Number();; - -/** - * Property altitude - * http://www.w3.org/TR/2012/PR-geolocation-API-20120510 - * @type Number - * @memberOf Coordinates - */ -Coordinates.prototype.altitude=new Number();; - -/** - * Property accuracy - * http://www.w3.org/TR/2012/PR-geolocation-API-20120510 - * @type Number - * @memberOf Coordinates - */ -Coordinates.prototype.accuracy=new Number();; - -/** - * Property altitudeAccuracy - * http://www.w3.org/TR/2012/PR-geolocation-API-20120510 - * @type Number - * @memberOf Coordinates - */ -Coordinates.prototype.altitudeAccuracy=new Number();; - -/** - * Property heading - * http://www.w3.org/TR/2012/PR-geolocation-API-20120510 - * @type Number - * @memberOf Coordinates - */ -Coordinates.prototype.heading=new Number();; - -/** - * Property speed - * http://www.w3.org/TR/2012/PR-geolocation-API-20120510 - * @type Number - * @memberOf Coordinates - */ -Coordinates.prototype.speed=new Number(); - -/** - * Object Position - * http://www.w3.org/TR/2012/PR-geolocation-API-20120510 - */ -function Position(){}; -Position.prototype=new Object(); - -/** - * Property coords - * http://www.w3.org/TR/2012/PR-geolocation-API-20120510 - * @type Coordinates - * @memberOf Position - */ -Position.prototype.coords=new Coordinates(); - -/** - * Property timestamp - * http://www.w3.org/TR/2012/PR-geolocation-API-20120510 - * @type Number - * @memberOf Position - */ -Position.prototype.timestamp=new Number; - -/** - * Object PositionError - * http://www.w3.org/TR/2012/PR-geolocation-API-20120510 - */ -function PositionError(){}; -PositionError.prototype=new Object(); - -/** - * Constant PositionError.PERMISSION_DENIED=1 - * http://www.w3.org/TR/2012/PR-geolocation-API-20120510 - * @constant - * @type Number - */ -PositionError.prototype.PERMISSION_DENIED=1; - -/** - * Constant PositionError.POSITION_UNAVAILABLE=2 - * http://www.w3.org/TR/2012/PR-geolocation-API-20120510 - * @constant - * @type Number - */ -PositionError.prototype.POSITION_UNAVAILABLE=2; - -/** - * Constant PositionError.TIMEOUT=3 - * http://www.w3.org/TR/2012/PR-geolocation-API-20120510 - * @constant - * @type Number - */ -PositionError.prototype.TIMEOUT=3; - -/** - * Property code - * http://www.w3.org/TR/2012/PR-geolocation-API-20120510 - * @type Number - * @memberOf PositionError - */ -PositionError.prototype.code=new Number(); - -/** - * Property message - * http://www.w3.org/TR/2012/PR-geolocation-API-20120510 - * @type String - * @memberOf PositionError - */ -PositionError.prototype.message=new String(); - -/** - * Object PositionOptions - * http://www.w3.org/TR/2012/PR-geolocation-API-20120510 - */ -function PositionOptions(){}; -PositionOptions.prototype=new Object(); - -/** - * Property enableHighAccuracy - * http://www.w3.org/TR/2012/PR-geolocation-API-20120510 - * @type Boolean - * @memberOf PositionOptions - */ -PositionOptions.prototype.enableHighAccuracy=new Boolean(); - -/** - * Property timeout - * http://www.w3.org/TR/2012/PR-geolocation-API-20120510 - * @type Number - * @memberOf PositionOptions - */ -PositionOptions.prototype.timeout=new Number(); - -/** - * Property maximumAge - * http://www.w3.org/TR/2012/PR-geolocation-API-20120510 - * @type Number - * @memberOf PositionOptions - */ -PositionOptions.prototype.maximumAge=new Number(); - -/** - * Object TimeRanges - * http://www.w3.org/TR/2012/WD-html5-20120329/media-elements.html - */ -function TimeRanges(){}; -TimeRanges.prototype=new Object(); - -/** - * Property length - * http://www.w3.org/TR/2012/WD-html5-20120329/media-elements.html - * @type Number - * @memberOf TimeRanges - */ -TimeRanges.prototype.length=new Number(); - -/** - * function start(index) - * http://www.w3.org/TR/2012/WD-html5-20120329/media-elements.html - * @param {Number} index - * @memberOf TimeRanges - * @returns {Number} - */ -function start(index) {return new Number();}; - -/** - * function end(index) - * http://www.w3.org/TR/2012/WD-html5-20120329/media-elements.html - * @param {Number} index - * @memberOf TimeRanges - * @returns {Number} - */ -function end(index) {return new Number();}; - -/** - * Object MediaError - * http://www.w3.org/TR/2012/WD-html5-20120329/media-elements.html - */ -function MediaError(){}; -MediaError.prototype=new Object(); - -/** - * Constant MediaError.MEDIA_ERR_ABORTED=1 - * http://www.w3.org/TR/2012/WD-html5-20120329/media-elements.html - * @constant - * @type Number - */ -MediaError.prototype.MEDIA_ERR_ABORTED=1; - -/** - * Constant MediaError.MEDIA_ERR_NETWORK=2 - * http://www.w3.org/TR/2012/WD-html5-20120329/media-elements.html - * @constant - * @type Number - */ -MediaError.prototype.MEDIA_ERR_NETWORK=2; - -/** - * Constant MediaError.MEDIA_ERR_DECODED=3 - * http://www.w3.org/TR/2012/WD-html5-20120329/media-elements.html - * @constant - * @type Number - */ -MediaError.prototype.MEDIA_ERR_DECODE=3; - -/** - * Constant MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED=4 - * http://www.w3.org/TR/2012/WD-html5-20120329/media-elements.html - * @constant - * @type Number - */ -MediaError.prototype.MEDIA_ERR_SRC_NOT_SUPPORTED=4; - -/** - * Property code - * http://www.w3.org/TR/2012/WD-html5-20120329/media-elements.html - * @type Number - * @memberOf MediaError - */ -MediaError.prototype.code=new Number(); - -/** - * Object HTMLMediaElement - * http://www.w3.org/TR/2012/WD-html5-20120329/media-elements.html - * @augments HTMLElement - * @see HTMLElement - */ -function HTMLMediaElement(){}; -HTMLMediaElement.prototype = new HTMLElement(); - -/** - * Property src - * http://www.w3.org/TR/2012/WD-html5-20120329/media-elements.html - * @type String - * @memberOf HTMLMediaElement - */ -HTMLMediaElement.prototype.src=new String(); - -/** - * Property currentSrc - * http://www.w3.org/TR/2012/WD-html5-20120329/media-elements.html - * @type String - * @memberOf HTMLMediaElement - */ -HTMLMediaElement.prototype.currentSrc=new String(); - -/** - * Property crossOrigin - * http://www.w3.org/TR/2012/WD-html5-20120329/media-elements.html - * @type String - * @memberOf HTMLMediaElement - */ -HTMLMediaElement.prototype.crossOrigin=new String(); - -/** - * Constant HTMLMediaElement.NETWORK_EMPTY=0 - * http://www.w3.org/TR/2012/WD-html5-20120329/media-elements.html - * @constant - * @type Number - */ -HTMLMediaElement.prototype.NETWORK_EMPTY=0; - -/** - * Constant HTMLMediaElement.NETWORK_IDLE=1 - * http://www.w3.org/TR/2012/WD-html5-20120329/media-elements.html - * @constant - * @type Number - */ -HTMLMediaElement.prototype.NETWORK_IDLE=1; - -/** - * Constant HTMLMediaElement.NETWORK_LOADING=2 - * http://www.w3.org/TR/2012/WD-html5-20120329/media-elements.html - * @constant - * @type Number - */ -HTMLMediaElement.prototype.NETWORK_LOADING=2; - -/** - * Constant HTMLMediaElement.NETWORK_NO_SOURCE=3 - * http://www.w3.org/TR/2012/WD-html5-20120329/media-elements.html - * @constant - * @type Number - */ -HTMLMediaElement.prototype.NETWORK_NO_SOURCE=3; - -/** - * Property networkState - * http://www.w3.org/TR/2012/WD-html5-20120329/media-elements.html - * @type Number - * @memberOf HTMLMediaElement - */ -HTMLMediaElement.prototype.networkState=new Number(); - -/** - * Property preload - * http://www.w3.org/TR/2012/WD-html5-20120329/media-elements.html - * @type String - * @memberOf HTMLMediaElement - */ -HTMLMediaElement.prototype.preload=new String(); - -/** - * Property buffered - * http://www.w3.org/TR/2012/WD-html5-20120329/media-elements.html - * @type TimeRanges - * @memberOf HTMLMediaElement - */ -HTMLMediaElement.prototype.buffered=new TimeRanges(); - -/** - * function load() - * http://www.w3.org/TR/2012/WD-html5-20120329/media-elements.html - * @memberOf HTMLMediaElement - */ -HTMLMediaElement.prototype.load=function(){}; - -/** - * function canPlayType(type) - * http://www.w3.org/TR/2012/WD-html5-20120329/media-elements.html - * @param {String} type - * @memberOf HTMLMediaElement - * @returns {String} - */ -HTMLMediaElement.prototype.canPlayType=function(type){new String();}; - -/** - * Constant HTMLMediaElement.HAVE_NOTHING=0 - * http://www.w3.org/TR/2012/WD-html5-20120329/media-elements.html - * @constant - * @type Number - */ -HTMLMediaElement.prototype.HAVE_NOTHING=0; - -/** - * Constant HTMLMediaElement.HAVE_METADATA=1 - * http://www.w3.org/TR/2012/WD-html5-20120329/media-elements.html - * @constant - * @type Number - */ -HTMLMediaElement.prototype.HAVE_METADATA=1; - -/** - * Constant HTMLMediaElement.HAVE_CURRENT_DATA=2 - * http://www.w3.org/TR/2012/WD-html5-20120329/media-elements.html - * @constant - * @type Number - */ -HTMLMediaElement.prototype.HAVE_CURRENT_DATA=2; - -/** - * Constant HTMLMediaElement.HAVE_FUTURE_DATA=3 - * http://www.w3.org/TR/2012/WD-html5-20120329/media-elements.html - * @constant - * @type Number - */ -HTMLMediaElement.prototype.HAVE_FUTURE_DATA=3; - -/** - * Constant HTMLMediaElement.HAVE_ENOUGH_DATA=4 - * http://www.w3.org/TR/2012/WD-html5-20120329/media-elements.html - * @constant - * @type Number - */ -HTMLMediaElement.prototype.HAVE_ENOUGH_DATA=4; - -/** - * Property readyState - * http://www.w3.org/TR/2012/WD-html5-20120329/media-elements.html - * @type Number - * @memberOf HTMLMediaElement - */ -HTMLMediaElement.prototype.readyState=new Number(); - -/** - * Property seeking - * http://www.w3.org/TR/2012/WD-html5-20120329/media-elements.html - * @type Boolean - * @memberOf HTMLMediaElement - */ -HTMLMediaElement.prototype.seeking=new Boolean(); - -/** - * Property currentTime - * http://www.w3.org/TR/2012/WD-html5-20120329/media-elements.html - * @type Number - * @memberOf HTMLMediaElement - */ -HTMLMediaElement.prototype.currentTime=new Number(); - -/** - * Property initialTime - * http://www.w3.org/TR/2012/WD-html5-20120329/media-elements.html - * @type Number - * @memberOf HTMLMediaElement - */ -HTMLMediaElement.prototype.initialTime=new Number(); - -/** - * Property duration - * http://www.w3.org/TR/2012/WD-html5-20120329/media-elements.html - * @type Number - * @memberOf HTMLMediaElement - */ -HTMLMediaElement.prototype.duration=new Number(); - -/** - * Property startOffsetTime - * http://www.w3.org/TR/2012/WD-html5-20120329/media-elements.html - * @type Date - * @memberOf HTMLMediaElement - */ -HTMLMediaElement.prototype.startOffsetTime=new Date(); - -/** - * Property paused - * http://www.w3.org/TR/2012/WD-html5-20120329/media-elements.html - * @type Boolean - * @memberOf HTMLMediaElement - */ -HTMLMediaElement.prototype.paused=new Boolean(); - -/** - * Property defaultPlaybackRate - * http://www.w3.org/TR/2012/WD-html5-20120329/media-elements.html - * @type Number - * @memberOf HTMLMediaElement - */ -HTMLMediaElement.prototype.defaultPlaybackRate=new Number(); - -/** - * Property playbackRate - * http://www.w3.org/TR/2012/WD-html5-20120329/media-elements.html - * @type Number - * @memberOf HTMLMediaElement - */ -HTMLMediaElement.prototype.playbackRate=new Number(); - -/** - * Property played - * http://www.w3.org/TR/2012/WD-html5-20120329/media-elements.html - * @type TimeRanges - * @memberOf HTMLMediaElement - */ -HTMLMediaElement.prototype.played=new TimeRanges(); - -/** - * Property seekable - * http://www.w3.org/TR/2012/WD-html5-20120329/media-elements.html - * @type TimeRanges - * @memberOf HTMLMediaElement - */ -HTMLMediaElement.prototype.seekable=new TimeRanges(); - -/** - * Property ended - * http://www.w3.org/TR/2012/WD-html5-20120329/media-elements.html - * @type Boolean - * @memberOf HTMLMediaElement - */ -HTMLMediaElement.prototype.ended=new Boolean(); - -/** - * Property autoplay - * http://www.w3.org/TR/2012/WD-html5-20120329/media-elements.html - * @type Boolean - * @memberOf HTMLMediaElement - */ -HTMLMediaElement.prototype.autoplay=new Boolean(); - -/** - * Property loop - * http://www.w3.org/TR/2012/WD-html5-20120329/media-elements.html - * @type Boolean - * @memberOf HTMLMediaElement - */ -HTMLMediaElement.prototype.loop=new Boolean(); - -/** - * function play() - * http://www.w3.org/TR/2012/WD-html5-20120329/media-elements.html - * @memberOf HTMLMediaElement - */ -HTMLMediaElement.prototype.play=function(){}; - -/** - * function pause() - * http://www.w3.org/TR/2012/WD-html5-20120329/media-elements.html - * @memberOf HTMLMediaElement - */ -HTMLMediaElement.prototype.pause=function(){}; - -/** - * Property controls - * http://www.w3.org/TR/2012/WD-html5-20120329/media-elements.html - * @type Boolean - * @memberOf HTMLMediaElement - */ -HTMLMediaElement.prototype.controls=new Boolean(); - -/** - * Property volume - * http://www.w3.org/TR/2012/WD-html5-20120329/media-elements.html - * @type Number - * @memberOf HTMLMediaElement - */ -HTMLMediaElement.prototype.volume=new Number(); - -/** - * Property muted - * http://www.w3.org/TR/2012/WD-html5-20120329/media-elements.html - * @type Boolean - * @memberOf HTMLMediaElement - */ -HTMLMediaElement.prototype.muted=new Boolean(); - -/** - * Property defaultMuted - * http://www.w3.org/TR/2012/WD-html5-20120329/media-elements.html - * @type Boolean - * @memberOf HTMLMediaElement - */ -HTMLMediaElement.prototype.defaultMuted=new Boolean(); - -/** - * Object HTMLAudioElement - * http://www.w3.org/TR/2012/WD-html5-20120329/the-audio-element.html - * @augments HTMLMediaElement - * @constructor - * @param {String} src - * @see HTMLMediaElement - */ -function HTMLAudioElement(src){}; -HTMLAudioElement.prototype = new HTMLMediaElement(); - -/** - * Object HTMLVideoElement - * http://www.w3.org/TR/2012/WD-html5-20120329/the-audio-element.html - * @augments HTMLMediaElement - * @see HTMLMediaElement - */ -function HTMLVideoElement(){}; -HTMLVideoElement.prototype = new HTMLMediaElement(); - -/** - * Property width - * http://www.w3.org/TR/2012/WD-html5-20120329/media-elements.html - * @type Number - * @memberOf HTMLVideoElement - */ -HTMLVideoElement.prototype.width=new Number(); - -/** - * Property height - * http://www.w3.org/TR/2012/WD-html5-20120329/media-elements.html - * @type Number - * @memberOf HTMLVideoElement - */ -HTMLVideoElement.prototype.height=new Number(); - -/** - * Property videoWidth - * http://www.w3.org/TR/2012/WD-html5-20120329/media-elements.html - * @type Number - * @memberOf HTMLVideoElement - */ -HTMLVideoElement.prototype.videoWidth=new Number(); - -/** - * Property videoHeight - * http://www.w3.org/TR/2012/WD-html5-20120329/media-elements.html - * @type Number - * @memberOf HTMLVideoElement - */ -HTMLVideoElement.prototype.videoHeight=new Number(); - -/** - * Property poster - * http://www.w3.org/TR/2012/WD-html5-20120329/media-elements.html - * @type String - * @memberOf HTMLVideoElement - */ -HTMLVideoElement.prototype.poster=new String(); - diff --git a/Java/.metadata/.plugins/org.eclipse.wst.jsdt.core/libraries/system.js b/Java/.metadata/.plugins/org.eclipse.wst.jsdt.core/libraries/system.js deleted file mode 100644 index 2066ffb..0000000 --- a/Java/.metadata/.plugins/org.eclipse.wst.jsdt.core/libraries/system.js +++ /dev/null @@ -1,1458 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008, 2010 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - ****************************************************************************** -* Please see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html -*/ - -/** - * Object Object() - * @constructor - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -function Object(){}; - /** - * function toString() - * @memberOf Object - * @returns {String} - * @see Object - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Object.prototype.toString = function(){return "";}; - /** - * function toLocaleString() - * @memberOf Object - * @returns {String} - * @see Object - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Object.prototype.toLocaleString = function(){return "";}; - /** - * function valueOf() - * @memberOf Object - * @returns {Object} - * @see Object - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Object.prototype.valueOf = function(){return new Object();}; - /** - * function hasOwnProperty(name) - * @memberOf Object - * @param {String} name - * @returns {Boolean} - * @see Object - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Object.prototype.hasOwnProperty = function(name){return true;}; - /** - * function isPrototypeOf(o) - * @memberOf Object - * @param {Object} o - * @returns {Boolean} - * @see Object - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Object.prototype.isPrototypeOf = function(o){return true;}; - /** - * function propertyIsEnumerable(name) - * @memberOf Object - * @param {Object} name - * @returns {Boolean} - * @see Object - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Object.prototype.propertyIsEnumerable = function(name){return true;}; -/** - * Property constructor - * @type Function - * @memberOf Object - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Object.prototype.constructor = new Function(); - -/** - * Object String() - * @constructor - * @extends Object - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -function String(){} -String.prototype = new Object(); -/** - * static function fromCharCode(charCode1, ...) - * @memberOf String - * @param {Number} charCode - * @returns {String} - * @static - * @see String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -String.fromCharCode = function(charCode){return "";}; -/** - * Property length - * @type Number - * @memberOf String - * @see String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -String.prototype.length = 1; - /** - * function charAt(position) - * @memberOf String - * @param {Number} position - * @returns {String} - * @see String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -String.prototype.charAt = function(position){return "";}; - /** - * function charCodeAt(position) - * @memberOf String - * @param {Number} position - * @returns {Number} - * @see String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -String.prototype.charCodeAt = function(position){return 0;}; - /** - * function concat(value1, ...) - * @memberOf String - * @param {String} value - * @returns {String} - * @see String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -String.prototype.concat = function(value){return "";}; - /** - * function indexOf(searchString, startPosition) - * @memberOf String - * @param {String} searchString - * @param {Number} startPosition - * @returns {Number} - * @see String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -String.prototype.indexOf = function(searchString, startPosition){return 1;}; - /** - * function lastIndexOf(searchString, startPosition) - * @memberOf String - * @param {String} searchString - * @param {Number} startPosition - * @returns {Number} - * @see String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -String.prototype.lastIndexOf = function(searchString, startPosition){return 1;}; - /** - * function localeCompare(otherString) - * @memberOf String - * @param {String} otherString - * @returns {Number} - * @see String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -String.prototype.localeCompare = function(otherString){return 0;}; - /** - * function match(regexp) - * @memberOf String - * @param {RegExp} regexp - * @returns {Array} - * @see String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -String.prototype.match = function(regexp){return [];}; - /** - * function replace(regexp, replaceValue) - * @memberOf String - * @param {RegExp} regexp - * @param {String} replaceValue - * @returns {String} - * @see String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -String.prototype.replace = function(regexp, replaceValue){return "";}; - /** - * function search(regexp) - * @memberOf String - * @param {RegExp} regexp - * @returns {Number} - * @see String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -String.prototype.search = function(regexp){return 1;}; - /** - * function slice(start, end) - * @memberOf String - * @param {Number} start - * @param {Number} end - * @returns {String} - * @see String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -String.prototype.slice = function(start, end){return "";}; - /** - * function split(separator, limit) - * @memberOf String - * @param {String} separator - * @param {Number} limit - * @returns {Array} - * @see String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -String.prototype.split = function(separator, limit){return [];}; - /** - * function substring(start, end) - * @memberOf String - * @param {Number} start - * @param {Number} end - * @returns {String} - * @see String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -String.prototype.substring = function(start, end){return "";}; - /** - * function toLowerCase() - * @memberOf String - * @returns {String} - * @see String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -String.prototype.toLowerCase = function(){return "";}; - /** - * function toLocaleLowerCase() - * @memberOf String - * @returns {String} - * @see String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -String.prototype.toLocaleLowerCase = function(){return "";}; - /** - * function toUpperCase() - * @memberOf String - * @returns {String} - * @see String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -String.prototype.toUpperCase= function (){return "";}; - /** - * function toLocaleUpperCase() - * @memberOf String - * @returns {String} - * @see String - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -String.prototype.toLocaleUpperCase = function(){return "";}; - -/** - * Object Number() - * @constructor - * @extends Object - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -function Number(){} -Number.prototype = new Object(); -/** - * property MIN_VALUE - * @type Number - * @memberOf Number - * @static - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Number.MIN_VALUE = 0; -/** - * property MAX_VALUE - * @type Number - * @memberOf Number - * @static - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Number.MAX_VALUE = 0 ; -/** - * property NaN - * @type Number - * @memberOf Number - * @static - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Number.NaN = 0; -/** - * property NEGATIVE_INFINITY - * @type Number - * @memberOf Number - * @static - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Number.NEGATIVE_INFINITY = 0; -/** - * property POSITIVE_INFINITY - * @type Number - * @memberOf Number - * @static - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Number.POSITIVE_INFINITY = 0; -/** - * function toFixed(fractionDigits) - * @memberOf Number - * @param {Number} fractionDigits - * @returns {String} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Number.prototype.toFixed = function(fractionDigits){return "";}; -/** - * function toExponential(fractionDigits) - * @memberOf Number - * @param {Number} fractionDigits - * @returns {String} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. -*/ -Number.prototype.toExponential = function(fractionDigits){return "";}; -/** - * function toPrecision(precision) - * @memberOf Number - * @param {Number} fractionDigits - * @returns {String} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. -*/ -Number.prototype.toPrecision = function(fractionDigits){return "";}; - -/** - * Object Boolean() - * @constructor - * @extends Object - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. -*/ -function Boolean(){}; -Boolean.prototype = new Object(); - -/** - * Object Array() - * @constructor - * @extends Object - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -function Array(){}; -Array.prototype = new Object(); -/** - * Property length - * @type Number - * @memberOf Array - * @see Array - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Array.prototype.length = 1; -/** - * function concat(args) - * @param {Array} args - * @returns {Array} - * @memberOf Array - * @see Array - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Array.prototype.concat = function(args){return [];}; -/** - * function join(seperator) - * @param {String} seperator - * @returns {Array} - * @memberOf Array - * @see Array - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Array.prototype.join = function(seperator){return [];}; -/** - * function pop() - * @returns {Object} - * @memberOf Array - * @see Array - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Array.prototype.pop = function(){return new Object();}; -/** - * function push(args) - * @param {Array} args - * @memberOf Array - * @see Array - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Array.prototype.push = function(args){}; -/** - * function reverse() - * @returns {Array} - * @memberOf Array - * @see Array - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Array.prototype.reverse = function(){return [];}; -/** - * function shift() - * @returns {Object} - * @memberOf Array - * @see Array - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Array.prototype.shift = function(){return new Object();}; -/** - * function slice(start, end) - * @param {Number} start - * @param {Number} end - * @returns {Array} - * @memberOf Array - * @see Array - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Array.prototype.slice = function(start, end){return [];}; -/** - * function sort(funct) - * @param {Function} funct - * @returns {Array} - * @memberOf Array - * @see Array - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Array.prototype.sort = function(funct){return [];}; -/** - * function splice(start, deletecount, items) - * @param {Number} start - * @param {Number} deletecount - * @param {Array} items - * @returns {Array} - * @memberOf Array - * @see Array - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Array.prototype.splice = function(start, deletecount, items){return [];}; -/** - * function unshift(items) - * @param {Object} values - * @returns {Number} - * @memberOf Array - * @see Array - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Array.prototype.unshift = function(values){return 1;}; - -/** - * Object Function() - * @constructor - * @extends Object - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -function Function(){}; -Function.prototype = new Object(); -/** - * function apply (thisObject, argArray) - * @param {Object} thisObject - * @param {Array} argArray - * @returns {Object} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Function.prototype.apply = function(thisArg, argArray){return new Object();}; -/** - * function call (thisObject, args) - * @param {Object} thisObject - * @param {Object} args - * @returns {Object} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Function.prototype.call = function(thisObject, args){return new Object();}; -/** - * property length - * @type Number - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Function.prototype.length = 0; - -/** - * Object Date(s) - * @constructor - * @param {String} s - * @extends Object - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -function Date(s){}; -Date.prototype = new Object(); -/** - * function UTC(hour, min, sec, ms) - * @memberOf Date - * @param {Number} hour - * @param {Number} min - * @param {Number} sec - * @param {Number} ms - * @returns {Number} - * @static - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. -*/ -Date.UTC = function(hour, min, sec, ms){return 0;}; -/** - * function parse(string) - * @memberOf Date - * @param {String} string - * @returns {Number} - * @static - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Date.parse = function(string){return 0;}; -/** - * function toDateString() - * @memberOf Date - * @returns {String} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Date.prototype.toDateString = function(){return "";}; -/** - * function toTimeString() - * @memberOf Date - * @returns {String} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Date.prototype.toTimeString = function(){return "";}; -/** - * function toLocaleString() - * @memberOf Date - * @returns {String} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Date.prototype.toLocaleString = function(){return "";}; -/** - * function toLocaleDateString() - * @memberOf Date - * @returns {String} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Date.prototype.toLocaleDateString = function(){return "";}; -/** - * function toLocaleTimeString() - * @memberOf Date - * @returns {String} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Date.prototype.toLocaleTimeString = function(){return "";}; -/** - * function valueOf() - * @memberOf Date - * @returns {Object} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Date.prototype.valueOf = function(){return new Object();}; -/** - * function getFullYear() - * @memberOf Date - * @returns {Number} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Date.prototype.getFullYear = function(){return 0;}; -/** - * function getTime() - * @memberOf Date - * @returns {Number} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Date.prototype.getTime = function(){return 0;}; -/** - * function getUTCFullYear() - * @memberOf Date - * @returns {Number} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Date.prototype.getUTCFullYear = function(){return 0;}; -/** - * function getMonth() - * @memberOf Date - * @returns {Number} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Date.prototype.getMonth = function(){return 0;}; -/** - * function getUTCMonth() - * @memberOf Date - * @returns {Number} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Date.prototype.getUTCMonth = function(){return 0;}; -/** - * function getDate() - * @memberOf Date - * @returns {Number} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Date.prototype.getDate = function(){return 0;}; -/** - * function getUTCDate() - * @memberOf Date - * @returns {Number} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Date.prototype.getUTCDate = function(){return 0;}; -/** - * function getDay() - * @memberOf Date - * @returns {Number} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Date.prototype.getDay = function(){return 0;}; -/** - * function getUTCDay() - * @memberOf Date - * @type Number - * @returns {Number} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - - */ -Date.prototype.getUTCDay=function(){return 0;}; -/** - * function getHours() - * @memberOf Date - * @returns {Number} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Date.prototype.getHours = function(){return 0;}; -/** - * function getUTCHours() - * @memberOf Date - * @returns {Number} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Date.prototype.getUTCHours = function(){return 0;}; -/** - * function getMinutes() - * @memberOf Date - * @returns {Number} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Date.prototype.getMinutes = function(){return 0;}; -/** - * function getUTCMinutes() - * @memberOf Date - * @returns {Number} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Date.prototype.getUTCMinutes = function(){return 0;}; -/** - * function getSeconds() - * @memberOf Date - * @returns {Number} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Date.prototype.getSeconds = function(){return 0;}; -/** - * function getUTCSeconds() - * @memberOf Date - * @returns {Number} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Date.prototype.getUTCSeconds = function(){return 0;}; -/** - * function getMilliseconds() - * @memberOf Date - * @returns {Number} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Date.prototype.getMilliseconds = function(){return 0;}; -/** - * function getUTCMilliseconds() - * @memberOf Date - * @returns {Number} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Date.prototype.getUTCMilliseconds = function(){return 0;}; -/** - * function getTimezoneOffset() - * @memberOf Date - * @returns {Number} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Date.prototype.getTimezoneOffset = function(){return 0;}; -/** - * function setTime(value) - * @memberOf Date - * @returns {Number} - * @param {Number} value - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Date.prototype.setTime = function(value){return 0;}; - -/** - * function setMilliseconds(value) - * @memberOf Date - * @returns {Number} - * @param {Number} value - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Date.prototype.setMilliseconds = function(value){return 0;}; -/** - * function setUTCMilliseconds(ms) - * @memberOf Date - * @returns {Number} - * @param {Number} ms - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Date.prototype.setUTCMilliseconds = function(ms){return 0;}; -/** - * function setSeconds(sec,ms) - * @memberOf Date - * @returns {Number} - * @param {Number} sec - * @param {Number} ms - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Date.prototype.setSeconds = function(sec,ms){return 0;}; -/** - * function setUTCSeconds(sec,ms) - * @memberOf Date - * @returns {Number} - * @param {Number} sec - * @param {Number} ms - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Date.prototype.setUTCSeconds=function(sec,ms){return 0;}; -/** - * function setMinutes(min,sec,ms) - * @memberOf Date - * @returns {Number} - * @param {Number} min - * @param {Number} sec - * @param {Number} ms - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Date.prototype.setMinutes=function(min,sec,ms){return 0;}; -/** - * function setUTCMinute(min,sec,ms) - * @memberOf Date - * @returns {Number} - * @param {Number} min - * @param {Number} sec - * @param {Number} ms - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Date.prototype.setUTCMinute = function(min,sec,ms){return 0;}; -/** - * function setHours(hour, min,sec,ms) - * @memberOf Date - * @returns {Number} - * @param {Number} hour - * @param {Number} min - * @param {Number} sec - * @param {Number} ms - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Date.prototype.setHours = function(hour,min,sec,ms){return 0;}; -/** - * function setUTCHours(hour, min,sec,ms) - * @memberOf Date - * @returns {Number} - * @param {Number} hour - * @param {Number} min - * @param {Number} sec - * @param {Number} ms - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Date.prototype.setUTCHours = function(hour,min,sec,ms){return 0;}; - -/** - * function setDate(date) - * @memberOf Date - * @returns {Number} - * @param {Number} date - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Date.prototype.setDate = function(date){return 0;}; - -/** - * function setUTCDate(date) - * @memberOf Date - * @returns {Number} - * @param {Number} date - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Date.prototype.setUTCDate = function(date){return 0;}; - -/** - * function setMonth(month,date) - * @memberOf Date - * @returns {Number} - * @param {Number} date - * @param {Number} month - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Date.prototype.setMonth = function(month,date){return 1;}; -/** - * function setUTCMonth(month,date) - * @memberOf Date - * @returns {Number} - * @param {Number} date - * @param {Number} month - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Date.prototype.setUTCMonth = function(month,date){return 1;}; -/** - * function setFullYear(month,date) - * @memberOf Date - * @returns {Number} - * @param {Number} date - * @param {Number} month - * @param {Number} year - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Date.prototype.setFullYear = function(year, month,date){return 0;}; -/** - * function setUTCFullYear(month,date) - * @memberOf Date - * @returns {Date} - * @param {Number} date - * @param {Number} month - * @param {Number} year - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Date.prototype.setUTCFullYear = function(year, month,date){}; -/** - * function toUTCString() - * @memberOf Date - * @returns {String} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. -*/ -Date.prototype.toUTCString = function(){return "";}; - -/** - * Property NaN - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -var NaN=0; -/** - * Property Infinity - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -var Infinity=0; -/** - * function eval(s) - * @param {String} s - * @type Object - * @returns {Object} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -function eval(s){return new Object();}; - -//@GINO: Bug 197987 (Temp Fix) -/** - * Property debugger - * @description Debugger keyword - */ -var debugger=null; - -/** - * Property undefined - * @description undefined -*/ -var undefined=null; - -/** - * function parseInt(s,radix) - * @param {String} s - * @param {Number} radix - * @type Number - * @returns {Number} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -function parseInt(s,radix){return 0;}; -/** - * function parseFloat(s) - * @param {String} s - * @type Number - * @returns {Number} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -function parseFloat(s){return 0;}; -/** - * function escape(s) - * @param {String} s - * @type String - * @returns {String} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. -*/ -function escape(s){return "";}; -/** - * function unescape(s) - * @param {String} s - * @type String - * @returns {String} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. -*/ -function unescape(s){return "";}; -/** - * function isNaN(number) - * @param {String} number - * @type Boolean - * @returns {Boolean} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -function isNaN(number){return false;}; -/** - * function isFinite(number) - * @param {String} number - * @type Boolean - * @returns {Boolean} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -function isFinite(number){return false;}; -/** - * function decodeURI(encodedURI) - * @param {String} encodedURI - * @type String - * @returns {String} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. -*/ -function decodeURI(encodedURI){return "";}; -/** - * @param {String} uriComponent - * @type String - * @returns {String} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. -*/ -function decodeURIComponent(uriComponent){return "";}; -/** - * function encodeURIComponent(uriComponent) - * @param {String} uriComponent - * @type String - * @returns {String} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. -*/ -function encodeURIComponent(uriComponent){return "";}; - -/** - * function encodeURIComponent(URI) - * @param {String} URI - * @type String - * @returns {String} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. -*/ -function encodeURI(URI){return "";}; - -/** - * Object Math(\s) - * @super Object - * @constructor - * @memberOf Math - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - - */ -function Math(){}; -Math.prototype=new Object(); -/** - * Property E - * @memberOf Math - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Math.E=0; -/** - * Property LN10 - * @memberOf Math - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Math.LN10=0; -/** - * Property LN2 - * @memberOf Math - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Math.LN2=0; -/** - * Property LOG2E - * @memberOf Math - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Math.LOG2E=0; -/** - * Property LOG10E - * @memberOf Math - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Math.LOG10E=0; -/** - * Property PI - * @memberOf Math - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Math.PI=0; -/** - * Property SQRT1_2 - * @memberOf Math - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Math.SQRT1_2=0; -/** - * Property SQRT2 - * @memberOf Math - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Math.SQRT2=0; -/** - * function abs(x) - * @memberOf Math - * @param {Number} x - * @type Number - * @returns {Number} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Math.abs=function(x){return 0;}; -/** - * function acos(x) - * @memberOf Math - * @param {Number} x - * @type Number - * @returns {Number} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Math.acos=function(x){return 0;}; -/** - * function asin(x) - * @memberOf Math - * @param {Number} x - * @type Number - * @returns {Number} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Math.asin=function(x){return 0;}; -/** - * function atan(x) - * @memberOf Math - * @param {Number} x - * @type Number - * @returns {Number} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Math.atan=function(x){return 0;}; -/** - * function atan2(x,y) - * @memberOf Math - * @param {Number} x - * @param {Number} y - * @type Number - * @returns {Number} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Math.atan2=function(x,y){return 0;}; -/** - * function ceil(x) - * @memberOf Math - * @param {Number} x - * @type Number - * @returns {Number} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Math.ceil=function(x){return 0;}; -/** - * function cos(x) - * @memberOf Math - * @param {Number} x - * @type Number - * @returns {Number} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Math.cos=function(x){return 0;}; -/** - * function exp(x) - * @memberOf Math - * @param {Number} x - * @type Number - * @returns {Number} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Math.exp=function(x){return 0;}; -/** - * function floor(x) - * @memberOf Math - * @param {Number} x - * @type Number - * @returns {Number} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Math.floor=function(x){return 0;}; -/** - * function log(x) - * @memberOf Math - * @param {Number} x - * @type Number - * @returns {Number} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Math.log=function(x){return 0;}; -/** - * function max(arg) - * @memberOf Math - * @param {Number} args - * @type Number - * @returns {Number} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Math.max=function(args){return 0;}; -/** - * function min(arg) - * @memberOf Math - * @param {Number} args - * @type Number - * @returns {Number} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Math.min=function(args){return 0;}; -/** - * function pow(x,y) - * @memberOf Math - * @param {Number} x - * @param {Number} y - * @type Number - * @returns {Number} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Math.pow=function(x,y){return 0;}; -/** - * function pow() - * @memberOf Math - * @type Number - * @returns {Number} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Math.random=function(){return 0;}; -/** - * function round(x) - * @memberOf Math - * @param {Number} x - * @type Number - * @returns {Number} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Math.round=function(x){return 0;}; -/** - * function sin(x) - * @memberOf Math - * @param {Number} x - * @type Number - * @returns {Number} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Math.sin=function(x){return 0;}; -/** - * function sqrt(x) - * @memberOf Math - * @param {Number} x - * @type Number - * @returns {Number} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Math.sqrt=function(x){return 0;}; -/** - * function tan(x) - * @memberOf Math - * @param {Number} x - * @type Number - * @returns {Number} - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Math.tan=function(x){return 0;}; -/** - * Object RegExp() - * @super Object - * @constructor - * @memberOf RegExp - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -function RegExp(){}; -RegExp.prototype=new Object(); -/** - * function exec(string) - * @param {String} string - * @returns {Array} - * @type Array - * @memberOf RegExp - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -RegExp.prototype.exec=function(string){return [];}; -/** - * function test(string) - * @param {String} string - * @returns {Boolean} - * @type Boolean - * @memberOf RegExp - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -RegExp.prototype.test=function(string){return false;}; -/** - * property source - * @type String - * @memberOf RegExp - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -RegExp.prototype.source=""; -/** - * property global - * @type Boolean - * @memberOf RegExp - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -RegExp.prototype.global=false; - -/** - * property ignoreCase - * @type Boolean - * @memberOf RegExp - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -RegExp.prototype.ignoreCase=false; -/** - * property multiline - * @type Boolean - * @memberOf RegExp - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -RegExp.prototype.multiline=false; -/** - * property lastIndex - * @type Number - * @memberOf RegExp - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -RegExp.prototype.lastIndex=0; -/** - * Object Error(message) - * @super Object - * @constructor - * @param {String} message - * @memberOf Error - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -function Error(message){}; -Error.prototype=new Object(); -/** - * property name - * @type String - * @memberOf Error - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Error.prototype.name=""; -/** - * property message - * @type String - * @memberOf Error - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -Error.prototype.message=""; -/** - * Object EvalError() - * @super Error - * @constructor - * - * @memberOf EvalError - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -function EvalError(){}; -EvalError.prototype=new Error(""); -/** - * Object RangeError() - * @super Error - * @constructor - * - * @memberOf RangeError - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -function RangeError(){}; -RangeError.prototype=new Error(""); -/** - * Object ReferenceError() - * @super Error - * @constructor - * - * @memberOf ReferenceError - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -function ReferenceError(){}; -ReferenceError.prototype=new Error(""); -/** - * Object SyntaxError() - * @super Error - * @constructor - * - * @memberOf SyntaxError - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -function SyntaxError(){}; -SyntaxError.prototype=new Error(""); -/** - * Object TypeError() - * @super Error - * @constructor - * - * @memberOf TypeError - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -function TypeError(){}; -TypeError.prototype=new Error(""); -/** - * Object URIError() - * @super Error - * @constructor - * - * @memberOf URIError - * @since Standard ECMA-262 3rd. Edition - * @since Level 2 Document Object Model Core Definition. - */ -function URIError(){}; -URIError.prototype=new Error(""); - -//support for debugger keyword -var debugger = null; \ No newline at end of file diff --git a/Java/.metadata/.plugins/org.eclipse.wst.jsdt.core/libraries/xhr.js b/Java/.metadata/.plugins/org.eclipse.wst.jsdt.core/libraries/xhr.js deleted file mode 100644 index 4d6c011..0000000 --- a/Java/.metadata/.plugins/org.eclipse.wst.jsdt.core/libraries/xhr.js +++ /dev/null @@ -1,104 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2009, 2011 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - ****************************************************************************** - * - * Based on information from https://developer.mozilla.org/En/XMLHttpRequest - * and http://msdn2.microsoft.com/en-us/library/ms533062.aspx - **/ - -/** -* function createRequest -* @type XMLHttpRequest -* @memberOf Window -*/ -Window.prototype.createRequest= function(){return new XMLHttpRequest();}; -/** -* Object XMLHttpRequest -* @type constructor -*/ -XMLHttpRequest.prototype=new Object(); -function XMLHttpRequest(){}; - -/** - * function onreadystatechange - * @memberOf XMLHttpRequest - */ -XMLHttpRequest.prototype.onreadystatechange=function(){}; -/** - * property readyState - * @type Number - * @memberOf XMLHttpRequest - */ -XMLHttpRequest.prototype.readyState=0; -/** - * property responseText - * @type String - * @memberOf XMLHttpRequest - */ -XMLHttpRequest.prototype.responseText=""; -/** - * property responseXML - * @type Document - * @memberOf XMLHttpRequest - */ -XMLHttpRequest.prototype.responseXML=new Document(); -/** - * property status - * @type Number - * @memberOf XMLHttpRequest - */ -XMLHttpRequest.prototype.status=0; -/** - * property statusText - * @type String - * @memberOf XMLHttpRequest - */ -XMLHttpRequest.prototype.statusText=""; -/** - * function abort() - * @memberOf XMLHttpRequest - */ -XMLHttpRequest.prototype.abort=function(){}; -/** -* function getAllResponseHeaders() -* @type String -* @memberOf XMLHttpRequest -*/ -XMLHttpRequest.prototype.getAllResponseHeaders=function(){return "";}; -/** -* function open(method, url, async, username, password) -* @param {String} method -* @param {String} url -* @param {Boolean} optional async -* @param {String} optional username -* @param {String} optional password -* @memberOf XMLHttpRequest -*/ -XMLHttpRequest.prototype.open=function(method, url, async, username, password){}; -/** -* function send(body) -* @param {Object} body -* @memberOf XMLHttpRequest -*/ -XMLHttpRequest.prototype.send=function(body){}; -/** -* function setRequestHeader(header,value) -* @param {String} header -* @param {String} value -* @memberOf XMLHttpRequest -*/ -XMLHttpRequest.prototype.setRequestHeader=function(header,value){}; -/** -* function getAllResponseHeaders() -* @param {String} header -* @type String -* @memberOf XMLHttpRequest -*/ -XMLHttpRequest.prototype.getResponseHeader=function(header){return "";}; diff --git a/Java/.metadata/.plugins/org.eclipse.wst.jsdt.core/variablesAndContainers.dat b/Java/.metadata/.plugins/org.eclipse.wst.jsdt.core/variablesAndContainers.dat deleted file mode 100644 index 3f8e74c..0000000 Binary files a/Java/.metadata/.plugins/org.eclipse.wst.jsdt.core/variablesAndContainers.dat and /dev/null differ diff --git a/Java/.metadata/.plugins/org.eclipse.wst.jsdt.ui/OpenTypeHistory.xml b/Java/.metadata/.plugins/org.eclipse.wst.jsdt.ui/OpenTypeHistory.xml deleted file mode 100644 index a4ee3cb..0000000 --- a/Java/.metadata/.plugins/org.eclipse.wst.jsdt.ui/OpenTypeHistory.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/Java/.metadata/.plugins/org.eclipse.wst.jsdt.ui/QualifiedTypeNameHistory.xml b/Java/.metadata/.plugins/org.eclipse.wst.jsdt.ui/QualifiedTypeNameHistory.xml deleted file mode 100644 index 9e390f5..0000000 --- a/Java/.metadata/.plugins/org.eclipse.wst.jsdt.ui/QualifiedTypeNameHistory.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/Java/.metadata/.plugins/org.eclipse.wst.sse.core/task-tags.properties b/Java/.metadata/.plugins/org.eclipse.wst.sse.core/task-tags.properties deleted file mode 100644 index c4797a6..0000000 --- a/Java/.metadata/.plugins/org.eclipse.wst.sse.core/task-tags.properties +++ /dev/null @@ -1,3 +0,0 @@ -# -#Sun Apr 01 12:25:59 BST 2018 -task-tag-projects-already-scanned=Testing Java,RemoteSystemsTempFiles diff --git a/Java/.metadata/.plugins/org.eclipse.wst.sse.ui/dialog_settings.xml b/Java/.metadata/.plugins/org.eclipse.wst.sse.ui/dialog_settings.xml deleted file mode 100644 index 63fae25..0000000 --- a/Java/.metadata/.plugins/org.eclipse.wst.sse.ui/dialog_settings.xml +++ /dev/null @@ -1,5 +0,0 @@ - -
-
-
-
diff --git a/Java/.metadata/version.ini b/Java/.metadata/version.ini deleted file mode 100644 index 8c603ee..0000000 --- a/Java/.metadata/version.ini +++ /dev/null @@ -1,3 +0,0 @@ -#Sun Apr 01 12:30:14 BST 2018 -org.eclipse.core.runtime=2 -org.eclipse.platform=4.7.3.v20180301-0715 diff --git a/Java/.recommenders/index/http___download_eclipse_org_recommenders_models_oxygen_/_0.fdt b/Java/.recommenders/index/http___download_eclipse_org_recommenders_models_oxygen_/_0.fdt deleted file mode 100644 index f45918d..0000000 Binary files a/Java/.recommenders/index/http___download_eclipse_org_recommenders_models_oxygen_/_0.fdt and /dev/null differ diff --git a/Java/.recommenders/index/http___download_eclipse_org_recommenders_models_oxygen_/_0.fdx b/Java/.recommenders/index/http___download_eclipse_org_recommenders_models_oxygen_/_0.fdx deleted file mode 100644 index 47905a6..0000000 Binary files a/Java/.recommenders/index/http___download_eclipse_org_recommenders_models_oxygen_/_0.fdx and /dev/null differ diff --git a/Java/.recommenders/index/http___download_eclipse_org_recommenders_models_oxygen_/_0.fnm b/Java/.recommenders/index/http___download_eclipse_org_recommenders_models_oxygen_/_0.fnm deleted file mode 100644 index e5e6f9a..0000000 --- a/Java/.recommenders/index/http___download_eclipse_org_recommenders_models_oxygen_/_0.fnm +++ /dev/null @@ -1,3 +0,0 @@ -ýÿÿÿ -coordinate fingerprintssymbolic-names -classifierselfccallovrdselfmovrpovrmstaticsctor \ No newline at end of file diff --git a/Java/.recommenders/index/http___download_eclipse_org_recommenders_models_oxygen_/_0.frq b/Java/.recommenders/index/http___download_eclipse_org_recommenders_models_oxygen_/_0.frq deleted file mode 100644 index 46d06e3..0000000 --- a/Java/.recommenders/index/http___download_eclipse_org_recommenders_models_oxygen_/_0.frq +++ /dev/null @@ -1,1018 +0,0 @@ -™>‰Hû!…ÁDÕ ÷›÷û=m]—(?¹*×£"Q£›#‰ß"1‹¯_·‡‹ͯ±Žû -3Ý')ŵÁ|ÉÙ§"Ïù×7ÁÙ ÓuÏ2ûŵ|¯K‘#­‹ñ0×ñ¿ù)ý\ý.Bó7ù‘­ ýˆµ ïÃ$Ù/ÿ1ÙHóÇA¿C¯8ñ÷ -Í=£2÷'¹×0Ïo«(‘÷¹Çù‡2½ñ/ÉdQ­†ÙGÉ¡!¡¾»;Õ¨…¥"%õ!¥8%ï ËÝ2­ËÓcÑÕ‹u¿"×9§Éw¥é¥ç‘v½K‘±ŸYû¤©­ׄ© -ãF×éy¥?ÕÚ³nÝ7q½-ÛíÚÝvFë’óx“¯\Ÿ2ÝÀ­«‡uåTÏŽíÏÏÇ-ñfËE?³ ·Š÷•‘há¬…Š£–»¦ÞÁ~Lárç’¯K­’ߩ粱‡É:µKéc<û{»‰³ Ãi¹ÔÝNó–³»Õ-ý8•¡/ë¦õOó‡Áµõ -Å*¹Çëá:—•É ³wë ï2Û·¼ƒ¿ñËB&£ÂµFÕ›ÃVå`ÇLå)'N±•¹•…<™&… …™¿-ÛÝ!#ç ç|˳ùGÙŸ0Ë`Ç •c±(-£'ß+ëà ű ±jó!ï$ %Ý3“aÇû ‹Aý -ñ ß×աù½wó*/Ë"ß$ï"Où ù/Õí!¿ Í}¹é"Ù³ƒ#·ï)ù-“ ÏËP­(?› Ë(…0©A-£*…ý¥KŸ"£$—õ"ý7'Ã!Ù#»>ËICÅ—Ó;Uñ)­!× Í-ÝÝ&‘có3™&/ù™ÍÍ`—õ‡&ó¹#íI"ï<×…õ»Ï ƒÕ£ß,£ ûA‰;Ÿµ1«S…å 1á›Ñµ_ý<ñQç-±×­jÕ!Á Añ¿ß5û@U‰¥(9¥Û!¿ÇÙ0­*ËGË#›`Á0­) »§Ÿלë‹ ‹ éDï¥-çõû³·ŸwÕÑ›‹å)‰_ñÙ/ÿ;» í…÷Så'7µ¿+?½!ƒ·$·ï7¿*ߥWí\ÉÏ9¥×:»±(3ƒ‚±« Ý‘*A¹ù*óñ ¯"-«(¯e» ‰…¯÷!KÛY‰*Å|ƒ#­ × ­FE“ý ±ÑGõÕ£ ¹`Ñ(‰(#½á!ÿ ÇD£ÕVùl§ ;Ç!“ã “5“"Ó‰ ×(»1ÍÇŸ Í@#Ç+õ³ËAóÃ'ù‘«I«Ù"9¡¹&‘P ñœ%«Íï~Ÿ9›!£ƒŸ(IëÃ%…Å-Éã!« ‘~ÿw+ç©$çÍï5Áé"“Vѽ ÓŸ¥±'ávù“…‚¡«‘¯ Aë>óqÇO™Ï;õI‰ã³å»‚µ¡à U韩 ã·8ç¥ÿ!³í -Ï›•CjË ™Û › ¿"1ñ -ójVÿëãCÿ&«$…ÁQã#ý…ëPç µ·!«E­?£–Í í‘7É“Û -÷f™L?á -­«Ýñ+åÿQ©¤K×Ï!Í»›1¯9¯ý?• ý¥X»$)½³$•Xéñí,µ‰$Å «)ÓX¥#›©Eñ!ãŸë=™½"9… ‰Û …Á<ï[ï›Nû&õ/ ­]C‹?9—‰fo57ÿda"#=?Ý%#…½×:ßÏ×M£$Ý)5‡%åŸ#ƒŸ!÷²ñÕ-·…(%i-Ñ¡¿N5;Å'¨‹ñ‘5'ËÝ•)Ã%3ó³0ÿ7ýÉ1/ñÓAý©"ݕ祫8 ó¢+§ ×"‘”×*;µÍïã_-ù½kßó±#§#‰$Ý ÙLõï#ß]Ûb¥™‰1ýÂ÷³5×É›¿bÓãB£{~ã‹‘ã$‹Y£­uû°¿_™ãá¾é¼ƒ±ù2•°·LïËëTËOσíñ€‡4›V­µåª±¨ƒIç‘[‘[ÓÕµ¨Ñ‘ñØíƒ‡7±“˜¥ñ·ï—w羿|ý£«¼§f•š!õ˵ÏPñ©ƒûŇ¡Yƒ· Ÿ"ù1›Ó¬û ¯ -ù¹ÛåJÅ©‰¥J…MãŒù#‘÷¤>ƒÉ%#åLÍ'å­<·níÿ8“fµ)©8½Tó"ßɯƒóû͆×I·!Ý]ÃlϳW­ -å_ÑÉÙ•§¿— £”•1¯”åÛ~‡Y»­ët¹ á‡ë‚ãÍ2N¡D¿t÷!ϧ#ß"µç\ÿ>󟹱¿¹[í$XïQ‘µ:‘©Eí,Å&¿÷Ž»8“/ƒ ±ÿç ›Iÿ ¯ Á µ×áv‹ƒ±A•!Ï®ç{¯Œù'ÅÏ/SùS£õzÍ$£¿ë3é…Ä«§­<Í…é»mßµ£Ó ÷!Å{å%—õ !óÉ0å€{?«®Ÿ ›M©i“µC¡ç¹- ™[󯎕5÷VÁ×bý<'‹ÍÍ&ÁÛ‹Ïfý É!»%©¥Y§×,å µ9…!·Ý …Ñ¡7½õZ› ×-«"Uñ;…{‰ ÏK¯?éÿ—×8ùÄÕa‹é"ƒ -Õ«vï4› -ÕÃG¡2!‹©^Ý ãŸ#… ÙUÙÑfÝJ‹$“·=ÍSŸ… bó”—Û€$¿ óùïU›È•¶¯?w¯ó Ù ¡ãó±Éy•"­.ƒÏIÅ -³µÉÝËC© ‡;#¹Ç•iéÿÓ"ñåï‹ç¿qó>ûÁã»$·™ù%™=Ë/ÏéC©ó/‰¡:ñ—Ÿ#•)«1õ=ÝVA§Ó£DÓáÁåtÅDý!Ù -³*ƒ‹4ù]ÉÉ/…8ïóé(óÍuÏ¥"Å.«ãÏës÷¡JI±#±çv‰çÁÍ‹#‹ç˜Ó!ËD½µZ¯¢ç ïµ ©¶ÑÍ¥.ßß‘‹·+½†‰Ó°³›!¿¤!…ÑÝDÕ‹ïtë™KŸuï.»1û¥SݱÝ6ƒtÍ"¦·—ÁǵËūթõ0|ƒ<Ç#¥é -Ÿ#ј™€çÉ» ™"Í%Ý?‡Ÿ¯DëFã³ÿóéF›!÷){á‡CÉ™¹ã££µ"×$£ÅÃ÷*‰¹ Á@Ç=™!Ë÷Í!ÛÃÇï{©Mó Ûý"Ó¹·ß Å>ÛW“§ÏÓ–·!¥"Ýï"µ(ó -Û“EÉ;™Dï"šÓ á“É#ë3—÷¯¼Õù툱$&ÙqŸ*É"™…í½!¹ -¹ã ±8ë—ÃLí…)¯ñ á"«#ï›}¹{³ÿ‘™§ËwÑ£ƒ”ûå ‰~ï ×—ù6÷ÇqÏÉF…z“ëÍ‹Ç׫°¹¯p—Åñ+9㎻µ5Ï Ë£E³*Õ/ë\‘!‡#³:óé…ƒ>!Ó¤‡[™'уååQË‹VÏóëë[å0éS§,©?ŸÉ)»³Ã©Ðß=§ï.Ûmå‹‹Ø£Á<ÃL¡Õ!ç§7«Ÿ›:å¤ý­>·K·¥$ÛŸÕÇw鯡µ¿&¥¡&×JÏ‘‰8ã»<Ý™5õƒYß Ÿá×_=áó?¡Ï>£“‡›Yí1¯áÝ2‘ #÷™?ßK¡«—_‘×¥!õ›PÅDÛ‹'™O«›%Û%•…ó±YÅš¿¡8Çhëí Ï0˵ õ5ïWíWŸÏSÍËHã‘·ƒ(¹.V§Ñ‡Û1»X¥§,ÇËã‡ÿ;ç?³gƒËX=©›ƒŠ›;Ë?½ …?߉×ÙßÉ‘1¿[é7‡Ù<ËVãÕé8Ñ™2½"Ï2ÿ0•3ŧ«ß$ã§7Á¡1« -ÿI™<ã`á Ãí;û ©;÷qß».Ÿ.….±-…‡ßí&å±K™7û õ¥#á1ñ‡M©Õ”ù1ý‚ÇF•ßXÑÝ/Ë5ýƒ<³ˆÇ.±×#­J¥‰³ Õ.¯#·;ípÓ*‡3û ÷ƒ£Y‘,Ù£;Ó«;ýZõ1¥%× ëGýëÆé­"Ëí;ƒIåšË -£@­›2ŸÊ‡³"‹Û?ÓK½ÒëË §%.‰YõXˇµíYÿ0åã½é$í1ÃRûKëÃá -ÁµŽ¹ «6Ó.©!é3‹ -ïëZ÷<¥¡¯4å«X›O×4í°Í±{§CÅ­'Û"ƒAé#›)ûßµIÛw³µ/« Ë™DE͇• ‹ Û±·‡EŸ'Ÿ•ë çZ¿é¿˜“ûE«…,õÃ;*³"ç'Éý$¹¥Ÿ=· ‡±"»2§#óJÙ÷ Å-‘¹½ÿ!µCÓÃñ6“é¯FÑ7Á'á…×´Õ7¡©ß ÅÍŸz·ã#á.¥+Ó/O™w×ó£|«6û¡.Å… 1¿›aëJ£éÕ#¥éƒà ­« å[Õ á áñy—Ù‚Ë…»­/½¡³“±+¹“û?ÉM[Ÿ£éçX©$ƒÌÕ(÷­­õ­KÃǹXÏ0Ék盯‡ß¥ñÉ ÍiÛñí/é»4Ï2Ù -›«u³¥§•#­¢µ½0†Ó×¶ÃJÁžýš>Ÿ€§µënï&Ï/·«‘Á¡á ¡'Épýµ_—ÿ|ç ÿ§™;×%÷ƒ9¥¥'ÿ§!—ƒ,×u³“*…§Ÿm•™íïqû±}‰#û'ƒxÁCça¿« £@µ*Ï Ù”×$·­lŸn¿A»Kû1§‰™£-éEé ‘ å;¡AýJ¿kÝé £0 ÁÓÃ1¥XÝ7±;Åë̯{“4ÏKçñ]‡]ùï §ZY—Å"óÝÇy¹ÛÍ#Ã1Ý_Ó@¯Çßý¦‹>ÿ׃iÿ®ÿ;ý|ç`ÃdãØù…¿¡»ãWÉz‹K‰»›@û®¥µÁ‡VÿÁóL½ßJŸŽŸ"Ï:£/•«ç ¥‡‡"ãTŸó‡ ¹í × ©y á ™0½ ñéóÝñ̓í -™»Ÿ(Á¿@÷¥õ— ñïñv¡#ý¹»‘é#Ñ ±«0¹¥h™û“&› ½ ©9Ñ"Í‘!Ñ ã7¥G¹ûÓ¿‹kÇ;¡ )×/…(·AÙ·™³…Ç ç ËLÍGç$û¹"ñ ©…)ß ­o‘xïN÷ -«Û ™éåÍ ¥·!»$çOí!¹ ã"Ïc÷ ýÓu½¹á¯ Ï£‹»'ÓGý/½å ùóoéý AŸÙ"ùÉÙEÅ"Ãj¿ ¿— ‡ -ù¯#ób­©ÿVݱ¿ ¥— ß… ¹§ —$Ÿj¹ ù2ÿçŸÏ;…ËÅÍBû ë˯ɕHõ!ËýÕ —B±õÓ“+½V‰!µ6ýH³³$‹ ·é ƒÇõxã¿‹2Bí!Ÿ¿Ç!©±»év‡¹2óÙõ&ýµ×½v™ÍßÏýɆÝß Ï)‰ ƒÛ¡Çûw­ Ý?³ ‰ƒ × F‘‰Ý!‘©Åñû³‘F×ßùÕ¡Áç½í¯ÛQɽçï¡!óR“AßÕ$ƒÃÃ.Ë × Óé!Ý ñ}ó‹RÅá­… ÿB©C³·ƒ É ¹ñ#Ç¿!í© ÷…$¿j™"µÃó:ç@µï!óà í ÇŸŽÃóŸÛÛ©›©§µ@¿³#ñï -³ñxÓŸÕó#“ç!á‹"ÙÓÃ|+©Ó6PÅ›œÓ!Áh§Õ)·qõ'Gƒ/£•FÁ@ç@ÙÊûc;“?ëVÍ:‰œ“ˉ - Ë¡÷ÐÿOµ³ûsá"ë4õ¨ñbÿ4— ³±{ã;©(§ó«ñ Å@=ן›(£ÎÑ6ÿ¬¡-•½x³¥€Ã·¹Ãç¤/2ï)Ûµ‡ûµB|‰Eµ ëGÛ^‘$ã‰2ŧ*¯;Ù§•6·ÁS‹*‘ ÝC•LûŠÇÃ(ç§Ñ ©ù'Û,i• Í.å³Ç£%­éo»½§5Íõ_ß™(¹cõ“wÎÏ”¿…D¡ó&£ Ý1»*ÏáJË/Õ ¯!—ßGûOƒ ¯#™<ÝSÛë>›=ñ±@Ý?™Ý#·`ý*ùßó“ÇI+ϵBÉ8…5ï4µ1ùSË8ɉ%ã/ˈñ,×\û.…û$×ãa•+Ý£-ÃK­'£Ÿ‡å ÷+Ó§éçó,ÝÁ.‰9Í Ñë Óãy£`û¯"ó³1“‹+íïký-Ù"ù1‘M›‰•÷*û»5×!§$ÑCý1ãO—£ ÿÿAñ¹5»ý8ÙI㉠Á2Ï ¯?ç!£5£ ­í*ÓL“³·¹ ŠùWãå ‡FÏŸ¯3á õùNó'“ —*Û•ßnùó.ÏB§™µµ%é:¿Õ.ù Ç—µ «\Ÿ ó3‰C½©Ç훡Á …^å5̓… ¹$Õ1£2ó(›› -™ ójÑ:‘Õ`›9»"—w*ûû'©Ù'•Ã,“9™FÿÃ<»5éû ÿfµ7¥Ã!Çù"ó ƒ(ƒ1ó2ùh郓+íó×DÇ%Ñ9· çM±vÛëëË9Ç.¹I«ÉË-‰hå!ÁaÉó ¡ -“.ÁºÑ ÇÓ ¯‘»õ·6ÇF©(™ÃEÁ*áLã7¹5÷,‡÷0ÿ7›ñ3ã·S¥—¿‡$›†)Á$ÿ'ç+Ù-÷"«e‡E·;Õ5­¯!ƒ‡]ë2•4Ï‘%ù— Á8õ?ƒ2ÃÇ Á¨¥÷ñ4é4¹-Ç'é1¹2›'‘™"ÿ,Û0‡÷ùýhÓDñRé‘)“4“$ççŠã¿¹ý¿6÷>ÿgñ-Ñ·Ù ‰Ÿ+­<ý8³ ¿•Eû÷²¡ƒé)•*¿;£?³1åá-ßɲÅ ùDå÷@í%ý&³7é+ù+ëjƒÍ |×+±E‹±(‡ŸQƒÑ ¥±Ñ ¡sÓ*×)ðã2zã+‰.÷>Ã*›¯Ó'‹W…D½áAéë•Y—,©½6•(÷(åBƒJ¡›¿^ó'³•醩 -— ÁJ—qÍ áõ¿V×$8ßûQ÷‡É4Åç§"©Fÿ »Kë%ᕵ‰*ÑÃ#½\™‰ÿÃWéã2ƒV­å(÷O·÷C³Ùá¯$ËLÙ#Á-ÕLÿç!›<‘·Lý ¡!ýK§"Û(é¹<“Z¯ù¡¯M™rÓ!©8™ï+¹›F÷"ÁˆÓ‡Ì—…;¹"­ñW· £ñoÑ-ÏG©Bý‡³½‹ãgõRë Ó(£]åU¤ë2õù.³-ûן ¹ØÍŽÙW͹—¹€—,Ÿ+ÅZùãn± ûÁ ã7Û/·Jû -—?ç2ÃcÉ£ ‹#ÓóÛB“BƒŽ«ŸÏ ãû ÝÇw§P©»³ÙKßT“›$Ç$±Å“’ùñ†‘ »÷Ûù%‹\Ž€Ç!…E¯Å1õ&‡\‘Fß÷/»½ ›ŸõÛCÝ8‹‹|ó‘ÃQÝ (ÓÏyу"ËÙÁl‰Z›Å—…›Çÿ£?Ñí ó"ýRS±‰sÿÏ Áç}ïÇÇCÝ.õ£#sŸÉgƒ&™$å#ÃLÑWù5Ç(» “‰׫­ÕùZ³7•R…FëljïpËÇ!››£ýÇ.Å¡‰½‘Ãųå Í·%Ó“Ó o͇û±•‡L½‹§Ç'¡¥$³ ™ ¡+ùŒÅÕ -׿#÷HHÉû¸¿ ‘ -Åý5³*ÓTå ïíà ×#ÁÁÅ…÷Ñ•Ïr͉ÛÕ¹…µ«h÷ßlj٫•³ Ë@«í‹Pã…YíÛMω*£€ÇE¯Táÿ¦¹„©D¡ û>«"ÙD¹ß*åáM×» -—É.½~‡·ˆ›>E»›!‡BÙdƒQ‡$éÉ#½"Ñ—ÛÇS“ ¥#õCÇqçV…ב ¡™›3ã›ûq›‰¡ó÷‰Ï -¿ ñç+ëÿÑ™‡5ù­"[»-‰]·0ïÑ;ëW½!¡Å!õ ‡"û#žµÍÛév“…5¹ ­ ¡¨¯Ý„‡¥S•£A¹7ÁÑ Á€Ë!Ë%!¡?ŸËI§CñBQ‡ï)‡0•T7Ë£Û‰×XÓz»(ë ÑLÝ'ñ!éD©=·*á•Á"çÓ ã©J·‹#“Ã…Ó<É—!Ãß—í§<÷ ‘V¯¯,±Û)¡(×5ñ Ç«Z¿?…ƒÍ/%˽ï§!¿ƒ‘" Û'i‹"‡Ó&Õy›(Õ •—+Ù~÷Ûù·ÿ0Ç‘OÕß =ñµýuÍÍ ½ϯ3ýn¡µÉÒÿzÅ4ñ#õIé`ñ õá¿¥”Ýsñ -ª…_¹Á©dõ£¡O­.¯ µ‡› ¥r—¯³ ‰…—ß ÏC“½(Ñ•…&å'“(›=Ë“^ƒ&ïÙ'¹&!á¿Zé*a³+# ÕJ០D5ÅGùM·£·ù!í‘Ç)•%¥(…„ákï ëD!õnÁ(ë7a›y§E³ ™•E“O±…ŸC§ÉSá*Ç+íTå!ãV¿A«rÅýÇûÚ㭦푫‰ýÖÓGÕÇÅÊñP»ÓÝ1¡pëO½ù}å!ÉÇ!¿·‰WÍÕ‰á#ó™¯"¯L‹‰¡™ -÷Õ#ã9·CÓ|¯+§DµLƒ‰"ó‡~Ù˜¡&§“ÿ ñˆ™Ž¡wÃ)ÿű#Ë‹"¥F§«Á·£¥¸å©r™2¯³,ç-½K“kñ · #f³i¿ -ÃsñŸýÅ‹‰í:Å1)ã-µ±¹y#.‹‹·ÏµÙ ý"ç_•Ù!£qï0‡Ï -±%Q•|ßÓá—)­gÅ -™*믿 ñý Û"µÌ¥I½{Ÿ<ù$»¥ñ§À¡f%ù`Ï—ý'Ž­ÙÁŸ¤¡SÛ¬³ñ¶• ÍÇͽdßAݨ‰£¯¿±&‘…­c•¹‰&ÕV‹Ýš‰#±k­#©Ié Ù%ñ‡Dõ¿ÑD‘"•ˆ… C÷;ÝYƒ•oË…BíŸËD§vW±^Ûq…Ǒ˙ ¥É¥¸åRÍ"I¹xá!Ó)ñ™…$7céË¿9ÉCIÁY‘0Ÿd«çEŸ“tñAŸ¿÷.Ù¯uŸÑA“rµ#‰C© 9©áù¥.­•-™v›DÿÍC³Lå•óB™½7ÿÃ^í -˧ÇUë³—=Ï%á¶· ?§“A1ÕrïEéó'G·EÝ ë!å"‡H-ÝCÇ9•ËÑpé_-­ªóÿ ×#Ù ó±"á3•³“Í'ã"ù@ÓÛD«§µƒ×DKÛ±ÃõÍ -™)‡3­aNAµ˲+ß'áL7Óùx÷'û©š/ãtßBMÉrƒ(‰%»Éåý—(Áb›“$ý>7Û+ñ]9ãÙ7!ÁEÝ¥§(ï˜-¯ §:/¯&Û]Ç!9Û·7ç Ù&7Ù)é#Í"“Ùµ–É -ûáC…Q¥±µÍ÷²ïC%§1µá"íIó ¹ÙÁ—ZÁ‚™#¯éQGó8ñ%…Aÿ&5û¿¥£Ë[K¥<Û«õ.¿—7ëu‰E‰·z±#ƒ&‹DÏK÷.£…'¯½ç0§#ÏEõ£ -ËFáÃù*…ç5÷ñÏÐ!…°Ñ³ ±»9•u¯û“eCùEã$ƒÙÀ7Õù¡ºÉo±I7Ý—"Å ‡ Ÿ£C©+ëEµ˜Ù …¥C±£Ù)1ňç'á¡4¡#ÕLóõó‰í ™³™í ‹8ÉE‡…B5ñ¿˜=ù>•£_Ë=›E%û.E·—»‘í-=©”'=¿x—(/ÕõÅd·Ó(£O‘¯"§Gƒ±¡ÇÃû Í£ ©åÆ“éiË »áy÷… •©½=û¦ÓÑá´;· ‹™­ÉçžUíÈ•»=§8‘y“Bƒ é óHñ‰x¥Ë£ÙG»£/÷X—‡»p¯8¹?§RÉ7‘Ч59û€§ÒÛçY½W÷·ßFµ›Õ"‡ÿn§½ÑËÑ-±"¥WÍ{ƒû«±¾ñ‹ÿ·m»‡Ã…ÅÕ…Ò±™…Nï¸Ù.ñ2ÿ´¯¾‘”‘1ÃPù.F •§ñ%×z·rƒ½ Ù"“Ûß=õ ˸Å ïO© -Á6©íKÿFã%Ï‘‹»0½\Ÿ“U•íníï:ÁáÝÁ “ž£—÷}Ù1“Íý -õM¯ÿ.‹Û>¯FÇÃÃÛÇ”Ǿ‰ÃÁù1ßå1õ0›§­:¡—*Å©Á;‘‚…ý'Ñ„‹K¥Íó˜ËdÏ™÷uÁ^ß!ñóoýé%ÃíÁ"½(éRtù'¥ ‡ ×ãpï;¯ý!çJÛ)¯%× ÉzÝí³‡»²•™¡%‘“óL݃µ£çý¡*•Íïç!!×”¥W½2Á™B­»ó;÷é™Ó7ëSýËÁ…‘áÇB‘‡ ÿ&³Z(Í›¹Û³ Ÿ¯0á‹,… -ÙÑY…-“4¯o­ç¡5±+¹Ï…ÚïJ½ ÃÅ*ÅÉ Ó‡Í ½“ù§£'û0ó§ÿfátÏ‘#« ÙíÓ ùÕ£ƒ«( · -éÑ‘ÑÓ·ƒ"Ÿ‘ï"ù,Á … Í6­‰y!¿D"£ïz™ÿÇ5Û—×µx¯—£4·Ç—‘*ûCíí¨ÑtMÏçÁ>‰‘ƒG¥ŸñhGé&™"§ N­·¥9˱=ùßqז鹇ÅI§?ƒ?Í?Ãq‡vÓ%³·‘™Ç '×"«jÝ4»~ó¾ÿ¡…’ÃÑ5á=å–Ë7›½ߌÁ@½•ÿ1‡bÙÍ.­O…‰µ;é–Û3‹›‰ïž¹¨Rñ.±’}ã¾á­ßh«%£™Ý/û‡µn§ ‹›é2× ï%ã6ŽßÕ%ͿȭŒ=å<ío—;™=‡q ­9ÿQûr‹5僳§2¯2³“Ó½q§8çªÑO¥$Ÿw±7©Ÿ½Êï-ñ-‰a“ ÇÅ+ét‡;Í Í2›&Ã[ï‡wÙ8¿™Ñd».Ó˜á&óžÕÁÝ·s…ÍÇÅ5·EÁ$Ã/磩“ÁÕ)™]™…i¹÷~û($›ß”÷R¹Då¥Í‰E¿Ú“׃֭nû’ç!•$›•õÓVß%Ëb¥HÕ8ÕšÕ‰P‰KLJ£ñsÿ±å׫±†ãzþϷÃÙëG‰ÂñÚÏu·‰‹rÇBÙ‘ÑW£É‡aå í3ýcÙ2ç\Ñ9ÍÕé³§ýLÝÏÿW³rÑ’óf¨¹Ë™—ýÓÒ#á•!Ó†· …‰Ï‘l³Ñç@õ…¹TW½µß½Ï -•Yÿtà õŸ‹(ÍNÙûNÓ‹ë¯óAŸ}}—G£…­GïÁ Ï2ŸAë1‘k‡¯n×1ÙR­Öµ`©<«‡—E¹'ß°¿VËIýÑ¡¹¯/Å}Ïí0¹(‰qËJŸ]Ù(ûÓ›ñ@ï㦑!‰!›qË©Ç~©TóDÇ.÷1©Á+¿H¥›í)Í¡Õ5£ ÛÓ.µñåó•Ç¢«#Ë2ó;«÷HË"Å/ó;‹€›;í8ó>ƒ[‡ ­cÕ&¥³K¹[›ç’'ņÉ’³©‰ÅƒzÏUË!©>‰†‘Ùç…ý‹…%Ó€¯¡ý ¡õgßQEïÙÛ”?ÛÙñ’ó-ƒ³"µáé1£ -™›ïëÙ -9é"ÝëM9ËÕ·"¯)«ÙµG­<›Yÿ/A™Só-‹ ÝÝ~ÇÉ ã‘! Ë»©š7Óë#— -ñ»õNũխßЛ.Ãȧ&¥PÃgÕ#µkÕûEÙ(‘£™U £M›q³VÓ¹ñ—÷sû¡aÙEÅ<ŤÓÉù™ÛSé¾ÏÒµµ‘³Ã&—ÑKŸÝ5±eùÎZ:»'õ(픃¸‡˜—1»!Ÿ|¿›XÁÙ;é|µP….ó²ƒgý¡k±ÿ2¹4ù°ÏZõ¹×£u­{§œÏ¯©ïVáu÷CŸ_Ï\ù„»:“XÿŠ©Í—}½ÓÉɤÑ?!!‘J¡3ÿ¥YóÛa¡ ƒ±7ßÙï;ãF©!¢­‚“±—j±Õ›:§¥·”…JÇMÑÔí½F¡`Ý £ÏÓ¸¿‡¿£6ÁÏû é¹MÁ¹ëPÝ@í£{ñ -­˜ÉÆ•ù •ÿŸË«—Ç AÓÏF—\µÇ£÷qÛ<…˜áÅ&½'•]—[×I¹…ÙçMýÕµ§çzÑNݳ­ ¯ï «×Ó -/ÏW½žý%—É•ç -…ë½Mý-¡—?¹5‡• Õ­JñtÛ“­*ë£'ÛŒ!§Å?ÛHÅá:¿ƒ ‘Gã8ó 5ÝWÓ9Ã-3‹BÿµÑ==¡ ­÷Kû´ -‹$û‚‘m×»Uù‚Ókµ=éŠåñ•÷3™‘¥Í<Ç…Ñ©´c§!Iã «.&ù-³ ÓåÕcÁoƒDƒ ÏûG×S÷“ ÕËGŸ×A¿ Ï6 BÏ»»X¹ ÿÿÃ…I±Mù\™k§Ö£F»Á³ -É>§ -5í%£Y­¹í‹Ç¥™9ÕÉÑ0¡{Í$7›Å0ƒ^í3ÕÿЃÎß-iç…ÏÍ.ín§$·û"ÉgåljÙ%ƒVçùbí&ͳß'í£a5§-ù˜ÑÃ6C«0‘1Á;‡w‹ Aû:¡‰˜å·FóF‰é]Q©Çd‡M»½A‹‡³‰+©¢Í$õ’AãL¡FŸ…ËÁÛÍ]£)ߢÕGµ,k¹%ÁgÇ(½ ‡)¹/õ)½mƒ'£c>ë†:ß&͟ç —P½ëqý;Ó°Ÿ§¥)‡_ý…÷'ñ3ï+éRë@ßnée‡¡ Û…åbí,»RÇ&™$ÙͽZ¯ ·£X÷ ëƒ=ÏÉv›œ×ѵ‰™„ó*ùKÙk‘k‰¿TŸ˜%½;“K™)ñísÇtÝA½S£ÙÓï=·g·2m—mûÑD·ój‡Ý‘Eé;ÍTó!ßÅ(ƒ«/—­ …u¥\Á× ÝQÇ%¥Ló(ý«+µ]—*‘4ÑE¯F£K¥ ™‰ Ù<·)Ýï”õD«ýS£J©¿‡ ‰NóÅ(Ó°ý;'Ï›ãCÕ˧½)¥ªˉ•d¯Ï~í±,§.Ï"¯Ÿß´•!§‹»P¥‡Ž×"¹•õ—U‘Ê“Ã_ïEïç—"Ÿ¢!÷0¿\ñËçQ½Jå -­ï £L»=Á ©?­QÉ^ñ§qû-³Œ….Ã~¯0ß…Í£>¿å“‘ ±‹yß*“pï -‡~况ñ)¯AÙÝHj­õ'×̳Cô‹fÕë¹OÕvõ‡=¿E›-…Ï‹­¿“ƒ‡Ú³ÕE¹q©¯ƒÍÕ»‰yƒÑ¡P³SÉ)µÐ±a¹¿áØ¿‘÷i¿×ÿ¿à ãRõ×óÏH£ŠåÆéÖÉtãcÇ¿ÍU¡Ž÷3«¢÷Í2³`ëÊÁ²¥ -õ ËVóŒå±™ó¿r‰0óÿc‹ŒŸ“ÕI¥ å·ûxý¼©2±Á£ˆÏ8·ùD5ׇ¥™×°·5ãjÙ¯…c»Ïµ8ËW…µÓ9… Ï+ñnߓㅯû‚µB6Û²¡¥Ócý6åSÿ¡Ì­­“Žá?›¹é·#U¯·ý ¹á4Ïfí¥·œµÆ“<µ˜ß›õ ŸÙ:ǙɟƒÃª›pË/Ë.ËSó‘\‘wã5§Ó™\ß‚¹z¥Çµ™Jñc“‚Ãʵ¹…ZŸ¿¡£‡F\Û½ÿ—åªÿv¯.ÉËÁïÀ¹ƒ½›·Z·Aß -|ûȵ½§\ÍÒÍ™ŸU瘷¯Û!“ÅÃ’ë[Ç“9€›*ËËÍs‹F«ɧ·É&‹$Ó™ë:á—9¡}×-©®·‘Ó¯É/í¡‹¯¸]µ‡å+çOáoç'É-Ÿ$ób÷?‰í —q·±ãÃE³³¾ÍŸÌ¹2Ã7ÇÐí¤Ó¹ ×Pƒ+㈕8ݮ哅»À——=¡åϵoûTã(û%Ƀ™-—†± >çLû.ç]‡'¥&ƒ EÕ‡Ñ'µ·)¹$»$뎓_áB‹ ‰;ÛCÛBŸ•CÛT³hƒ “ýdÏ ÅHÅ%•PÍ`Ëç §½ï‰*ÙóeÇK«,õ ½¯¯¡ÿMÙ$½a•!‹*Ý„Ë ã'¿‰½ÍI‘ ¥1÷ÅÓ^Ç/¿ÕÑVÆË «8ÙÌÅ€‹Rù®Õ«¹›xÕ¹ÿ5÷Øû-ù«0ï£ÁcѤÛÚ§)¥vÅEãiõ–µ"Õ?½ŸÌ©vሓ©‘;›™2£Zý±]Ý“±hÝÁë°çéÇ#ïÏM›¶­ ý‰K¡ªÏ%¿3ß•_Õç"Ÿ‰ÁHû"£ËÇ™›ÿ!ý ¿ýDÓ“‡óÃáÝUù ™´¯ë÷M‰áÔÉGGUmÛ÷Æ…)û|×»«¶©»¬åa#¡u‘ -«ÿ§í#§¹‘IŸ"ý]±«‹bå½ÿ©Ý|ÁiÇ_å{ÉÕ•‹Ç÷€¡=‘!¯&‡ ‡xµý¹­©¿*ëªÏ•“¡«Mɾáƒ~!ߥ‹¹"ÃÅÀ£&Ùÿ)õ:§oÛ÷¹J¯Ò ½óÁ'ÇëÐÿr¹1õ>ç%©J¯ã±ßÅ£ͰÏjãÇ‘õ­ë;ÓŽ‡!÷Ñ7ᜳCáª+×s±Eé©ßÅ·¯jÕ±xƒ;Õ ÅpËnMÉ}ƒ°ÓI—vóƒ©Ô¥±žƒL±Ûeå:ábí;Õ'Á ©G¿+õ‡1“b›ñ¼¥×!·«!¡tŸ×åEç"ë -­`±Öç|¿Õ§åg¿O¿¯áD¥'ϱ¹B©•[«Âý)å>ʼnÌÃÏÅÐï†õÙß,—#™£ý“ÿ…“³ñ{ÅD¹O¡ ³ɰٱÛ­Í­u…%ÿ -›×E›ý©‹¡í±Ÿ²Ï##—o«*·á½@éѷ(…2Û ƒÑ$ç -µ1ÃcÍÏ!ûiÇáÕ ·¯$!Û1•õáÅ)‡<™³µ# Ëá÷ï'‘“‡EáÏi!Ó‘‘"/÷!ÁÅ!ýiƒ©!“(ƒMÓ#'A­\Ã$µ¿ é»xé+ÝÉ ñÓ#ÿ!‡Có Ùõ½ -Å'pï -çõ“ý˜• Á ×@±2á.'Õ)ýÕO¥+/Ÿ•½Ó™.õ"©ù¹¬©_ç…©J—F¯ ñ ÷rá.¿ÿ •Ÿ^›/¡ñåÇ ×lé(»!›—ãˆÕ± ‘Gǃ/óµŸr™—›µá$¥Qÿ©)ýëµå.ë­<çÏcÓÿ ÇŸ÷?¥ÕB÷Y¥§r¹&Çóí·2¿£2ç…Ç Ã#§ Ÿãñ É ç­ ™¯W‹_ƒ‰‰6û5×ýµ1Å'óZã­å+õ1µ¿å³Ó*‹“që±xÁ&Ë[‘‡Ÿ)ëµ"Ù(ùCÓ““ ¹8³!£¹¡)å,ïI…-·õ?ß1Ïá1›Ïh¿(×·ù…lÓéÇ—#¥ Ýó ©qÓ#Í~åÏÏŸ\•ó"¯:éíXûT•yÁ^½½¡Äù ÕÛ‘ÇûŸ#Ÿï"“\áå1÷)õ.§0éc×…ßçu­ßµ.« ‰<«Ë$×(£©Û“:<Å¥½%‡ó$± ÃWÓÕ"©›»û¥±ósÛ"‹?©»û÷Eݵ/ ‹/« -‘#Õùų—!Ÿ)½4ý™/Í “×J«"­*½›)Ï…‡ñ)‰ŸçDëÉ·/Á ç<µ"û Ñ" ׯéǹ(ñ¡ÁÿwÙ'áçkõ)Ï"së “$©ñ“¯UÕ±ç…1C)•Á ÿCÃYÿ=‰×R§>«V©-“Ë ½9‘hýûhÃK Ã¥YÑrÛKË'±;é!És¡*9«—|—¿• ¯ïxÃ@Ó‘!¹)9±#Ý)§Ë¯FCõHÏ ÉÇ× -©F?çLÑ ÉÇÍ”I±Õ;ƒX»«Q· 3ó!ãÁ¸å|‰2çGÓ]Ó³I¹*»žÝK¹ 7Ý»‚¥ÑnÙ5Ý'å0Ñ×'±×5Ù#— ߣù#ÛO÷LûÑ=¿—ÍEã£QÁ;¯!Ÿ»Ãé3“&©Ã‘Åš«£×' à ƒÓ!ÿé AŸLµ(3ñå©ÇFù!Ó>ÝF?‹J‡,å¡)¥_õ8‘—!ã µ%Ë®—Ó`¥,+Ý ¥§<ÇóqñH‰OÅUÏvKõ'»4å5­Ç»Ÿã -Õ\£­@…  Á'Gd±™{)÷µI³YÓ‹ï·CÍuÇ2±v•x·C‹'‰ —ç'µ‘ÃpíB½¹"· ­)+ÙELÿÿŒ—“• ãÁÝï>ƒíÝÿŽç½³ÇJŸÀë&—‡ɪÏÓX÷S¿iå-ónßoÛÙ?©‡×6Ç·B¥?ç5÷õ±s£¡±'^ííë)A›#©#åÕœ-³ §_§—¡"¡—¥Oý•";­…¬…/ëå(÷#÷¿"­µÅ¹1·†åÃ=¿ Ÿ­ïËý:·Ç1‹xÛÉù ÓAƒ&ÅÉÝ7½&ûçýÁª‡(‡ÇHM‹\ïë“'‰¯©Ï ¹iû&5©e§"ç_û!=¿ ÷=¯g¿J—Ï Ý?¡Ï“ÿ³=Ý“»"ç3‘)—*áx™Wá9½ ­&Ë8¥ç!÷#á1›¹ÓÖEß§>ãIÇ"› ·™»=·S©µLéõ¿)©t‹ 7µ(Ÿ=õ*±M­A)çb÷Šõ0;åQ«ÕMß¡Í*Á¹‰¥»Ç¥—Ùÿ“©!«4Å}9Å!…¡0½}ÅAÑóË‘LÇç©£Ó ¹1ÇŽã’Óã¥å"Ûh™*£¯ÓÊŸ»rɧ·&é'Ç×;ÿÝióÁ.™#I*§s…Xý<)ã á$ÓsÛ.×ù‹¤ñ>ç)¡ Í\—É—¥pƒH…P‘ß ‹Í‹Eõ&‹vƒCßx…Coç½–ÿ«åjï&•—*çÍÑ"±£TÇE¯–¿=·E‡¢í_ñÁ»tǨÅÔÓOÙËŠ“T‹ ë/A½5ï -“C‡&ÅŽ)·4‘éMÓKɯŸÏ"ëOó'ç§(ûÍNŸ('ÓÀ‡> ‹+‹Û•)ù±_Õ$™‡E™û1…ÿ.1ïO$…'½‹ë×-¥á&ë Õ<½ “<"]å"Õé¿2«E±­Bý'¥³(é$Û$Á&ï©-™/ï\¹¯Ï§;c‘]Õõ éã*›J¡ -ËAÃ$ÑÝ)ù$ý áÝ!ñVåµ -¿ç ÿ×-Ë õ2‡CÇã -Ó;õ"ÝѨÍŠù“(ßç'Ù -ßDã­*™"¿$ßýBË"“@­&© µÕ·(ëÙ"ý&Ë×2›(í+ÉÛ!ÕÁõEó$Ýóõ§Ñ#»&•)Ã*ï.ý+™$¿+ù"Ý ÉÕ÷&…Õ7ã±Áé~ßßDÇ™£ ­ß?Áõ#Ï“-·ÅÙ!ß9Éã>õ*›•*Ó"³DF¥ -ñO» —SÓ?» ñ£Y«ã “ƒ4µ%¿UåãáÍë>‹³­Û£Õ«5¹(­ ›Aåí§7ýéo™³ ÑGÍñé-‘$ß#Íѱ*¡U·¯ ›HÅ ±.û§&ß«)ù‡+±ÓDõd;Ù°AY/—ÈM÷ÏÀ¹ó/7Û ñ·q‘ƒË! ÛP»+Í*³ñŽù¿Åiý1ï7Ó‹ ¿/£ —›?‰ƒ'×­½ËÍ Ñr£ ¿$Í'‹ç2‡^ë -‡¾Çï'ñaß«(…Uñ}å¶¡Óå™+Í7—"‘õ•/á ãýA™í™Fµ!¿$Ãï‘DùÛ 0Á¿‡(Ç]˳©ŒŸ·1­¥)— ó#•¹E½ ¡#(¿‹F£4ïß*· ™™-'b›$»çÑ—EÑ+)‡tá“ ×Mñ#—Ÿ ·ï­,C¯Ï ¯'—#ç;» -·)½s‘t<£b›ñ"¹-ç'“YÇ–Ñ ã%ùdÏ&4÷ƒ(÷]ïžM癃$ÿé©A¿E‡“ÛHñ?0ŸlÁ6Ÿ‰ûK¤Ýc‰1Ó*£õãe« É5¹—ÏXñ‚Ï-»­+ÝNùÚÛƒÑ^í*ÃË»6«\¿§«<¡UÏÍS×#·©©4ÁÏÝ8¯C¡½#ó“•Á³ÛÉlç;Ãs«“—•ýñD©$ùQ͉#Í"ßï¯ÃÅ1»ï(Ã3­÷^ŸÑ± ‘B‡Áù$Á™ Ë,å kÁÇݓ÷Ÿ‰ñÍy“3û*™Ë»«;íx•ÃÛ#募$§yñKËÛ !×± -ã#ãÍ1™—Íó÷iÙµy• -Ã5Ã~ã*牅±vƒ¡#›Ñ2•WÃ-ë­LÁJÿ‰£2‰ \×+ïO2‰D™—€å(óû£Í)ëR¥‰BËJý‡•» -¯!§Tû0­©[… ‘«Ï…'™‡™DEÓÉ«•O“Ý-¡'¹‰Õ@ÅÓÁ*ƒB'Å6à ÃÍ+³8»›Ás¡5 -™¿Ñ­ÝžÃoƒ á×Ë Û;ÅËÕ3³³°]Õ}³Ë/>™/“Íý³(Á ûb›*ï·«{¥.Å/¹Óó7û‰fE Û­› Û +õ,Ûx§0O¯‰Õ/û2Ávß.‰±!ÏÇ&¿³—(Ë@·»E¥G݇ýWÏ?óK4ϼ©·G³ó~Ï!‡r¯`×n‹z•.Ó™ñë™CÓª5¡X9ÿÕzK­]Í:‰J£“×JÝ(¥ë©·¥5¥(Wÿ6Á‹‰Åï©Z·™á ŸÏ*‰C¿Ý'“×Ë™Kµ ç"í]›É.“‡y¿¡!lÛ¡#åp÷'Í>Ñëï1íñ¬£Ë%Ûƒë(Ÿœµ‡‘ ý¤éUñÑ2õ£Íñ"É{ïÅ;™LÓ*Aãÿ …Ý -‰MÙwï á­x›O“ Ñm÷Nç×l™9Ó"Û<ÑpáýjƒYëfÙ£TݱÁ• ÃOÕãu¹@ß}©Ÿß« õ¿†Ç…dùUíÉÄËÓÓP¿w©Ñ¥c½@‡¡‹‘ å÷ƒïN©«/ë#ÉbÕ¥^£IñO•!ù&¹¥N8Ý6çN¿ñx×N㩳 ‡ûO¿%‡U¹N“Q»«žû ÷ ÑJû"ÏNû•—á8¥1ñb«Õ\Å/‹›P³/ÑDÁ!™V¡Qƒ=ßíùQ±wÝeÝÉ÷…ÝÝFÉSã Ç Ñ#¡]»åU™dÛ"‰P‘(›[½0ÏÑ -)ÙOÅ3ãO‡“ Ó•P‘BÇJçÿÅ]ÙBãVÁ#¹Tý\©íZ»já-å"­NÙB—§‘"™P‘ç&ŸdÉ2Aõ§FÍY£ÕS±ï@뵎ÿßCý‡» “yë‘TûJ¯#ñbÝlÉï,õÀõÇë¡Ñ×Hç·wåÙ‰°±_™ÓßéuŒ±ªå9áPÅMÛÒ‰ÔÇ×Å2ç;í>Õ¬Ç}ë`ßÖ…Wõ·ŸG؉­«—áEû,åÍÝ8›G¡Á‘·‹n…Ɖñj˃Ñ,û²Ÿ”ÿÙí‘…ù(Ÿi‹­åB—z™‚•™|ÿ -§'ß`›‹×gÏ'¿¹ù -³PÅ·bË Á°Ã8Õ0÷±'³B¹…·#×6å©›ˆ­ŸÉÑ“E‰z«Šã°õj›ãŸÉ©ËÁ'™nɦ¡!Ã/½ÖW—(D7õ¥÷7«‡1—'‡3»wû•¿é9‰©-½0¿$ù‡Ã:Á ¥+‡u+µZÛ@/‹ó"b+ÉíŸÅñ~-£ÇXŸ@¿ -; «—ÓÇÿ#»k½©‡;±YÏ"Û·‹Å‚É•"¡¥m»˜‰?“£!¯"§P5¿?Ý»L‡ ;‰?÷oC½Ïù-?Í•§”¹Ëã!½óC¯#ó&¿í -û"•}¹«·Ý9³E§£#Kë«ÃbÕ'“=—–é'Û|Ñ;Ý›­-›—/—s9Í"‘‘ªãë µí£õ Í!¡•(‘xÙ=ÏCí Eã -E© Ó³«Åx§J察‹—8©› M‹·ï#ÑoÓD¥± Û——˜£·¥Ñ>KåDÁ )Ãñ¥ºÕDµG¯ ½…ùŸ‰jãž±·™<ý -‹׉Óýõ7³I“…±¥µƒOûH£££¥§ct±'÷C§"“E³;á —ù)Í!‘W§ Çx#µ!ë5¿{­1Ý#£^¥ ›4«y…»-»…s7³&©±³õ—ƒ7¡/Óš«©­G±>™~ÝŒ¡‡÷ƒÅ‰Õõ¥½Ç…ÙFí5ýFÙ~ݪó+÷S8Ù".Ì«ñ-×ÀÁ[Ñ‘ϯÍ?çÙç§y­‡‘A­1å«/¡K™"-ùv± 7…›u±=±½:“‹8‰ˆ‘‡¯WÑ!÷ƒ©ù á±å¥¹›–Ó=·óZñ ÷’õ—û@¿Ù‘ ¥K?Ã/Å’ùMÁŸBóG£ ë™§÷eÝz‡ÇS¹ã‘;¯ ÝmÇ Ÿá›ÇéËIÉ¡—«Ê©-ñ÷<ס¬ÙA• ±DÑ¡ùÅ—ëû,¡'¹çS¥•mB»¯åžÇ O³gÁ”ë›Ç Ûµß-ù:Ÿ§E?‘HŸñý¶Ÿ¡!‹íŸ#5ÿ»‹ÛÔ±gÙ¿¹AÅCñ‰²“5û9ÈíBË)‰®¡®Ée­ADû/³yÏ‹#/ðÛ:;ñÝ$ù‰Á‘¥ƒ·É4×¼¹e×#£‹ë¯=—‡³ÓÙÕUAûí{½¨ÕI¯Ÿÿ‚ÿ9õ¿#3›ë}³>ÛV7—hÑž¹Dƒ7§¶¯"ûRŸDP¯L9‹[¡¿Ï]± ·ó¿¢ùO9EÛÅ1ëZéÒƒ†¯“#ëŠÇ‰|ö™¦Ÿ83Ÿ'×~Ý!¥ÅžÃÔë‰ù±ý¥‘ÁÝhÁ‡1‰AëX¡dç¿¥t£ Ñw=ÛL›ñ¬ÕZƒÑ”õÿ— ‡NÙ¬5«Ã"é‹É·Ÿß‹‹6«£íc½ª¡‘?Éï›ÙÉAé1§ —„É?÷D;³•X§^û 7³Ÿû­ã:¹½¿[߽̓WïÓÃ"£e£ÔãXyû‹·ï2ûy9‰ñù–í"G‰÷È›¥ë ó5£pÇ4›±Ùõ;¯Û"©:å8‡Ï·u›R©3ýÏv¯+»g»¯'¹·‹ßaó›ïÁu§Åù¿óªù¿žÃjý(µ¦» ý …"‘$Ïi™ÿ ‹‡ƒÑ ó‘Áo³7ÓC›¿!ËÏÑÏ ‹ ÉY‡z½÷‰YŸ·Ç 7ýßvÛD«ûÙ”ÿ­"Ÿ!-©V‡ËåŸCÍJñmͬ›C™-µDýÔZ›·­®ë?—ß|•Ùãßµ÷ÉŠéO—“-é-§€‹Ù„™;{µÙÕk5¥Å—ÍA—5Õ!ñ?ád9›·ÓTIű3Éç “ŒSýÝ9¥ÑÙÑÓ -¥ëXÅ"¯·u™§µsÕ"›OñXÆålÓËÿ -Ÿ«"“\5ríË!Íb±ýh×{¯·D9™4ŸÒ‹Bíy͇"…É(—Šû 1¹.©§‡6™½@ ûÙÏS«I¯YÅ„ÏY‹§y·È«ÍL7ß$¿‡‰B·¢÷?µg­§“8ûË!áÍß¡ÿé"í7Ë9›¦Mã"å}£ CÁ‰×?ßÀçeµß{‹Aß;ÝÇÏ­ýC™“€ý!£¢…?éƒ ±0˜á)…/Éij‚÷Aߪ‹ã åó2Ïa«¦ß!… •ùsí¿›º›)“1åñ¾ée•Ó/ÛJ“o™ GÏÙJýtç›;¿å]¹Å¿…AÅñ ù%÷w¡"¹›ÿG—¯‹é ÷å“×=ë-Ñy7óaѶPµ´%Í¥¬Ïbõu©·µ"—ÀÿïCé°û6?á~Û)ãÇÅ¡†ËÁ!“ÏQ³ÃÑ`ÿËKñrÁPË81ÝHë…E™™ñFE‘.Ï‘s×JÍÕÇÿñkç±(=É#ÕJµ$‹ƒõ5ó¥•+Á8™’—)³e¹ß—ÛÝ3去ý)çCõF«pA݇Ã'“¤åq•7›#¯¯¥Ó½¥1ëaÙT×!§"Õ§i©½ÕÛ+·Ë¿;ã ë52ƒÔµ­ÓW• ¹7¥¦§}ᑯ1ÛV¿ý©á§Ø•áC›É•K£õΡ³…/£3ãÉÕdŸFÿƽ=±+/ý϶ßÍ]ÛMÙƒ¬…LE¡ Ý+›Òñ A‡¥"—µÁ¿å ÇkÕÊ© )ÝŠ‹Mï¿Ã¹á ÍÇ£?ËÍ!ù¤Ó±«[õšãÍ"«ó ëÄ‹4Õ’Ó -ÕéÙÓÏ¿<Ù!¯E“¿¬íN=¹é “•—­íL‹Ç óízÙvÕݰC£B‘dï{ Aßõ3·ý}Aç)­± ‡|ŸAÙD£©Ç«Í7«ó&ß›ƒW© ¿³?Ó6‹pëS›ÕKÛ_÷OÓ'±ùŽIŧ|£¯çËN›å³‚›…álŸ®é#'ýQ‹w‡Ñ#%½J¾›/ÿç+Û›vîóÇMë–óNµ ­¸1©FÇp­+¡˜é×ß¡”³ÕŸh)••¡—@©£‘£‡=©o…¢•j¡»³pÕ£Vïù3ßH™“`×A½Gý«Ñ&«“¡·ÃZù1É!Ÿ‚ŸsËÕÁ3çÝГNÛ•D7£ çÛC×L¡=Ó²‡o³¯™Wïxý -Sã±YJ±Gã'Ç5ëg•z™_ÿˆµ7A©6«–µ ‰n‡¥( 5Íe­¸½"+ëxÓ´ï¡~Oµ(“!ÿ§ -¿¿©ºÍ€›(¹­³¡8õ(‡ƒý0•DÁ£'×$‡ §ï‹*Û0­YŸÝÙA™$7ëÛ.û -®§§Ý³½ˆŸ½3“qÕ¯­ˬ¿µÎß ûI³¡ ¥ù ™ù#륋ý ¡¯“&Ù³…ŸÎÅ !Ûů…bç=»ãÍ ±Õ<—?Åÿ ³˜Å2å«¡%»#©«½Ð›$ÓÖ… [ëBõ¹åMWå)ÏÖ‘?ÓeµK›X“{)ÃBå\¡1Å€ý»Û Çn…ó“ºÑßZ³£Í%ƒƒóv‘PÕßÒÿu‰6Ÿ©ÏnÍD»×|‹µ®õÃcóŠÛr«G›2«fÉ<·…µ<×’÷Ë}—ã&¯ª§Ÿã¥˜¿lë³ëÅ7­W“‹‘ËcD“ñÕ-¡YÉ'‰[Å©"ÛL©ù0ûFÝS‹;µË(ßÈ­«XN‹;½Šω…åÛ­±(¡W‡5‡Y¹]ý=ï¾Í>ï;íaãGÙÓ4å$¯ ï"•2ÑQû%‹ïh¯•ßÛ~µWë8™†µŸ³*ÕM»—ɨµÏdà ÿÛ?‡œß«³›1¯®ÿ÷Ö鉫Eû`å7¿Ìñ4ÓÎß8‹¸›³œ»ÙÏ£½ÀÝ Q׳Tû·µÇ‘—õ©­V½—ŸN—³°ßSõ-™¡¹`ê¿cïé—T¡Æ«Ìƒžõ#×.‘ã#©{×¾¡Ð•,Õhïg×Ò±CÝ«k«±åG³—²µ”£vÛN¥R­Ž‰D­…ïMË‘™u‡×}Õ‡ù)ÿÝEË‘_ÁÙãÏýÕóO¢³§åDñ§Xû)R±©¾ÿ£…Ñl‰{»´… û©ÃéE¿1­vÉHÁñ ÕjQ‹´Å´í×í¾­›óCÿ$ɽ¦ó{±Bë­µz‹¡šÕ¦Ý!áz¶±TÝdÙ»“"ÇlÉKÿU÷dñ­å&ÓÕ—¸¥[á'›eÉ‘ÍwŸÖ…ǧוÓ"¥½ É‹'±®³ïçù$ Û&“;«/¯+¥«Ý#Å"ûÅO£(Û½é ×µ1ÃÓyýVņýù ‡Ã¿ó1©ÅQç!©sã!³z£å£¥çƒÍÁ˜Í ¥ÑÏõ8Ý&ÿ!§#£Ó é"ÙŽ…&©#›‹)Žs« éË¡“ ½ÿƒ … -é<ÉûWç.ñýÍM­×ÿžß²—ƒ^‹0§‘5×<¹Û8¯,)£«'ã²áŸ?ÕCÿ4çÅS1£Ù(É ‹oÇ+×-·&‰2É¡Šë-ç:ƒ¯#û•1ó¢·°¡ƒ¡¸õ -IÛ!×Õ`›zÛ1Ý'‹ Ç‘$ÏóJ«, -ŸÍ•qå+½o9]¥—ñ(¿ƒ5çgÇ÷¡Ó“³~IõZ¹—ïïó1õíËŸ“P¯õE­2Ó&ÓX1ãM½Ñ³¬(û2—ßõe·«Ë2¥›®•sÅ ¹õ É|Ÿ¬› ÁñuáÊ‘Ûý©Ù±r/Ï6’Ó¥U‡m¡Ùb·"Ùá5‡ãwÝ>×"Ç!›¥×­ …‘ ǹ¥•:÷Y·zÝÉ#½L£K³éŒÉ0ÿÛzÅÍD÷ ç˜í Q™0«£š¯ëûy‰LÁ³(ñ}Ï¡³ç -©!Åž›Á/áÁÕxñõ"…³AÑPñ.Ë$­„§§'ƒ#Ë>×/™&õ^Ïû ¥{£#‹!¥w©áá‹"¥ë‘‰ŸÝ ½¯"ûÇ*ù{¯«PÁ*÷ÿ ñ`§±íçѯ¡Åp×!ÑB© «—"Cí …0ÿÓ!Ñzñ!Ë)é>—›í óã<Ÿ)­|¹± õùEÑxë» ¿u­FÕ¿¥‘óÏxÁJáówéDÿ•å”Ã#­ ÷íÃÏ„›H•™ç!à -‘­ -Í'ƒ·Ý ‰óµù -Ó¯ÓÏÇ?ÑBÍ!Ñ©ß ·MÿÇ« -½#Å•õw÷"‰¥õû'õ#Á -‹PÏ(ÙX·+™‡RïÝ ‹á“ápÑ+™!¥,£½Ù«ƒË;½©¯<§¯§É"¡¡åÅ¡Ù[Á•&¿÷"vë$×#ù¹Ï7ñ¿ª©"‡%Ñýœ‘ Ÿ9™™K¿~µ2ûëÙ ãEßHã©©}Õƒ“#£ -Ÿ ½"«¥:»¯Gƒ¯ ©­=Û"ÕC“£û«Ñ#…÷-Õuß ± µ"Ï}ûÑ<—XŸ ƒ4óÈûSÏÙ±¹y‘p…\¿ ÿÌÑc½Ã￘©'ï é¿í)õJ“õé‰Ia˧+§!«­ß¿Ç ‘=õñ»†¥ç—4ÁÁZŸ—µ‘¯‹•·6µbÙ‘ ý©Ï½Ñ£û. à án¿µã(×õF×Zå… £ßm«ÿ;ç>•Ù™*)û Ó ¹ÍV™;­Nñnùb¹5 Õs¯dÉ -¥ ‘<Ç Õ‡£ »'§$ñÁ;¿*Ù¯ ï?—õ§DŸ ‘mý@£ Áï#Ç.µÝ|ýB……a“ -Ÿm˯㠙³vóÁÑ‘õíA§·ÏÉß¼ë~ƒ:‘‡Á›µŠå¨©œ“!½rß7áË ¡ÆÙÑÄ¡ ý·Ç‡–ý±`»¹õõ!ùé¨Ç.‘«½á¸¯"!§Ç•µ¬ÿ'›z— ãëp­eÍ+­’½;½É ‘ωõÄ÷tÙ8Ï"ƒk·éPïKdñ#™ª—&»"Õ!á‡áJ±X»é¸ï÷±û‹"ýp×0ÛE‰Íßy÷"Ïqϯ;ûg‹¯YÇÇ#‡8çl‡ų‡³„ÿ£o‘"ßI‘"“ÉX»ɸÓrÙ ×o±µëAËó†«%¯£åX¯0— ‘(ÿ‰r©f×Ë„½Kõ"‹QAÕ"ýA«ÅeÕQ•½‡åNc"›©ã"Å!O¿÷…ÉJ… •ºƒ›ƒ!ë—‹’ÏzÅ%»SÇÇI£l± ‘©¯yõÛá½í„››!ý Åé…¿±‡€×‹š»%Õ¹=³0óÛT§;¯ÃÍÏ«d‡cÃ,Ǩ™ÌÉ·h…š;­Ä¿«éO¯k“jñ;‹l뽑Ïã»tË“—6¯fÓÿ‰¿Iûj)û£™›HÃÑ3ïÑ)÷Á•<Çk«?ÿÕ‚±|뮥QÓJµb¯£±sÅ燅ñA»Î¯á_™‘ óY‘÷Qíb“0ù fƒÕ¹W‘=½¤‰Z¿0ýï ŬɃÛUñ9Ÿ„— ¡ºõ ­ŽÓŸçÊßOëYÓDgÑBÕu‹·§Wᛵ£jËAñt¥³ýÙÈ™»ãbÕ0áa³³Õ0Ÿž­'‰„ÅϦÃ.³ªãmͶ…Íuá#Ÿgóíhßp׳÷LhŸBñYí¿€ íÔÃa¹=»Jõ½e­¥‹ ûL‰C‘÷OñãSÿA ø•Ê›n³ ó’Á§ûƒØ±[JÓkÛ&£2åéh»o¡+·Ù0Çn· ùýÙϬ‘Ø¡À¥#¹Öý—¯ÖÕ±¯«ó «L±y¥j‰(©kÑ™‡ÖѸíUéLß?߈ƒÅLóEÍÂë¾Ý…7ÿCÁ†²Ñk‘¹³tÕBùÔ¿“'ûÅõŠ…£×`ËF;žãUÕ!BCëÝM“«m/£°iÑ•Ç7ßT‡ñÒ•¼Aí›Ù®ùçNE­–§©ë²¥¿¹½ãuÍpé²ë…ñC«-» ÏV…Կé®ñÍšÅ'C³RÓE‹‰É‡‹¦ÇbÃI§ 9‹«Áj¯›•Ρã@ËÄ“‘«»;­œ»Èÿ ‘ˆïB+ƒr©&ÊËÍAïS£«ë ›IË,ÆÅŠÙÙÝ#õlÕ2Q•²³€-ý`ù•ʼnͩ¿z¡içˆáB¯@…õÅn­°9×›·ˈ­Š+«ÙÍåhÏc‹Ú¥*ýkÍÖEÛKóÉ¿ƒe5¹!ïuIã=…ßLƒ5ýYõ3¹Ñ·ù=£_#‰*¹Y‰ŒË¿—õ„½u‹Ã¯]ëNÉÛÅh»©÷GéÊõqµQû ñwnɬ§G§ -‘Ù ÙTï§=“¯=½,ÃdñÓ®¹¥£;Õ'ÿ -å'÷!¿õ7å'÷ í·(ÓH©©ó’×"Û“*ãH¿/Ó¯rçL‘ ‰­;§&é -Ý>ѽáUñW•ÛšÍÝ?óµŸñdÓbÝ»É"­“Ñ © É-+Å)½‡!ÿ© -‡S§å+é—Gï"—ƒ»¯·$«0É ÝK›»%½#½ ­"à ßaÿ¿Å1ÕÅKùÍý.#¥#Åv«8ƒ#‰$½x›û Õ¥óŽ¡Mÿ)›·ç4¹ÉÅ'‰>•Å ÿ³Ñá^‡#ã»/ÍÃ-—0¡#•ãF—/¥}“#“(³¦á/û7Ñ;£¯Ióˆƒ"ÅÙÕÔ¿Ëé\‹&Põ>ÝÙi·_ñ®í4³5ƒùÀ²Ù¨Ã.±“ñËåŸtÕGÙÃÛ¹0ÓS•—ûǬÇ¥N§Ÿ~«ˆ‰«´óSÿžÍÏ`õùp™çÒ¯(§/ÿ‚ƒ€«XñxÅ÷6áÂ÷Ó"µ_)½”ç ç §ª•Ñ[íž·9û0ã û›,­ßÄÏ‘Uÿ“3¿ÍJŸ Ï/ç×Û?™!ӗムÇñ¤÷\Í­‰U‹0åx‰ÿa›£çqÛWÉ*çTûvÕ&™ÃýRÙrÕ0‰Ó8±ƒ›=Å É­"ÏáJÝ—ïéÃ=Ùª×"¯|©¡§¯.‡ž‘ݧÏ!…Sû±Ï#ŸŠ©¶‘²ƒµ¡ëeõvá¿ ©ñzÏå-¥Áý?Ýí·÷é1ƒt¡[цû•ßãÀª±ÿKϳ8ßXÇaûŽÑ¡·{Ï3ýã!•vÿÖ×µ¹!1µwŸá¡Û³š£ íXÿ²Á9égŸ‡È› ÇÁ_µœ×p‡#-»ÚŸï/§OËÌ™lÏ ÷DÉ!ÙÛ¯¯£²ýg‡9ãóÿÁj¹,3·¥‰pùÙ3ÁÙ—…rëÿÅ#_ɇóóA±ã®Ý›7¥†á‘9ÿ3£rµŸÁ£—à 9¡©#CñBÁ*›|©ãÙ…§#ǧ“ Ï»Ïéábí˜=£Ëq÷Ã帓ZûaÅÌ1åÝÓUí01‡Ó7—ùÃËÏ ý Ó+‡&¥ …Ñ*µj4Ë ß Ù­¬›éDZMã ë'à ÉãטíCÓ*õ ‘ñí˜ÉÛ­'û+Ï$Ó™*û›™±Óé?çcÓ«ëŸÍ««›jÙÔ1ñ-­ñ#¹›#Ÿ©>ßV‘ÓÉqùÉÛ0±×§D¿Lµ‘É#Û#ƒjç"µT“"³å$•'¡IÑÕ«Ÿù<§ÿ1¹×/“#ɱƒ1«½Ç í½(ÿ“ Ã%Ñ<ƒAó¥ÅÏó“Ñ‹ ¹/ ݵÿ"—$õ³'‘NÝ/ûÓ:Á Û!Ý!©å «Ñ#…ÔG—Ö÷ ãx¹Wå1…´‡ˆ#ŰÕÎûBÍ…®§ˆÕ°Ÿ(ïS£¿Ó»É®å û¸ùÊ ë¬³ËCý’ýSë—¦Ó[õ4çÀåFåŸ![Ñ̯„‘­sÛ7ïn—3ÿ“åÓã[aÉÖ¯`ÿNïÑݼí¡w—£³‰#¹IYÝx©Û­UÕ.yÁŠшÉjãçDý/ß2ý!ï½H1­í[« åÍ)¡N…,Ñ3ïÏTûÓ5…³sÿ-¿œµÿJï`³/ÁßÍ㟯*#Ÿû4£s«§ZÁD-™µÅ‹ -C¹<ݽ7·=Ípµ;û­Iý‹õ9›#Ÿ#¡,ç0畟 -…«OÓ-©Dÿ™Dáù&¯ »"›T¡Mן¿`ù°­^‡¨|õY§Õ¹— -Í+ù3Õÿ ­Gõ¿.±1½ ÁýõíBûO‰1ÍÇ ¯¥3Ïsý ÑÕÑÏã›(Û ‹Cݯ"åÅÏMéwóÁ×ÿ=ëÑ‚ñÿºãÁ«µ¿›t¿‰'½Å½|÷T§›ùfÉgà £"©·OÍ‚9—*§Á ‡*—™·‘#Ö¯#—NõoµÂ±^« ‘é"—õLñ‹ñ rõ ›!9Í7Ý=¥·C‰Tá+!½E‹ZW/—.»QÁ£Ú»¼½¯ýs¥\×Tý@•™Î•9(¯ºõ Ñ1Ç1ã¡@§ŠñJñdÇiëœÇ@­S™ á½³!!m#©L×ÝŽ‘égåÛÁJß¶í¦›¬™P¡Jñ˜·Rß-ÑS·‹?ÁÁ"Ñ!ýL¹%Ó&ŸÝ½O³.Á­B é#¹T•.—0Ó£FƒF%“)QÃO§1µ¡’ÓÈó€ÍB“E‘:ƒ÷åÏ•¯»“§у§9Ñ"Å«3Ë:åû ±ŸÁ ó ù -Wß&&Á,ñMñëA¡$•*©P¿WKí × Ÿ(ñ8Á-›JÇDýw¿ ë -±ló½.•ãÏ+íû!d¯,»›‰‚å)éÉgý5%áÁÙ*ߥ‘Ï"“ÉÙpÅ+½ñá‰(‹J•©û'÷ŠçBË Û™3éç·áž-»3ÁvÑ Ã§.ùÇÛÝ-‡p¡=›Ÿ6ÏJÿ¿¸ÍZý‘Á>§íÊ鶯´•§º—ï¯ÕËÝ#…ŽËv‡ñ—뵆¹I#—B¡¨ß )¹K ßûÏ>Á‹J¹ËXûA³ «Ôûp©YÓœŸ:×Só3Ÿ‚›|íU³ip«z÷¥«!£™—íZ¿«“/ÅqË!³±,çá¡‹÷5ËËa‘.ý!ÇÀ•¡±ó ±¡"ËÊÛç„Û—ƒ«Õl¡ÍµƒpÿÇý×Ç7í'†ÙsÙ…¡^õ¿Ç{¡ù¥CÛ£á>­£‘0í»`Ó#ÕÕ9Ù§ õ:ó¹³B «#Ã>¿!‡°õ© «¦‹CÕY…@Å®¡z•W½ÚóT¯[ÉΗ—í—ˆÝÅ·\Ç -óáU£Áßñ¥!Ï›±…Ó‘´@ù -”íÁÇ3í€ÓM­%õ ±MÇ(—ÕE…q•’绫¡·‘œÿ1ŸW±›©¨‘9Ë”åJ¹¶ÿ'Å ¹.¥Ã[³åÅfɂۂOû¨Ó2á½"‘5¹1¡ùGµ¥ÉßN³Öç7—¹›*á"ÝS·£ ÓÆ“¯—J‹›Á$ïWÙ‰'ÏÍ×ÇuñŒµ\ç‘KýIËÇ4‹¿U¿3¯ Í•¦Ó ½p“#ÿ(ÕiÃB‘¯Jù™rá®Ë`»?çrÕ›"›³ -‹§ §‘ı•L˹Nó7§a—lÃáŠëç—«¥û|‡(×qéÇ8œ%±6“|¥Á÷$Å•ý -í@ç¬Ï ¡qç³À¿»ª³ÁË3‰SÏe߆Ûµ»ÖµXlj¨…­µ»½/Û2»\¥0¿9‘¦—»™5ã³2…ë'›‚‰“œ¹ £ ß#©zï å8Ñj½‘ƒÁÇ:ÏVëoã—K½8‡Å‹“5ÃÛ1‘*ãµ£ÛßPÙ¾{#‰FÛ<±*ó™›ãoù¿F‘Û3Åa§8ñ/ç2Á<å/ñý!ßkÝ÷®ý$åHñ%«qá:¥!4Åù:—Õ©3…×=íw…8•6Ÿ4›!Ÿ™•‚‹+&·†¹†‰¡•À“˜—x§Jà -ÛÂ¹Ï  ×uá3»ÉýÊ™%·¬é ÿ„éÍ™ÇÄÇý{É… •'ÿ@•BËí(é„û‡½ïŽóyç׈ÿ Û±‰§¡@Ëzã+Í•É&ƒÅ½¿ƒ²£³™Ç›GÕÌ×dÿ]¥/©‚ùµ¹«|í^±B¹FÅß‘s“0Û¥˜™Á"Ó:"åé0«iç%å¸ó ÿ$ùûóM¿j½ -·¤õÉ)…yÍ­¯…³=Å…=“aÑ­8Ù>Ÿ‚ÇVÏy·Fé)·YÝ™•)ûd¿#ïá“[Í'±5«{ûƒ‹UÝoõg³ZƒD­o©ÇKË0ù'•&Ë€Áãs¹\¯5™z™d­£‡×·/¥AÁ¥2£‹ûÐÕ‰5Ç•Ët‘ë‹ÑuÿIÑ­kÃSõ›Õ>…xÁQÓ¥u•'ÕÏ« #û[ó§Á˰ƒvõ»Œ•‰áµ -Ká%Íɶí*Õã(×Ç•?YÁ’£:©"ᕬé~­ŸÙ¸­•Õ,«oã›Óo•4ñ:Ñ!#™¹åÌ… «tŸ"Ç"ßï"óo»ýù&é RÍ9íu­Ãㆋ±íµ£7É« Ç&­§)±÷ »°ÏRÑ*‰¡Ý(—“›·Ÿ -‰™:£ -@›“É5³6Ç>Ý‹ÿH¹Ç­ËñëËåÊå± å©)•FÙ!ñ Ã.Ë<µ -ç$Q‰#Í™}Û‡0» ï…x©·§­\“u¿.Ų¯ËéGé§EÁAµ"µ#ñ5‰á!Ý&éÍ×— óy• ¿Ë-­ë áé*‡ …iï¡ ýûÃëß… í#—ß8Ñ‘Ï*ƒ%¡É³ÍóBÛý+©ÝË9—:«û—Ù »7·’¯PÑÝF«k³+Ç$Ùt… -¹³9ñ -•/ù‰õƒ ÷‡1g“Ù ÿ$Ü…>çãïÍŸ@­± ›Ñ‘!ë5¹»2—(ý­ó ¿!™ É@ý»0Í4©R“ ×­¥Ùû¡¥!ËÝ£ÄÕñû‹&7£I¹ ³†™Ù¹Ë"™ µ…í#ßh ‡ -ÑÝ}ý)ÿ2ë!¯³á -‹J½(ë¡'­¥›b‰žÿϵՕ͟ -»•MÓ;…(»Åǧ,­ÀÇßûïí8÷Ñ£,ß»'Á+åwÿ Û ­¹-ýcïÏ -ß¹ã›ݶŸÈÅ:ç8§ Ñÿ ™«û‡ÿÔ³ÃGÏ•Gõp™éÍ;»G烙*‘Á ½Ù)ƒ‡ß"¥ˆû3…©õVÏ!é» -·•˜ ÿÿ|‘ € € ü‘ € € ü®ÿÿÿ0‚€€`€€€€€À€€ð€€ €€Ð€€€ƒ€€°„€€à‚€€€€À‚€€ð€€ „€€Ð€€€€€€°‚€€à€€€€€À‚€€ð€€ ‚€€Ð€€€ €€€° ƒ€€à ‚€€ -€€À -€€€ð -€€  €€Ð €€€€ €€° €€€à €€€ „€€À €€€ð €€€ €€Ð€€€‚€€°‚€€à€€€€€À‚€€ð€€ €€€Ð‚€€€€€°ƒ€€àƒ€€€€À‚€€ð€€ ÷ÙׇÇå&ñ+¹ ™ Ù Á                                                                                                                                                                                                                                                                                                 ¦/ÿÿ|Â/€ € ü¦“ÿÿ0‹€€`ð€€ù€€Àú€€ð÷€€ ø€€Ðý€€€ò€€°õ€€àÚ€€‚€€Àô€€ð߀€ †€€Ð€€€î€€°¢€€à˜€€÷€€Àú€€ðù€€ ô€€Ð…€€€ ƒ€€° ꀀà ó€€ -€€À -倀ð -‚€€  退Рú€€€ ñ€€° €€à 쀀 ù€€À ó€€ð $""'  """                                                                                                                                                                                                                                                                                                  ¦/ÿÿ|Â/€ € ü¦“ÿÿ0‹€€`ð€€ù€€Àú€€ð÷€€ ø€€Ðý€€€ò€€°õ€€àÚ€€‚€€Àô€€ð߀€ †€€Ð€€€î€€°¢€€à˜€€÷€€Àú€€ðù€€ ô€€Ð…€€€ ƒ€€° ꀀà ó€€ -€€À -倀ð -‚€€  退Рú€€€ ñ€€° €€à 쀀 ù€€À ó€€ð $""'  """                                                                                                                                                                                                                                                                                                  ¦/ÿÿ|Â/€ € ü¦“ÿÿ0‹€€`ð€€ù€€Àú€€ð÷€€ ø€€Ðý€€€ò€€°õ€€àÚ€€‚€€Àô€€ð߀€ †€€Ð€€€î€€°¢€€à˜€€÷€€Àú€€ðù€€ ô€€Ð…€€€ ƒ€€° ꀀà ó€€ -€€À -倀ð -‚€€  退Рú€€€ ñ€€° €€à 쀀 ù€€À ó€€ð $""'  """                                                                                                                                                                                                                                                                                                  ¯/ÿÿ|¼/€ € ü¦“ÿÿ0€€`ù€€Àú€€ðû€€ ô€€Ðý€€€ò€€°÷€€àØ€€‚€€Àõ€€ð  „€€Ð£€€€ê€€° €€àŸ€€ñ€€Àù€€ðû€€ ô€€Ð…€€€ ‚€€° 退à ö€€ -Œ€€À -瀀ð -ÿ€€  ꀀРø€€€ ò€€° €€à 退 ü€€À ð€€ð $"     "$  !! !                                                                                                                                                                                                                                                                                                                                     !                                                                                                                                                                                                                                                                                                                                                                                                                               ÐHÿÿ|¾çÿÿ0€€`¼€€ñ€€ÀÒ€€ð¾€€ €€Ð΀€€•€€°»€€àÄ€€û€€ÀÏ€€ð˜€€ ¸€€ÐÑ€€€¥€€°¬€€à»€€¦€€ÀÆ€€ð³€€ Í€€ÐÀ€€€ -#-'%-*)& #,%)")0%".;$*!/, $.)'"1##%$$%'-+)/')'#(##%((!)((*&%%3)#*(.(&'% (!( 3(%")'0'!+(()%)-$')'#$)""   '0+"#'("!*%$,,6'&'6'!%&,"+$5*!(',,$-$2 -2)$"#+-""#"&'&+$& #+!#*(&(,))&&)*"%&""4%&$%#-&*+ #+" *!((% %%%)'0#'2+%2&+'"$!&# -!#)% )-.!,$%"+-%" %+&%&$#*!*!.,!#"'."++*)%'($%".$" #% $% +                                                               Î&ÿÿ|¥'€ € üæÂÿÿ0¹€€`½€€­€€À®€€ð±€€ ¾€€Ð±€€€µ€€°±€€à¼€€¬€€À¢€€ð´€€ Á€€Ð¶€€€¯€€°¹€€à¿€€¦€€ÀÀ€€ðÁ€€ È€€Ð¸€€€ ¯€€° ¾€€à ½€€ -­€€À -€€ð -È€€  º€€Ð ¼€€€ »€€° €€à À€€ ³€€À »€€ð ¯€€ Ç€€Ð³€€€»€€°¡€€à·€€¨€€À€€ðÕtÏ$÷»Õ£À™>ý¬ñMûÍÅ ¥&«;•³‡kƒj‰HÍHãHÇj­i·UÏÝf¹gñSÝT÷+?U…mÕmãJÝZ£LÓLÅ)½(£¯_¥ƒ¥óù޽zé°ͯ±Ž©Ø­ û -‰3±3õGÁ|‰‹áŒ‡¯Õ¶ÍЃ™×7—SµfÁeï^û¿"ó0½³‡´­‘#Ùhûh½_‘`Ût«6`Á`Ýg‹i•p¯¡íYùZÇmÙnÍ¡;Ç^—¿™ËQá‹×ÙÍ/Ý0ñ=ƒ>Ïm¡lÝ€ã"ƒÒíѳÂÉÂÕ…óÊáµÍ´ÿ‘µ’ŸpÛ¿‡{ÃWïl™I¡ÅÑ~± ‘:éY¿ÔÇ#õ)ŸMõT—Dý‰Éѯ˩ª“l»É3Ç´“ÈíËç «H—A©SéÓBÇÇš×wÿhµ#½7£§ËÕ‘›Ö»¸ñ±ÏµA£ƒÁpÏÓý¿ƒ1› ½fÇQé;ÓtÇŸ¦ïº,ŸNÉ\½1›´‘’ùgáGõA¹÷ ¹Èeí.‡1ùÉf¹RÃ;›¹©Ä.Å$éÑí­¤}×Yûá_ýJ‡£Ž“¾÷Ê™«2û·Ñ ÉX³mÙI±fÍ"ý4¯ŸË÷¡÷BËf±­ÿ¯³½Õb»M—ùC½IýlérÙ?ÿÇÉ­·¹oã—õªï½»Ñ癩q×kóI¥DÃ<›‚‘{áÆ‹³¯Èý2ñ»A³k™q“Ñ‹©ƒ¾ý.­ Û˶©•Ý ãhå6­¹»±ÇA……™Ð£Å³½óÏïoŸå—Í=Ïoù—‰«ÿ¾·ÒñÅYnÇ¿'™eÉddž­†ÙGñGé¡É¡©»¾¡¾Õ;»;lըݢ¹jÅH©#…±Õ]ï:‹H%É“íÁ™¬÷/­‹uÉ—ýM×9Éwí‹ϸ饑vÍÁ‘ÁŸYû¤©­ׄ© -ãF×éy¥?ÕÚ³nÝ7q½-ÛíÚÝvFë’óx“¯\Ÿ2ÝÀ­«‡uåTÏŽíÏÏÇ-ñfËE?³ ·Š÷•‘há¬…Š£–»¦ÞÁ~Lárç’¯K­’ߩ粱‡É:µKéc<û{»‰³ Ãi¹ÔÝNó–³»Õ-ý8•¡/ë¦íVõOçRáfÕq­_ÃTýGÃMÅ*­Ôá:—•å­Òû„ÓÃÉ ·¼ƒ¿ñËB&£ÂµFÕ›ÃVå`ÇLå)'×aëb§N·£xû³¡o¥q½†b…<¿C·6Ù6Û¥ÀïÕçf«!ñ!É6³±ÇÛo‹˜·˜Ù¿ÙÆÇ ¯ÄÉ.ß+ÏN‹:ÿYïšáS…TágáFó!™©žÝÙzÓ„“añ Ï‘§»‡Ð³Ëñ¡‘ÍãÌ¡™µ*Ý{ån—n©KË&Ëñʧùû!çC¥Mã|ù8­m«J¡)¹q¯HƒH‹?ÁSïËP÷xµyςۙ«÷kÕA©A›š÷„ûo‹G¡H•kKé"£8ý7åYñaÉ……ˆLj¡‹—»>§<Ó;ÃNß™³x—Í£4Ï4× «C‡jó3‹Z¹Z±pɈ•žéÂ×™ãœã‡ÍrÍ`Û›—<ß<í^ó«7×……–˔ӶãÚÕÅÕ Õ÷ “VñL˜•bÉá0¿µËÉ…é ™!ù¼ýÑÉÍ_›SËRÛ=±–×—§×§Ç»ךƒyËkÑ%%Ë+¿×À‰åC­C‰Jãk¡r¥ŠÛf•fË_ÇŸ5×»·“·ç¢§r›`»á ÿ!Õ¾ÉÔ¿Ç…†Ç›íœóPáX‹ ‘Éïõ¡&½<óQÃÉWßW¿B¥-ÕÃÂϵ‰¶Ñ¢ùr‰_ƒ‡ç®¯‰3íµ±HóGíiïp¥•›¿Û)¥)·÷g™TµÚ»‹ƒ‹ߟµ|í\»/ë.Ÿ±ÏÄëØ‡’—L×Lg« ‡"çk½C‘Cã ó•Ñ» ïÔ¹Õù²Ç’Ë£»,Û³­×Ìÿ¨× ƒRÇRÕgÙY…pOÑ— ‹ß.¹¯Ñ(ûPÙP·W—y•†½¢éKÇDùlÙyŸyŸ›½¶±°ã ©õ»@H•hÏ‹ë|±‚Ÿnå<×(ɇfÇf»Z‡9‹1µlÍ@ï@ÛŒ©†¥Î×ÔŸÕ­Áóµ/£½»)ƒ)«“mÛFƒÉµºÙºÅ©»–Ù¦‘§«ÈÍÎ̓éB¡BÓH•n™tÕÉñŹ ›BÅKÿw©xÃéÔ·³—Z¯7ï5ù·©°µÅáV•.±/ñÓÁÍË­«¬§*•…Öé$©%«»“dû^•Ç­#ï¨÷»ã• ù4³·çË¡·ãŸ¾©ÒÇÊÝ”ñ‰¿ˆÁf·8LýNÏé ÕÄíØ‹¹ÓYãN³Nõ+Û ÅÄ—¶׎™õ}‹jVï‡ÍÊÑÍÑ«¯6«$»†©ŽåëP…eÑ^ë­åË©™ÀûÁý-³.íÛ -§¾é½³Ð‡ÉÑqõ¾£)‡'«÷l“U󤩤ɪ—ÌãÑ刃C»CéHÕ4»µ…—ªï©Ó½‘-• »Ç|Ó}—Õ«¨³$¡Ø½'ý´3µ«\›Ô‡•÷¶÷ÙÙŇƒ‚Ë_ë=ƒF§gã!ç#§+‰•Ãï›Nÿ(­)û&‹'¹-Å-ùc·d‰eïd­]ï]©jÝj“k»i—³ûˆ½ˆ߇ˆßeÿdƒ*é,Ó,¿,ÿ%Ý%ñ_½`ƒ]›]µ>×:£$§(ÿ'Û(…¸á·å៽ßÿ0™1çÇ»ÇÊ»Ê÷²çµ‘)½)©(…(­>=ÇOOÙN¿N±c‹c±¼¨§¨ñ‘¥’Ë’•–ñ³´•·——Ã%õ%ç9™j—ûG©H™Z7³“Ó!·C“IûŸ"•×fÉZ£ó¢ý/§ Ä‘+×*Ū‘ÀÿÓã_`‡h½kßÑ!E§h‰$—‘©mµYÝ ß]Ÿ¶ÿq—…ÛbýÂ÷³5×É›¿bÓãB£{~ã‹‘ã$‹Y£­uû°¿_™ãµá¾é¼ƒ±ù2•°·LïËëTËOσíñ€‡4›V­µåª±¨ƒIç‘[¡¶ÓÕµ¨áÑñØíƒ‡7±ñÃÆçÔñ·ï—w羿|ý£«¼§f•šµšõ˵ÏPíÐó»ñ©Ň¯mƒÍa· Õ/›͸Ó¬§Ä¯ -Û¿ZÅ©‰©—¥JãŒë´Û°÷¤©Uƒí'Ë'•|åL±tÁ¸·n£€‘Ÿÿ8Ýaµ)™¶‹Ù§6ß›¸¯ƒ¡™£Ð͆·!Ý]‘rÃl³WÏl­ -å_ÑÉí©«½ÁÊÙ£”•1ÃŧÙÛ~á×»­ët¹ ™ Ÿ4‰·ã¯9½‡Ý˵–¿tÏõ°ÓÓ›o‹µ™®µŸ¹±¿¹[í$XïQÿeÅNµ:í“í,ƒ.Å&÷¢÷ŽÍg»8ƒ ¯‰•@±¯2ÿ íµ­¬µ×ávëˆí‰Åb±AÏ®ç{¯Œù'Ý`Õ´÷ý0‹`õzÁŸ£¿ë3é…Ä«§­<Í…é»míµ£É+Ó §ñÌ‹—!ó»4ŸµÛ{{«®Ÿ ›M»n©iµC¿]¿Q‡$׸¡ó¯Ž•5Ï·l÷VÇÿ=¥>¯EûZÃÁÛ×›‹û›•ÕsÙiɳÍhó†©Ó€h™Gå ±¿á!Ý ±×ÑRÝ:‡¶¡7í¬ƒ×­(¹­}…{‰ óWã˜× ¡—“]©½$§"ùıǘßuÕaÉ¢«v™z·>4§SÓNéšËHÁ2¡2ó¦ÏDZÛûÓ’Ÿ#£,ÑfÝJçnùtã¹Dz¯²ÍSŸ£ ¯‚󔉬™²‹ÄƒÚÛ€Û¤ïU›È•¶¯?w—*¥ï3ƒ(¡õÙ‰ÊÉyÝ››éh÷¿¿ÆÅ -ÝÏc§Z©;‡;áN§d±i•i™—“§KÃ4Ó"ƒ´“³ÕŸï‹­hkíSó>éרñ½»$±Åãl™=ƒ‰£‹éC‘Y¡:‘O§bŸÁÿjÕ9‘•õ=Ñ”›Ø§ù“Óó5³"©¹¥ÛåtK‹5Ù -—‰¢Árù]óK…8åZçKõD¿Ÿ›}Íuï­Å.Ñ´ŸÅÏ›Ïá„ësù#I…ÕÕ‹çvï|Á#—FñªÃÌ‹ËD‡I»£¯¢•¯ƒµµ ÝíÙÍñ0ÏEï1ßùAó±û¹·+Ó°ï°¡·»Ø¿¤ߤ㸳̻YÝD±JñÓÙˆït÷¸Ǹ¤ŸuŸ&ñ&ûÍØÇÍ«ÍߪÝ6¦·¨͹ÑÇû“ŨÅï0ÃF©7©³ƒ<É_íeׯé -‡.™€ÿ•Ǫ» Ó-ŸSÝ?ãTj™‹ûŸ¯D£1±)³ƒhéFù‘ï‚{õÅÉ™­ãÀ£ùÍÅ«½»ù+×$¹®¹ÀÃÁ‰T©gß^Ç=,Ã$÷‰4Ã÷¯©Mõa›Zƒ#Õ*¹·£Ù—Ä­Ÿ–Å>¡º“§ïÈ­Ú‰¸Ó–Ýÿ_Ë7ßdó -ÍáÏ¢É;ߥ¿¼š“Û5;·ÉÁ´«3û҃˯¼íˆ©Ó­Ùq÷›¿¾Á¬…‹™…Ó3¹ -ñ±Z±8›L¯aÃL³Š¯Ÿÿ?™+«#³¨ë¹{韑™ù·²›½£Ëwᧃ”ý™‰~Í ÷Š—…YEÝÉÇq•ƒ…z—¤Ÿ³“ŸÍ‹Ä¹Û׉’¯pŃñ+©,‹»Åµ5ÍIƒB£E©ŸÕoë\û}¡¥Zv³:‘Œ“ʳÊÓ¤‡[™'ÑÓó—Å=·"©‹V«D• ùÐÁ&ÏéSï³µ¬§,Ïkí‚ßȳ©Ðß=…]ó‹Ûmó)ý¸‹Ø¥žãQ£Å·™Ùç§×e¹På~ÿ¸7夹ʕ¦ý©CߎÛŸ±«ѲÕ›Žƒ£µã?ƒf¿&ÙɃϑëR‰8™×¢¥óÕ{Ó©õ÷Z×_=ýª¯lX£“‡¡a“›Æ»²Ý2‹Ì­€•A‘ Ÿ0¡«§zý—_•µ¡¯›PÁÂëשsÅDŸL›%åv•ÐÛ%óXïDÅšûƺ¿ß:¥£Ï0áÌótó?ÿ,ËíWƒ¬Ÿ¹cí[ãÉsÉD‘ǧћ¤áK‡¿¨åÔÇËÿªÍ—çWéãgƒ¯ÄÛ–ÍYƒƒŠ¥Ãƒ×›;åz¡„‰×·0ÙÿL~ÍÙé7ßÏ‹¼‡ßK©¢é8ÑñÆó•¥cé@•3órÕ†•NÅë6§7¡Ã‰‡‹=Áá2ã`£!á ±¦‰k]÷qëÑß™H·v»¤…‡ßË6÷Ñßš¯Oû ùYéaï®õ™(ý¤õÖ©ý‚ÃÉ×ÐßX­5Ñõ¹ó}÷j³ˆ÷JÍnÇ.‡Îùƒ¥a½„󿉻2ípÙ]ÓgÓ*ÉxË~£YéA‘,‡ËÝ‹}ýZÕºÙ«õ1ïc™WëÆ•*éßDË€ÍÉåš™`íJË -ѧ³’ʹ#‡ÃAï̽ҵëÛBépñÉõX…CñœïÍÑ$ËåµÕó‚‡QãŸ,ûKë­.Û9ÍLÝ‘µpãA¹ ÅÅ‹ -ó´“ÌÏžÙaゥ¯4“Q×Ä¥Å×4í°Í±{½e—eë]—ˆ§CëdƒA…Žÿ¤Ý·µIëÇÁ¼ÛwµØʼn™D·DÍÓ%ç0•0‹ å·½Z½¼Ÿ'ë Ñ{駬\“«¯0õÃzõœÛÄ·PÉ¡]ýHÅ5¿š§xíEÍ›· ½#…}«ª“ªÁnËaóJ‘¹ïÁ•½»<Å`³LÃé¯FÑ}‘¥á…×´û_õ<Õ7RÅÍ·¥Õ—ÔŸz¥+Ó/¡0½¹§Å£|ǶͲ¡.éW™X×måKñÎõyÉëJ`í´®«éƒ×¢å[…©›À•/Õ µÙ‚Ë…»­/½¡³“ã¾¹“û?Ã[Ÿ£éçX©$ƒÌÕ(÷­­¡1­KÃLJ‰¹XÉk盯‡éС°±‰—”Íi§…í/ãñyé£GÉ„«u³¥»&§çȵñ6†Ó×¶ÃJÁžýš‰Ùù¦Å”Ÿ€ënómï&½V«‘á[á(©ÌÁ4Áýµ_£tåŠã‰¥ÿ|™;×%Í-Ë|§Uƒ9¥(ÿ»0ƒ,׿ƒÑ­uû¶Õ¯Ÿm³tÙ•ÁwÅ›ïq酳ȱ}¹ ƒxûça¥eÍKv« §¡³ÙÏ ýÅËÚ­l¿AùŒû1½H—C‰™£-ƒˆ‹só|å;Œ¡A­¼ƒŒ›€¿k¥¼ÁÓÛç‰Ã1ù›©×Åë̯{“4ÏKÝ[ç×xÝÕùçiYÛ9—óÝÿ€ÇyÅÓés§BÛÓ@¯Çßý¦‹>ÿ׃iÿ®ÿ;ý|ç`ÃdãØù…¿¡»ãWÉz‹K‰»›@û®¥µÁ‡VÿÁñÕLËgßJë^ŸŽ½°Ï:ñi•«£È­:³\ç ‘2‹•±Ï<»]‘gŸ‘"—+Å‚©y¥Ž½¾éÏùÉÛ2é·Iók§Yõ{nÝVí -¿.…Û®ƒ`¥;•Q.÷›‘¡‘~ñvÿÀʲ‘ÉNùBùV£‡Ûž¥h·}½vÉ£Ÿ¹ã¯ù[©9¥¡Õ”Ås‡Ù¥GÝ\ùkóÅ•ƒ«‹kÇ;çGÙ ƒqÝÈ“ÎAÙ·Ë*™ûUÏ@•JÅ¢Õžå”­r³lÍGßÕÃÀ©­0·Q‹<‘ÖŸ‡ßÔûµ“®û¡÷ -áWÍ ñ§3ǧ³É›5›¹ ÛÀ߹阧´£ÖÕÀÓuǤµÖ¹¦£#­7ç^¡ ™7½ïÇ‹§ó¹“h»EAÓŒ‹ˆ«Ò‡›ƒ¼ŧ™ÈÅÅ0Ÿ°óÖˇ -ÿ)­Mƒ­ÉŒí¡‹ÿVÛl×cÁ?ã›6ßõ͹ •g¯S±?³™•…É×¹ý”Ï;ÓQfÝ©¥¾¹Óû å"¯*¥Ó»„¿o‘Hõi‰\±÷0¥"ŲÍÓ㓱ÕÕŸÁ•¸µ6Åׇ¥®±5ëé ‹2¡¦߸¥Ú—tƒ–½Tƒ?ç/Ù©¥ËýŽù¢¿@±V‰h‡µ‹‰Î«¯ÇŒß ÏË›ÕÍ«“–ïËY…Hå2‹!‰ ÅÑ­ »X‰MřőÃqïs˕ۜ×OçU× ™Ÿ×FÝC‰Y©í-×µ­*?¡Tám¥°±-£çË^Më·ë(É…ùdÙC“AñTÇ€Åy‰‘Ë¿·HÛ>ó¡Ë §Æ¡–ýoÁ„ÑÎÍ®óÿBÙŒ§†ÙБǧ¹©5ï9­[™cÁƒû*÷…ÇÇÚÑ·¹•ó:û¢Ù{¯Æí¹í ³£Ã“¯…µÑŸ»u“gùRÑ=µ'Û§Ëh™EÛA½Œ…¡"ï -ÕҾ㭑›ó#…+ëLËUÕw­~ÓÃ|í|û”©ûDÅßž±ÀÁh»°ç†·qõ'»(ƒ/¹Œ¥F§Á@Ùʵdûc“?ÉÐý•‰œ“ˉ - Ë¡÷ÐÿOµ³ûsá"ë4õ¨ñbÿ4— ­²³±‹dã;™º‰Ç§Å@A[õ2×£Îí6Ñ6ÿ¬¡-µ.x¥€ÃÎÉϹÃ礕¥ý[2Ûµ‰Š‡µU|‰Áµ ±ëÍ‘ë‚Û^ÛW—I‚¯½‰Éhÿ"‰¼Ù“Y‹Ç›7÷z‹*…׋Ñ㎊¥·Ÿ1§—Y÷ñ…ÑÓ¡†í½ÇZù3¯Ê³›Y»ÝÎ÷4jén÷)¯:ߣ¬¯“wÎÏ”¿…D—l¥E¹w•©»*³Á‡Í鑉G»Å#£k¯!ŸÇ±º¯Õf½*‹×ë>…|•¤ñÇý†¡GñûÇ«¥·`³‹‰Ä÷Íõ‡ËÙ\“É8ÍmïÓ»¢“µÃŒùS‹õÊ/éµùˆ¥ÉÕ¡×\Ñ‹ÏÆá«…ãañqƒÙµ°‘‰ÃKïr¯¨­j»’å Ó‰ÛLõµaÙHýÈçÙKÍ »Å&‡Gz½¥£`ËœïÖ÷«.‰@“óÙûºƒÊá¡ÑTÙ"•‹.…B¿w×!ýEÉ»͉ùa§‰…tãO ™m›+Á¨‰s»ñ² ·VÅŸ—`ÉR«Á‰ ݇ÅBñ\£5¯Ô³,“û"ų¶“ØÛuùW¿‚ÅÈ­^ÍRŸßzíRñƒ‡®õÙ©ï$Í;Ûѱÿ”Áqçyó.µÑeé*ã¨zÕHù ³Å¿7‰i™ƒ‘@™ Õ¥Ÿ ©ÇÇ̇Àí»Íµ¤…^é“·Á¯ÂÇ5›g½™Í,›Ù0µ Ë›á<µÑ:§>á`÷×›9‘Z—2*¹ií)ÙÕÙ'¯VÁãyÝšûwÁBÿ™Á³žÿfןߨëCíkù"áÏïœõ«ã€ùháqá°«xÉMsû±óëÍ»WÕ ÅÏÐÕëŸX冩Úó"½P«ŸûŒ‰€Áa›—­ÅÁºÑ «™ÇÇ¥ñ„™­«>õ™ÛGû¾›rã7‘šÐ—Ÿ›m냙@‰tÿ7¡×¥»ÿTù0™ÛÍMËu±¡‰Ï)¡ˆ§Í÷"‹q·;ç6­ï§¹éJé‡M›ùµùÅÖ,ÏdäɵÉ í¶÷ç8ólÛ¡“ϑ³Ç'¯Yç‹í ñ—O÷‡™"ùÇÁõ|çsÿZ÷œ‰ÑßÁù6“$ÁÃ÷ó1¿§§±hÍ»ï•ÿg¿õ¯ÇϺÓ§E‰¿•ÍÚûñÑ£*‹T¡ݹŸ~™¤¹v÷¼Õp£?ɲ½NÅ ¡h÷@ßãf“›c³7퀹Žëjñ¼|å§»b늱E¥f‡§„õ¼Ñ ÅÉó¡s™Ú×)ã¬ã2ÅØÁ—ÿl‰.íÖ›¯›‹WË·ÉEááC•Šÿ]ëùwåO©Ûk÷(¯XƒJ£PˤÙ|›Ç³ׯí¸¯¥ÁJ£ÇƒÏ×»³o‰”•ÌóÑõƒÂ¿®÷yñeûQ³wíÂ'çµmë%Ë4“fßR›“7Ñï¹çšÏ“݈ÿÁ1ËQÍWéé­é´­‘7³Ò‡‡½Žãš™N‹³ë)™QíÑÕë³Ù#ݬýÍáž«R›<ý¨åÇý–ýK£nË–¹<¯§Ž¡ÏT™rë“©8ÁM§Aï+›F‘iÁˆ“ž‡ÌÑ…;½]­×· Ù5ÁñoÏG©Bý‡³½‹ãgõRë Ó(£]åU¤ë2íMõ³-ûן ¹ØÍŽÙW͹—¹€—,Ÿ+½pÅZ¯Åãn‚“zÍÛ/¡Ä‘z‹…©–Ù“¶ñ¨ç2Ÿo±±Å,Ó­¡ƒŽ˯‘±Ï çÑ‹½Çw•ÚíÇÅg£¼í»“£eó]­9ÅϧדDZñ†œ”É[Ó·Ñ5÷žƒ¢½€÷|룳K…E‡\—¢õ¶¿D…1½ ËÓ׿·|ÁŒÛCý~‹|»ƒŸ[ÃQÓ¡“ñšó¼½Ä™pٻСÊÅÛ,ß»ùÁÅ+Ççj«†¯3½Ñ¹Ù±¯¬¹‹§¤‡ù©Ó$“,…µ&ïûiÝ.Ñ@ócådŸç~©ƒ™Í÷ǧpå#ù5ùi¿^›“ñÀØÿ¢ÍkÕ•R™˜³Ïë±2¹GÅ^‘>ËÙË‘'±>åI©X£Ÿ¯À¡‰Ýží¯óÄã<—&³ÛÙ·%‰¹ÉÚ͇Çœ÷ž—¹‹²ópÍo¹˜‡LÃ`¡³&å3¥¹6™ õѱÃß~߯Õ -«é5Éû¸¿ SÏ“³*çé‹× …ÝØà ™/™SÙ=÷Ç£•Ïr›†Û¯$ç*ë¹µßl÷ÕÍÝÔÉ·—®ƒÙëºájõUË@­¾ãçhÓpÏ×/ù¯õ™ÇEߺṄáÈ¡ ›HÅjïvÓŠ‘LÙDáM·]™AÑ» -ÛÃÕ¿·ˆÑÆ÷ÉŸeÿ™#EƒQñ”‰uõÚ¹¸«ŸÑ—‰š‰wÇSÙfår»µõCÁlëWçVÑydzù³õÈ¡¯Ûºûq›£Ã*µ-÷‰ÔÓ¯‘ÐÅ¥‘çùÉ­á²û…`«_ÿ<‡5Êùºçλ-Ñ;»“Ý"½!¡D•e›‡û#žÓµÍ‹ûŠévËΓÀ­ ûÑÍ¿ã™Ý„¥S¹hÛ`‘a£A¡ŒÑ€ùªÕªùËÁ€‹¢ÓF¿F¡?ÃÓÁCñBÇG»¡µqËT•T×ÁÉÀÃï6Í!×X÷¹ºÔÓz£ŸÛ…Û­t–ÑL¿€Ó‚“¥©=ßgç¹3¹H‹]ãÁ3·“Ã…ŸT×M·ÌÙ4—!í‰V“Lí•¿i‘V‹-±÷]çi¡(Çñlµ„‘„ÅT¿?ÃRÿ†ѽ«œ½·iÝAÑAÁ¿ÅÒ‘3ãY‹"Õyï¡•=éÿÕ ãÄí»ݲÓ‰ÛÍc‡Oï³ß"“²¶ÕÉÓ—ÓÁuÉ# ýn¡µÉÒÿzÅ4ñ#õIé`ñ õá¿¥”Ýsñ -ª…_¹Á©dõ£¯ˆû†µŽÏš¡OÍ}¥r¥s釛“»vËÕý‘‰…Ÿ†±Âá,“¥…&éMûu“vùÃ÷›=å?ïÇ6Ÿ]ÿ\áŸa‡ŒçŒµ‚á7³+Õ+áÿ#h£h5ùGñ•‹–·£í±åÀ…ÁûªÁÔí뎹M•%½ÑÛÑákÏwÙ¼¹¼µ—õnŸÏÿÏ…ÈÓ¾­y›y­d™ï´¿³‘¨…ÉT£S­«á*§VÁVÙx—ºå!÷!«rï…ýÇûÚ㭦푫‰ýÖÓGÕÇÅÊñP»ÓÝ1¡pëO½ù}ÝŸÉçÇ¥Í߉«Úé(‰ó™¡¼¹a¯L‰¡™ -Õ#ãPã9™”Ó|¨ݤÛ§D´‰"û5Ù˜ù¾¥´§“ñˆý™Ž¹¥wÏ ó@ÃÿùjËÕ$§Ñ‘Ó£ÇÏå©rÁ¤á.¯Ç\½K¹_©€߉ŠÏ^f›‰Ù›w³vŠñ‹(ϳç¹×¹$í:ýž±lÉš»šÙl±—©¡½«Ó‹{ézó…‘Jm·¹)…ÿ뛄‰µÝÖÌùÙ•¢¥Ïźó¨&±%ël¯wÇ¡±³ßÌ¿—¿ Ù É×Cý µÌ¥I½{Ÿ<ù$»¥«¸§À¡f%ù`Ï—ý'Ž­ÙÁŸ¤¡SÛ¬³ñ¶• ÍÇͽdßAݨ‰£¯¿±&‘…­c•¹‰&ÕVïÎç«‹¿ë¢±k©Ié‘jñ÷`ëc¿ŸkI•ˆ™“Û“Õ™Ó•÷;㳕oßqÕÙí‹•­Õýv§vßÛq¥“ó(Û‘¥í‘ÎåRùu±u™š¹xëÃñ™õ½«¾•(Ëc¿9‡}Ï}ÁYщï›d«e…V—kçEt·ÿµ¿µ¼Îº¯uÍxÏØ“rÇ•© á ©-‰%¥.ýÃÑóº±Ï™vÿÍCå•רïÚñŸó½ù€Ã^¯iÃÇU±d½½ï—³—á¶Õ×ç¹ÎéÎÕr«Øøïmó'¹(«NÇ+Ý Œ‡H³HÇ9ÛM¥aÑp¹ÐåÐÉ­ªŸ½×#ó$û4ËÙ §¼á“ “ß(ÁKù@ËI…KÛD«Yµƒ‹ÈÕÈ‘ÛÆÛ±ÿ3Í -ç -åe‡¹õ]NÁNÓÚ˲õ²é^—MáLùxé¢ï ©µ«ã«ãt¸Á·ÙœÉr×tçÙ­‰÷ªá‚åí‡ÁbÛck³?ý>‹~ñ]©^¹}ù7Ù7§@Ýɥ™ƒa§:Õ:Û]Ù¡÷Ä‘¸Û·çPÙ&'×&鋟«ë“Ã É -£dù¶…Õ÷Óµ!“DïC§1Û8»[íI—WßU¯h™ÙÁ‚Ù¥‡§éQ¯Rã^ó8石'ÿ&Ý¿¹ûË[•\©cÿ[¥<õ.³ÆéÆóºûÎëué÷zç‹DÙW™0÷.ÑM믧#õhém£ -ÍdíPÿ:»9ç5ÝIÍ^ïÐÏЇą°Õ¸±»é»½È•u“eÕeÝpÛjùEÁÙÀíÓÍÕÉo¯¹ù¸Ýó¯·ÐÇP‡ ¥ ©+㧯ëÝ!Ù e±£‰Í¹Íň‹Å«°¡4ÁDãDÕL»aÇ[ó‰ß–÷˜Ë ³·®Ù}‘8‹8‡‹a¿añ¯§ë§¯¤Eù>Ë=‰ƒå‚õÆ¿/û.»‘ã¿§¿©”¼Å»¿xÕ ƒ¡Õ—¤˸ÍûfÅdáw³U£Oïçí¡ç)©/é!Çû ©ËŸÑéiív³uׂáyÛ•½ÓùÓÓû¦ͺÑÁá´›µ‹¨·»‹™Éçž»ŸíÈÑ»•»§8‘y‡²ïŸߣ•K“BýV™÷‹‰x­|ñÔ»£/÷X—‡»p¯8¹?§RÉ7‘Ч59û€§ÒÛçY½W÷·ßFµ›Õ"‡ÿn§½ÑËÑ-±"¥WÍ{ƒû«±¾ñ‹ÿ·m»‡Ã…ÅÕ…Ò±™…Nï¸Ù.ñ2ÿ´¯¾‘”‘1ÃPù.F •§ñ%×zÍ·õ”·r¹‰“Û¹E¿Âõ ³]›žÛgŠå·Ñéɇ¤íK‰]Ë»‘‹íŽ\Ûpí~wÛ¹›Á•½ý#±Ùá—÷}Ù1³G·<§•ë9¯­?·T‘“õZ¯FÓ£ù·yÇ”Ǿ‘ÔÏÍÁïÉ—g¹Lû˜›í+Á%Ói½?:¿“—~Á;‘‚‘¬•„Ñ„ÛÏ¥Íó˜ûjËdÏ™·÷u·Ôß!Á¥½¸Ï5Ãë*“°ï4«]¯Ã¯°…¶©¥t…œѬÿ³ûÕãpçJé—Át“Šï‰Éz׳¡Ÿ¥íßʵ¾•™ÅΓg…gßÍÒ݃ÁãÕç—Âã–ïÕ'áH×”ûšWɉ‰›~ÿiÅV™Bó;Ñbé[éqÙŸÕ²ŸÊÓ7ïK÷ÎÑŠ‡ÓÁ…±Œ·Ž‡ ‘¾…4Ŷß,Ó› -­ ­IÍ5Ÿ‹,­w±¤ÃØ… -ÝÛ„Řß„¯oåͱ+¹ÏÇÅ…Úõž±—ïJíl«WµÊÉ ›¨ç±£¹Ÿ-ùÁT»…­š¥k§¿·¯”átï*Á7ƒ« ™ÏùÍ#獵ڷ -¿Ã‘Æï»Ÿ*×·ÅÚ·¹&ÙZ¹9ÇNËZù,]ùIÍ6×Eógy™£…‘ËÆ¥Øïz‡‚—×›Óµ{ã‹ùž·í<ÝÓ”Çç€Á!‡Ûí¨‘ÚuÑtë”Ñ››Œ™6›E‰2‰Ã+³”¥¿Ûé&I^µiÿyNíÉ£³Éa‡Ã©Q±=×–é¹ÑЇõ•©~§??ß°Ù›‹®‡v¡eËÏËB¥Bß5Ç ·ë_ëHÝ4»~ó¾ÿ¡…’ÓGá=喯Λ½ŸÍߌ½“J•‡bÙ¥C­O¹Ä…‰é–åÎÛ3‰÷·¹¨ñ€R±’}ß¿á­ßh‰Ž£™×BÝ/‡µnÛŽ‹›¿Sé2ï%ñÄã6ßÕ%ͿȭŒ=åyío—;¯x‡q »BÿQ…¨ûråƒÙM³¯¿Å2Ó½qã©çªÑOõsŸw±7ÙÖ½Êï-ß[‰aÙÒ“ +ï¯étÍ ™?›&Ýï‡w߯¿™Ñd‹“Ó˜ÓÅá&ÕÁÝ“‹…ÍÇ‹O·EƒTÁ$ç‰É“Áí†Õ)™~¯•¹‡D›8$ùÌ“«¯—÷R·ÆÍ‰E¿Ú“×ͦƒÖ­nû’ç!•$›•õÓ¥8ÕRVß%Ëb¥HÕ8ÕšÕ‰P‰KLJ£ñsÿ±å׫±†ÉÊŸ¡ãzþϷÃÙëG‰ÂñÚÏu·‰‹rÇBÙ‘ÑW£É‡aÁµûå í3ýcÙ2ç\Ñ9ÍÕé³£i§ÝÏÿW³rÑ’óf¨¹Ë™—•õÒÓÒá•–Ó†· …‰×‘l³ÑÛÆç@¹TW½µß½Ï -•Yÿt·­ÁÕà ¥bÍNûNӋ믑¿óA³Ä}£…Ï̽ÔÁ Ï2ŸAë1ûœ‡¯n… ÙR­Öµ`Ýœ«‡Á̗ع'¿V‰ ýͳ¹çA“—Å}¥Yí0­ÊËJÁÐé§é·—ñ@ßGóÇ㦣’‰!çÆÇ~ïÒ¹sóDŸÂ÷1ÿsÁ+¥›‘ÅÍí÷>Õ5­EÛµ¥×¥åñÅÇ¢Ë2½nçt÷HÁk·kÅ/‹€¥»í8ßwáÒ³ƒ‡ Õ&ùÙKǦ››'Å­É’³©‰ÅƒzÏUË!©>‰†‘Ùç+ñ,çëÇÒõQϯë0Ëû¬‡EßQ£R÷‘‘oŸƒ™•Û”ó«˾çÓ㢣ñ’‘µÃןZ·\Ñcµ•ýO±:é:Ñ]­eïÙ/£NëM÷šÁx¥Äí]·$ý$«ƒ©aúÿ/¿0ɱÓº¯Ï׃±¢ëŒù­Û´ëÕÝ»¿ñ¿ÃÑ Ù “%ë#— -ñ»õNũխßЛ.Ãȧ&¥P—‹ÃgµkÕûEÓn‘£™U £M›q½w³V…hñ—ç·sû¡¹FaÅ<ŤÓÉù™ÛSé¾ÏÒµµ‘³Ã&Ù,ÑKŸÝ5±eùÎZ:»'õ(픃¸‡˜—1»!Ÿ|¿›XÁÙ;é|µP….ó²ƒgý¡k±ÿ2¹4ù°ÏZõ¹×£u­{§œÏ¯©ïVáu÷CŸ_Ï\ù„»:“XÿŠ©Í—}½ÓÉɤ‹@ñ?—aÑ?§«¡3£mÿ•sÛaûnýq­©‹ÀãÓï;ù£Ñ‚¢­‚“±—j±Õ›:§¥·”…JÇMÑÔí½F¡`Ý £ÏÓ¸¿‡¿ãµ±Ê«×£6áY™oƒÀ¡VéëÁÉFÛÌÝ@­˜ÉÆ›²‡Ÿ™Ä•·ØË«Ý¯tÝ_—ýº—\+µû(íÙ“…˜á^á¥7õ»—[×I¹…é¿þ«»™Ù¿g¿yçz‹„¹žÑNßc­Rï<™&ï ïGÁG½Ÿ½žý%—É•›1…9—#û½h¹–Ùž½M—?Õˆ½œé•Ït­JÝ’‰½Ë{ñtóÌ£'±Úý³‹ÕÅ?ã‰ÃÄŸˆÁ5¥ÂÙ³µÑ|¿ÝWÓ9Ã-û ¿ »H½Bïb3¡ ­÷Kû´ -‹$…§‘m×»Uù‚Ókµ=éŠÍ…!ñ÷©™‘½’“>Í<Õ …©´c§!ï!Ñ.«T«.£‚§¢Õå•ÓÕc…M“OƒDÏÉV§ÇŸª•¾½cŸbÕ×A•MÿŒãƒ‹ÏÏ»»XÃkÅcÿÃ…I±Mù\™k§Ö£F»Á³ -ïH£IÉ>í%»Žó£ß·‹Ñõ$µMíH™9…“…~ퟣ ¡{¡Îá”ÍÈ›ß6ÿÐáÓԃι¤…Óëç}i““ínù‹·±$åljŸ¯áÍéjƒVÉmµ‹¹>ëEí&£a5§-ù˜ϲ‰³ŸÑÿmÕ=“=ߟ•‡ùÒÙË횉˜±©·F©¹^é]ïw©õÄ»½AÉB‹‡½š‰+±ÍÍ$µ“õ’°ãLƒ“Ÿ…‹ËÛ§wÉ ߢ› Õµ,×û¼‡ÁgÃ6½ ¹/­Y½m¿”¿¡£c‡Á놫Æß&é×PÓRç­ëqÓÓÍÃП§‡_ó­ý…ß_ñ3Ó“éRßnÇÔ‡§ç•Û…Ñåby»R™$ñ<͉^·~í’£Xã}±‘÷ á@Év›œ×ѵ‰‹¯™„ùKÙk™s‘k¿TŸ˜á;%“K™)ñís£¶Çt½SßfÙ«&ï=·g·2£3—mÙŠ‹I»·ój‡Õ‚íFÝ¿vÍTߣ0ƒ­6Ã!—©Ñ…uÁ—(£wÝQ¥L—u§4ýµ]ˇ‘4ŸCÑEÿ‹ÇT£K™‰§’fÙ<Ýï”ãÙ«ýS£J©¿¯Ìû\‰N—ÙÅ(ý;ýbÏ›·XãC‡Ñ˧¥ªˉ•dÃyÏ~»•±,õP§.¯ŸóÕß´§‹»PÇd¥‡Ž×"¸õ—U£Í‘ÊÃ_ÝYïEó4µÄ—"“R!¯c¿\×Ë£œçQ‘å -ï ‘XûH»=Õ©?¹nÉ^§q¡Ÿ³Œ·ºÃ~ñ®«”ß…£>áO÷¬å½ ‹yé£{“p‡~ï—Ðñ)ý¹‡U¯Aé²ÝH¡<­‰Ò×ÌCô‹fß}ë£gÕvÉ‹‡=¿E›-…Ï‹­¿“ƒ‡Ú³ÕE¹q©¯ƒÍÕ»‰yƒÑ¡P³SÉ)µÐ±a¹¿áØ¿‘÷i¿×ÿ¿à ãRõ×óÏH£ŠåÆéÖÉtãcÇ¿ÍU¡Ž÷3«¢÷Í2³`ëÊÁ²¥ -õ ËVóŒý·å±ïÆ¿r‰0óÿc‹ŒŸ“ÕI¥ å·ûxý¼©2±Á£ˆÏ8·ùD5ׇ¥™×°·5ãjÙ¯…c»Ïµ8ËW…µÓ9… Ï+ñnߓㅯû‚µB6Û²¡¥Ócý6åSÿ¡Ì­­“Žá?›¹é·#U¯·ý ¹á4Ïfí¥·œµÆ“<µ˜ß›õ ŸÙ:ǙɟƒÃª›pË/ù9á -ÓšË.ËSó‘\‘wã5§Ó™\ß‚¹z¥Çµ™Jñc“‚Ãʵ¹…ZŸ¿¡£‡F\Û½ÿ—åªÿv¯.ÉËÁïÀ¹ƒ½›·Z·Aß -|ûȵ½§\ÍÒÍ™ŸU瘷¯Û!“ÅÃ’ë[Ç“9€›*ËËÍs‹F«ɧ·‰cÿ>Ó™ë:á—9¡}×-©®·‘Ó¯É/í¡‹¯¸]µ‡å+çOáoç'É-Ÿ$ób÷?‰í —q·±ãÃE³³¾ÍŸÌ¹2Ã7ÇÐí¤Ó¹ ×Pƒ+㈕8ݮ哅»À——=¡åϵoÝtéœûTéÛÖû%—†Ç“ÓÑÇÙá{çL·Î“¨‡×׃ ƒP…A»jÑ'óH¹$Ýד_ó¡ý®½Áã~‰;°Ÿ³[³hÇ—µˆýdËr»Ùu¥ÖÅ%± Ë×­½³c«9‘¶ÙËjÛÊ«,Ÿ:ϯ¯ÿM×r“ÔûÏ•!ŸK­3Ë ë¼‰O™[½¥1÷ÅÓ^Ç/¿ÕÑVÆË «8ÙÌÅ€‹Rù®Õ«¹›xÕ¹ÿ5÷Øû-ù«0ï£Á£ѤÛÚ§Ï¥vÅáÅãiõ–µ"Õ?½ŸÌ©vሓ©‘;›™2£Zý±]rÃn“Ý#ÑÅë°é¯)ï½U›¶ÇÃ…býïÏ¡ª¿3H•_édçõ@ßÑŸ‰‡2£íÍ™›—½»#ý ýDÏX“‡Ó×óÃÝUù ÇÆ™´ë÷MÿbáÔÕŽÉGUmǽڅ)ÿ¥×‘«¶Óثݬ…åa¡u‘ -»ÿ§ë˧¹‘IŸ3ý]±·¸‹bå½ÿ©Ý|ÁiÇ_å{ñ¹¢Â•‹Ç÷€ÑQ±Q¡=µ3¯&»}‡xýݶµ¯¿*ëªÏ•“¡«Mɾáƒ~£~ߥ‹Ý­ÃÅÀùeû;£&õ:÷—§o„¹J¯ÒïX ½¯1Çëз¤ÿrõ>ç%×Z©Jã±ßÅ£Ͱ±qÏjǑ߳õ­;ÓŽÙ¯÷ÝRÑ7ᜳCáÕ᪇¹×sé©•ÖßŃ}¯j±x×Gƒ;›^pËnMÉ}ƒ°ÓI—vóƒ©Ô¥±žƒL±ÛeÅå:í;ÁcÁ çr©Gõû3“b›‹Ó¥û$·«ÓÌ¡tŸ×åEç"ë -­`±Ö¥‘ç|Õ§åg¿O¿¯áD¥'ϱ¹B©•[«Âý)å>ʼnÌÃÏÅÐ㕯ÙÑٙɻœï†™£ÿšý“û™‘®ÃÁñ{µÀ»ÖíÕ›¾óÅ¡ Ó ³ÙÍó±­u±šÛ»¯»›‡lñV‹X¿É©Ó³Ÿ²Ï#ÏFçF±o—oï™Û™¥¯…ÃÁØÉq“šÿ™@ÑSùm…2ß>û>ýU³…Íz÷”óÐ‹Ð‘Èæµ1ÇÿÚßÚ±¶û¯§¡œÃrÝrã\ïFÛ1‡<ŸOó<½>Z³ç1õ0‡ ÷—V…O›¡•φ¯†Áα¬á±¹»±'ñ-µOÛXƒ¡É0Ý¥¯ÉÝ''ÿ¼˨½É¥Ð‰„£˜½˜»xÉÃ¥×Ú¯š©W‰WÉ ¹‹7û<¿dÛdó Ë¿2ûzpáƒá˜Õ®«“ûħ°»¹×@ç¡¢‡sáËÝÓÕO§{ùzÅÙ¤•´Óë<‰=ý_¥g‡¹¬¡g»_©_­f…ìñµáÖ÷rס•¨“ɧÏåÁõ¸Õ£¹tŸ^å«é±£Ó‰±›—Ç“¦çº‘G×WÙ†ÿ›Ë—›Ãç´Í•Ÿr·‡á$«º§Î…vƒ‘™ƒMí`ëŸç˱‡‘…Ÿµ}Ÿ¹S•Oƒš–£Û³¡ÈYýõŽ•IÓ\óßç…­“ﶳؕÄM­Xã›0Ó&™ÇØ‹_e‰‘M‘=á–‹ƒÉÅç¶±4ýõ[­‘E¹÷£…wéG—å…ÎóÆ‹ŽË´•ÉqÛ뇉±ó¸§Û[Ù(Ñlµ€£qÇ Åtå¹8ëYa×£Óv©Àºå,õ?¡ƒÓq›ÊµÏh‘㤙¸‘̛΅«¿–×€…l›‘¥ 󟢟ÓѺƒ§Ó#Ó¿¥…³bŸ\ϰéÕ[•yÕ×™Ò½ù ù °¯¿(Õ·¹û™3·:¥]áÅG¯ »q”ÇÖéÄ寧0ÏË¥¿ñçu“}õ´ýuÓž³Q‰<©ƒ“:¡v剤§Á½%Ã9åiµ^ÏBÓ§$›»•Ï¥±×ÕósÍ–£Ë©»÷EÓU•އ…‹/™aÅ\µ9Û.ù—£bAÁ‹½4¹:Ñi¯}wƒÈéž­—×JmÏ…Õ“ŽëÒÍË’ψ™YçDÑHÕ€å¢ç<›_ëw³Oí7…$×Ϩ§Ðñ‘Ñ0Çs»‰ÀûÀá¡Úë ý0±F¥@¯U™œ³‡ƒuÍ¡£=Ï)ã/C…ŒýyÁyÃY×Rý¯’Ӄ八V½9Í¡ý¹ÒÃÒ÷†Ãç]¿±õ‰«‰Ñr™]±;És類˹­ƒ—|ï¬Ó04¿•HÃ@‘!KÉJ±nƒ0Ý)ËùN»O¯˜—ÑÏ × -ÿP½Q£žÑ ™Ô™Ø••͔Ŝ½lƒX«Qá]“^…€ã£Òå|ÓÁ™Âí®Ó]¥d³0û³íΧ~Ël•lÝKß”»‚¹ª©‚Ý‚Ñnå0µ²­&×ýƒ\ÙAÙõ®ûÖíÒ— ÑœÛOŵ‡Ëû¯ZÍEˆãde£QŸ»áÁé3ûY£[åo‘Õ·«£‹ËËÍÔᤃÿç$§%Å8T»Ûç(µ(×1¿hÇFÓ>í…¯…÷χ,ë;ᦡÉím‘§±•Wÿá1Ë®áÀÓ`÷Œ¡ý­¥‘T­TËM㺹ÉëÈóqÅUÓjŸÏv™wÇÓå5‘<»çÅãÅǽ±÷p‘qÕ\“­™ÕÓÔ… d½yëÙÁ{™{·…n³Y¯M‹ù ûÂ÷¨Ç2—³Ë‹Œ•x…5‰ Ÿ ¹ÆÃp¯³ë¸£ÛÓ›ÿĩŷ õ‘ÙEÿ“Ç¥Èý§÷• Áï>ñEíÉ'ÿŽç½™ÅÇJŸÀŸÔÏÙë&)‡/¡mÏ—iµh÷Sónу¡EoÉÉ̸×6ÛÁõ·B÷뤣¯Ó…ó‡±s^‰dí—E×D±S#Ë#—ƹ¹å¹åÍt§_óËÓ4·3—¡b¥O‰9Ý(£(‰Û…¬ëÏ9í9ã]÷µ4ÝPᥭ·†›˜½&ÃÿÛÓ¹­ï…‚³<ý:¿P個xÉ“¼Ó¼Á©ƒ&Ç,—GÛ ¥ Éûá—½®ÃÖÉÙýÕ•ÇHõ˜ùnãq‹\‰¯±´‡Šµ±±Ï χ©eÛ‹‚áç_÷=¥¥£WÕK¿Jÿ–¡½Õ“‘¼ͼ©Î“Í3µeŸ;÷:ç3áxùÏ“¢Cá9Éi‹¡¥÷#ñgýj×U¹‹‹ÛÖ‡—圩lãI› Ǻ‹ºÑ¥·SßjÏŒ‘caµL¦é}³}©t­QŸ=¥xѹù¹õ*çbÝwŠËÉ˃»åQbŸÓb³aÕMÁ¹ÉÁßÎ¥¥—ý›ÿ“§µ«4ï±§²ëÓ¥6…¿ÃÍÑǽ}ËÛZÕ‰¿ç©¯‹ » Ó ã’µ™ÇÈã¥Ûhó’•”âñÐÓÊß®ƒ…©ˆ»ré'¯-Ä‘¯×®ÏpÝi¡|¡RÙQÁ.«Ë§sç‚¥=ý<‡^Ós­¢×ù‹¤ñ>×h¡ ¯Ú\ßµ—§¸¥p…P•^ß éØÿk‹E‹v¹ã»ßxo磪ÿ«Ó‘åj«:•çÍÑ"ßÓ£T陯–˦õ‚¿=‡¢í_ñÁ»tǨÅÔÓOÙËŠ“T‹ «0ë/½5«@½ƒ‡&íŽÅޝ‘·4ÇCÓKç°ɯÏ"«š¹rç*Óˆñ°ñׇ:ÓÀ‘u‡J‰Ðõ¦›Š‡>ù©b£‘©Ö‹‹ýfÅw•w—H™³Ç“6ÁŽ‘K$—¼×yÍ[…-¥ï8ÿ~‘»Ãu"]ýF»yå¾Á#•>—Ò±¯­ý„ÝGÙo›KÛ$‰`Í£åÒ±§kÉ¿£„ï\Õ~«À‘]Éž¯TÍ)ÉÕå%ÑÒ¡ -Ù­ýƒëK­pÝý ¹A Áª©˜¿…X»KÿÍåç ùŠûeÇר˙*ѨÍŠéTÏ|…Ìù‹A§‡§Qåu¿Êã/ǹÅå²Ýb±”‰‰Ë"ù{õ¢··?¡Y¿²¥–݆×2ÓÇÿ·ñZéŧ€µ[Áõ¬ƒ’‡¦÷+±RÅ{õÔ§•Pý+ײßÓd³¿͈ëk“/É—4ñ$±Ù£•Ë·µå¿ÿo¹V¹©—‰á‰ß?©Êó¶“tŸPÅÙ!ß9É…›ñpã>×i×½¿Š³Dÿ°ã”ñO«^Á±«SÓ?̓Û’«*» …”éÁ÷FõÍÅã «lƒù†H㵪Ã0­Û£÷-¡cÙ‹ŸØ…—óÚ÷PåÛÅÑóUÏg¿p·Â³ ƒS§ž«+ËÃûC«nß#Ö½‰[¯ ÝÄ·žÉQ<‡g‰´ß‰,·o¯eõd™±Ù°Y½YãÈ—È÷‡ÇÏÀ©0ó/ÝÚ’Û Ë “¹‘¤“Ð Ûs•ŸáÉÛ#ñŽù¿ÅiÇŽ½‚ý1§Ê…¾ëi±N‘޽«—¹U»|½ËÉØý°€¿ŒÍ íÀ‹ñA÷Ÿƒ¶‡¾­Ì¥¢µ@ǃ¤…Uñ}å¶ïf×;ÑÀó*¡»ž‘ù^Ûx׺…#™Rѳm…'™Ñ޶÷sÿSïݯѿẗ¡ÑCœөŒÕF»­±Ÿ[¥„‰}çÚ•Í\© ©È¯zû·±ÅF™‡S¡Ù‡µ§¿+ë+»×Ó‡ñ9¡*ת‡tÉn¹’í­ó áϤ¥·ÑIÑŒͨÿœå˜›Â«ŽÅJÅR¯'½s‘t<ÕÆ¯ž»³©P¡Ñxñ"Ç–««Ñ ùѳFƒG4…oûÌM‹‚ódpÿ͵ç.ó[‡ã›™0ŸlÁ6çMßEᙤÝc‰1ñ|Û[ýxãe« åµ—]É5Lñ‚‰IÏ-µt‘ÃùÚ™¥Û­zÝÃËå’£±ɹ»6«<‘Ò¡U»®ïZ·©“„éD·K©4‹mÏI¯C󓇚Á³Û¯sÉl;Ãs«Ó ç¨ãǽñD™}™iùQÍ’Åo÷Ô™µÝu£\ïß*ï(Ýk±\¥¶•t÷^•`åfÛQ›Tã,£%™ ïLã8ÓZß0ñ'k«ýÐÝå©í¼ÝÑï ߬Ù×Íyã4™GǂѫÄíxÑ ³¹åï@»h•“ëš•rñK݃¯>‘R“.± -㪙û0¯í@{Ù™¾• -×?ã*ÍÃÉ´ÿ¹Ãv±vÅ~å¡å‰‘˧·Ñ2ë¶í–­L¥‰ÇÂÏ×ñ“›h ïOï–ï÷Ú™“¯™ůí 3óÛ\‹¥ÁZ¹ýëɋʽ´ƒª§TÍ“¡…©[‘^¿47•"… ±ËõËÇÑ™‡ݾ«¿É«½ÇÝ-ýT›UÓhÛ}«€­ÂÓÂÕ@™FëU•ÉS‡@Å6Ç·»›ï²á¨‡ÊÁs¥Õ—7»5¿"Ão¹¾ƒÛã·ƒ  Û;ÅËÕ3³ÁÅåÄѼ‡Õ}>§m“ÍïN¯BýƒŸ•ûb·Ï©“Ù«{¹ÅÇ¿ÏÓÍf‰f õÃÛ¸…¡Û õÕÏ¥õ,“Õ™¢År½^O¥Ù×ʧ©Ÿ¥Áv—·Ç&…:·NÍv÷µ•ñ¢ñH·ýWÏ?‘DÃÃÃϼ÷Ì·GéIÁ ó~‡rµÒ×nŸ¨á»‹z“…d›Q«=§Óª‡«­‘«™¡XËØÕzŸ{Õ„÷™Í:“ébÅ‹¿Åƥ崥5É]•aÿ6¿8É?ÑFƒ|©ZÏœͧ·¯¦Ï*ÇW‰Cµ£×Ë™KŸÙÍX³{õ_ãK›å­ÅŒ‡yço‡“l§×åpÛ˜».Ñ©`ÝÌÿÒíË%¥©Òáέ»Ÿœ—‡“ÄÙgéU©šõ£Á«±Î·‚É{û½™Lëv«w~¡‹Š½ÏÝ -åWûï Ï%›O­ZÑmǼ­Ð×lï¥ÁÈÛ<‹Á«­ÿØýåÑÃ}ëfÝÆ¡ÏùØÃO—c¹@¿Ä—¾§®Ÿý¢õù³–“~‹ÔíµÉÿÎ¥TÓãËŽ©ù*ãÒÃG½@·Ë‘ õƒñQ™gݵ«/•SÕù_›fIý˜‘ºÕ|±.ù&ýÝn8˘¿¯ ás×N¹b³d¹³ ¿%ÅzýNŸŸÙ³«ž›É¥¨™¼ËmÑJû¥œ–õÌá8…j«àÿp‹¥oמ©¼‘fÑD§£Ž¡Qåcí•ÛÝe}¹u÷טû‘ÝF¥š‡»·ŒÇ —/»·ÕŸqÛ"ãróš›[¥«׋·ƒß3Ñ -Å3§ƒ­žùoå“ ‘B׌½¡›°ÿÃmÛΣzãV±‹‰vÃÙ‰oíZñžÅPá-ÙBïÁ•Õµx(•Œ‘÷'É2Ù‰ås•½óŸ§Fó©ÕS…i럒˜ßCÛË•×Õý€“y™ÑûJ©nÝlÉï,õÀõÇë¡Ñ×Hç·wåÙ‰°±_™ÓßéuŒ±ªå9áPÅMÛÒ‰ÔÇ×Å2ç;í>Õ¬Ç}ë`ßÖ…Wõ·ŸG؉­«—áEû,åÍÝ8›G¡Á‘·‹n…Ɖñj˃Ñ,û²Ÿ”ÿÙí‘…ù(Ÿi‹­åB—z™‚•™|ÿ -§'ß`›‹×gÏ'¿¹·Ä­º˺³P÷W•ÆÁ°Ã8€—i½§ïe³BëVû¿¥‰ñ¥§å¹C“ õBã.Ë­Á½«Šã°õj›ãŸÉ©ËÁ'™nÙΫÎéÇɦ½Ö¿m‰mWí(õ¥¡9÷7§j—'‡3Éœ»wµ‡¼é9‰©µ©ñÙ¿$ù‡Ã:ë©•ªå4Á µZÛ@‰A“H…k«bbóuߊ»É,ñ~¿’ÇXŸ@¿ -ù -ùõÁ£®ÅAÇß§¥§Ÿ•÷~»kÙ€‚ÿ{±Y£‹¿6ƒ¹ý,Ý&É¥m»˜‰?›A½bë„ÛP§P™ÝÂÁXûX»Lƒ˜÷o¹põ…Ø·.ù-ƒE—X§”ß•©‹¿¯G¿Gíj½ó&¿«(¥K•}¹«Ë(“(·ýmÉ%“&§ë«½—ÃwÃbÏ“ÍÍå¥å‹«‹Á¡Û|ÈáÇ›Ç0Ïs—s›–«‘ÑÝÊ‘ªó½í£á/Á-õ õW¥‡é†‘x±•×V›WÏCëI§ ã -Ï¡³«ýÒÏÑëÂÅxŸ‹¥_Ù^—8¿RÑ/¯/Á‹ǵ£´÷ÕÑoÛ——˜¹™ïª“¿›?Ñ>™ÿƒ«é Á ›"¥ºÏL‰LÕDýX½…ùŸ‰jãž±·ŸH•G™<׉Ó§)ñ(ý³I“…±¥µŸ™ý—ƒO££¥§ct×±óhÍFÿIÅI“EßV—¡ùí1‘W§ éxÇxõ‹µ!ë5¿{­Ý¹5£^¥ ›4鎕«y¯€»»s…s황±³õ—ƒ¹ÙL«aš«©­G±>™~ÝŒ¡‡÷ƒÍ Å¡•2¥½Ç…ùXÅXÙFõŸÙ~ݪéó+88çZ.Ì«ñ óÀÁ[Ñ‘ϯÍ?ç¿5Ùå®­‡‘A­1å«“¬åm¹m¡Kùvç ± ë›uí± ÏO½:Ù‡™–Ÿ‰ˆ¯Wÿxõ€ÛÐûɃ©•£±÷Â¥Ý,‰RÓ=óZñ ÷’“”‡©—û@¿ÙµVóV‘ Ã/Å’ùM¹OɘבÓß4õ™§÷e©ÕáÚãÝz’ã‘Ëž£yÁz¡‚Ým›Ç±ÌéËé‚É—«Ê©-ñ÷<×ù´¹µ¡¬ÍÀ±DÑ¡½6Ó1½ù·c¡'Ù-‹hçS•mB»V¯åž±1ã0³gÁ”±§‹ª¿½ë›ß-½–û–ù:—Q‘H‹Î©ÏŸ¡!‹‹)¿)íÿ»‹ÛÔ±g×Ï—ÏÙÅCñ‰²Å;;“5ÈíBË)‰®¡®Ée­ADû/¹£‹£€³yðÛ:•;…RÝ$ù‰Á‘¥ƒ·É4×¼¹eÇe‰£‹ë¯ë£‡·³ÓÙÕU•Vjí{½¨Õ˽ÿ‚ÿ9å@³@õ›ë}Õ•³>—hÑž»IñI¹DÕØ§¶ûRŸD¯œçœP‹[¡¿ÿ}µÏ]ó¿¢±PùO—œ½•Å1ëZéÒƒ†«³ñ¸Á(¯‰|ö™¦Ñ8Ÿ8ï_×~³ ¥ÅžÃÔë‰ù±ý¥‘ÁÝhÁ‡ñ‡ùÈ…ÐëX¡dç¿¥t£ xÑwÙçÄñ¬ÕZǹżÓ§ƒ— ‡NÙ¬­·´ùÖé‹É·Ÿß‹‹6µ7×>íc½ªß‘¡‘§¦•º›Ù±IáIÉA‡W—„É…„¿„ñŠ?•X×j¡j§^³Ÿû­ã:›>×Q¿[߽̓WYÓmå‡Ã"£Ôÿ`÷aãXû‹·é¬¡­©µï2ñù–í"³#»7÷È›¥ݳ‘´ë £pÇ4¡ÖçÕó·›±¯‰)©:å8ý‡Ï·u›R©3ýÏv¯+»g᯻¯™Æ·‹ßaó›ïÁu§Åù¿óªù¿žÃjý(µ¦» ý …"‘$å‘ï“çpÏi‡ƒ×ó‘©…ó„ÁoÓC•ÁãÂ˼›Ÿ%©.ÑÉY‡zÃ{¹‚ÁÛåÛėڟ·ã¼¹»ÝÁßvÙ”õbÉb«Aÿ©V÷˵ˇÑ+ÍJñm©ÂçÁͬ™-µDýÔ›\ZÑa­®ë?‡AVß|í•Ï1“ßÕËÉŠ·éÍ0“-®™°é-Ù„™Ó͵ىlÕk­qёŗ˗Ÿ(ñ¯hÓ9‰·jïiÓT÷±ű¿ºç 匓Œá›Ý9¥ÑÙÑ÷ Ó -áeÁ­©¬Å"ó6§£›ñ›‰–µsñXÆålï×ÑÖÓË«"“\5rûtÅ–Íb±ýhóÔ»Ô×{…™4ŸÒ‹Bë¿©¿£¹íyÉ(‘˜Á˜—ŠùÆ©§ŸJ‡6ÛŠ ûÙÏS«I٢ńÙ`ÏY§y·È­g÷f«ß$¿‡‰B­¨ë¨·¢µg­§“8:×[·bÍß¡‰/Ó.ç&ÿË9›¦ç¦ÉÉå}£ CÕ—Á‰ßÀçeµé€©ß{ß;ÝÇÏ­ýC•E¡F“€ý!£¢ïTùT…?íG±0˜“+å*á)Éij‚÷Aíª÷º½ÎÙÇó2Ïa¡ÔӉȫ¦å„ùs£—›º›)“1åñ¾ÏŠýŠýzéeÛJ“oß ™ ­…aýt»11çù?å]¹Å¿…ÿ…ÃŽ³¯ù%Ϲ麗š÷wÿG‰¾¡´—¯÷å“×=ñ§»§ë-óaѶPµ´Ù´¥Ê¥¬ÏbõuxÓ~‡¡—À¯íÿ—ι7û6§Ìãʼ»¨á~¡†‹#$ËÏQ³ÃÑ`È×ÈÿñrÁPû8Ë8Á–×ÅÛ™™ñFµG£Ÿ“ÅuóÒˆs͡ɟÐñkÓ¨—¨›ÌçÕJç¼³¼¿§µ$ó¥•+Á8™’—)³e³²—±Ò¹Ý3åŽß)·)»ÅmõFëp«pǃ͘Ã'“¤åq•7‰ØåÖ›·'³1ã1Óëa©žÕ˜¯vÙT§iýÄ©½Û+·Ë‹e¿e¡\¿;2ƒÔµ­ÓWƒÍ• ¥¦§}Ï.Ÿ.ñáÛV»Â›ËÁѿؕᣣ¤á½²ÉÝ^£õΡ³·¿ÙÓ3ãÉÕdŸFÿÆíh›i½=ý϶ßÍ]§Ûÿ2¬ÉL…LéXÝ+›Òñ ± ·Û4—µÁ¿å Çk¥ÔýÓÕÊÝŠ‹M±ÒéÓï¿­á …¤Ç£Ï«›Íù¤Ó±«[õšË5Ù+¯%ãëÄ‹4§Õ’û¥‡ºéÙÓωgÅf—^¿<“¿¬©OíNáTÉu“•—­íL÷N¯b½[ízÙv¿Ö×ã%£B‘dï{÷{áу½õ3·½~ý}ÿÉ£¨Ͻ¥å‡|½Æ£©Ç«÷8Í7Çgé_›ƒWÁăĩ çÓ6‹p½ë׫cÛ_÷Oüû»Ó'ƒ-ÅÉ€÷§|ÝËNÏÃËÀ±­ÿ*›ál­Ø‡ØŸ´Ÿ®ýQá¹…º‘–‹w½J¾ÿX©Y™C›/Û›vûÔÇÕµÃîë–óN‘Äáõ ©FÇp­+¡˜‰›ß­ß¡”³ÕÇhŸhã{÷‚•¡—@ý±¹²Û*Ë©©o·„…¢•jµ~ï’“™‡„³p£Vïù«‚‰Ë™©péo“`½Gý«Ñ&«“·Ë¢ÃZù1É!Ÿ‚é’ŸsÇ)•)­-ÕÝз™™“NíT£ çÃÍ¢‘¢ñ›CÓ²ç–ÿ˜¹ƒ‡oWïxý -Ï ±áiJ±Gݸ©¸ã'ëg•z™_³ÀóÀÿˆ©6ߘ똫–‰n‡¥«1ß1(ÍeéÚ“Û­¸ëxÓ´ï¡~ï~µÈ£§ÿå § -£"©ºÍ€›(Ó)­³£}«’©‘¡8•U§Ã•Dͤ÷ÕXÓħÿÅÚïÓlù;ÍlµHƒmíÝÁ»ǰõ®ƒµ¼§ñ¦½3“qƒÕ·Ê¯ùǵÎÙV‹l«ŒÏŸÇ©ß ŸQ™‘6û=¥`©R¹fáRïëy¡Ï,ŸÎñUÓAŸd­PÅ £Æÿƒ_ç=Ï¡CÕ<ë{½¹»Æùš³˜µNÑG¹šÛšÿ’ßm©«½Ð›$ÓÖß … Éc‘€õÉŽ»NåMŸxÏÖ‘?‡±Óe›X»{“{ý½å\­4¡ñ´ý»×ÉËoÇnóãÍ“ºßZ³£Í%ƒƒóv‘PÕßÒÿu‰6Ÿ©ÏnÍD»×|‹µ®õÃcóŠÛr«G›2«fÉ<·…µ<×’÷Ë}—ã&¯ª§Ÿã¥˜ŦÛˆ©u¿lÅ7­W÷©-“­FD“­ÇåŸÅFñ‰[Å£µƒo«„©"ûFÝÛy‘QÝ;SßÈ×^­ó¬‹;½ŠÓω·¦Û­±(§Œ¡W‡Y¹]ý=ï¾»zÍ>íaãG«FÙå$¯ ÍÌÓ¦ï"ƒU‹ïhûÊÃ5¯¡LµWë8™†µŸ³¿HÍV¡¤»—ɨµÛ¨¨Å“ãƒs‡œß«³›1¯®ÿ÷Ö鉫Eû`å7¿Ìñ4ÓÎß8‹¸›³œ»ÙÏ£½ÀÝ óeQ³T±¯ûµÇ‘—õ©­V½—ŸN—³°ßSõ-™¡¹`ê¿cïé—T¡Æ«Ìƒžõ#×.‘ã#©{×¾¡Ð•,Õhïg×Ò±CÝ«k«±åG³—²µ”£vÛN¥R­Ž‰D­…ïMË‘™u‡×}Õ‡ù)ÿÝEË‘_ÁÙãÏýÕóO¢³§åDñ§Xû)R±©¾ÿ£…Ñl‰{»´… û©ÃéE¿1­vÉHÁñ ÕjQ‹´Å´í×í¾­›ñhóCɽ¦ó{£¾ë­µz‹¡š±ÈÕ¦áz¶±TÝdÙ»“"ÇlÉKÿU÷dñ­å&ÓÕ—¸¥[á'›eÉ‘ÍwŸÖ…ï•ÒíÇá©1¥³X±®ã½ÑÑÇYçí2ß'œë•“;½j«‡)ËKÅkÁ}çwýŒÅO¿é µcóMëÖÏ€ÓyÁ¦¹Ç¿ÎņóY›aÃ(ÅQ©ÿÊçõ5ÕŒ³z壉ªçƒÙ¹¬ýÌÍÑÏõ¤ÏÑ_õ8·§ßÉ£õ¡ÙŽÝ´…ØÁ¾¥0›¡…³ÏÈs¡íÌï·³¤ïR·fƒ ‡ûWá†ÍžÑ–Í™ƒ2­Ñõ³ß²Ž›¢ƒ^§‘Û‘é”×<\×,¯,£Í(¯Û៟ Óx¹‡ÕCõSÅSÃHû:£§È‹oÑš¿X‡n·&‹ž¡Š—Ëç:Ë?ƒ¿--û±Ð×±·°±É‘ƒ½ õ -—-í=Õ`ïa—ŽËŽz·ÓÛ«áAÑ‹ ÏÁdë»× -ùœ•qõo½o]Á^ÅE‡?—ƒ·£Œ­xçg¡Ó³ÔïÙ³~û~§Â•ʰó£áõ«¹ÁR“PõEóž¡xƒYÓXŸcãMïyÏÔ³¬õØ—Êû2«gõeõ9™O«›®‡•Å ý*ñ7É|Ÿ¬› ÁñuñÍáÊ׬ã²ÛÙ±rßr­ÎÛÈÏ6¥U§n‡mÙb…ç“á5‡¿¶•Ùãw…¹á±Ç!ׇ-ƒ'·×5‘ ¥•:‹”Á¢±¥éz‘žß—½L¯Ñ±½éŒëÅÛzŸ÷ ÉÇݦQé0“F»ÃÑ®£šûyƒÆÃÛñº£¦³(¡Ó ¹+©!í¿‡ÔÁ/áQ¡>ÕxÅ|¹Ÿ…³AÑPñ.Ë$­„§Ï[Í8¡nË>¹”Ãfõ^½tѿǞ¥{­‹¥wÍ|Çë¿á“»÷§ë‘‰Ÿ¡³å¬·J©7¯"¿¦íºÇ*«PáŽëzÿ ñ`×§Ã)·Ç×Îç›’ÅpëÔé6Ó© ûICûVÕYƒ8…0ÁœÑz‹Æé>ÿR™fßí ÁUŸ)ƒºË¥¥± YõŒÑx»€ë»¿Á¿u¿¥Ï·ÁËïØÃÏxówÙÏÛ¼ù§»Ë•Õ£­ Ï„ýÎéÌ™õº·Å½‘‰7ƒ·çØßÃëÀ½×óµÏ=+¯—‚ã£Ç?Ñ©¯µåÈÓ{fMç-« -«Ã‡ ‘}õw‰¡5­!‹Sï/û'Á -Ù‹PÙeÙX„§˜õYÑg‡Rý²ëž‹ɽ±œáp±<ÓP¥,½•-¿°‡PË;¯^¯<ÕPádýص¶¯¡¡åÅ¡Ù[™b­ˆ¿µ2èë$ÁH…ÂùÏ7¿MçÌ¿ª×+‡%ýœ½Ÿ9·MϘó°íÄ¿~ëÚÝÆózÃ#ë¥ißHélÁWý‹ÿŸ©}µJ“@…½Û-Ÿ ¡¥:ßY±#Ù*ƒÛ£­=‡`“£¶·ÍÕÖߨÑ#ãŠÕu³µÃ2‘°û—$…žç”Ñ<ƒ4óÈûSÏÙ±¹y‘p…\¿ ÿÌÑc½Ã￘—5©‹ÿD©'½aã…ûl‡ZëÎõJÁÖ—ÅËxañ£9‹É,Ÿv­ѯó­ ƒ -ýL½gçýÁçÓ­Ÿ—ãÆ¯‹ù×á…µby‡¸ý©˰íDídó¯qÑÁÆ«•ßáíŒ×‰Ö…ÊË]¡¸u©Á£«…ë€ç>ÓV‡ªûMéÀû …/Ñ…Íù¡o‡#­É½­Nùb±˜ ßs«·÷nñïd›{·[Õý3ÝÛ'±@õƒïjñÇzŸš…QùU½¬ï?™·ûÚ»Ä vÅ]éZµRÓÙï#V…·ýBû“ -±w¯©@‘%Û¶ͽÁÑ…%‘íA§ÝÏÉß¼ë~ƒ:‘‡Á›µŠå¨©œ“!½r¿Kß7Ë ëÏÙñÏÑÄý³Ú‡–ƒœër±`­"¹í5õ!騯×;‘«á¸ÛÇÇ!É••¬›Ô±…›zÍ&ãpÉÕù½Í+½;ùPÙØÉ ‰ýŸÄ÷tÙ8§[ƒk¹~לéPdÿ‡™ª¯ÐD»"á‡ÁÒ±Xëh×Í鸧2÷…3ûÓ¡ýpãZÛEãÕœßyÏq‘¯;©£‹¹l%LJ8“SírçlųËȳ„±Š³‘£oßIïkÛדƒÐ»«Ór×o±µëAËó†«%¯¶¯“‰åX— 0‘(±Ø‰r×Ë„‡™K‘n‹Q•#AýA§HÅeÕQéf½Ã3åNc›…›©ýËÅ!O¿Ð÷…… ±Æ…¼ƒ›á¥•Â÷ÒÑ*ç?ë—‹’“ Ïzh»SÇI£lÓw‘©­½¯yõÏ’áí„›››¼ý Á"éµÔ…¿Ý•‡€‹š*»%ëm¹=óÛT§;¯ÃÍÏ«d‡c‰ÕÃ,™ÌÉ·h¡Õ…š­Ä¿“c«¯k“jû§ñ;뽑σãË“—6x¯fÿ‰¹´¿I)û£™³fÃÑ3¿ÑÑ)÷Á•<Û§«?Ó‡ÿ±|뮥Q‡­ÓJ¯£¿‹Åç‡õÐ…»Î¯y™‘ ƒc‘™¿ùFë"ã´÷Q“0ù ùqƒÕÉ”¹W½¤‰ZÇŠý³Íï ɃËÛUŸ„·Ú— ¡›õ ÓŸçÊßOÉ©ÓDg¥¸ÑB‹·§Wý¡µ£j»¶ËA¥³ýÙÈ™»ãb·“áa³³Õ0óέ'‰—’ÅϦ‘Õ³ªãmͶ…чá#Ÿgßoóßp׳÷L÷´ŸBñYí«ƒ íÔÃaûž»JõÙw½­¥‹ ƒûL‘÷^OãSÿAÑØ •Ê›n³ ¥Ÿ»«Á§ƒØ±[ïµJÛ&£2Íqå»o¡+‹°ƒÇ·Õ¤6ýÙϬ‘Ø¡À¥#¹Öý—¯ÖÕ±¯«ó «L±y¥j‰(©kÑ™‡ÖѸíUéLß߈ƒÅLóEÍÂ뾓†Ý…ÿCÁ†²ánÑk¹³tÕB·ÛùÔ“'ûÅõŠ…£×`…GËFžãUÕ!BßBëÝM“«mÙm£°iÑ•ÇýßT‡ñÒÕ¼•¼í›Ù®ùçN«O­–§©ë²´¿¹½ãuÍpˆ©²ë…ñC«-» ÏV…Կé®ñÍšÅ'‡(³RÓE‹‰ÏÉ‹¦ÇbÃIß § ‹«Áj¯›•εÏã@ËÄ“‘«»å»­œ»Èÿ ‘ˆïB+ƒr©&ÊËÍAïÁ£«ë ›IË,ÆÅŠï'Ï(ÙÙÝ#õlÕ2¥3•²߀³€ý`ù•ʼnͩ¿z¡içˆáB¯@…õÅnå°­°×›·ˈ׊­Š«ÙÍåh±Ï‹Ú¥*ýkÍÖ‘×ÛKóÉ¿·eƒe¹!ïuIã=…ßLƒ5ýYõ§¹Ñ·ù=£_Å_‰*¹Y‰ŒË¿—õ„½u‹Ã¯]ëNÉÛÅh»©÷GéÊõqµQû ñwnɬÍQÝX§GŸfÙ ±b§=¹QçŽï¤ÿ½,‹Í¯ÓÓ®õm£;÷bÛIå'™MékÕ€Ù_ó_õ7‰q±„·(çÏ©›ª·ªÍ³¢õr…²“*¥Ì¯r•¿­Ï»l­;ÓaÝ>Ñoǽýɕ﫥ͩŠçŠÙ¡ŸáÙwݻſÉ"íÊ…Ëõµß¾›ÅÉ-ó-·¾‡!…6³E…F­@<›l¹§…[Gýi“|¥|§‚߃µSé.ÿ.»ù~µ¢¿Y¥XÉ ‰—‡¬«5é+½ ³•ïIƒ3›3¿ùÅÁEãE‡iá}Åv٩ً¶—%‰Ó›•›¿¿é«óŽáb¡MÇ`Ÿ`—fçHç4ÑZ«ZŸE‰>S‘eßbá\ѱ²±~É~Ï¡á Ëp‡BÉC»/¡#µ+Û‰­‰—r· ¥}Éȳ¦“Öû7Ës£¯Ióˆƒ"ÅÙÕÔ¿ËËÍé\‹&PƒÝÙi·_§u®í4µE³5ùÀ²›×Ù¨±“ÕÓñËŸtÕGÙó׹0ÓS•—ǬÇ¥NËcŸ~åÉ›ÑGóF³Ž«ˆ«´óS˳ÿžÏ`õ‘†ùpçÒ¯(§/¥²ƒ€«XµŒñx÷6áÂɰ÷µ_)½”£¡ç §ª»½Ñ[íž±j·9ã û›,Ç­ßÄÏ‘Ue“3¿ÍJ­UÏ/ç×Û?ó`Ó—ãɃ ñ¤÷\Í­Ù²‰U‹0åxíŠÿa›£ÁÉçqÉ*çTûvÏ™ÃýRÙr­£‰Ó8Ëš±ƒ=Å Éõ±ÏáJËÝ—éÃ=¯ÍÙª¯|©¡§ÏÕ‡ž‘ݧ«É…Sûÿ1±ŸŠ©¶“¸‘²µ¡ëeõvÕŠ¿ ©¿ñzå-¥Áý?ÙSí·÷ë¥é1¡[цû•ÙãÀª¿»ÿKÏ‘‘³8ÇaûŽÑñ·{Ï3ýß@•vÿÖ×µ×1µwŸÿ+¡Û³š£ íXÿ²©¡Á9Ÿ‡È› á Á_µœÝ“×p-»Ú6Ÿ§OËÌ™lçx÷D¿fåÙÛ¯‰Ã£²ýgѰ¿‡¡“2‘F¡Ò¹,ë,‰pùÙ3ÁÙ—…r­2‹3éë­ÑÝÒɇ»ÙÄÅ¿´ã®Íœ•œ…•¥†ËÐõ׆£r™ÊÑÊשÁ£‹%É$¡ûgƒ¨Û¦åºÁ*ƒ=ÙÝïÄÐɼÁF‰Ï™,×'¡©í˜©™ˬËq÷¹Ô“ZûaÅÌÀß±¯±ñ*•1‡ïPÙO‹gƒ{ÅË™Œ•­õgïAÓ+©›ùÅ¥ µj4Ù@·aÙŸÃ…»ßié¯ã Í1=À«'É¿níC³í§‘ÏD£Éû+ÉP›d™*“ƫ۱Óé?çcÓ«ëŸÍ««›jÙÔ1ý^©f™ŠÑáh›#¹*¿¿ÏÅ›ƒ“’ÛªµÛÓŸÄë­‡±­a³MÙ)‘›Úµ·ß2ÑYífñRáñÈÝ¡ù|ÇvµTï„”¡IÅlñW«Ç„Õ—ù<ŸR·xj‹9“#Û6½ƒ$ï7©h«`¥n“ Õ1™³§¯©E»T¥·,é%ÑÛ“Mýa¡ZïÉI½iµ³%‘Nç‘í}ùչ̗–Ó8ïY÷2šoÿÕ“´Ѫ¥zù»ÎÁÇɆÁ¯ÿ¶ÃÚ•‰¼·Àµ£»£Õ—Á³­…ÉÍ÷&ß/‘Sƒ³‘|ý§l;»”›ˆï[‰:¿Lá’ß×ïʃ6åÚÕ–©<ÝO»\»õ&Å÷mÙJÃCnÉ÷ñ1í ËXóRž‰••ÃD³JÇ‹Ñv*9ñ[‰·¡å¦á•4í“Cã­HõkÏW•{©N -•Ÿ7—«/Ã?b©„qï¼Û©Û•Í~½XËiŸIµ¥ít»Ì›«Ô±!“±Ô«™¯ËG­”ßÙ¥­‹cç[±9ùyó×…¦ý"‡+ÕW×ç,Ç%û—ÅÁ×ÖÃ÷%‡X•®ó¹Âƒó\ïÿ·ÙƒN«BÁIçm…7Ý£»Fƒ[ƒwÛvËŸÇÏ{Ù“éOÏ¿ ãз7õ6Ó_¹¡±Ñû9‡C³|ËÅ…™÷UŸV× ñ¹•Ô…«ƒb›s§t·¶­DÍÄ‹Ÿ¿}ãvµv£·ÃÝy©§eUÕNó£<½D“½É@ݺßtí!Õ³Ùµ¸×v§ŸÆƒt«˜á³Ç ׫ßÇ­¹É1Ã(‰QËy¿#½ºõÂó³ËÇË1å(Û¢—{ÕÅW£+ÁÀÁ®ãÃ馃ÿÑ©©á|ÁÙ9÷9å=½ûƒ7‡KÏι›³‹^ñNý&»ß’½“¥¤«›ÁOBáZ•ZÃeá“nÉ9ƒ!û…µ%õÏÃt‰-÷h•C§Iß›§ã-ñ–¬ó³4©w‹†½.Ëe›«›ÛÛ Õ§£Áûk¯ó ¥~³^¹d¿qùL­™ù’Ͼµ «}õ\·-£HŸºÃ¥$ý¾£Ø“ˆÅ¹Š>ñ^«ÑÍÑËÔ…Ô—Ö÷ ãx›Ðå1…´—´‡ˆ#ŰÕÎûBÍ…®§ˆÕ°ó؇TïS£á¢Ó»É®×Ãå ßÂùÊ•Øë¬´ËCý’ù¨÷cS—¦Ó[õ4çÀåFåŸ!ù!Ñ̯„‘­sÛ7ïn—3•ÇåÓÃ\ã[ÉÖ¯`ÿNïÑݼí¡w—£³‰Õ‰¹IÕ¢Ýx©Û­‘Õ.yÁŠшÉj£¸Å…ÉUŸÚã«Kï¹|ó§™Â™y­¡N‹Ò‘½Ãh…,Õ_Ó5…³sÿ-¿œµÿJï`³/ó=ÿÑ\q•c˜÷_é<Í.Ÿ£s‰Æ‘­½­«ÕµÑhϑťVÉOხ·=וœå›Û†¯=µ;ÿ:™^‹·‡]¡,íb³)့1³®•±¸Ÿ‘¹‘©D¿Ž§J¯ é/ƒ„£Ñן¿`ù°­^‡¨|šÙšá¼Ó¥ÿÏ›D繓xÊ«UݘŸjÿ Ù’íOù/ý½ ûOƒdû]ƒ•Íã×õ"™VÇ çÉ¿†Ã[¥^õ;¥4ÑÛ åPýP‡dÙU£†åÅÏMéwÛ‡Á×ÿ»¥%õ§å¼ÿºãÁ×µ¿›t·tõˆ‰'½Å½|÷T§›ùfÉg0å.à ·O…ƒÍ‚Á›­Á³‡*óÍÝÍͪ—™Ö¯#‹¾—NµÂé¤Ó¢ë±^ÛiûØåØõLñ « ã ‘r¯ØSÝ=·–‰Tá+ï©“‰“µ•ÇŸ ½E/—.»QÁÍÆ£Ú»¼½¯ýs¥\×Tý@•™Î•9(¯ºõ Ñ1Ç1ã¡@§ŠñJñdÇiëœÇ@­S™ ÷½á½³!Ó!m±m©L×ÝŽíÍjégóÁÛÁJ›Jß¶í¦›¬™P¡Jñ˜·R›¡ÛY‘bß‹ÑXÁ7ͥ祹%‹L©T£f…f½O¯“ï}åÕÛÕ¡yË×µ§¡%é#ÓõM§š÷“›”¥yÿ½˪ã)“)¡’ÓÈó€©Éý‡ëBÍB¿Ø«)ƒÝùá©Í»‘&ó%ƒ—§9÷[»cÙc÷v¯NË:©\ÙdÁ Ÿ>»dó ëÁÁ,¡Â±z·€¡€ÑU½+¡$ù¥¦éªË‚õx‰X¿W½Û÷–ñ8±LÝLÕ©»ýw¥Œ¥lr½ å³ѳã±K_·p—pdË…¥³¸Ÿ¸‰‚í«Õ½ÒƒÓ™ˆÁ]>ý5¡6߃¦ÑÈãΫМÙpÛÉٵ뵛Ÿƒ@UáûÓµ•½Ý*·*»ˆçB±O‹U£Ué"çýÀ‹Ö·Ö»3éÈû©™½‡½§M_Ãá6é4‰ÝÁÁ§­‡pŸ6ÏJÏ_Í_¿¸ÍZÉpÙƒÁ>“Ú§é¶ý¶ßË÷¯´«Ï§º½È¯ÕÁ)åËÁÚ…ÅËv÷°áćÐíϵ†—B­B¡¨§ÉÿȹK¹kÙ–ß™žTÏ>ƒZ¹ûA­b·×£ÊûpÓœñÖ™h×Sѵ³3›|‡ÒÁÙ³i«z÷¥¡Ç£»+ƒn—¿«ÑÚ“Åqã3³Ç$ç¯ç÷5Á:‹œ‘.PÇÀÛǓҡ±Ñ4±ËÊ¥ÒÁšç„—ƒÁ™ÕlÕѡ̓pÿÇý׳_Ç7†ÙsÙ…¡^õ¿çÇ{…ù©]ýÛ¯gTá>ý¯‘0ýe‰»`Ãl«j×0§ ›³óL:‡eëD¹±ˆ`Ã>ûǰ© Ó³‹Cßœí¢…@£@Å®¡zµÑ½ÚóT¯[ÉΗ—í—ˆé›ûmÅÇ -¹"™x£ÁÕñ«•ÍÏé™.çÐ…×@ùJɺ‰¦”Ç3Ï´³´ÓŸ­%…*ï)åVµ Ý<Ç(ÕE…q•’绫¡·Î‘œŸW±›©¨‘9Û̓KåJ¹¶ݽ·½¡ËÝBŸž«¤¹.Ûn³—É‚©ƒÛ‚û¨Ó2³;½"‘56݉Å9åA¹1ÙÚµßN³Öç7—ÏÉ`é=“iÝSµuÓÆ“¯»eû‰¡_—JÇoÏ–ïWÍ×ÇuñŒ«~õ~µ\›k’—¥ýIÇ]¿Uýˆ«Öû—0¯ ŸÉ}¡ Ó Õi—¬§³§`¯J¿Òá®Ë`õÉ¡²»?›'çIµ?×± ‹çÖ±ßM•L¹Nó7½Í§aÃáŠëç—«¥û|¥¿s×qãÔ‡Õ×8Ç8§Õò縱6·Ï»º÷$—R -û笵¸¡q³qç³À¿­ÍíÆ»ªË3‰SÏe߆Ûµ»ÖµXlj¨…­µï.—b½/Ѿóiµ0‘¦—»™5ã³2…ë'Á…ªí²ËÖ“œË©—›ûÓ©zÑj‘ƒј•‘Ç:Í„ëo—K½8‡ÅËÒ¹‹ÂÃó,‘*§L£ÛßPÙ¾÷¾{‰Fケ*½Ø£ÄãoÛ™Ö‘ë7ë™Åañ/×bÁ<¥l‘ •~»ŠßkóÓ÷®ÕnåH«q‹¬±U¥!ŽRÓfý9ÕÛR…íwñ¯³j•6¹º›!Ÿ­•‚Ŭ&¹†‰©•À“˜—x½Âà -Û¹ÝÅ ×uá3»ÉýÊ™%·¬é ÿ„éÍ™ÇÄÚý{ÉÍŒ•'ÿ@•BË·@é„û‡·›ïŽÙ™óy׈Ù½ÿ ‰§¡@Ëzã+¯ÁÉ&ƒÅ½¿¥¹ƒ²³³Î™ÇGÕÌÕÂ×dͱ¥/ù­È«|—Û鈱BÅÃãÖ££‘sÿ¦ÛÙ%™Ó:ß\ÍOå‘«i×Åå¸ÿ$÷,ûíQ¿j½ -ó®½·õÑ…y­¯±Ä÷Y³=…=—žÑ­8Ù>÷ÀÇVÏy…Àé)·YñÂÝ™ûd¹ˆÏ&ï“[ý\Í'§Øûƒ…ÙÑ×Ýoµž³Z­oÕƒÇKË0ÃX•&ߦÁãs¹\ǯ¯5™d­Ï!‡×·/¥Aå^¥2ǽûÐÕ‰5ÏÊËt‘ë‹ÑuϿѭkÃSõ›Õ>Ù¶ÁQÓ¹œ¥uÕÏ« #û[ó§Á‹Âƒv÷ˆ»Œ•‰áµ -ÃUá%­,ɶí*Á0ã(×Ç•?í?Á’£:Ë\ᕬé~­ŸÙ¸­•Õ,§–ƒ«oç£ÓoÍÁ\ñ:™¹åÌé՞ɖ«tÛØ­¶ë±"©’óo‰Ú¡¹­RÍ9íu­ÃㆫÕ÷Æ‹±•]£7ëQÛƒ‡‹­´±§ áЧ—¹ÚÏRŸ}£×Ç®ɸïÅç“›óœ™:»ÒášÇ„»D³6Ç>Ý‹ýr·^ÿH­ËñÛ0¥9åÊù¬•å©)•FígÝqÃ.ÿFË<åkQÕ6‰#í³Û‡0¯QÁ=…x©·ÏÚ©Æ­\“uÑ£•·²ù¯ácéZÁAõc©‡«µ‘ñ5ùHÙj£.ýƹ;Í¿À«µáU÷IË-Ám©|©¦ù‡Ñ‡ ™¨•È‹t«h׌§]É=­$±ŸÅ[—õHÕ^£‰k£Cƒ%ëSé{Û¾ÛHÛ¥‚ÿE×3×»^—:ÁL©Ñsã¶·’ÿ^¯PÛ¥«kÝ–£»•˜ÙtÝ~¯Š£D«²·s·š³9ù”‡Æƒ ÑùÏAëFgÜ…>»f¥ÆÍPë@‡†ÝÇ<Á“×]­÷*¿‰‰b¹ó9—d“só ×K¿!¿>› ŸŒÕÐݱõ†Í4­Ó‰º‡”Ó<—€Ùó^ÓMá‘ÝÓÐÿËõ/ñõf—°Ï»ë ³†© ‹N¿Ó™ñóBצ×—í#­ÆݰËŒÝ}Ù§×Úçdõtë!ËL™8ÕÇÎѦ£º÷¦±‰Çr‹J›b‰žÿéVµrDÕTÍ*Ù$ÃÕíq¿­ýÚŸ -űW‹+­ÀŸ/ÇùGŸ?¥Çc‹éN÷Ç"Á¶½‘ã„åwµ­á“ûËϪå/µ¹›‘ÖŸÈÅ:Ñ“¡¢«sÿ ™½2ÃÃBÿÔ³Ã]õKפÁÏ„õpõ“»Gµÿ­ÏÁ烽Ùõ`—>)‘/¥ˆŸ¼ËÑ£ÌõV«å™Ãx·•÷ÙׇÇå&ñ+¹ ™ Ù ÁÇ0­M«)Ù µ£Û¾ƒ·ÛÔ»ƒã›Õ=—AK™då·‡³éh‘„ÿ‡Â•¶Åɧ©ÍÙ•Ÿw«ÍÏ(½Šç……¨™«á±íç,©S±ºÕ¶¹;Ýžõ\ÅbÅ0£‡¥•ѱ›—5Ý[£ãŸ‡À¯ ÅBé”ÁRå÷'Ë¡õ„É&ÁÓ︿I©—™:ƒvÙÀ«¡ÊÛa¹Ç•É‘»W㲩£áXÃÑ’Ÿ›ÿ0ÕcãjÍ`Çlå.ß9áv½(Ñ?‡î§¾×Íá2í‘…×à ýŒ…¹ƒ¿£шµ…^ƒ2ÏïÕ2û£4ãù¿÷…÷ˬ·§Û6Ãc˵“™9‰­¼¹ÈÓÉkç̵Eß`‡Ôý|éX퉗Y÷5³±³†á@›—×ËùhÉm“Ä«³É—ß>¹cÿ%»½ç:Ï5‡›€µ«·Ãëµ£«‡ãYðÙ×é>ûÙ¹¬‰gÍ­‰”Ò½«±U¿¤Ÿ‘­ËDë°ƒùOá-¥„ß -÷g¹¹f—Ùý?Ç@ášÝX«&Ç ŸÇ­·Ó¡1 ï†Á‘ãƒßVÍbŸ^ ë¯Õm· ׺÷-ÿ©ñ²¾© ñ4¯©•1û ÅÇk‹Á©ˆ£–ëVá‹ÿí ƒ[Ó¹™x­‘Îùû…ÿPû4û\픲¹¹‰‰ÈóW±nÛhƒˆ›<Û ÿI÷•± ë¯õ™¿—“x¡É4‡h­ÆíÍÓ§ýz«×>‰…έFË©0‡«×!‹"Ûv³€ëKé ݄٤»ˆµ=¯®ëÍlj× ï»³Gňí<µ³µq¿“põ]åÍßR‰™Ö½‚ë¾›x©Rƒ›á~¹t«dßÔÃiÑ—GÉØ·—³¸ù&±>·‚ýÊ™OŸeý¯¢ß·ù»™ŠçFýB³¯>©M™€Ÿg£cç罩Š.Õƒ:¥bÛd­Q±£³”û8‹-½5¯µÅ•H…K§“…VÇ©©°§Çç¡ý)Ýq¡Í£'§Xà™aÅÛ3ÿµ‘U¿Ø«š©n·›§@ÕG·Ž‡\ÓPÅ-»²ÿXŸÊùWÛ?߃ù,ÿ`‘ÙÃzDz©©ù*ë÷:ÍËÝŒ•_Åë$ý‰í¸›ÛÉ`ÃL›BñR³(ã`L½ù™U¡UÙA›lËÂëu³w­Ï§ á‰DçBßž› ˜«Á1ƒ‚ƒUë ŸµM‡Öݳªï§éµ·/ÕÁ”Ù=ñ—¿Dá1³•Ï-õ»Ž›•K…éK¥“×¥[­‘ÿ ©˜éÌ©½É6ÙÙãŠ×rÑÆýQ…ŽûÕ¨³<Í9㣯ØçróP‘Ã-×»Í[¾ý«‘ñË«"åa­¸ñ:ƒ^‡™›•MÑÅÈ‹J«‹×›½•nééB››‹FÉS¯»¦·C‰¹µG£¸ß{v«¶ŸxÕ©“~µœ¹W£º‰Äó• ƒÆË/«%Ïp‰’Íw‘Êãi§·§)›‰•í˯v¿:Á™ãÒ›Ìÿ¸—l….«8™Aépýb›O§\§‚£ó ÷ƃs奯¬¡‚çÒ“Úå¦ù>« …ùɃ…v›íIõ-ÅÔí1Ùjʼnóe›¿Õ”Ÿ¥³o‘÷ ›QÑÑ›_‘Н ±Yý~åz»ÍS‹Ó™ÑÿH›|·HíE‡*ÃÔ­b¿Û é–é"ß ç%åVÇ Ù"£’•Rá…ÊÏ4¿…Ç‚Ïc¹&ÝÔ•ó\‚Ó„›°ÓÈ—H½}§U· •2Ñ®ý×$§ ­áK·SÅŽíÐÕíMÍ’˲¾Ÿ Û ëRÕ›I•Õ$‘¢å×ÀÙÉË—f­Ì³ÁµÑ½z«$…a±”·†­ [§ÝÆ«˜Åá¶·ž½ÈÉÍ¡"פá!Ë”·<‹Oõ{«|™`“Âí0‹ž7ÿ’ß·ÿЉ<ûÕý™©Kó:¥J‹ õq½¡£ÒÕ‘Ÿˆù¥»/ÙÕµ7¹®•…zñ>·AóiÑi—žãf³«SÉ~ÍPñ¡ï~Ì¿qÓÑ™“¹<Ř¯UóˆË=ŲÝMã'¡ž¥Ï”§Kó.…?͈™ŒÙu£qùxáŽÿ{ÏωßÇͯ׉¼“›ÝûÒÓeãh— ±±Ñx½n“D—Ä¿¿—fß„»V¹@˧ºùµ«ÛûÓ§j×1—‘«ëžƒË·°ß@ÇVýdÅ„òùHí¯ǪçÛµÃ÷»¥¸¯š…–Ͻï©ß‹©Ðñgó„ƒ'­ÑõH͹½‘±å1¥]Ó·Ûùó·™ -÷!í>C¥ ß-§—Ì$o?Ï}—oï -‰‡Á™°ÛÚ—q‡®½é·Å_…½åÈí‘=§+×_›c½¸ÙWzÁ'±ÚÇŒÅM‘Rß#×ëW^—”“LÍ¥Ÿ!¯­ŸÿeóÉ µßÁ£$ÅŠÕ>™pý2ëZ‰ˆñÐ…{¡µóYß…‰B¡³3ƒ­]ç]ËA§~»D÷¹“A£JÍEã|½X©¯…d…°…Uû6ß7ñÖ»‰›Õ4ÿn“±‘Ù(¹«rÛI¿«…†Á$»+ƒRé)·œ“±*Ë“‹¹:—U½ ¯]½)‡ý±%«¿—6Û›ŒÙ4åÁ–•Ô»6›Ê¯‰§ý©%¥‰™™·1íÀ‹&õ>“ -ÓíoõÔµ¬ÐåPñ‚ÿ–¹#Ýë…¿|…z»˜”‘ŸÕšÙŽËc¯ŽÓ­õ˜Å -Ù¦×nñ?…iõk©Õ -Á·¤ÃÖFýxë.Å“Õ?ƒÛ±¨­& ƒƒƒGŧß²«µån…ÇKïͳ©@í'‚¡~÷Î×a×-—·ÿhï_¯¼³¡À»ÈûÂí„“'µtÅ©¶·»µŽ× £ëÅ÷Oû»í$ÙR“tá±Tƒ?ûÓŸBý½ùõy™ ÛkÁV¥“ÑŽëÉõÎÏ`ñPËÈ‹¢ÝÎÓ6ï”—¾Á÷ï‘Dýª©žµÕ»„«Z©¯†ÿÉŸ‹ƒyÃQ‡ë áBÓlÉ„åo¿ ©€¿Ô«Aó«‰)“#«.ƒx÷ÕÓ Ç¯½ù±Èã-÷_3«~ÁQ•-¡síU›#›õÉ1Ӣ늗§ÿiÙ°ÏN¿G­­ÑsA…Ö“{霗j#›¡bÛzíÅß¡3ý°ÕsÝ{÷zË««*¡}ÉE©‚™Ñ™Ý…Ë‘óµ{“”¡¯¿Í÷²Áz÷ -ß×¥§ÑB›wƒ"…¶ù0ëÍy£?iɃ­·Û`Ó…­ƒÅ½6Á­¿vïšÏJ‡¼©©CéjÏkù|©Çqë‡LÉ5}‘Õƒn­õXÁg‹¶(ñBч›F©ª‰\¡Ö÷|£;™7ÕÆ³kß›«(›¾a«œß)×”‰qµmÅÕ¥–»Úуç« ½™ó_Û¦…[%Óž‡p¡ ‘EËW·Uç¸ÙJÉVýÈ…\ïÏ‹f…)«®Ÿo§¹]™Î½ªç2‘÷¥™·ï@ÓgÛžù¸É$£ …m‹—Ï‹•8›©‹ Ñ–ŸmùÐÏDåÒû_ñ£¡« ­xƒi•ι×ëÏåR›\§±ëÀ‡¸õZ‰Ó™Å>…¿Ÿ`­Ð«Ó‹2»“Ó3Í”ÁÇû¿™mË[á媹¸µ,­#Åf©}ÍN×lj›bÓ,ç·Å–éFŸrç‚‹ -ÄÇ¢§ ‡Ùûù¡Çi1•£ùg“|ÏßEáÈ ­eárÍo)dç=³”³HÅyýN…j¯E¡u‡U•fÁA骳Yá˜ë‰•]¿¨³J÷¸Ã`û‡~½›¥§ã…WÑ1ë¶ñOñÕƒ°»…ß;çmÝ Ý ¹·oߺ÷¡¥ç-õ.eÇÙÖÝ‚ÑFÇ¿·IçÑ»PÑÒ›d…Éõ9û­»:÷ß¶Å&Û&á»Yý*ב·ˆÇoƒ£ÿœ‰ó[6Ò›ŸÎ±½³¼ÿµ%Ñ‚ÿ ïGµ‘Á×ó2…³¯¡…ã…‡œ«¯½fµ±H©t›@•e™1Ï\©ÌÝ™§ñ™×cÙÏÍ€-ï;å¨Ùs•±w«Oñ.»ñ_—Á÷D‘Ÿ>é Ó#ƒÌ›ïlÿ7Ï=×Ì™qÝzñ(7¿(ÕR™)ËaÓ¦û7Û<§ZÅ{Í«ƒzÿb×UÁ¹ç¯̓…ÑRë&¡ ÙÌ¿š‹¦ˤµ€¹ÑEõÓͧ:ËŒ¯«hÓùη?ûe™‡V…ÑÇ>éYñ•ªå,¶¥%‘‚ƒÀÅ®¥E³¨ý¶ÿgåïKÛу®·Íón÷Ÿ·r壣 -ÝÕuÉ®ÃNé®­ «Ñå„©º±ƒ¥Xéڳ繲›…¡I±¸Ó³1“6±ÅÛE¯L·RË¢µ&¡‹Â¹ºÓQå_óu©Ž¹?ÝYóŸÕÙ¥«MtÛ›£Bã#Õkõ -³Åý–‹ÎŸV½Âóš­©ïÃÀ‹6µ0óµë¿Õ˜í´õµÙµ™×¥D‡[§-¼‘¼™ÉÔ2±K¿±Û±­!Ñ2Ë)ã˜ëÎÓ˜—CÇH¡«§Çj››Àƒ7‹µ²ÉϽ¥•µÓ•@÷È×´éÏj³Êíy§Š¥¼ã•áí±·­‹ÍJ‘5á‚‚¡gׯéH‡²·ß8Ó:‡ã/•ÁÏ{¥í~Öå³Ãû.Ç£³ÑÏÂó‘•Y§ÕƒšÁS‰ËùÄÙQý¤Ý’÷ºßµ¢é;Å£›ÁÏ×[‹”—x‡o­»ÉÉ×dŸ=Ñ"Å‘…À™š÷ÙÇ÷@“ƒZ…;£««u厉ƒÅÏ¿¹¤§Õxåۆ尋tÙ^ÃÏŒáªßHDZÿ‘ƒÎµ`‡›½¤Û¡§‰ÍŃ<‘Ž‹iÕ~“cÁƒpÑÏ•ëÁÍ»®Á“ÛÃ×±{¡Bõr‹‘WÝÓcç»ëº‰å‡¨££‰Ó}ë@¡ûT­nÕ×™rÍž³¾ÉÚ³«´Å,ñÀÉÅ™¨Ùc•d›y¿2ój÷MïAÛ“źƒùǓ뇓 Á¤GÁ¹hÓ”ÙYùcSßÂÛc¥a»¿‡ÕÙÔ½†÷­5ͳ•ùªŸÙÊù •õ¦«Ï¯9«2ßgÑ@‡©±Ã‹É^‰&¥Žë½ýl©<§sÃ\å-‘ˆÝÀïYÇ®ï\÷~Ó*“@½ -á“ÝWÿ6ãMÃ"ñ€×HµRçPí«\…Dó%çtëÆÙ`ûH•ͭͱ&µŒÃK“Ì¥HÕn·Ø«T‰/åW×.C—ÖÇýVÅ¿ŸL½¼Ù6³,¯aÑÍe¥2áF“]¥žƒ¹Ñ<ñ/§Û‰ÂñS¹¹¹á?ù«½§ûŠó‹I§4‹£›+›¯©­ÑJË£}§3>Éž0Ñ•ǧ¯Zù+™Dϳl¿ÄáÆŸ°÷Ý\ Û«ãÓ—õ “Rç'Ñý€×4©¹¥P¹µƒPÏʕ̱¾ÙO™­‡-ÉËõt¯²·‡¡v‘6›1§…IÙSùš°õ’م땓ɱ²‰Áý-…ËJ»,Ó“¹Œ¥y‡Ž«NÛKoû˜§T½2åióƒ“yÁo÷±~Ý-å\áƒÿ?Ýx—{Õ½|ïµ’å ÁD¯¿ƒVÁpß6½«é¯Å9‘qÓ‹í9³ŸÐ•—¿ «»±_‡“ý®Ç$å±I¡„9¡'£Y«€Á›ƒu‘€Û™ý ¡=ýL|Ûážße«v©rÛpѨí)éƒÄÁ˸‘xÕ5ñ˜š×Å5‹¯z—· _‹å&ÍkóÓÓbýŠ»h©— -‘\í¥ùdÑ“5ßÊ»·q•\‡c»r‹#‘·,áqÇN½Û£œ—Sõ­ÚûJñT­kÅjëy7»Í•õvåy¥Úï6ï…ß³]‰1‹˜ݹ±x÷´û]ë+ý©ÛÖbë%‘©ë'Ï©3á;§7¿g¥Õ“¿­¹8×:©qí–ÿšï ÇÀƒKŸk½ÙÝSç°‰¡É”Ž¿<‰rÝV—)©]Á)ÕlçyŸ¶« -óxãCÉÏÚVÁÅ.µ6›gåG»#ŒÁ«£±Ÿ£Êß¼õ½ÿí ·^½Ôåºý#ƒf«ÊiñŒ‘.“9ß‚ÇgÓq‹¹Ï*å•S­÷™ã9£ßT½Gã+Û2ÑXãÃT›Ñ™å¿φ÷ 6¥©ßdÉ{• -Ÿ5ÿ£®Ê“©§Ø©FƧÑÃY«ˆzÉp^ÍÁ×R«ƒ±WŸfÿjµñ¯Ñ·µWÕÓÅZcÁŠŸ€ÅžÛGƒ «‘¡Ôá͉§{™?çÕõpÓ˧,ý…ËëÄÕf­™ݾµf㸛`Ûoû û•í(§Ðé%‘ -‰·ÉÕ¡/£Võ<½.ß¹ɵ±¹³§§LŨ×5ƒŒù®Å[»‡éÙ¥ åÊ«›§ŒÓ õšÕ@ñ“Çž‹3¹ˆý/Õ‰‡­é•­¡•ÇÁÉ9ƒLå¶§Êï±ý ·y½ŸŽç¶ñˆõ¹­×Êá•ÿ~Ã~½–“OëÒ‡ÄëeÍa÷FÕU§hÙÓ—|ÇÕßÿ+‹Q±5fÛÌ£T³~§ë;Å8÷ÓùÙ‰ ‡`ëÕ©uÿ‹ÅÃn¥˜ƒ”ÝͽH¥Ù‹E͚ɫÃ;ågÛØ‰uᬗ¹Õ ÛV¥0—W…È™ƒõ#ï‚ß¾Áh›*9Óx÷{·–ã³Ó¾»Îß$“½sÑgÁf‹KÁ«§ÅÝnŸÃÕås…Ó¹-Ïxã—“fé­£ŸË;½°ã‰ó‡·¥¯¤ûÏí‚©À“"㔋†µ½Ÿ¤Ñš¹Ê™Å¿°ëI›%Ç5­¡,¥zσŸGÍR™‘›Í„Ù_×xÙ¯<ƒÓ½Ùá¨ùL•?áÚ–‡7Ÿ©»Ø¥/Ñ\—’ßM×¥“³%Ód·w«f¥§¡½mÇOé²á&¿Å÷š²Ã>ýj¥½³ØÛŒ™&™²…RÛÓÕΑJíû‡¹Õ`…$—$ù鳩áp¡+ãÉIÏ…‰ÒýAùÊ«eˈår隇«éUщñ^“ŽÅ…ûÑ“ýÒÍ´×`ß¹A§çȽÁõsñCµ+÷VÁñÿ\ízÁÑ»ª¥Á©?Á!íœûXñ‘Ç‹pÏ÷—Ó<§Ì™¥ñ@·`ë3ç+%Á3½Ï’ýÚÙ«ûpñ¬¯ŸÛ;Í -̓çÓÄ™I‘™ÿ¤¥$Ÿ8±£›˜‘’é¢ËÕ|õÁãk碕cóÐå}Ë›µOƒ8ŸÚ©…é´÷ÛL`ç)³PÓÉC¯P­Ô§²çRÛRŃ,‘ ½JŸ Ó²óÔ¿Èóã.Û“¹~ëAÛ„©Õyp£_‘/—v½A‰º¹sásẓ$ùÿªƒ–•!ÝÅ—Ò½µ·|ùKãKj›Âåq£Û·ƒÅ•½{Éß“»ÓOálé2ÕS¿ÝÙC×­õbóÖûié¥ -Å=Õ"Yí û‘Ÿ»Ï߈ËuŸu±Fë«,é`§C¯<ábãWµ}§ÉÌÛï­…§‹s·~¥ß ͲÓ͇ÃÇ囵kƒ™s›]›/áR×~ÛÄÁlù­åÔÛqç`¡Ž¹§Ç{‡Õ9éοU“k‡y»Ûˆ»3ÿU‡»ëÝ ‡:¥¦Ã•aƒ~ùBÑyÛfÛ1çT™ž»½µ[ýX­²³ˆÇ-–Ñ£ÑZÔƒNï¯Û­££M»½Ïá©y¯Ö¹0­C8‡2ÁºŸÄû2K±Å™ÍuéuïÅkMÁ ƒÍÁØ‹X³-›ÃÃïI«9ý^‘uZÏEíÇÿÁ?ëÙ³OÅÍû¬…µßLñ¦á‘VáцÛ㯈фÕ;§!»ÿ!Ï|óí¢ÁÎѯïp¿Ã½E›»¡xÁcï–å/Å*·BƒOéO£¿ƒ‰4½,¥ Õ³çË‚©`‰„í&“Z½ Óm×õÕ‡Cñ‹©ÆáËØ™Ð÷’Ë˦¯Ë‰ûÅÀËq™û<»N»]Õ.Ëß—³¿Kýeá(áWµ‰%ßZÓÖ¯…™;ѵÕ8ÏÝ­ËIÅ'ïÿ1½&ï “¤™w×Ë ¥^Ç.+¿R‘9»"ÉŠùÓdzi¿¡­]¯NÅ— ™KÏ)­ÙŸá_—ÉÇõ·¿6真S‘KÉ -Å›­ÕD•‹×Ûµó¢å¬»¥“}ÓuÁÊÍhµ-ë*Ë@Å|™ZÉAé -Û»ãb÷û"ãT³T™ õ‹••6Ý í¦Ý3“¡d“Ö›µ«Ù½é7Õ]×M£•»4ë#ÍVßw™,Ï?³B¯³ Á—átÕ:Í=fÓ½ý‡Ã2á[×áißÓ×÷&‘‹?ϦïÒßjëaÙË€«ÎËo±¬‹Òé8óËÔ_ñcÍ&Áƒ­)Ѽñ›½í ÷i…ŵ³Né¸Ù‹ƒJ«Ã½RÍX“€ý½¹ïÙ¹Åám“=Ù¸‰‘)±—Í@Ý´ïÉÓóÛD±©W‹³ŽÍ¡Ã¡.׎¿>±‰¡Ó͵Ùßp×…€ßx)á…˰çM³®×,û€·*“¿Évù»Ó™ë»ŸÏ­@É–—¡õ¥Ø“®ã‚é*“Vá««ØÕõ¬çIéºçŠå(Û¤«Â¥½Ž‡>¿µHûk¹­«¨ÇЉµÓÛš£>ƒ@ãn—±Ù?›^½«‚ývãÏŸ¬ùØ»9¯fûMÓˆÙývé}­–‹ ÷f“ÿVõ›Ó°¡“Íi°ÍƒÈ ÕÉÇÚë|ÿŒ‹a¹aë©Î©šË -ϵùÏRçOkÕ›EÑ ïŠ¹ƒ©2«ËŸ9׿³)¡ ç´ç§ã\»•ÅIñ©Ýs©³héTËÕ¿oÇfKµwýU‰X׆ ·…‰Jï*•Ÿýf¯Xë™—ÉÖ­ÅÓ>å4á]Á#׃Éó&Ú—#›žÙ·«{õÙáÅ‘h‡9Gw­Â—£‰ áVÛý5ŸzÃ%±•ûÇãAÙk³É‹°Í0•{í°—Š‘Ù”ñ!‰;ëQ Û+÷ˆ‹w“P±Ù–ýÖ×­(ã°­¿’±œÓ‰µ¥ûQï|»kóF—Ëíw©7›6¥ÈÙP±:Ù7ï[±$í`§Ö¯Ìƒ™í³ÏT«Vƒ´—§•ãv«4±»ÿÍA— §>ïÖÉQ‹Û«nÕ™¥Óí˜Ã“vã—£‚ƒCÕ&±=©¥ÿz§áU×ÒÓ®ã¶Õ¥µXà ™Níaå~Ïw±³ù‰³rÑfßb•l“Ÿ ƒõŽï€õD‡G«—š›Ø…Ë½ØËƒ¢å´ën©b¿Â†ùs·EŸØ‘ná}…ØIá¼é¤“hµ'»}ñ´å2ƒµ½À§£D:›Ï›§‡¹Ï‡Õçhïy…Ý@«@¿M§ÛÐÿ»Û:ÇÙëÏå=Ï -¡££ «Ç‹Y‡6«_Óvùí|kó@ßQÓ–á ¥ƒ‡^Ù3õN¿„Ũי›¡¡¼Ñhƒ•««©Í¿Ž›Í¡·’å!©^áIÿF§œÍÃι ÛÍ•­j±,ƒIÇUµ -­Rù»TͳÚÝZ·Ç«=ù„¥…Ÿ³éÕÁ -ë8ûz§‡ó¥Œ¡ÎÛ®÷a™¸“IÝ]µ…5ý0…PýnÁ©÷¦«i‘ ë)ïÂñ×­o¹–—<ÿ…—4‡0Ý“‹%·zƒŸ’‡§=Õž¹b£É#“‰ãÕÑ¢Ÿ -÷ јÑØ·É‹I«·"Ý -Ñrϼ‘8½…ý²·Åœ•¨¹oíO‘y½KóŸÎÑO¿ë‹[å†åÕ×Bík™¯±ÌáPÿ‰AÑçžÔÝvíŠËl봹˙Ùïb•²›k»Ÿšß ›†×EÛ[ç­ó¡›LTãÌÁ{…ÛÕ·²ŸÍ«Š‰ß3‡B‰˜áýÀÛÂÕß~éÒý=­½Ó™@á¹íÊùj‰ù~4ÞÍí•ÉçŻٵ—ÁQ…Ù]ûNûs«ݽç0ñ ½Åá/í®Y‰y…Ù‹cÇu­€—P±ªµ—Ÿ)ˆ¥iËÅù¥»mãŒ<™Ëϸƒlõ±ë}¯Sé|©™e­Ç‡Ð—ʽ•¡·ÿ#³C­”ÿÕ…Z³ã¹©ÝÈ«ó¡¹õ¿¯Ñ•ˆ¯»ÓYý‘Ã0…»«–•3³2ÏY¯rÏb…£É­ßl…Ÿõ$½o™¡ÝÌ©5û鑹 ™G¹Žß'tÓ¸ã~ý}—dÁ˜í©õa©¼ï¤Ï¢“S±×G›±§q­¶Çžé×ÓÐËœå*ÙÍß(ëSéL‹/ÕËéÄõ3ëýRJ×m›¦¡wͱv¿¡QÍWå ©ÛÏœïzõC‡Pµ$ý‘TÛ—Å\‡„ç -ÃÀ«ŒïžÁÍ©Îï„›'Ÿ‰‰‘¡2ÿ›íÒù¯­d«C±Æ¹/»ãÂëÉŸE™ù²¹…×{ÃrÛ‰`ñÆÁLÅÁí#ÅÏ‘D…r“ éd¹Ð¹YÍcû‡ËË•p눗¶Ã|™Y½¿‰‹$Ý%ÕýÁ%½7ó§5×W¡Í}å{ïЫ·•¾ñ·®Ñ•µ‰Çcû•ŶµµÕ6Ѷ×gñ¢µžíª©»ëcr×7«'•áÌ•‚é½×Ï2³´ë¬…M‡i“–ñéPïÀËVù)»Å…©ŸÀ¿]·xý½„ïXåxÁ"ÇÄÇYl·M›÷³ëŸµÑ)¯‹ùñAù†ÑáYÓ¤ñf‘g·>ÝTó‰—N·‰µ*弿ž©““ùžõ ß=ÍŒµcŸ_•khí*dž…ͳ4RÇ|©V— •+ɨŸ˜·¨»Á÷LÁ¦¥`õíCç“ÜËÍÓ'»Ôß/ËC¥¢ãLÓkïxç’ˣǹS…`óÃ…:õÉ ¿Ë¯'ÁÄ ³lÅN÷œ•48µ•n™¢Ç%ɽ@­ ƒ¥·gÑo‘¿÷në!åCßVõ¸ÑЃYßXÁɢɣ‘L•>—e‘Q«áe“3Ÿ”ùçQ‘%Çdƒõ?ר½jŸË»ÙÅ­cõ…Ï'ÿ=ÓIåu—Xá8›Tý -ÇXÿ—ñx±»=‘ªç!ãJËvºÏBÃy7»7Ç»¨ÁÀûÙ„³AÇ¡ÏͱÑåœñGýP»‚óR§n§Â‹k«žÍ¯³+“Y±¢÷Uó>Õ£ÉÊ• ³³µ½¾‘$ÅGázÃÍêë7ãUÃ*ƒÐ­ ûÄÛ$µ¾ÕQé(Ë |ñz±’­*ÆÍlá’íR›Š–­v¡WÅ}÷%©vÉe͹m¥•›š—ÕŽýtÛBžõ®‘N͆ïÍf•£áËÖóË´—ZÙ~‰™wóg×Ú‰+½I‡Á;×Â¥³Ÿów…Òû³¥­/Ã}©U³©T‘4‰[ƒ -å——%]{Å‹¥»¡:í†ÿÏ»Æÿ&éeµoûµƒ‘‘–ÿžÏW¥|ó]û+ï’ƒ¡ë˹é+ÑQõK¥œÃ4Ó«½©«»XµÅ+Áa“š¡ý¾‹ÌÉ-ýÓõ7$ád—Q­®‘š§•÷±§¦Å«½—áÂÕOé¥ÿ¡ãÙ·½“†£o‹'•`‹!±À«¢ç¥ÿ‡û‚Õ±ïs£‹“ȧ¼÷„Å(‡Ï«LÍ»ÝËë\÷Ê«”‘M»q£Ì&¡¤£ —Ô×Ùû -«sÇ -›,ÑBËE)¡©ÿ³“Éj¿Ÿór…œó…»Ë“»^ÏMë‰á<ïo‡.Áœ‹ á¡åÆ9£H©ó»¶‹„óBÙ®Ó{ÉE÷®»›ã­ñ5Çbå`ï.?÷†Ù÷­ßh—ª‰À¹…²½—Û-ÕÅÍ:¯/±r‰ÎǨËÎÑbãqÉXÏ2÷8™ÍÝØ¿yåbß.³:ý[¹Õ}ɸ¹zÍ(åɇj™VçÔõÙœ½‹¿Û¡LÅzñqé±ÕØÙÕ¿3¥—Í$ù}Õƒ¥<›œ‰ -N™FÕ“Ñ |ÿÀ¡4ß”ÏA¥8óDéyÏÓ,ÁÃx…G§ˆÁ(Ó&HÉ’«W³E¹¾Ó_Ÿ„éï#ÿ¢çjƒŽ÷¿õ¨ÿÖµi¥²£pý¡²×j¹eÙØ½­™l¿™ùrÇmï³Á7Ó¼ûu…Э<½~›£¦ËBá¡)».­¤‡•#­¥­Éy±Éߎ©œ±§ÑTáQ¥)ïÎÙÿÇÝ¿¹Hû-Ýÿ»¹©¬…Ôé§¹K¯¨Ñ6Ë¡Áõ´Q©|¹v¿Ù’Ÿ/­˜×8p½Ö›ÝÑ•i³§£Áçc—ŀϱ“™ÒÛ­áf‹Ï×ÅŸíLû|ÿKÏ&ƒ6÷)™.ÿ³÷r±@óÕÔéNÇÿ¹Ë,GÝiíZ—Ÿj·ËÓv©&ÃaÿÚ¡9ѧ—ín£3·v«—݃Ÿœÿ I¡»w¹ÔµÉ×µÉgëš§„«Ï8ÍÝÊÏ~±ÊËá£Û–½Ã?¯Òñ«·pËiõ‡«Žé£¬§_½Z—™ÅoÝKÃuïÝd½˜©Ùû[Ï×ÕŒ¡>Ù˜•JÏeý{ÁÁÝHÛ¯ÅU§ÁÕ¦¥g›–õÃß2Ë۠탥¹£Ùz™}×e³$,Õ»é1£gÇté.ß×k¥?É´É ã ©\ëp¡ ã¥ùË¥ŠŸý4Ã+Å›¬‹TÁ6ùˆ“Òå”Ç<‘_¹`µ:dzÓ2•~Ñß …㙟¸ÃÕ±¿z‹yÔ“ž©‡8“1…*ïTû:Ë­ -ëoµ‡Û}ÙDñ¥Õ¼åÀ‘­‡ó5ÅűMçußísçp©{óÑýƇ4·#áG‡žÅU›m±‚Ñ_¥SÙd‰~§Ô£Íç˜mÇÉÑû9ƒͦõ—¹>ç¹¹œû¤„ƒ©Ç›ÿ£u§­ûg±‡uåÃÿ2™’íNô¿ÿ™à ¯1™…•·€…••$÷NóËd©“8Í‘¯³x‡»5µ5óyãã7Ñ‹•zã=#ŸÙ‰z­B…óÿ,ñd‰§vÓ©*•€õJ‘b“²ï¶—×ãZë£ÍÉÏXóC³žƒž‰²…_±ZýÕ™$ÓÙ¥¾û*ó–©Åÿ9‹²ÿtQ¿ ³#Á^ÙT ›™á·£µýÍùzÿÁÙX« œÉ*ݰ¹¥É»­lÉr¥FéÉ"Á¿Ú™[‹CÕ…]íš‘ËÍÚ•ÇÇχwŸŒó9±B£†¿Ù›DÍ¿RûÚóŒÁJ§ƒûÔ½…¥Ó.“i᳇aµ»­°»%ñÓåBÁ´‡ ×¥'»º¿-“m‘À¦ÉëCó®ë˜ë¹Á;ãXƒ>ÙMŸ‚§×Í5Ͱ“q½É‘ç<å½ýTÁdóã,˽¡o—Ž©z‰ÅŸ—÷“•ûãߥùÅjÓ"·DT¿¬©­Zç‡×"éØÑÕÛ@ÃU½Î×ó ãÆÛ¼Ûµ§•v‘I™ç£¿+Ç”½ ûÙ“`ùÓïC£͸ùlÓűÃÛ«‘Ô‡ÚûOÅ"¡ªå¢ÙI£{Šõ¼“¶ã§Ï„Ã^´÷R¡t³ iý ­rÇnÍ~ -×§Ÿ£ãGñ½½ÁÙ󊙘½\Û£ÛÛ€‹u™Ý0ÇÊ;±IÃ¥ïNÛ¸ù;—«É8ó½­>›9ÃPƒ1Ë×™!¯sÏØ»”±åŸ‘?÷–Å4dž‘o™M銕µ¿{ó(¯W©¢³½½®ù§ÿs×SÙ.‘t• ¡´éGXuùÏá‘Ë_Ë¥ÏtÛt-·tí¡<…q¯?Õ‹— 屨‡nÍÉñJå®ÛŸY‡Û…­“Å‹Ÿ™ ß®¥ªËݳ`«À韱‹×£å|õ£·¶Uß—óÎë]û±Qã´Ïmwõ²A»ÀÑÙ¦‡—*ÿ„¥Â³¡ÙÄ¡7åç ‹_µˆÛ‘¡A€Ùб€å>¥{û›é…+·ÊûvÙ£ñ{ý¹ëfû¦tÛb퀅…Ó´Ý ¹‰w‰Rï!—Λt» ÷¶ýÃÅQé6·¡³‹Çyåe«ÌñÎãSÓsãíA‡½3»@¿»`ÝO݉å[·\±˜ÛŠƒ²Å·Ù‘Í¢‡(ÇÑ‹ Áx¿lçÚ¡ŠLjå Åw¥Å©ÐÛ*ÏU¿”‘B×0"¡j³åËt»1Ó£­´›ˆˆý•w«ÚƒgÇ8÷,½1³d“Jh¯œ‰,‰Ôë€Ï©aíÑ'ÁUÅTýY½Ëd‰©w×=›¿÷jï˜ó-ÀÉ¥‰@õ/›Èñ§»¹á9†å"¹…g -™^÷¨¹ÙߦÕ¹ãÀû¥Ç[¯žïƒ·5ë^™6ßÅ¡·´Õr¥eñm­ÿNÙ˹ÙÒŬÉÓÅVÍZË4Îá®Õ•­3ËQ•“£²‹Ç£¾“/÷¼™õœé ‹5‡¯Ó?Ç鬿¯:ë=—›© ó¼÷¬ý”£,¥¤ׄáwÉŽé†÷*ùbÇC‰m‡ªåfá'ù´Ýµ¿²ÍÇ÷ óO¹ -«ë“.ï"é…³_ïPù8ÕÐï}«¬ÑŹÍÛ¨çe»Gë9¯R¡ƒ™¬ÉåÂû=} ¹5ÁÇŠ‘`»ÿ'¯uÑ‘£•xñ¨b“‡» -ñHÏÅÛM½OÅC•uõ(Á[ç¾Çãý>•^û&Ù‹Aéů’³K±JÅRËpA·9ƒ+çù@›!÷×Ï]£ó¾•g“«Á~õ^÷pÁ:ÛÊ‹VÛFÑ7«ù€Á•Û(õ¤µ/Õ§¹3¥*§½­%홯} ¿¼éŒ‡V‰Ñ+ÓŽùpÁËPµ¡¥‘“‹¥›‰šóa»Û×@ãõ:¯{áʉýÄÙ×±—ŸÑ…šŸsë0×®»Ç›aƒX£¶ÛjÁ Ÿû{ý$ÑçZÊ»0“Ƈ_ùy©9• °ÉRËÏÛy‹zù¿­fÏÀí›S×Lÿ§.Ý‹¡‹óU—Ã/‹¡Ò÷vý´Ë(ù—óqÁ*§2í“Wß‘dýF©Ã·.…Y·3«-í}ãÄÃ’é‹çÐ÷cѧ›4ùÆÁÔ¹9'ƒBËÊ­EÉ|…HÕÖ‡KÏã–å¡¿¯‘Ùçsó“Ã'Ëg¥9ñN› åA+¯ÃA“+É×ÅçÁ»CóÀ¹ÒµØïŸ‡Îψ· å‹¡ Ç)ߊç@õ‘m×±ÿÁ„ÏÌý±¯Ù…”å)¿E¿$ÕFµÖA7ÛÝmïa÷¥CϨ­.û#ǵÕº·s£¤ÿR™½P±[õù¾—0‹Pï¨j‹•Ê­;«Bç;¿W¹Ç…@×vç>sí[ûC…=µÂñ¼‹<ólåÙÛeÁ¬‡ åØl½ÐÉ)—Ÿ‘›ÄáZÓÓX¹'Á¿‹ÓáÀñÁÝBõUïѳ5¹°«¿±C—Æé˜õßa­¨ç§ӫX§a“bó̇¾‰Ñ•PÝÝŠë-¡]¯°«Õ†éŽíP법·×›hÉ>×/Å;ÅɼÃM¿Q¥¯±ÁãËÉë(•®áÔ÷“—‰‡ ¿®åÁÛ•ÕªÉYõЃ¬¥ý“Œ“ ËyßS‰»›Õ•,—+¼…‡ûˆë³¥Î‹ÊõYñËU՛ÃÍL«P鰋ك˞½TÝrï%©Ë¥q­'Í—ù“³ ï›ûwÓBŸ§ÿÍ£[›UÉnÅE½¶Ù éÀǺ—>•ÈÝ`µñœË·Š¯@“zëÈ·J½U™Äë_ïh£Ž­×|ûyãݹjÇZ÷Ô¡Ù2¯eÑÍÙ“Ý.Ñ96Ÿ'ý'&¹%õ=õÅÃÅ­Ëe¶¦µÛ‘¨÷¢‰×ßGÄ××ñµÁ ƒTëqŸA£Óß©Æñ"ÇÕ ß1ûª½ƒ\«]¹kÇç;ýyƒ*ùÉW­"é©ÿ¯Ú½Óëv·P³õ ›Û5óxØýkãÁ‡Jùƒ÷9ÇËÓý³™Ë޵aácÁ§õµÆé€Ÿí!É'© ±Î‰©ñ3Á¶ã[½r×&§Aý9Ý6¿dõ¯‰>ÛÉÇû1¯j‘2›N»»ÔÙn·¿¯xÙÑã¬Ó©ÓVÿB(Õ)áNá‘•¬¿‰™WãIáu¯=hÏÃ×Óõ‚ç9ñÚƒÁk³Zó1¿¯«ÉïnÓp­HåÅ…‡%÷‰Û!½^±™ã‡å?ÕeÕZûY½W¡Ï ÕTç_ù`ý±¿7ïW§d©·£›ý›¥mã ýçiçÄ»u•B÷Ë'¹dó’í?ÛÒÁ½NÝw©G·…“uçdݯµ¸…·×ií—“ …¹q‹^¡ „É ·dÍ4ƒØ¥#ÕͯÝf—@Ù¯•‡r…Nåj×A±µë¤ý‰a‰LËš¢Õ·Ç*·ÿ|Ë0÷l©Á˵¤¨ù£RE¹·‡ ™†»U—ÁE“[ï(ë`³>ÙwØ»ýÅåŒßÙí̉‚ßߟ‹Z—wß•‹Œ…6ƒÔÉo¹=«¦õg‘«õo÷žÅ ‘!¯¹ƒ±Ÿ…Ûmu™Ôÿ-ý_¯C¹4ËK¡S!¹”Ñ^¹á)Í #³ƒÏ¯0Ù×ÏÍ‘£wã¯ÃB‡ µ åcχ£åŸH• ‡Ã¹ÖÛÙ»_ÍTßi‹ÅÍx™P§#¥jÁ+És«©×Ñç„ã¡“Ø¿ -…¦ý!¥ÔÓÌýg¯Àá·@ÿ•íÚÃÇ…‹å “n³ƒÑ8›¹‹“½F—-ït•”¯›û³ŸÙ8ã)·hËkÏëx©’ßDÅs»<£¥Â¥½ˆÍÍå§OÉ?•(ýZåÙqùVÏ<™Q“l¡›«ÕÑ]äõ'… -—L©ϲ÷™~ýuý%놽ŸŸ~㦭· Ñ×T͛ǗéÂåÕ€©X·¬/ï®çËýÃå²µdõQõ`ݸÓ³±š½Ñ x©Ê©Ñ±O»)ë¦ÛS“÷ƒçˆç¦í§;ë¼áÏÁª¿˜á¾Ñž÷ÿ”·mÝP•»ÑÔñV×IÍ@ÿ´—¤‰§Ÿ¨¥n‡ é5§(Íß™§%’¯"ÑÌ…±õ‡†“2µS¡¥™nãÓÿ­Ѧ·ió÷<»—Ï1Õ«½Û—8ý;× ³V¿r¯ ¯(§¿üå+Á€ŸIݤ³.‰…µÚÝ–¿å7÷§ªŸ ÝÛ|ñʹØÑÇûƒFáÎÏÁ½Ç?÷?Ïq¯¥õ*펽0×F¿j¡ŸŸ™g‰ÇÅí¿LLý1×q£ÆŸDß“¥·ÌÅuïÅ­³Î‰lï»Hƒ¸¢™½§9×s¹Â±Ç­iûlÇ߃…ñnËĉÕÝš‡l“‘ŽS¹$Çû­Ñç²É[Û‡1ºƒ{ýá4åÏÇ}•tûƒÓnÑ«ýˆ½jHÕµeùשc·$ïÈ÷Šíý‹‘•"å•Ë5‡½§³›Ë…%ƒ.ÛœˉïËó)ŸßPÓE±Ö¶Ïu¡˜ÓÇs›£ÓÎû““¾ñϰ™‹éÍŸK­Î½y·¯ËÉí\ë1™…ƒ±‡Hɦ‹ï$›ãÉáו¹´åÁeÑ™±õ–“¨ÿ¿‡"ËS£b÷SŸ•½-ù ½ŒÉÆŸÁŒÔ…Œ» ½bËZßͳ!©NÕ[§¨Ϥíÿù]ÉJ÷6ߟ]ͧV­yÍ·÷qçŕϯϾõ»–ͬþÓ9­±Ù{ýÏÉÐù•·¿œÛ¿³ óÈmûµݨÿu“ƒÛ µÓÅÖѯ›vá%Ý~½›­½Ë¥ÍŸ:ësçɳù‘ÍŠ‰¦Ña­ÁïMû?…’Ës‹=ƒ¾©=ÍDÓ •TóÙñ÷‡[…cé +¡¹p‰ÑÃ1¿ÇË.ÍË|ùe‡{ƒ!Ã]¯ªÁ‚‘áÁ¿bûÖ‡}…>Ù*$ÿ²Åv»?Ã=ኩiŧŽû¸¯oí×û3¡È«wÍ<«§”Ù!¹"­7£Wá3±¦Ùõ¿BդˋهW­À¡¥c­gÇxŸ0ñ ß°ݪÏ£Ÿÿa×ÈÑÓÆ¿?•ñL•£·•¸F¡ÆÕÒ™#“¸ËŸõ›~“7©ÈÏµÅ¥ÓØµxïJß:©¦ÃGÛWÏŠ‡§ßs­Žë±Œ·á|÷¾ßÉ«F“Ué@ËÚ¯€¬ÿ)·Õ‹ƒ õÄ­³²±6Ù۲采‚ÿí@ÕMÕbëhå5ëg‘O½“•ŠéÏýCµ˳·c˜¯¶¯„¥‹ù™é£ñ°Ë|¯ÇÑV -ÅÛ½Çw‰håÚÁyŸÌßÄï5ƒd×чש¡’—­«†·Â¡¡ÑŠ¡•)… Ë å^±‹…¤ï¬ÃEÏ%óŽOË`ÁZóJ¡¶לóG᩵‘·…ÃåTA• ·Xñªés¿ ›óõÆïÝu׉ña›(ÕÆ‹Ñý¿ÝÚáѧ¯ñj—¨ÑCƒïB‡Ïë¡"›}Uõ4±^ÏSÕ´½³ñûÉáÕ“\Ë%ý]× õ2ËË׳—åË­aµpõ…‹»Ÿ¾éƒ•Nùá,“ÅëÁ=發•|ÿ"£°—&­‡óLó¹õuéßO³sÝ¡éõÀË]û¶åU“Ôsû±‰=Á|…FáÓÝÁŸ¦­¯§BÃXǦ“Ê݉›pñ åEÁ±Ÿ‘Ó™Tñ&µíÔ‡,¥_­Yï˜ó'…5¡z¯;£#ùŒ¯ -¿Îïm©jÏz÷«ÿËGëjÓNíˆË×N·ÄÉNc‘|±+ §°—“­PÛ‹Õ*íý——ŒÅ験«ƒ˜÷ÿ¶çŒ»­9•¼Å ·çûd£½Ç‡˜³»A‹¼™Ž‡Í»‰ËN—/‘^Ó‚­D¹š¥±ÑÅÊë4ÙŸ½“Ãd¹§É€ñbµÇÅÓùމž—»Õ_‹¥qƒeÍ£ËH©:—¯M¥ÕÿŸJÁX‡——ÉŒÁNƒ¡™›zýpÃV¥Ó`É_§ËÛ×õï°Ó›¥´™%óɧ ͇QýÑ›o¹¯Ǽ÷åZ±Ï»z‰x“µß&Ÿ£O£"ÿ÷ý?û¾±l‘ÄÁ£»BñƒÉ·­¦Í…ÌÓñ·Óºó7ŸRË£@“³ù¢±Í É]»dÇŸ­Ýù:—rûºN—_¹,Pû0¹ÿ‰³å#û™«Ôõ¾ÉÁ‘iƒÃ¯¦·'›.Ñ.±Í•ÆÇAë>•j™çzßoÑ>·OÛuƒ»ßk½ÃÑ&³˜¥•ĵ gÑkïÏŸ´‘¥ß´¿Œß½k••×%ÕÝ;‰°õØÙ±ï¹ƒrí÷‘ã玻‹b…¸§0³0‰6‹ÈÁ¸éZÅýJ©xûÊ“·ÍHó§/—OÇšÅ$™\ïŽÅD‹:‡Rыԥ «jërëJ‹±ï‘®ùñÁÌ¥Æí:«ÓrçÖ¯.¡€sñKŸc…®­º³SÛ4—"¿ÖÝ$íVÇh8·}ã«ëµñÍÏß·çµ½‹Ó×Í8­}µ"÷Hÿ‰Öé­É÷‚ãÚãcá¤å¤£çÙµ·½<ý&Û!»ÕÕïq¹ůÉ·«Ý(™Ñ©Å?›¤›Å·1ƒSÉ¿ßËß}ù¶åh…Ÿ¯—]¥šñ¶Í*› Ƀ¶‹{…Õñ½¯Ð¿pÏdùA¿T‰|ó ™-õ­—b¥4¿×Ÿyÿ“­{»¥+÷Áµ­…¾ýÔáh…Ï[ë…ó·Wç&Ï"ÓŒï¿C·˜¯mÉ—€Ã{… ÉÝ4å -‡µ•.Ñįÿf0ÕC•–—zϴ󿓘ñ8¡ƒ}µCÛŠñÓ•ûƒ(©f½Ù¾¹Ñ/Ÿ$µ‰™]SåÎÓ+ß]ó^ÇE‰}Ý·ƒq—cÝ=‡kƒߢçÀÑDõó³Ç‘¹D«<µ¯‹j·;‰EÝÄ­Èå…óoßœ“E»&‡—¡ÕÑtù‡YÓµïʼn:óœ,­‡É¹wÏIµ)ç1ëT.‘Óù©‘£Ä÷XM…uñ®­AÃÏ+¹y§£ßšÇ7ÛX¹*û!ÕKéÓñp£´í­½e™c»ÙÍÑ£^ñ×u³°—‚ÁB¡q‹¯í¼ÕÍ…`áɵZ™HíBåÃÁ†ó§ÈÝ|™³ÓÏËà ÉÃѱÑ©'»$£C‹«ÙÝ£ã×Xí7ÓÒ©Yá„»~…,¹‚½VÕP>­ùië‘‹,·Ú¹ƒ—¢ËÃѺñ~ÏÙ›´ëXç¿ã Ÿ·š£Ù÷ÅíŸpßnÉzõÿØ»ŒÝ¯i“™µ#ƒªç ÃÁ‡±»Ã©£Ú—œÅF‘½µsù -ǘÙ©ù{ƒ\•&×2èãxÕY›Yûoƒ½ÑAŦ±/õ›ñsÙÚãVÁ`ñv‡…ÿlÛl©(‘Ãñuƒ€»\ùkù‹Ï®á{‡X§é™·Y±–ËÇPÑΫқ²£é/ý·û^¯ŒÛË…hñiÏ»¼Å¡ùÀÍÙ‰‰…¯ó}·+½:¡Ã!ç³±PÇÝ‘˜ó€…TÍ•õ~±0ɰ‡‡­•ç\ãž­ÓŽ…JéÇJµ?ƒÇÛCý•ÃŒ—éQÿw×wǸû™ó×ÏÃCû ½qùU‰ZÙÉ7µJ§]…}ñÎÙ%ñ‰§kˆ«tÿO«±GÓ½kÑ~Ùe‰Œ··Î¿^É ós“g¯K ó¯t¯§ó ½Õ‡NÕ ¡Çp™¦§eÿ±sÏv•}ùÍ{‘H±X‘ZÙï·§ñQëß4—»†ùqç¯*‡!Áе¨ŸWÕB‹À熉ªÙiÿ<­zŸÃáãáÍÏŒ¯¿a¥@·GÝ©ýiÕÌ€˵Ë#¹é9ÿDí3ížñXó‡߉Ï¥›¶¿JÁÚ­‹)ÛÏŸ•’ýµÿ ÙlßÕçÓ£1“ÙáxÑ»Ù}ÏŽó+‡W¡ ã:õÒ¡@á†Õ‡«KÙ ã^ñ1™ªñFëýùƒQ¡õ|¡Yé[ÿ§—V¯¯‡ù”ïˆÍ‚ý¦Ùží¡ÇÉ,¯Æû•˜µ³m·¾±Óɶç^ó›ÛÎÓœû¨Õ(©ý—ÈÓ0¯ÉãÅY™Áÿ˜©Òådù$ÈÁ/½Ä·q‡fÓϫ֫+»Ñ×pµÈÙûR'«Iû$‹MùŸ&ÕXÙ9¯k»ýÙño¥ËÐËLۃǩgýñ,¯‚0ùm—ÏË¡ÏFW…0§É±©"÷Ï×…«zçWÿ ‘=Ëf£Gñ×Îévƒ“»Ÿ¯¥ˆÿ«“%£~§§ÍÄõ —¬±Ä¯8¿ñD§ž±¹}ùPñE¥°›‹»í8³–ù'·Ï³À‰Ê± ßfÙƒ§ûZ±ç6“j‘#å3Ūß½`ó ï?ûK‹ µ–§y·_±-çA™B§?…-‹}« Ñ#Ÿ ëtÑ!ÏÖ›-›:ßJ½©õÏÉÀ×£ ×·-±kËYÏ»ÝpçSÉ=•qýº…"›¬¥r±A…ÃÓùI›¼ñIÙ™Ù;Ó(Õ§ë–ĵ׿4ù£— ù…áÖå¹ó²Ø³È‘ -¥dëÖ±.£FOµ¹»¯Ã.Ý&·íDñ¹µ¦©‰©Ç£X»³p¯Âɜ峑¹·“Ï­0»©‘æÕ…ãw‹@µL™¶—±¹ÏûË»×ÓaS™£cᇭŸƒn¥Ö»t‹±¯wÏ7ÍQõf‘¶¹›Ý!Å¥®­4ÇWû}£Iµ‚ã_³ŠÝLó¿CŸvÅKñWáT÷‘°ÁOׯ׌çÙ¥:/¹ éÃß±•‡™³WŸ–õÖ¡c™E¡K¹R•§ÕÚÃÈõnñýw½=ÝAÁÃÿº¹E™Èǃï §H”©×çÝœçŸËTÁ¿*ã¯ï4“-õƒÍYå£mý¡½Lynù·ñ<õŸåñ¤Õ+±ˆÑ¥å6ÿ£÷P—Rù»Ì©†‰GÍ×…e«£óÆ»ÓSá½ã’ËÆ¹{­“á”×hágåÑ£Pﺙ«¤¿F—رqëO¿Z›“‰'õÉ‰Í X…¼ñ`§tã ‰¸¥vÓ%ç‹Ɇ÷Ò™Õ¥ƒ‹HËbß³…4µ]÷ëN‡¤µÃÃá -“&Ó Ç;Ÿ¿=ÏÕõ Õ„›ó¨€½b™v¡J£“£t»¤çÇ«¯—¸§<ÓR£h¿%ÝŸÿp¿­œõS•5³ÿE©.¥É¹U©PÙmßCåvƒÂ½+á°ÓÓñÒ›HšÿÆë™yã¢ï8Û~©e±|õŠo£­Ç!§6í6笋g¿¾å‚ýÂ×9½ Í3‡íºÇÇý„ý¥Žÿr±¶Ń“KÙ¿¥Ñ‘¬±ËÁ¨…|¡DíÖëGím•°¯cï¥çÆ¡‰ÍûSƒ_å×ë‰N×V«GÁ9­µ£… “ˉ8óSó=Åi‡ÇÙy¹MÙŒÉlá™+ÁCÕW¿§ÙÁ›nŸ­Ã­Uª… íÆµŸ#ÑUÇÍ÷¬É»{»œ¹Vá6¡¸‰ÏÁ¾•Qã&½ó`í±·(¥>Çr£ÖÍ"ßÒKý¨ñtKýr‹Äé~ëzÝG¯H¡ZÁžŸÔÍ­ª£”Á¿ñrõÑɺÇÏÇÿ80ÓCïijÂӨǟó¿#¹ÁÑS«p™íq•ÒÅÙµ¿ÁÓµñ$“§ÁÙÏo®¿–ï/ɧ©¡Á4¡‡ïÔºû¿–ÿŽ—m÷#‹7õ§ßKåpûmDZ¡­Xµ9‹]£¢íQÓUÅ7íp¡ØÍ1Û¹6½tù2§–ùDÅ`›®µ‡IçlƒjÍ)óQ¥¨•/Ƕ±ÂÏ#Ÿ»G³aHÙFë"ß!ÕÁ®­^ѪóvÏ>õTÇMç¹ÕémÓ@—PÛÆy·Æ‰cÇ“ñe½DíÈ‹\ï[‰V«}ϺÏ_±zïÈÕÏÃÝÏßAÑ:÷»gíαé&¹(™ˆ¹¦ÅHóÅý ­ŒÀ•9ýhŸ3û‹³½uÑŸ1Ý}‹™Ïgé!ÑN£4É©Å@í’…S«¥‚•ºÁ_ãÖßÏÛéEÑŒïØ½Í‘>סÓtÙ¬¥•‰‡¬ãÃ&ÃáÙË­W§¸ƒ4çL瀯Áù¤­Ö­„£S©l÷©ùnëM¹Äû¡‹Ë8¿À«Å%›Ó3£‘Éšß—Ý¥õžõÈý¸ñÙ­»'ß\åµà -ë—•×Ï ½·ã“Ù¼ÝJÏPÒ¿Ï ¥!‘~¿³·‘,™ÏÅ·£Ý“½µ·׬ñ[©1—Eãu³×ã…Õˆù!«6Ťí‡¡~Ÿtá:£Kã@‰£±£ƒ“d½»ýD¹PÓï¡§˜ë:ýaŸƒ-‰f몓ÕéŸÕ¢ÓTƒ•Ù¢Í,óI³ƒ¯ŠíÑíGáAíKŸdϽp©Â½€§IÃŽù%ï{ãÈÇ„‹BíÓ÷oëÓË6ý8™=¹Ÿ-‰9´íσ„ÛñÛ·…ë¥l­Nñ'݆í¨ç ˨½g߯¹£½Mç·n©ÄÇõËF§iåXë„v™u·Ÿ÷€Ù&ÁÕ#íØ…«#×+éÇáy‡Ê•0§pé{Ç#“ϱ#‹9¿k©“Å’ó"§c¿YÁÆù …Xǜ՗ÅÎå‰Ëx¹!¡ñk‰­»S§ÉbÛ‰®á‰»™kãl³}ã¹ï&¥±Õ±®åM¿û~•;»sÉtÛ]Ù[Ï9™»•<飚í Õ»E³{™¡±·Ÿ¢Ç‘¸±«Ã$Ń¿ûµÁõ%ñ½xÙ¿­LÿÃóÕ…tç"ívá±’û´û–¯”§"ñ³ÙV›ª“Û‹0‡¡ÿŧ¹Å¢ß««:ñ“÷É@¯–¡ço•´Ñ˱oÿ†óAÕã!¿0‰F…ÁÏÑ¡¿í¶Ç§ù¨‘7“ÃÑ4ç7ÇLå8ûÎã€O‰ÿAéÆã>½[¥ß¿Ù§µ®§[÷ŒÍÕý™4—»Ö‹©m—JµÐɱñ‰œ—†‘Ø“.¯±§8ñÄÁ¯_É­™8É…ŸºÓAá—³Ö|Í£5ÛJ8¥Y· §$ûA‹©‘»¹x…kÇ1½ ÛÁ°4õ³¯¸¹ŠÛ8å“É»RÃÃRëÌ¿©Ñ›KËÁóHÉ.é3é=¿8£ëi™iÝÃJï Ásµn‘z§©ñÃÙºóbëk·»aȯ#õ8±i¹Î¿“?“ÇQË{¡Û¡&ÿY«gÝ£E›;›A“££˜£6õj™*«Ñ(¯³õRÙϘ‡ÆŸéÕqÛUñÉÛZ‡ÏµzÕ{‡dÙ -çõ;‹ª³9Ën¿¦÷A͙ٛכ%yÙšíŸÅ6‘;ÙN«ѹå·4í•õ·‘¡-Ç"Á…nçÍjÓ]·jí5‘{‡ÑùÑË©‹v‘}ã1‘@÷ éC»w—?¿´«§ë í"›Z§¬ïV•ãÑ“á=‹¨ÑÚ·VÍ›·™‘"Ë–¹ï—…Bñ Õp×–ªígÑ3­·ªÓ -£\ÿQ· -›Öÿk¹Bç‰ç±Ñ=­¹ÉÒ­Õ×6ÿÂã -¡×ÛŽÍ;ñÍr¿)ëÿS§…¥©Ïƒ¤‹Ðɲ“Íﵩ¹Q‰]‘l›eáÃÄÉ¥õÚÝ^ÍpÕ’­«Éa£8ŒÛŸ²Û©Å<«U¥×ßIýšõ«¤å«?‡5å›0»Q³@¡§Á\ùCÿÓ™ù¹·°Ïy¯ÇÒÓ=µU…8ï]念xýÉË-ß…„“­¥OÕE·…÷3‹Û‰¡[‰S‹*û5õ°ý`—°“ «3²Ÿ+ù4£Ø÷ÄØ‹‹½‹‰C³*¹G¯^ݶ± -‰O§¡Ïý ›¡Ó¥õMá$ñ2«µÎ­K½ ½Ñõ¢ãRÓ¶¹˜Å#µ‡+ÙfŸ7Ç—ÍÂÙÅ)É£Nµ\µŠ§FÝ ×Y‰¥Ëmá‘ÒÛ)³û—¼‹¤õLûןóÄÙaµNÅÆÅ‘‰Õ‡?õ ñ±ëPû ›ƒý»«µ^ýœ¥϶¹T¯ ñ;­É:™•™hÿW™3«™ݧÛ0¥ûU»e~«^±‰!á\‘“ãroßµy¿s©O»šF•ï<ïjí£Ï“ÃÆ¿;Ã˧’‰^纫Q¿ÛëÐñ–ÑYÁ޽4—ÛÑWƒÊ÷t›u¹L“^§†‡$±mÅÕŸio±×ÁI…›aÝ'uéJr‰vÃ3½×¿½ëÊ—'¯4·‹Çz§N·¦ï Á2—“{ù=©¸\µbã?ÙvÉÙà Ä×Á…‡¢¹Ùp÷]é]ã†ñºÝÒ©»MãØÙUÓÀ‹Žñ0ÅõzËÑÃD‡·¥Ä럋¥w™SÝÙׂ­¢Ó©™Åʼnû§ÿJ¿‚±‰¾»jÅÇ·¼¡Ë‡qÁnמ™Û¥Õ½ç±hÓK‹µáÃå]Ã8…&ÙýEÑ|Ï^×ÔÍUán˃&ÖŸ¡»¬Õ¯÷KŸ¥¶í+ŸÆ¯»nE×Kƒ¼Óh“TýqÉMçg‹m¿\¿ ™Ç¿³Û{ŸõÏC9§&ý"™Ã…žZ»Äׇ›5ƒ³"‡¶ɘßr•¦‡ñÈ“o¯gÉ ÑMÍŸñǯ½·¸Ñ߸÷ÉÁÇÓïÁ»’›&“0Ç¥Åe»Žå»DŸa÷+ßÖ¯3¹nç¥WÓ·ç6‘ÈŸÖí,۩ヒn¯‡™ÊáoÙ ­:cÛ’•žÕÀ¹áÒ£eóÚÅg›«ÿo9¿¿çC›³Œ‹Æ¥}­¥¡%§E¥~õºåF³Çï´Lù[½%ÿ™‹ç.³å‡¡ -áSÑ`Ë»oó¦ß|ƒc§bó0“чt³Ã9ÿË£.ߤ—y‰¤ùTíÏië{Wñ‡ØÍÈ“G÷Úÿ$“rÛ¬Ã[óÝt“鱩¿$»‘ÿÇIïýŸ¹Fá ¤ƒÝɱ2ƒõ@ߨ—s…b•o—‰ke—3©ç®¥Nƒ%§ -­†ç'ód¥Rͺ©‡»ýIó˜ÿM«ª®Õ-{‰bçVãl‡•é#‰JÅï¡Ä÷‰MÓ;ÃF‘C‹r§l1Ù€ë/“¡÷£ûL›ñÅÓÇ×]gçΉ$'£Ï—…£—åÌÇÔ¥\ƒ‡Ï€ÃÚ…“´ƒm§`«×Å µ¶Õ7ƒ«ÍÔ¯ת½‘¿¸‰ÕÝáJÁMË}Åõǹ+é¾ãNÚŸ6é?ëEÛ°ÍÀ×DÍ“Ç=¿P»2Í‹‹x±íX¥.ÁvÁ>㑇ÒÅr÷Ø‹8ߪÙ>‘†û§ÿ±›·±­ß­‹~»|ŸÕ\Í̧m;׊åSÕ0ãˆï:©™‰ç×±…·TÁW½"å<»´§Q;éA‡Ë1±°¯Ý™×ïë¥A•À­~ƒk÷wñŽÛg‡š­2áÐû‰£/Ù)á×E-/•㿳¦D Å/×½¢ÿÈÛ¢»á5‰÷\ï2É‘cÓ!a§z‰"­ŠÑpŸ×ç?ÕœåQ<éSÑ*‘ý¢‘«/Ãí’—½é×3ã5‹+³Ò븕«¿[™2‰ £¸‰Ÿ´íc¿~ÃbÃ_ïÓïcóf—:‘:ÿ¯³¶›$ƒ#“±Û1ËÇï-‰³ÝCßUc›M/…y«¹™Úó4§‘ï̵u¿ƒå­©/ûϚݢӬ¡ÛÑœ·Òëm*—R×;ߘõxÛ”§rõ1‡MùÍùÚï,¥ÛË\ƒ­ ­[Ÿ™Jó,ǰËÒáD«°ÍIãбЯĩ4Áb‘åt‰¶“ªñݺ»-¥3ï­^× -Ç`›×—Ñ Ã…¥¿ªïÙÁÇËùwý´¿†ýHÏaÍÖù"›Vﯵ|ça™‘•'ýGÍ–µB­‘G½>Ã,©§µŸ‹·%ï`££Ñûž­›÷›IýmñÖñ%µ3ß?ÉU¿!Ý9礿“ÏË„ñwRÝ+¹ªÓªû”—ËésÙ ãpÑßmÍÉwù Ù/»£÷`«o¡†»»¸÷ÌÉq•VñÌ÷G••¥‹ßÀ¡¾÷=Õ¸V¯6×\›šË¹ókÙ¢Ó\ó?‹œÛAÿ½ç‘‹´·)¹É•™ÿ¾Û…‰UçkƒœûGíSá £<Á‹«_«>ñÔ…‹LÛsÉ2霑ž˶‹ˆ¡Ã—a³£™ÆÝNÕ «xµ ›j™¾ûÁ‹ËÅË£»¯V¥ÐéD僡‹ßu÷$ûÀíÉ¿.ù^½²á#‡¥‡ÿƒëL­×ÉÁ]ÃÍ!Í®™§1ÉDi -§´Pù˜çšûÌ¡ÚåkËr­‰7ÕA—Çå¸ÿ]ß’ý6³’Ù†ãÃ÷E™{¡šŸ¿—1ó£ÅcÅŒ‘&­£‰-DÍ?ÝlÇ9ûW™N‡E]Ù²û¹ýs©ù¼åïdó!­Û™õ÷‹ƒ£=­¾«¾ë·!½£ÓƒÙt•Û¥íF&ÚÉPÙ5»cÏ¿÷k×¥5õ©Ñ}©‘‰ÉÅ~Û»±žÛÇ‘ÏsÛ.£µƒí¹ëb¥™™tÿ^» »™Ïf—¯5µÏÔ©´‡–ù’ÙÇïOÍh¡‡ÉZó¶÷2‰ùÃí{Ý•±4ïuý Ÿ1•Ž‘ û@ÁTË ‚£yó·¢ÏO»!ÇeÍÒõ)×b«—g©Lƒ‡&¡55§S³f©¤±¤±f¥½‡É“‰Úõ†…L×PÉBÙoÐaóžý3¥ ‘¡§Ñ‡TÇ´ç~› í%¹Û£7Ï›PÍtå¾­8·½*’…ǵˇ̻Ðù3“‚ŸÙ#Ï#Ÿ·—ÛªxŸCŸÉïãʣוOÿ@…s£*Í.“ÅtÙËí³í.Á.×—ÏájÁ»±£9‡):ß*Ç_ƒ¦ó;¥Ï“éžÙ\Í©Ëw‘d¯­çÇÇFç ½'“Šï óEƒÚ딩¾íñ]‹«¡µ¡ÐËzïZ¥Ç¹¡Ë<ó—ÇR‰¬ñž×f±gó»Z¡åO­žÅJ¥ÝÁj•yåY“ŸÍ2“4Ë?µ˜¥M—Àõå9Ùª©Ö¹ ëBû>¯“¥ÛQçÍûŽ¥k÷Àÿ -•%¹„‘ß•M£ËËM…2á×¼ÃØëÏ/Ç ‘ºÍzí×ù :Édãy­G¿n‰tÿ‚Û·8‰£`ÍŽ·£›³…Ï"Ý‘A¯ ÷b›Žƒ3m“…ù›éÿ5¿xÛ>ë?ùJ‰Të§ÑÍ\¹ÚñŸ©HíY£{­…ûjëŽéË+Ýo‡@‘Yý££(‹•él÷Í«!ñYáŒÏGÕ‹hѳƒ Õ3»Ê‹Úé—¡C™¿ùÕÝg“ÏH³‘Û^³³ƒ|ùŸÁ‰ñ|µ.Ùÿ>ÅqÙ‘³'££ó¡­»Éﵫ’ó¬—©¿Nÿ3µ‡ƒ«Å“À¥Ëï^³ƒ0“Å.ãD¡Oá–Í-pñ ã4ד‘v·£©Éùi½´é^÷¤×§‡«mÇÎùuÇ»ݳ¯´óÁ,ךÃgÇ6÷dŸn“•Ö™/ïÆýÇ­-¹ —ˆ¯‘œ¡6¥ZÙ<ýO‰¢¹Ó·º£Tßµ2åéWÇ¿éЯl‘Ù³‡×Õ¡£¹Ϲë¨Ík“;§Ùå0÷J« —Bë׿'«y‰Ûñõ€Ñw¿/Ó‘Õa£Õ‰sßy߇߆ïF›Ééí=«5ÑϫƟl›‡³™åŠý†ÅS½CÙZÏ[¡$ÅÁu³ÏáË‘s×)ý\©íĹ€í2ûœ͘‰ õßt¥tÁmý@ݗݳvϬáE¿Õç”ãe×Q£ÏñÑ»žãz‘‹»;ùt…‚©@ñ»‰ní]Ç~żÉ™ŸÛ½¨½¦™(£0÷Iã„› í-¡Œ­?‘ǿէD“ Ûw­s©—.³ºùXå–¿1µ™ ÷yÑ$…… “¬û©kõŒ£©µ„§ÚªÙ¡®Ãt³ ɹ×<™"Äç–ÛÕãaÉßµPï>‰ë©_“w³n•­ÕVÍœõPû†Ç'Ë•÷À÷½Ç2µ›—\ïf¡Â»Ù¹.³ƒE­Òûa³¢¯—Ãw‹UÌ©Óñ#¡ˆóعC½i¹Ñ¹g­1õ¥½#‘k¹^Ó«£k£‡çxé'ןȻ«±Ôµl§«½/¯Î«R¥ýoÿ¦Ã<ßÚá¿›[ßЯhËŠ¯Õ1©h™jéa¡lÓDÕI㩜ë×€—ƒ•AÇ€)i÷Yõ,á7«7‰†ã·Ù ±!ëùº¯Ó-³­—Ñ«„ƒ—¿AËɳ=¥KÁûcϯǤË›WµËh«bá •m×ý˜áµQ£©ƒí;Á@‡S­‰ç ©+³|µÀË­µ •Iå@©s…#™'½]ßá*¥µ'ó¥ËOÛ¶‡¦Ý®›±EÿLÅl‰‰ŸÏ‚›Æ›å ¹Ãµºçé ¹“ˆÛHƒ`©QÅ ‡#ÁHÝhçáCý(õlá»ù‘Ö­|«ŸÐ­`í¾é»ƒ¨Á µÑ[‡/±‹RYá¦ã±³&ƒ’ÛM±]÷e¥ÀýØù?˙хñ6ù5ù-› Ï:½$‹ØÑ-«E—۱ÿénÁˆ£¯­ƒ$ïSÝF³zÑ -óÍŸžÅÒ¡¦§šµÏß+‡FƒÖí ã‹‰Šµ¨íÙÏÉ»ïRåÁ§‹Š—[—™bŸ§çÃÃo³¹©•ÕÂᯥBßÝIÓ~¡°õÊá Ö¥s™<‰¯‹£éÁék—K…3냡pÃ5ÁëÑñ -ÍOÑeϵ‹÷ƒ×ý’‰I¹\‰Kõ}­,½£¨»±Võ¡ù‚ëØÿ‘‹ƒ™–Ÿã¼¹Ì» £vãdÍ7]½ž¥Ê·ZÑ{‘¦ãœÛTƒÓû ˆ¡Xmñ=ùù7Ç(Í|¹OÅ—¯2Ÿ;§ºÅ”Ê£ÇÃÌ¡r‹Õ'“ºíeóK§Îé?£f¡T‹­ß5§GÅÄÇ ©Ô·¹’ßÈó±pËR¯EÝסÛù(ÕÃãª×'µráL³y¡mÕ°Å—ÓãP‰3­‚Ç¿ÉHÅA—²ÙxÁ±ÃÕÈ¥ºÙ@ßÌ빟ëUó8‘S›f½cÇwƒDÍ6×У§Ï–Ó8¿i›RÕ*ÿm‡È×¹¯|ïªÑ5ó Û½§}ûná`é•h·eéÝ)³š«H£ãm¹¢\ÛYóÒ³ ÅnǾÇñ7¹‹¹l± ­×÷‡°÷;ãŽ˺™ÛÕE¿ÑH‰Ÿ³ŸXÏ@ãÎ¥=¹µÍ`Á-ÓË>ç¨ßc©”Û_†á­-ç|íb¡MÕÄýcÇ—^ÍdÛx¯7ƒŠ© ¹«÷ÐÕÁѸÙHï½Ë*Š¥"± …—4Ÿ‡÷¯™Ìñ”ÇDƒ³—T“sûš‘õ_éÖµv=¯bÓJóXÕjÁG—7­u¡Áw·Ô™®ÑmÇ+ó»™„™ébÁŸŸb—¥³Ä—µÙ‰ý×ÁP½Q³QµûŸ»¢µI5‘¯Fÿ4ÑÃ…1ãºÙ¨ÁÉõBÑÉË7JÁÖÝ?Ç…p‡ŠŸUÕJçÿv—  ‡Zý¯û½‘ÐßH»Â“Á½d³¤Ý«óZ•ŒËŸÅñŠ‘ÌÝEÓ1¹—¿_Á’¡^ñ¿éÓ€Ï,¿cåw¹ íh…oÙL™œó<…CÕѤýSÇ·Õ,«0õ‘¥¡ñ·KÇ—Éሩ!ûÅ™5Ç]íõë~…™á´Í}çûqâ¡?¹‘ë¡»«Dõdƒ áíålŸ*•• ãŸqÁ<Ï«…OË9‘”¥2鄉̟NÕµýއŸŸ2¡kߨ³‹²Û‡bÓ†ÓLÃщ#Ó»Ý:¡¨‡m¡aÛ´³6õÌÙKÛÁñ­¬Õýé¼ÿTÁråÇ¿¥ƒÇó¤å¿µŸ¯á¢“BÃj‰Hß›…ÚÅÚ…/“(¡#»v§ÃÑu·Ù,Ë¡“C™C—ÐÅ+=繆Á½ûb§Ï …'ïLíµÇ…ƒÁë±"ç‹DÇT±3ïó¿¢›?ëlÓÁí/±¼•§w×’Íq™º§^Ã@µgÿÑ·”~ç ¿@£·lÑjÿ[—Å­p›‚÷ó°ýÌÌ£Èå‘©²Õu‘‘—¿œ‹ÉÙÐû©ùß­åK³RÃh›7•ÓÏÎÃ7õA‰Í—˜µ(×zZë5‰¿½¬—,³œ·]u©Ÿ§ §g¹2¹¶… “NƒÒ÷T»¡Qí½©ŒãtѡϱÙõV‡´ãE€Ÿ|ïÙ'»±¹•ë,᜷k¯yñ¯‘3å’­§£a»× "éÈ—}Í¿Hï·Å…¥,ɈùÒõ×¹[çD‰ŽÇ ïr“,±D»˜‹WãÔ™×ç¼Û/½‘µ¿Ë±NÙÆ•¢Éi×O¡(‡]µÄ±jÏ<ÙÂÁ8³«…A—½šõWÇ/÷"ɾå‡Dÿù±ÅЗ¦ݘÕ²Ûȹ¤™LÑÀï˱ÃeƒÕéËË®³Õ»*ó¹½9ýÁ­wå™Ï!ÙBÛŸ­q»Òá²í¿5Á²íá8ùÌçb‡ºÅ׫?ëÇÑ éRµ´>Ý8Át‘aŒí‰¡«lÕ2Ï¡‹‘Õw¯Êñ•ߌí¬„©aïw«a{ÉKŸÇÁ¨³tÍvé:Ý‘õË…£j»(ŸOÇB«1·!«¸ÿy¥V£+˅ٗ窉±ËjûØ¡›)±}ÿ •¯•½Ã(×Ó×CÉ!¡Vï+çÏÓz‰ Ãf¿fí‹ÿˆ™À›¡Å¦%ýùRÓ¡·:ï§»Õ 2©Úý³¡fŸ“Ñ´Óo§Y¹‡µ”¢÷”ÃpéÑÑ›½Ìão­—ã(‘(—I±7ÍÊí§—®Ç&ñ*µhíÃ×(³¬*ËÓãÇ}»€Õ/ÅÙ¹r§MÏÕhÝÇѾ§|±RíÁKÕH&Ýa õ×¢ã%“:ñÏç«#±‹¸›Gû—­ÄË ÷xÕ¿¯Í>ã ±y•U£Z¿`ëDÑÓã6áÖ£2õˆÑÁ·[¥ŸétëÁ&ç[˪¡!·ÿÔ»I±t¿•L¿¶µ—•F‡ó/áÓ¿ïÙá^ÿŸ¡Nßqµ<ïkÈé4¿Sy¹¼©õw¡|ÃÁ¢ÓÓ)ë ç3‘Éã]U™›^—´Ó¯çH“W¯Ñ£Ð‡<¿ª¥fÉ(áH÷ѳ³7ŸÝ‡‰¹ñ\µ!ÿÙóÁë‹…¢ï«ÍGã{—‹©8Ñ,§µ•«Áã<‡vé‚íWÿ¥‡óh•s»KÉ%½a©oÛÅÑÖ©ͨ£Uå ÿ/Ÿ ½B© -ûɤ³…Ýb£Ã‹‹¡œá©¹7Û#ÉOå§×yÛPùv‡Åûƒwϛχó*©©á"¡¢ÁF­ˆ©Z§¢Ÿ™ÁÛË$·¹Ó ‹4³Ýk£L—…©‹ã¡ÉçØ›XÅWõ”ˆÓwé_¹_í4ÉéqÿxƒH …QÛ%÷h‘PÕ›"ÿZ‹¬Ë›¯Ñ”±¥ñ)¿OëFŸ«¿¥T‰*•©[©ØÓf¡—«º³[ËXõe“!…¡•§¤±ÓÝ‹“>… ÷0±Û¯ÏÍKÇÆƒÅ¯Ù§®gÿézÅaí²£]·u‹€é-ÅÌñyõ6—±†ùoñÂÉéÿ*Ø™|³ùSÇ÷뛟†ÃlÉ›ƒŸÅX“¯?¯AÍÆÛ=ÕiÑËÌÕoÕïÚ‰ØÉ¡ÕÙÇ3ÙEóT©¥Å¹ë ÙrµÒ™¹—–ñ…¹±õµßÑOÃIç—÷^ýÁ¿‘Ñ ¥·ƒ‰÷ª•Å…[É+ÑP»‰oÍsµÊÁáµ8់;ý““’ß^Å]³LŸ}«÷Ž£Q•½ïµªÏ3·F³Æû„»[§5³‚½®‰j‰pÿ€ÇÈÝ™“¦™RƒW×¶ßÂá>£ÇŽ«¥‹’ÕŽŸ,«éÏ6µ~󴽯§¶Ý>ÃÐÛ•„…‘ƒ•=‹dõ+½Y·ÈLµ±Ë"*Ï0ß “ÿ׉Ùǹ»Où\©›•Wù6‡xõ•Ï;ùEÕÊ—u§å$¯[Õ¶± ½··Ù0¯~Ý5¯-ù ׈ëŒ×·ŸhÁÈÓ/‹«χ¯¾³8‰{ïvé'÷·©pÝ<±cŸMûEž»ûI­TJß·Ñû·ƒaÏ ÙŸ®±1ƒ)¹¨·Ö™o“ïÏ·Ó7¥€Á£%ׯ·í¡ÙbÏL³Ûã»J}ÕŠùF×oß»ɇã0µ°÷uÃSã¾ù¬׫çqá§•‘é £¼¡h‡×ÖË¿¹š±)“Îÿd‡ݦÁ ã}ï²ñ-½œãB_ÑLñ Á³ý•ÿÊ¡…›×Z£ÿÅ:‘§ã ³M­\»L™f¯™·=õm£ Éѯ«é›qö•›ÿñ­‹Ë&ͼ·NïE³Ô‹‚çX£€íl½‰…¬¥;µ†«ËÑȽ8± ÝÃÙ´÷sµ_ÁÒ£)£AøÕ®áÝ,Ç›¨é$‘ õ‰‰.©–‹®õF¥¬·ƒ5Õ¬¥¯Dƒ/ãQÍ ÏK÷ËÓH·½;§‹ŠãF§¡¬»y±;Ù-íd­ëû‹‘få©Aß¡©)™‰…7Ë’ïeÙ|㨵̅´÷Åѳg›>ý.÷/­t·ŒÁë‚‹…ÉL¥o¹uÑ—ãHÛr£ŠÓ^™ØÓZÛ,‘w÷(±(÷˜“œéfá.—~ùɃºçx‹Ö—ÉFç$Ï­•Xõ¶ÿ¬«÷¾Û"¹ÀÕÑíÉ3ÏZ‰?ù#ÏשDÁ‰5Ë3¡i׋›Ÿ·{—;Ù­Êý‚Û˜Éc±³§ÆLJƒ¯¯>Á»fË!ûV¿&÷B†ÉG™0ÇÿÌË~¹Z»­í·‹ÃÓMûÆåÖýΑÂ뿊÷Ö—Ú“¢ÓÚÙ¶Ñ“ç倧¥ñ’×J•…Á¯ù‡‡ÓÉ÷°“¹ó~Çׯq³\ùMÇÖ‘Í­+÷ Ç‹ã$‘pûD§Òó•¿Û9…ÑGåI«J¡Ìßz寯p™ÓÉÒóVµY—tñ‡ýÓWÕlj(ÛÍ­ͤŸŠ³X·Ð£dÃÚÏÄ`í»߀ÑI©;§›ƒ „Õ‚ÏrûFá¸ÙÎé’Õ<—Z”í¯£ï±S‡‰ý™´ñ†¯ƒ¡”Ý€éxçNÕr¯Që’»F¡Ÿ3£-ë¢éM,¡ÑCÓy›³‘ï “<ñ¾õi—!Ýe…Š˯:õÍÉ›Çvµ›’õ&ë2­V‰dý+ÝŽ©$‡€ß·Qù_Ý¿›Ѭ§Ÿ•ÕÝ=‘F‘Å‘<«‰ëÚ—(ƒŸm‹NÕå¹)‹.™¤‰¨£Ô¯Í§©Jç{‰ù<ÍnÓ±é«Åd×½ÏVÇņ™Óqýï1ÅxÓ=ײ—hÝjÓÙGÇ^ëÔÃW·bÁ5‘*¥Ï“a£zåÃ/µ@ƒ9—pÿ¼ó™µ>§Íí•ïו¹ÏÆß,q½÷.¡\í -±aÛi«¼Ñ×Ó4¿ÆýM¥ɬ¿eÿC³‰éǽµš‹¾¡ný,ã½lÙ¡©6ï0ÇÅ·±·6±£l±d󔋉±uñ͡ÕgûÅOíÕ×¾ɉ¹Æ›¢ųß›‰éÇ:£!݇·©‰ ý¸Íg½Ê…‘›qá™Û‡¯º­ÝD³/É•ã—FõhÕÑn§'¿Ó‹›Å^ßµ›Ò±?ýƒ»ŠÝÓñØákƒMï“ç8‡ˆçJ£ÇÌÙ»‡ŒÝ»+ó‚úO¹½érùGçEÙgϱñÏžÓŸ½·›iãÅÃO‘jÁ0û²ÍóN󩉓›r›Ùç›’±U…Eë—M‘+¡Pù/“°¹N•bÛ\ã2!“»ÌÇ\á+±9¡e¿·BóºåNÕŸùNƒ Õ Ͷ­ØÉŸ¿tç4ÍCÇØ©>·³½ºóM¯OÁš‰ÆÏÒÍÍ‹šÃ:‘ŸÁÝyÈÝ­6õ!ïQ×ù¦¥’³U÷µÿлӳIÓ[‰Å‚ç£ÅšÕÿ‘Ñû;» ‰«ÛOÝc·ñ}‡eɯË:ŸQӇ͛ÐÝ#ÿÄíÁÕá«ÈÃÒ» £&‰0£ ßBï)¯%áÇ¥ÌÁiýË݈ëëw~ÓŸ%Ë·ݱ¸§W›{Ÿ\ÙhýK§Ïb³ÍûµFÉ0ƒh¿}߯¥ “Xç•‘ûÑdÁá*烕¯!刓„ÿ.Ñ¿Å2Ň•©™³‡'¿³Õ‡û`ùa§u×^‘XŸÕùQù.û(åÓùY÷ÇéÑ0ý¼¥uÛ³j…‹>Á}ŸT±e×¹ûf×°‰—ï'©Iï›8߯G¿‡…Ĩõ5ï3µD™ùœËÃs¹™›‘³qÍMÇ¿ÑÉ‹f«•ß"ט¡Ù··‹(ã"˼Ó‘¤¯«[©×­SÙ1@‰´¿ƒ™ŸåJ•·&CŸ¼¹ÚÓÔÍÝÖ…¹ž¯·צå©¥†û%åěڣɅ˜Åhç}±<™‚é‰éiWÝÐÍ'™—º©±»i›=éÔ­³¿ˆ‰½÷W›C¯\ï9ý7›º“*±G»µÝRÂÏh÷É™z›Î3—×trÍØŸ4© ű=ÓŸõå:±¿ñ„§€ƒo)¥Lù«YÙˆ¿‡ Åp½”÷ÝU‰eÓi³»…~û³ÿݵ»bã;ÁÏç‘Ó5߯YÕdñh¯,Ãm©—n©³ÅP³ÿέhÁ‡Í é,©ÍÏÈã¡™ Ÿ³F‘—Í%Ë2«ÄÁ ™ ÑɪÀ› -‡A•¡¥UÏn•˳ÐÉ‚¯5Ÿª‘]Í]©„õIÁYõ“¹Xõ»—•¿,Á·ÁÂÇÂÇS¡R³ué\Õ–©,ég݇’ÿc­¿ãgÝQ北Åç#É}£ª±b¿ºÍmó$•Gç™ÉTÁ›ù9—iñ¸Çaµ‘‘Ë‘Áû®(ÃÙÏ‘¿m›”ƒ;ëáØñšír£ÓÊ•Ø× Ý”¡_û’›•Л¡E•r¿ÏÍï¢È¹J‘[Ϫ¯ÔѲƒÑ垟?£|Õz˃խ뜥‰–ŸÓÏQÏЃ]‡;õEß%µ‡‹ãÁËÿ·Bÿ_ÿ}íiì×Õ©E¹|ͱûÉ…“ŸÂ­_ƒÉ×Ãg©¨­OÏs‘Ú“µ1‡”ÃHÍ+½ÒÇ–‹G×}Ý7“H±Š±8ɧƒt«`ý<‘1éV‡‘ÍF‰€ùï™ÍÓ·Àû¼óÇ—9…£Â‹`çfÉÎåDçvŸ.¡;ŸËƒ»¾Ñ;ƒbÕ%SÉåHŸ@£™ñl£„—‡¥(½¯Ýózïgýó#©-çU—2ëd‹eãsë ›¸Ÿ¹•[‹£É;×?§o§é¡٠ɽí¿¯Õå%•Ú¹ë6¯&µÔᵯב-‹é“¡–ß[Ù+±Lƒ=«q™XÿÒûtû'û)ϧ³„£žó†³bÓ’íxÑKÁqÕvŸ"åЧx»°Õ¾Ñçw•š•·“—‰‹‡zã8ã·•µT;ã¿€·µë[µKáMí…¡½õÂÿ°ë¥·׳Éfù1Ý"“¥•:÷[¹ß ‰§f³ÌçnÑzÉÄ˽’ÓÁ¥›s§Råƒù–É\‘×ËÀ­š·á¥Á¼‘Û©~¿Ðû°»x‹‡‘µ½hû¯³¿¿¯I…9¯Ó…ÓGÿó¸ùÖ™_ŸF© ×ù]•±Éé¿Û -Ë^Ǭµ ›J㮋ÑvãO¡ÓÓšãš½¿“_ûr³?¯ íf¯ûŒ›„Ùƒ«ÐÇ™ÍBÓ$‹®±™!ßF¤ít\ý§ù°ÅLÇG׼ÿ;ýÐã½¥-ç©©#ûЙ©…x¿u‡OÛNןÑ­Ã6£råLÙŸZíñ‡sѰÕ^Ëó|…l¯)™Û¹Ź•D£ˆõcÑ˾é0¥QÅ´Ïg»l£Î½Í±p«õÃÓ ÃqÛ§¥Ò‹º›éí^¼µAŸ(‰Pë±Ë“ó -¿Ý1ûB»>…ªÉó­áa‡3±\ùZ§™á“eõOç/‹o¥Á¡ç(ïHó…³ -§“FïUõ[ë­õG•†¹IÅ!“ÓùŠéo‘0ß%…Å…ˆÛ7³e‹Å¯$¥«‘'÷4õ­¡ó3Íάéc³Ë§P‹–Ñû/ÛÀé¹Yͧû£ÉxYÍ ¿hÁµF¼™”z¡ºÃÉãµÙ‚íß§³^óª·a÷Q—=É/בeÍÐû«ÓŠ¿ ­m“ ‘«­ýÝ2û,á •‹½wÅáï‹«cDZ`çG¿•Œ÷>¯³c“ûhû¢ÛnÅÉ×ÿG‡ËÙ§*©é<Ÿµ v·7åš³ïʳDµ;߬ïdå'“ÑÊãÍ…wÃçÊ÷7…<íjÉ©¿ÙÈÝ/¿9µ•7±ÒýžÆ™Âѽí›ómó¯£Í#ñÛ'™—õ0Ñq«“)×#Å ·­‘´³;³§ÄŸPÓFÛ³ƒ†•œù³Õ!Í/½—`É…ºã»p›3SãÛ÷§Ñ€éÉ“Ÿ{ûÈ¥”뮵Võ"íu£:‘rÉh·„±´·Ýù¿"k£n•¤í¤ßNó{»³ñUÛ…«ý­›û‹¥7§J«k›áçKá›ë -­I×l·Ç’¡y÷Í^…f§ÀÃZ㤥¥Ù¿É‰Y¯˜©Õ㻳›ÊÏ©®NïDùȯ³ÙÅ1­$‰WëYÇ ¡{‘…*çYÿ¨ß_ßv‹S“MÃk•Ãí§ ‹ÕñZ±‡‰QÉÙÝ»׸팑³å—éwÇ4•C³¡É<ÕN•ïi·LûP©BÏ ¡`ù‘¿X÷Ñ%Ëe‡gýW³‡Û‚á0Í‹½Ú½!ñ9­Jë<鈉Хh‹1¥Ge—DÏ™‹lópáOß΃—¥Ã«“ï=—çã*£ŒÃÉÝ*ÑÓíÁ¹1ïéIóÏ‘•ñ£ÑcÓÕ¯JÏ.×ótBÛºùÔÝ›ͽ‹·Ñl»8×Xû ñ+‰2Åm±„·fÿqÙ­ãߣñ£ÅƒÙ·0ÿ®¥1å˜y¿V¡ÓŸ<åm׃µ¼ÉuŸ[‡|¿ÒåóÊϵ4Ù“Q³3›2«²‡Q󵯵j£i‘ω÷}ù©íHݬ˘“¼ùfáÄ뫞ÿ(ß0ƒA×*½_…nÿ:Å3óc¿Ì¥6¡0“ÐÇ,»`ɳ¡HÝ_ ù‰i‹§¯T¥I½±­íJÑéÊ£sݲëHÛ¯@ßWÑ‘(ƒ‹Ù$ÏlÃ#ý:רå;_ÉÈ­‘²ý¥pïÇï7ÕL…!±Mû©µ·Á±ݼ½ßY‘Ɖ_·—k‹Í‡ -¿w‹qP±'¥±í«íTÙ¯+¥x—„ûx÷ZÓjß–ÃÊùÁ©dÑ­ Í_ù½¹³Å¹Åç5ç*™É±ŽÃvÓ|ó6X­=õªÊ¡G•Zÿ¡Fá€ïí_Ã)ß<—¿…ƯnÙ:tŸÒÁe¿Ê‘ ¸÷m‘¾¯Bã3…(馷TË ÷C÷1Ó›ͪõÛ é¶¹“·›Ô™>÷û=m]—(£›#‰ß"1‹¯_·‡‹±Žû -3Ý')ŵÁ|ÉÙ§"Ïù×7ÁÙ ÓuÏ2ûŵ|¯K‘#­ó¹±¿µ:‘©Eí,Å&¿÷Ž»8“/±ÿç ›Iÿ ¯ Á µ×áv‹ƒ±A•!Ï®ù'ÅÏ/SùS££¿ë3…ÄÍ…ßµ£Ó ÷!Å{å%—õ !óÉ0å€{?«®Ÿ ›M©i“¡ç¹- ™[ó•5÷VÁ×bý<'‹ÍÍ&ÁÛ‹Ïfý É!»%©¥Y§×,å µ9…!·Ý …Ñ¡7½õZ› ×-«"Uñ;…{‰ ÏK¯?ÃùÄÕa‹é"ƒ -Õ4› -ÕÃG¡2!‹©^Ý ãŸ#… ÙUÙÑfÝJ‹$“·=ó”—Û€$¿ óùïU•¶¯?w¯ó Ù ¡ãó±Éy•"­.Å -³µÉÝËC© ‡;#¹Ç•iéÿÓ"ñå»$·™ù%™=Ë/ÏéC©ó/‰¡:ñ—Ÿ#•)«1õ=ÝVA§Ó£DÓáÁåtÅDý!Ù -³*ƒ‹4Å.«ãÏës÷¡JÁÍ‹#‹ç˜Ó!µ ©¶ÑÍ¥.ßß‘‹Ó°³›!¿¤!…Ñïtë™Kû¥SݱÝ6ƒtÍ"¦·—Áǵ˯DëFã³ÿó{á‡CÉ™¹ã££µ"×$£ÅÃ÷*‰¹ Á@Ç=™!Ë÷Í!ÛÃÇï{©Mó Ûý"Ó¹·ß Å>ÛW“§ÏÓ–·!¥"Ýï"µ(ó -Û“EÉ;™Dï"“É#ë3—÷¯¼ÕùÙqŸ*É"™…í½!¹ -¹ã ±8ë—ÃLí…)¯ñ á"¹{³ÿ‘™§ËwÑ£ƒ”ûå ‰~ï ×—ù6÷ÇqÏÉF…z“ëÍ‹Ç׫°¹¯p—Åñ+9㎻µ5Ï Ë£E³*Õ/³:óé…ƒ>!Ó¤‡[™'уååQËÏóëë[å0å‹‹Ø£Á<ÃL¡Õ!ç§7«Ÿ›:å¤ý­>·K·¥$ÛŸÕÇw鯡µ¿&¥¡&×JÏ‘‰8ã»<Ý™5×_=áó?¡Ï>£“‡›Yí1¯áÝ2‘ #÷™?ßK¡«—_‘×¥!õ›PÅDÛ‹'™O«›%Û%•…ó±YÅš¿¡8Çhëí Ï0˵ õ5ïWíWŸÏSÍËHÇËã‡ÿ;ç?³é7‡Ù<ËVãÕÑ™2½"Ï2ÿ0ã`á Ãí;û ©;ß».Ÿ.….±-…‡ßí&å±K™7û õ¥#á1ñ‡Mý‚ÇF•ßXÑÝ/Ë5ýƒ<³ˆÇ.±×#­J¥‰³ Õ.¯#·;õ1¥%× ëGýëÆé­"Ëí;ƒIåšË -£@­›2ŸõXˇµíYÿ0ûKëÃá -ÁµŽ‹ -ïëZ÷<¥¡¯4å«X›O×4ͱ{§CÅ­'Û"ƒAé#›)ûßµIÛw³µ/« Ë™DE͇• ‹ Û±·‡Eë çZ¿“ûE«…,õÃ;*³"ç'Éý$¹¥Ÿ=óJÙ÷ Å-½ÿ!µCÓÃñ6“é¯FÑ7Á'á…¥+Ó/O™w×ó£|«6û¡.Å… 1¿›aëJ£éÕ#¥éƒà ­« å[Õ á áñy—Ë…»­/û?ÉM[Ÿ£©$ƒÌ盯‡ß¥ñÉ í/é»4Ï2Ù -›³¥§•#­¢µ½0ÓÁžï&Ï/·Á¡á ¡'Épýµÿ|ç ÿ§™;×%÷ƒ9¥¥'u³“*…§Ÿm•™íƒxÁCça¿« £@µ*Ï Ù”×$·¿A»Kû1§£-éEé ‘ å;¿kÝé £0 ÁÓÃ1¥XÝ7±;ë̯{“4çñ]‡]—Å"Çy¹ÛÍ#Ã1Ý_Ó@¯Çßý¦‹>ÿ®ÿ;ý|ç`ÃdãØù…¿Ã‰z‹K‰»›@û®¥µÁ‡VÿÁóßJŸŽŸ"Ï:£/•«ç ¥‡‡"ãTŸó‡ ¹í × ©y á ™0½ ñí -™»Ÿ(Á¿@÷¥õ— ñïñv¡#ý¹»‘é#Ñ ±«0¹¥h™û“&› ½ ©9Ñ"Í‘!Ñ ã7‹kÇ;¡ )×/…(·™³…Ç ç ËLÍGç$û¹"ñ ‘xïNÍ ¥·!»$çOí!¹ ã"Ïc÷ ýÓu½¹á¯ Ï£‹»'ÓGý/½å ùóoéý Å"Ãj¿ ¿— ÿVݱ¿ ¥— ¹ ù2ÿçŸÏ;…ËÅÍBû ë˯ɕ±õÓ“+½V‰!‹2Bí!Ÿ¿Ç!©±»évµ×½v™ÍßÏýɆÝß Ï)©Åñû³‘Fç½í¯ÛQ“AßÕ$ƒÃÃ.ó‹RÅá­… §µ@¿³#ñï -³ñxÓŸÕÓÃ|+©Ó6PÅ›œÓ!Áh§Õ)ÙÊûc;“?ëVÍ:‰œ“ˉ - Ë¡÷ÐÿOµ³á"õ¨ÿ4— ³±{ã;©(Å@=ן›(Ñ6ÿ¬¡-•Ûµ‡ûµB|‰Eµ ëG‹*‘ ÝC•LûŠÇÃ(ç§Ñ ©ù'Û,i• Í.å³Ç£%­éo»½§5Íõ_“wÏ”¿É8…5ï4µ1ùSË8ɉ%ã×\û.…û$×ãa•+Ý£-ÃK­'£Ÿ‡å ÷+Ó§é£`û¯"ó³1“‹+íïký-Ù"ù1‘M›‰×!§$ÑCý1»ý8ÙI㉠Á2Ï ¯?ç!“³·¹ ŠÛ•ßnùŸ ó3‰C½©Ç훡Á ¹$Õ1£2ó(Ñ:‘Õ`*ûû'©Ù'•Ã,“9™F· çM±vÛëëË9Ç.¹I«ÉË-‰hå!Ñ õ·6ÇF©(¥—¿‡$›†)Á$ÿ'ç+Ù-ë2•4Ï‘%Ç'é1¹2›'‘™"ÿ,Û0‡÷‰Ÿ+­<ý8³ û÷²ɲÅ ùDå|×+Ñ ¥±Ñ ×)ðã2zã+áAéë•Y—,©½6•(ƒJ¡õ¿V×$8ßûQ÷‡É4Åç§"©Fÿ »Kë%ᕵ‰*ÑÃ#½\™‰­å(÷O·÷CÙ#Á-ÕLÿç!›<‘·Lý ¡!ýK§"Û(é¯ù™rÓ!©8™ï+¹›F÷"ÁˆÓ‡Ì—…;¹"­ñWÏG©Bý‡³½‹ãgë Ó(£]åU¤õù.Ÿ ͹——,Ÿ+ÅZùÛ/·Jû -—?ç2ÃcÉ£ ‹#ÓóÛB“BƒŽ«Ÿ“›$Ç$±Å“’ùñ†‘ »‡\‘Fß÷/»ÛCÝ8‹‹|ó‘ÃQÝ (ÓÏyу"ËÙÁl‰Z›Å—…›Ñí ó"ýRS±‰sï‰ïÇÇCÝ.õ£#sŸÉgƒ&™$å#ÃLÑWù5Ç(» ÕùZ³7•R…FëljïpËÇ!››£ýÇ.ųå Í·%Ó“Ó o͇û±•‡L½‹§Ç'¡¥$³ ™ ¡+ùŒÅÕ -׿#÷HHÉû¸¿ ‘ -Åý5³*ÓTå ïíà ×#ÁÁÅ…ÛÕ¹…Ù«•³ Ë@«í‹Pã…YíÛMω*£€áÿ¦ÙD¹ß*åáM×» -—É.½~‡·ˆ›>E»›!‡BÙdƒQ‡$éÉ#½"Ñ—ÛÇS“ ¥#¡™›3ã››‰¡ó÷‰Ï -¿ ñç+ëÿÑ™‡5ù­"[»-‰]·0ï½!¡Å!õ ‡"û#žév“…5¹ ­ ¡¨¯¥S•£A¹7ÁÑ Á€Ë!Ë%!¡?ŸËI§CñBQ‡ï)‡0Ë£Û‰ÑLÝ'ñ!éD©=·*á•Á"çÓ ·‹#“Ãí§<÷ ‘V¯¯,¡(×5ñ Ç«Z¿?…ƒÍ/%˽ï§!Õ •—+Ù~÷Ûù·ÿ0Ç‘OÕß =ñµýuÍÍ ½ϯ3ýn¡µÉÒÿzÅ4ñ#õ¥”ñ -ª…_¹Á©dõ£¡O­.¯ µ‡› ¥r—¯³ ‰…—ß ÏC“½(Ñ•…&å'“(›=Ë“^ƒ&ïÙ'¹&!³+# ÕJ5ÅGùM•%¥(…„ákï ëD!õnÁ(ë7a›y§E³ ™•E“O±…ŸC§ÉSå!ãV¿A㭦푫‰ñP¡pëO½ù}å!‰á#ó™¯"¯L‹™ -÷Õ#ã9·CÓ|¯+§DµLƒ‰"ó‡~Ù˜¡&§“ÿ ™Ž¡ÿű#§«Á·£¥¸©r™2¯³,ç-½K“kñ · #ñŸýÅ‹‰í:Å1)ã-µ±¹y#.‹‹·ÏµÙ ý"ç±%Q•|ßÓá—)­gÅ -™*ë¯ý Û"µÌ¥I½{Ÿ<ù$»¥ñ§À¡f%ù`­ÙÁŸ¤³ñ¶• ÍÇ͉£¯¿‘…­cÕVñ‡Dõ¿ÑD‘"•ˆ… C÷;ÝYƒ¹xá!Ó)tñAŸ¿÷.Ù© 9©áùå•óB™½7ÿÃ^í -˧³—=Ï%‡H-ÝCÇ9•ËÑpé_-­ªóÿ á3•³“Í'ã"ù@ÓÛD«§µƒ×DKÛ±ÃõÍ -™)NAµ˲+ß'ùx÷'û©š/Érƒ(‰%»Éåý—(Áb›“$ý>7Û+Ý¥§(ï˜-¯ §:/¯&Û]Ç!9Ù&7Ù)é#Í"…Q¥±µÍ÷²ïC%§1µá"íIó ¹Á‚™#¯ÿ&5û¿¥£ëu‰E‰‹DÏK÷.£…'¯½ç0Ãù*…ç5÷ñÉo±I7Ý—"Å ‡ Ÿ£C©+ëEµ˜Ù …¥C±£Ù)1ňç'áó‰í ™³™í ‡…B5ñ¿˜=ù>•£_û.E·—»‘í-=©”'=Åd·Ó(£O‘¯"§Gƒ±¡ÇÃû Í£ ©åÆ“éiË »áy÷… •©½=û¦ÓÑÉçžUíÈ•»=§8‘y“Bƒ é óHñ‰x¥Ë£ÙG»£/÷X—‡¯8¹?É7‘Ч59û€½W÷·‡ÑËÑ-±"¥WÍ{ƒ±¾·mÅÕï¸ñ2ÿ´¯¾‘”‘1ù. •§ñ%×z·rƒ½ Ù"“Ûß=õ ˸íKÿFã%Ï‘‹»0½\Ÿ“U•íníï:Á÷}Ù1“Íý -õM¯ÿ.‹Û>Ç”Ǿ‰Ã:¡—*ũф‹K¥Íó˜Ëdß!ñóoýÃíÁ"½(éRtù'¥ ‡ ×çJÛ)¯%× í³‡»²•™¡%‘“óL݃µ£çý¡*•Í×”¥W½2Á™B­»ó;÷é™Ó7ëSýËÁ…‘áÇB‘‡ ÿ&³Z(Í›¹Û³ ‹,… -ÙÑY…-“4¯o­ç¡5±+¹Ï…ÚïJ½ ÃÅ*ÅátÏ‘#« ÙíÓ ùÕ£ƒ«( ·ƒ"Ÿ‘ï"ù,Á … y!¿D"ïz™ÿÇ5Û—×µx¯—£4Ç—‘*ûCíí¨ÑtMÏçÁ>‰‘ƒG¥ŸñhG±=ùßqז鹇ÅI·‘™Ç '×"«j»~ó¾ÃÑ5á=å–Ë7›½•ÿ1‡bÙÍ.­O…‰µ;閉¨Rñ.±’}ã¾á­ßh«%£™Ý/û‡µn§ ‹›é2× ï%ã6ŽßÕ%ͿȭŒ—;™=‡q ­9ÿQûr‹5僳§2¯½q§8çªÑO¥$Ÿw±7©Ÿ½Êï-ñ-‰a“ ÇÅ+ét‡;‡wÙ8¿™Ý·s…ÍÇÅ5·EÁ$Ã/磩“ÁÕ)™]™…i¹÷~û($›ß”÷R¹Då¥Í¿Ú“׃֭nç!•$õÓVËb¥HÕ8ÕšÕ‰P‰KLJ£ñsÿ±±†ãz¾Ï·ÃÙëGñÚÏu·‰‹rÇBÙ‘‡aå í3ýcÙ2ç\ÍÕé³§ýLÝϳróf¨¹Ë™—ýÓÒ#á•!Ó†· …‰Ï‘l³Ñç@õ…¹TW½µß½•Yÿtà õŸ‹(ÍNÙûN£…­GïÁ ŸAë1‘k‡¯n×1ÙR­Öµ`©<¹'ß°ýÑ¡Å}Ïí0¹(‰qËJŸ]Ù(ûÓ›ñ@ï㦑!Ë©Ç~©TóDÇ.÷1©Á+¿H¥›í)Í¡Õ5£ ÛÓ.µñåó•Ç¢«#Ë2ó;«÷HË"Å/ó;‹€›;í8ó>ƒ[Õ&¥³K¹[›ç’³©‰ÅƒzÏUË!©>‰†‘Ùç…ý‹…%Ó€¯¡ý ¡õgÛ”?ÛÙëM9ËÕ·"¯)«ÙµG­<›YÝ~ÇÉ ã‘! Ë»©š7Óë#õNũխßЛ.Ãȧ&ÕûEÙ(™U ›q³VÓ¹ñ—÷sû¡Ťé¾µµÃ&—ÑKŸÝ5±e:»'õ(ƒ¸‡˜µPó²ƒgý¡k±ù¹×£u­{§œÏ¯©ïVŸ_Ï\ù„»:“XÿŠ©Í—}½ɤÑ?!!‘J¡3ÿ¥YóÛa¡ ƒ±7ßÙï;ãF©!¢­‚“±±Õ§¥·”…JÑÔÝ £Ï¿‡¿é¹MÁ¹ëPÝ@í£{ñ -ÉÆ•ù •ÿŸË«—Ç AÓÏF—\µÇ£÷qÛ<…˜áÅ&½'•]—[×IÙçMýÕµ§çzÑNݳ­ ¯ï «×Ó -/ÏW½žý%—É•ç -…ë½Mý-¡—?¹5‡• Õ­JñtÛ“­*ëÅ?ÛHÅá:¿ƒ ‘Gã8ó 5ÝWÓ9Ã-3‹BÿµÑ==¡ ­÷Kû´ -‹$û‚‘m×µ=éŠåñ•÷3™‘¥Í<Ç…Ñ©´cåÕcÁoƒDƒ ÏûG×S÷“ ÕËGŸ×A¿ Ï6 BÏ»»X¹ ÿÿÃ…I±M™k§Ö£F»Á³ -É>§ -5í%£Y­¹í‹Ç¥™9ÕÉÑ0¡{Í$7›Å0ƒ^í3ÕÿЃÎß-iç…ÏÍ.ín§$·û"ÉgåƒVçùbí&ͳß'í£a5§-ù˜ÑÃ6C«0‘1Á;‡w‹ Aû:¡·FóF‰‹‡³‰+©¢Í$õ’AãL¡FߢÕGµ,k¹%ÁgÇ(¹/õ)½mƒ'ë†:ç ëqý;Ÿ§¥)‡_ý…÷'éRë@‡¡ Û…åbí,»RÇ&™$Ù×Ñ™„ó*ùKÙk‘k‰Ÿ˜%½;“K™)ñísÇtÝAÙÓï=·g·2m—mûÑDój‡Ý‘Eé;ÍTó!ßÅ(ƒ«/—­ …u¥\Á× ÝQÇ%¥Ló(ý«+µ]—*‘4ÑE¯F£K¥ Ù<·)Ýï”õDýS£J©¿‡ ‰Nóý;'Ï›ãCÕ˧½)¥ª•d¯±,§.Ï"¯Ÿ‡Ž×"¹•õ—U‘Ê“!÷0»=Á ©?­QÃ~¯0£>¿‹yß*“pï -‡~ñ)¯AÙÝHj­õ'×̳ôë¹OÕvõ±a¹¿áØ¿‘÷iÿ¿à ãRåÆéÖÉtãcå±™ó¿r‰0óÿc‹Œ±Á£ˆÏ8·5ׇ¥™×°·5ËW…µÓ9ߓㅯû‚µB6Û²¡¥Ócý6­­“Žá?›ß›õ ŸÙ:Ç™ó‘\‘wã5§Ó¹z¥Çµ™Jñc“‚Ãʵ¹…ZŸ¿¡£‡F\Û½ÿ—åªÿv¯.ÉËÁïÀ¹ƒ|ûȵ½§\ÍÒÍ™ŸU›*ËËÍsÓ™á—9¡}ÓçO÷?‰Ã7ÇÐí¤Ó¹ ×Pƒ+㈓…»À——=ûTã(—†± >‡'¥&Ñ'µ·)“_áB‹ Ÿ•CÛT³hƒ “ýdÏ ÅH¯¯¡ÿMÙ$½aË ã'¿‰Ç/¿ÕÆË ÙÌÅ€ù®›xÕ¹÷Ø0ï£ÁcѤ§)¥võ–µ"½ŸÌ©v“©™2£ZýÝÁéÇ#ïÏM£ËÇý ¿óÃáÝUù ™´¯áÔÉGGU»¬åa#‘ -«ÿ§í#§¹‹bÝ|ÁiÇ_Ç÷€¡=‘!ý¹­©Ï•“¡ß¥‹¹"ÅÀ£&Ùÿ)¹J¯Ò ½óÁ'ç%©J¯ã±ßÅ£ͰÏjãÇ‘õ­ë;ÓŽ‡!÷Ñ7áª+×s±Eé©ßÅ·¯jÕ±xƒ;Õ ÅpËnÉ}ƒ°óƒ©Ô¥±ž±å:ábÁ ©G¿+õ‡1“b›ñ¼·«!Ÿ×åEç|¿Õ§åg¿OáD¥'ϱ«Âý)å>‰ÌÃÏÅÐï†õÙß,—#ý“ÿ…“³¡ ³ɰÙ›×E›ý©‹¡í±Ÿ²Ï##—o«*·á½@éѷ(…2Û ƒÑ$ç -ÇáÕ ·¯$!Û1•õáÅ)÷ï'‘“‡E'A­\Ã$µ¿ éÉ ñÓ#ÿ!‡Có Ùõ½ -Å'×@±2á.'Õ)ýÕO¥+/Ÿ•½Ó™.õ"©ù¹¬©_ç÷rá.¿ÿ •Ÿ^›/¡ñ‘Gǃ/óµŸr™—›µá$¥Qÿ©)ýëµå.ë­<Ÿ÷?¥ÕB÷Y¥§r¹&Çóí·2¿£2ãñ É ç­ ™¯W‹_ƒ‰‰6û5×ýµ1Å'óZã­å+õ1µ¿å³Ó*‹“që±xÁ&Ëå,ïI…-·õ?ß1Ïá1›¥ Ýó ©qÓ#Í~åÏÏŸ\•ó"¯:éíXûT•yÁ^½½¡Äù ÕÛ‘ÇûŸ#Ÿï"“\áå1÷)õ.§0éc×…ßçu­ßµ.« ‰<«Ë$×(£©Û“:<Å¥½%‡ó$± ÃWÓÕ"©ósÛ"‹?÷Eݵ/ ‹/« -‘#Õùų—!Ÿ)½4ý™/Í “çDëÉ·/Á ç<µ"û Ñ" ׯéǹ(ë “$©ñ“¯UÕ±ç…1C)•Á ÿC«V©-“Ë ½9‘h¿• ¯ïxÃ@ÓÏ ÉÇ× -©F?çLÑ ÉÇ«Q· 3ó!ãÁ¸å|‰2çGÓ]Ó³I¹*»žÝK¹ 7Ý»‚¥ûÑ=¿—ÍEã£QÁ;¯!Ÿ»Ãé3“&©Ã‘Åšÿé AŸLµ(3ñå©ÇFù!Ó>ÝF?‹J‡,åã µ%Ë®—¥§<ÇóqñH‰OÅUÏvKõ'»4å5­d±™{)÷µI³YÓ‹ï·CÍuÇ2±v•x·C‹'‰ —ç'µ‘· ­)+ÙELíÝÇJë&—‡ɪÏÓX÷S¿iå-ónßoÛÙ?©‡×6Çíë)A›#©#—¡"¡—¥Oýëå(÷#÷¿"­µÅ¹1·†åÉù ÓAƒ&Å‹\ïë“'‰¯©ç_û!=¿ ÷=¯gá9½ ­&Ë8¥ç!¹Óõ*±M­A)çb÷ÿ“©!«4Å}9Å!…¡0½}ÅAÑóË‘Lã¥å"×;ÿÝió׋¤ñ>ç)—É—¥pƒH…P‘ß ‹Í‹Eõ&‹vƒCßx…Coç½–£TÇE¯–¿=·E‡¢í_ñÁ»tǨÅÔÓOÙËŠ“T‹ ë/A½5ï -“C‡&ÅŽ)·4‘éMÓKɯŸÏ"ëOó'ç§(ûÍNŸ('ÓÀ‡> ‹+‹Û•)ù±_Õ$™‡E™û1…ÿ.1ïO$…'½‹ë×-¥á&ë Õ<½ “<"]å"Õé¿2«E±­Bý'¥³(é$Û$Á&ï©-™/ï\¹¯Ï§;c‘]Õõ éã*›J¡ -ËAÃ$ÑÝ)ù$ý áÝ!ñVåµ -¿ç ÿ×-Ë õ2‡CÇã -Ó;õ"ÝѨù“(ßç'Ù -ßDã­*™"¿$ßýBË"“@­&© µÕ·(ëÙ"ý&ËÁõEó$Ýóõý+™$¿+ù"Ý DÇ™£ ­ß?Áõ#Ï“-·Ù!Éã>õ*›•*Ó"Ó?» ñ£Y«­Û£Õ«5¹(­ ›Aåí§7ýéo™ß#Íѱ*¡U·ß«)ù‡+±ÓDÙ°AY/—ÈMÏÀ¹ó/7Û ñ·q‘ƒË! ÛP»+Í*³ñŽ—›?‰ƒ'×­½ËÍ Ñr£ ¿$Í'‹ç2‡^ë -‡¾Çï'ñaß«(…U¡Óå™+Í7—"‘õ•/á ãýAï‘DùÛ 0Á¿‡(Ç]˳©ŒŸ·1­¥)— ó#‹F£4ïß*· ™™-'b›$»çÑ—EÑ+)‡tá“ ×Mñ#—Ÿ ·ï­,C¯Ï ¯'—#ç;» -·)½s‘t<£b›Ñ ã%ùdÏ&ïžM癃$ÿé©A¿E‡“ÛHñ?0ŸlÁ6Ÿ‰ûKÝc‰1Ó*£õãe« É5¹—ÏXñ‚Ï-»­+ÝNùÚÛƒÑ^í*ÃË»6«\¿§«<¡UÏÍS×#·©©4ÁÏÝ8¯C¡½#ó“•Á³ÛÉlçÃsñD©$ùQ͉#Í"ßï(Ã3­÷^ŸÑ± ‘B‡Áù$ÁkÁÇݓ÷Ÿ‰ñÍy“3û*íx•ÃÛ#募$§yñKËÛ !×± -ã#ãÍ1™—Íó÷iã*牅±vƒ¡#›‰£2‰ \×+ïO2‰D™—€å(¥‰BËJý‡•» -¯!… ‘«Ï…'™‡™DEÓÉ«•O“Ý-¡'¹‰Õ@ÅÓÁ*ƒB'Å6à ÃÍ+³8»›Ás¡5 -™¿Ñ­ÝžÃoƒ á×ËÛ;³³°]Õ}³Ë/>™/“Íý³(Á ûb›*ï·«{¥.Å/¹Óó7û‰fE Û­› Û +õ,Ûx§0O¯‰Õ/û2Ç&¿³—(Ë@·»E¥G݇ýWÏ?óK4‡r¯`×n‹z•.ÃÓª5¡X9ÿ¥ë©·¥5¥(W©Z·™á Ÿ×Ë™Kµ ç"í]›É.“‡y¿¡!lÛ¡#åp÷'Í>Ñëï1íñ¬£Ë%Ûƒë(Ÿœµ‡‘ ý¤éUñÑ2õ£Íñ"É{ïÅ;™LÓ*Aãÿ …Ý -‰MÙwï á­x›O“ Ñm÷NçÛ<ÑpáëfÙ£TݱÁ• ÃOÕãu¹@ß}©Ÿß« õ¿†Ç…dùU©Ñ¥c½@‡¡‹‘ å÷ƒïN©«/ë#ÉbÕ¥^£IñO•!ù&¹¥N¿ñx³ ‡ûON“Q»ÑJû"ÏNá8¥1ñb«Õ\Å/‹›P³/¡Qƒ=ßÝeÝÉ÷…ÝÝFÉSã Ç Ñ#¡]Û"‰P‘(›[½0ÏÅ3ãO‡‘BÇJçÿÅ]ÙBãVÁ#¹Tý\©íZ»já-å"­NÙB—§‘"™PÉ2Aõ§FÍY£ÕS±ï@뵎ÿ“yë‘TûJ¯#ñbÝlÉï,õÀõÇë¡×Hç·wåÙ‰°±_™ÓßéuŒ±ªå9áPÅMÛÒ‰ÔÇ×Å2ç;í>Ç}ë`ßÖ…Wõ·ŸG؉­«—áEû,Ý8¡Á‘·‹n…Æñj˃û²ÿÙí‘ù(Ÿi‹­åB—z™‚ÿ -§'ß`›‹×gÏ'¿¹ù -³PÅ·bË Ã8Õ0÷±'³B¹…·#×6­ŸÉÑ“E‰z›©ËÁ'™nɦ¡!Ã/õ¥÷7«‡1—'»wû•¿‰©-½0¿$ù‡Á ¥+‡u+µZŸÅÇÿ#»k½©‡;‹Å‚¥m»˜‰?“£!¯"§P5¿?Ý»L‡ ;‰?ù-?Í•§”¹Ëã!½óC¯#ó&¿í -û"•}¹«·Ý9³EÃbÕ'“=—–é'Û|Ñ;Ý—s9Í"‘õ Í!¡•(‘xÙ=ã -E© Ó³«ÑoÓD¥± Û——˜£·¥Ñ>KåD¥ºÕDµG¯ ½…ùŸ‰jãž±·™<ý -‹׉¥µƒOûH£££¥§c±'÷C§"—ù)Í!‘W§ Çx#µ!ë5¿{­1Ý#£^¥ »…s7³&©±³õ—ƒ7¡/Ó«©­G±>™~ÝŒ¡‡Å‰Õõ¥½Ù~ݪó+÷S8Ù".ÌÑ‘ϯÍ?çÙç§y­‡‘A¡K™"-ùv± 7…›u±=±½:“‹8‰ˆ‘‡¯WÑ!÷¥¹›–Ó=·óZ÷’õ—û@¿Ù‘ ¥K?Ã/Å’G£ ë™§÷eÝz‡ÇS¹ÝmÇ Ÿá›ÇéËIÉ¡—«Ê©-ñ÷<ס¬ÙA• ±DÑ¡ùÅ—ëû,¡'¹•mÇ O³gÁ”ë›Ç Ûµù:Ÿ§E?‘HŸñý¶Ÿ¡!íŸ#5‹ÛÔ±gÙ¿¹AÅCñ‰²“5û9ÈíB‰®Ée­ADðÛ:;ñÝ$ù‰×¼¹e×#£‹ëÕUAûí{½¨ÕI¯Ÿÿ‚ÿ9õ¿#3›ë}³>ÛV7—hÑž¹Dƒ7§¶¯"ŸDÏ]± ·ó¿¢ùO9EÛÅ1¯“#ëŠÇ‰|öŸ83Ÿ'¥Åžù±ý¥‘ÁÝhëX¡d£ Ñw=ÛL›ñ¬ƒÑ”õÿ— é‹É·Ÿß‹‹6«£íc½ª¡‘?Éï›ÙÉAé1§ —„?÷D;³•X³Ÿû­Ã"£e£ÔãXyù–í"G‰÷È›¥ë ó5£pÇ4›±Ùõ;¯Û"©:å8‡Ï·uv»¯'¹·‹ßaó›ïÁu§Åóªùý(µ¦ý …"‘$Ïi™ÿ ‹‡ƒÑ ó‘Áo³7ÓCÑÏ ‹ ÉY‡z½÷‰YŸ·Ç 7ýßvÛD«ûÙ”©V‡ËåŸCÍJñmͬ›C™-µDýÔZ›·­®ë?—ß|•Ùãßµ÷ÉŠéO—Ù„™;{µÙç “ŒSýÙÑÓ -¥ëXÅ"¯·u™§µsÕ"›OñXålÓËÿ -Ÿ«"“\5ríË!Íb±‹Bíy͇"…É(—Šû 1¹.©§‡6™½@«I¯YÅ„ÏY‹§y·È«ÍL7ß$¿‡‰B·¢÷?µg­§“8ûË!áÍË9›¦Mã"å}£ CÁ‰×?ßÀçeµß{‹Aß;ÝÇÏ­ýC™“€ý!±0˜á)…/Éij‚÷Aߪ‹ã åùsí¿›º›)“1åñ¾ée•Ó/ÛJ¹Å¿…AÅñ ù%÷w¡"¹›ÿG—¯‹é ÷å“×=ë-Ñy7óaѶPµ´%Í¥¬Ïbõu©·µ"—ÀÿïCé°á~Û)ãÇÅ¡†ËÁ!“ÏQ³ÃÑ`ÿËKñrÁPË81ÝHë…E™™ñFE‘.Ï‘ÍÕÇÿÕJµ$‹ƒõ5ó¥—)去ý)çCõF«pA݇Ã'ëaÙT×!§"Õ§i¿;ã ë52• ¹7¥¦§}ᑯ1³…/£3ãÉÕdŸFÿƽ=±+/ý϶Í]¬…LE¡ Ý+›Òñ A‡¥"—µÁ¿å ÇkÕÊ© )ÝŠ‹Mï¿Ã¹á Íù¤«[‹4Õ’Ó -ÕéÙÓÏ¿<Ù!¯E“¿¬íN=¹é “•—­íL‹Ç óízÙvÕݰC£B‘dï{ Aßõ3Ç«Í7«ó&ß›ƒW© ¿³?Ó6‹pëS›ÕKÛ_÷OÓ'±ùŽIŧ|£¯çËN›å³‚›…álŸ®é#'ýQ‹w‡Ñ#%½J¾›/ÿç+Û›vîóÇMë–óNµ ­¸1©FÇp­+¡˜é×ß¡”³ÕŸh)••¡—@©£‘£‡=©o…¢•j¡»³pÕ£Vïù3ßH“`×A½Gý«Ñ&«“¡·ÃZù1É!Ÿ‚ŸsË“NÛ•D7£ ý -Sã±YJ±Gã'Ç5ëg•z™_ÿˆµ7A‰n‡¥( 5Íe­¸½"+ëxÓ´¡~Oµ(“!ÿ§ -¿¿©ºÍ€›(¹­³¡8õ(‡ƒý0•DÁ£'×$‡ §ï‹*Û0­YŸÝÙA™$7ëÛ.û -®§§Ý³½ˆŸ“qÕ¯­ˬ¿µÎß ûI³¡ ¥ù ™ù#륋ý ¡¯“&Ù³…Å !Ûů…bç=»ãÍ ±Õ<—?Åÿ ³˜Å2å«¡%»#½Ð›$ÓÖ… [ëBõ¹åMWå)ÓeµK›X“{)ÃBå\¡1Å€ý»Û Çn…ó“ºÑÍ%ƒƒÕßÒÿu‰6ÍD»›2«fÉ<·…µ<×’÷—ã&¯ª§Ÿã¥˜¿lë³ëÅ7­W“‹‘ËcD“ñÕ-¡YÉ'‰[ÅS‹;µË(ßÈω…åÛ­±(¹]ï¾Í>ï;íaãGÙÓ4å$¯ ï"•2ÑQû%‹ïh¯•ßÛ~µWë8³*ÕM»—ɨ³›1ÿ÷Öé‰å7ÓÎß8‹¸Ï£½ÀÝ Q׵Ǒ—õ©N™¡¹`ê¿cé—T¡Æ«Ìƒž©{×¾¡ÐÝ«k«±åG³ÛN¥RË‘™u‡×}Ë‘_ÁãÏñ±©¾…Ñ»´©ÃéEÉH­›óCÿ$ɽ¦ó{±B­µzÕ¦Ý!áz¶Ù»ñ­å&ÓÕ¥[á'›e…¥½ É‹'±®³ïçù$ Û&“;«/¯+¥«Ý#Å"ûÅO£(Û½é ×µ1ÃÓyýVņýù ‡Ã¿ó1©ÅQç!©sã!³z£å£¥ƒÍÁ˜Í ¥ÑÏõ8Ý&ÿ!§#£Ó é"ÙŽ…&©#›‹)Žs« éË¡“ ½ÿƒ … -é<ÉûWç.ñýÍM­×ÿžß²—ƒ^‹0§‘5×<¹Û8áŸ?ÕCÿ4çÅS1£Ù(É ¡Šë-ç:ƒ¯#û•1ó¢·°¡ƒ¡¸õ -IÛ!×zÛ1Ý'•qå+¡Ó“³~IõZ¹—ïï“P¯õE­2Ó&³¬(û2—ßõe·«Ë2¥›®•sÅ ¹õ Ÿ¬› ÁñuáÊ‘Ûý©Ù±r/Ï6’Ó‡Ç!›¥‘ ǹ¥•:÷Y·zÝÉ#½L£K³Q™0«£š¯ëûy‰LÁ¡³ç -©!Åž›Á/áÁ…³AÑPñ.Ë$­„§§'ƒ#õ^Ïû á‹"¥‰ŸÝ ½¯"û«PÁ*÷§±íçѯ¡© «—"Cí í óã<Ÿ)­|¹± õùEÑxë» ¿u­FÕ™ç!à -óµù -Ó¯ÓÏõw÷"‰¥õû'õ#Á -‹PÏ(ÙX·+™‡RïÝ ápÑ+™!¥,£½Ù«ƒË;½©¯<§¡¡Ù[Á•&¿÷"vë$×#ù¹Ï7ñ¿ª©"‡%Ñýœ‘ Ÿ9™™K¿~µ2û©}Õƒ“#£ -¥:»¯G­=Û"ÕCÑ#…÷-Õuß ± µ"Ï}Ñ<—XŸ ƒ4‘p…\c½Ã￘©'ï é¿í)ç—4ÁÁZµbÙ‘ ý©Ï½×õF×Zå… ç>•Ù™*)û Ó ¹ÍV™;­Nñn ÕsñÁ;¿*Ù¯ ï?—õ§DŸ ‘mý@£ Á“ -Ÿm˯㠙³vóÑ‘õíA§·ÏÉß¼ƒ:Á›©œË ¡ÆÙý·Ç‡–ýé¨Ç.ḯ"!§Ç¬ÿ'p­eÍ+­’½;½É ‘Ï÷tƒk·éPïKdñ#™ª—&ÛE‰¯;ûg‹¯Y‡8çl‡ų‡³„ÿ“ÉX»ɸÓrÙ ó— ‘(ÿ‰r©f‹QAÕ"ýA«ÅeÕQ•½‡åNc"›©ã"ë—‹’ÏzÅ%»SÇÇI£l± ‘©¯yõÛá½í„››!ý ÅóÛT§;¯ÃÍÏ«d‡cÃ,Ǩ™ÌÉ·h…š;­Ä¿«éO¯k‘Ïã»tË“—6¯fÓÿ‰¿Iûj)û£™›HÃÑ3ïÑ)÷Á•<Çk«?ÿÕ‚±|뮥QÓJµb¯£±sÅ燅ñA»Î¯á_™‘ óY‘“0ù fƒÕÛUñ9Ÿ„— ¡ºõ ­ŽÓŸçÊßOëYÓD§Wᛵ£jËAñt¥³Ͷ…Íuá#í¿€ íÔÃa¹=»Jõ½e­¥‹ ûL‰C‘÷OñãSÿA ø•ʳ ó’Á§ûƒØ¡+·Ù0Çn· ùϬ‘Ø¥#—¯ÖÕ±¯««L©kÑ™‡Öß?߈ƒÅLÝ…7ÿCÁ†²ùÔ¿“'ûÅõŠ…£×`ËF;žãUÕ!BCëÝM“«m/£°iÑ•Ç7ßT‡ñÒ•¼Aí›Ù®ùçNE­–§©ë²¥¿¹½ãuÍpé²ë…ñC…é®ñ͚ɇ‹¦ÇbÃI•Ρã@ËÄ“‘«»;­œ»Èÿ ïB©&ËÙÙÝ#õl‰¿z¡iáB¯@…õÅn­Š+«ÙÍåhÏc‹Ú¥*ýkÍÖEÛKóÉ¿ƒe5¹!ïuIƒ5õ3¹Ñ·ù=£_#‰*¹Y‰ŒË¿—õ„½u‹Ã¯]ëNÉÛ»©÷GéÊõqµQû nɬ§G§ -‘§=“¯=Ó®¹¥å'÷!¿õ7å'÷ í·(ÓH©©ó’×"ÛÝ>•ÛšŸñdÓbÝ»É-+Å)½‡!ÿ© -‡SGï"—ƒÉ ÝK›»%½#½ ­"à ßaÿ¿Å1ÕÅK¡Mÿ)›·ç4¹ÉÅ'Ñá^‡#ã¡#•ãF—/¥}“#“(³¦á/û7Ñ;£¯Iƒ"ÅÙÕÔ¿Ëé\‹&Põ>ÝÙi·_ñ®í4³5ƒùÀ²Ù¨Ã.±“ñËåŸtÕGÙÃÛ¹0ÓS¥N§Ÿ~ÿžÍÏ`õñxÅ÷6á½”ç ç ›,­ßÄÏ‘Uÿ“3¿ÍJŸ Ï/ç×ãÍ­‰U‹0åx‰ÿa›£çqÛWÉ*çT±ƒ›=Å É­"ÏáJÝ—ïéÃ=¡§¯.‡ž‘ݧÏ!…Sûý?Ýí·÷é1ƒt¡[цª±ÿKÏýã!•vÿÖ×µ¹!1µwŸá¡Û³š£ íXÿ²› ÇÁ_µœ×p‡#-»ÚŸï/§OËÌ™lÏ ÷DÉ!Û¯¯£²ýg‡9ãóÿÁj¹,3·¥ù…rëÿÅ#_ɇóóA±ã®Ý›7¥†á‘9ÿ3£rµŸÁ£—à 9¡©#CñBÁ*›|©ãÙ…§#ǧ“ Ï»Ïéábí˜=£Ëq÷Ã帓ZÅÌ1åÝÓUí01‡Ó7—ùÃËÏ ý ¥ …Ñ*4Ë ß ÉãטÉÛ­'û+Ï$Ó™*û›™é?çc›jÙÔ1ñ-­ñ#¹›#Ÿ©>ßV‘ÓÉqùÉÛ0±×§D¿Lµ‘É#Û#ƒjç"µT“"³å$•'¡IÑÕ«Ÿù<§ÿ1¹×/“#ɱƒ1«½Ç í½(ÿ“ Ã%Ñ<ƒAó¥ÅÏó“Ñ‹ ¹/ ݵÿ"—$õ³'‘NÝ/ûÓ:Á Û!Ý!©<™yÕAÉ Á•µù(¿Å#µïç…-«»ù-åÍ«"é³#õu;§1ëí‡1‰:·±­,¡ ű å#Ÿ#—M*ñ"™#¯"ãËF£§¡ -‰ -‹#‹ï\/·Ë"õ©Í~•ŸI­ £ É0‡'­”³E‹§$·"©—Jý"‹óN,ï1ƒ…=V¯÷ï‘…5ñÅ|»FÉÙ)Û,ËŸÏ{éOÏñãÐõ6C…™÷U)× ñ¹•Ô«[ƒb›s·¶­Dµv/ÝÍ!Ã%Ãá©ó±'³­§ßtí!Õ³Ù×v§å(ç–£+Ÿƒé¦ûÙ9å=ƒ7…Ï΋^©#»¥~_•ZMáãL“nÉ9ƒ!³Ç`õω-ßó‘£ ½n©w‹†½.7ÑE0Û û§£«}‹#›·-íÓÃ¥$£Ø“ˆÅ>å …ÔG÷ ãx¹W…´‡ˆ#ŰÕÎûBÍ…®§ˆÕ°Ÿ(£¿ùÊ ë¬³ËCý’ýÓ[õ4Ÿ![Ñ̯„‘­sÛ7ïn—3ÿ“ã[aÉÖÿNïÑݼí¡w—£­UÕ.yÁŠÉjãçDý/ß2ý!ï½H1­í[« åÍ)…,Ñ3ïÏTû…¿œÿJ³/ÁßÍ㟯*#Ÿû4Å‹ -C¹<ݽ7·=Ípµ;û­Iý‹õ9›#Ÿ#•Ÿ -…«OÓ-©Dÿ™Dáù&¯ »"›T¡MŸ¿`ù°­^‡¨|õY§Õ¹— -Í+ù3Õÿ ­Gõ¿.±1½ ÁýõíBÇ ¯¥3Ïsý ÑÕÑÏã›(åÅÁ×ÿ=ëÑ‚ñÿºãÁ«µ¿›t¿‰'½Å·OÍ‚9—*§Á ‡*—™·‘#Ö¯#—NõoõLñ‹ñ rõ ›!9Í7‰Tá+‰“!½E‹ZW/—.ýs¥\×Tý@™Î•9(¯ºõ Ñ1ã¡@§ŠñJñdëœÇ@™ m#×ß¶¡Jß-ÑS·‹?ÁÁ"Ñ!ýL¹%Ó&ŸÝ½O³.Á­B é#¹T•.—0Ó£FƒF%“)QÃO§1µ¡’ÍB“E‘:ƒ÷åÏ•¯»“§у§9Ñ"Å«3Ë:åû ±ŸÁ Á,ñMñëA¡$•*©P¿WKí × Ÿ(ýw¿ ë -±ló½.•ãÏ+íû!d¯,»›‰‚å)éÉgý5%áÁÙ*ߥ‘Ï"“ÉÙpÅ+½ñá‰(‹JçBË Û™3éç·áž-»3ÁvÑ Ã§.ùÇÛÝ-‡p¡=›Ÿ6ÏJÿ¿¸ÍZý‘Á>§íÊ鶯´•§º—ï¯ÕËÝ#…ŽËvµ†¹I#¡¨ß )¹K Ï>Á‹J¹ËX«ÔÓœŸ:³3Ÿ‚³ip«z÷¥«!—íZÅqË!³±,çá¡‹÷5ËËa‘.ý!ÇÀ•¡±ó ±¡"ËÊÛç„Û—ƒ«Õl¡ÍµƒpÿÇý×Ç7í'†ÙsÙ…õ¿Ç{¡ù¥Cá>­£‘0í»`Ó#ÕÕ9Ù:ó¹³B «#Ã>¿!‡°õ© «¦‹CÕY…@Å®¡z•WóTÉΗ—í—ˆÝÅ·\Ç -óáU£Áßñ¥!Ï›±…Ó‘´@ù -”íÁÇ3퀭%õ ±MÇ(—E•’ŸW±›©¨‘9Ë”åJ¹¶ÿ'Å ¹.¥Ã[³åÅfɂۂOÓ2á½"¹1¡ùGµ¥ÉßN³Ö—¹›*á"“¯—J‹›Á$ïWÙ‰'ÏÍ×ýIËÇ4‹¿U¿3¯ Í•¦Ó ½p“#ÿ(ÕiÃB‘¯Jù™rá®Ë`»?çrÕ›"›³ -•L˧a—l×qéÇ8œ%±6“|¥Á÷$Å•ý -í@糿»ª³ÁË3‰S߆µ»ÖµXlj¨…­‘¦ë'›‚‰“œ¹ £ ß#Ç:ÏV—K‹“5ÃÛ1£ÛßPÙ¾{#±*ó™›ãoù¿F‘Û3Åa§8ñ/ç2Á<å/ñý!ßkÝ¥!4Åù:—Õ©3…×=íw…8•6Ÿ4›!Ÿ™•‚‹+&·†¹†‰¡•À“˜—x§Jà -ÛÂ¹Ï  ×u»É™%·¬ÿ„éÍ™ý{É… Ëí(û‡½óyç׈ÿ Û±ã+Í•ƒ²£™Ç›GÕÌ×dÿ]¥/©‚ùµ¹«|í^±B¹FÅß‘s“0Û¥˜™Á"åé0«iç%ûóM¿j½ -·¤õÉ)…yÍÑ­8Ù>Ÿ‚Ïy·F·YÝ™•)ïá“[Í'±5«{ûƒ‹UÝoõg•&Ë€Áãs¹\¯5™z™d­£‡×·/¥AÁ¥2£‹ûÐÕ‰5Ç•Ët‘ÑuÿIѱõ›Õ>…xÓ¥u•'ÕÏ« #û[ó§Á˰ƒvõ•‰áµ -Ká%Íɶí*Õ×Ç•?YÁ’ᕬٸ­•Õ,«oã›Óo•4ñ:Ñ!#™¹«tŸ"Ç"ßï"óo»ýù&é R­Ã£7É« Ç&­§)±÷ »°ÏRÑ*‰¡Ý(—“›·Ÿ -‰Ç>Ý‹ÿH¹Ç­ËñëËåÊå± å©)•FÙ!ñ Q‰#Í™}…x©·§­\“u¿.Ų¯ËéGé§EÁAµ"µ#Í×— óy• ¿Ë-­ë áé*—ß8Ñ‘Ï*ƒ%¡É³ÍóBÛý+©ÝË9—:«û—Ù »7·’¯PÑÝF«k³+Ç$³9ñ -•/ù‰õƒ ÷‡1Ü…>çãïÍŸ@­± ›Ñ‘!ë5ó ¿!™ É@ý»0Í4©R“ ×­¥Ý£ÄÕ³†™Ù¹Ë"™ µ…í#ßh ‡ -ÑÝ}ý)ÿ2ë!¯³á -‹J½(ë¡'­¥›b‰žÿϵՕ͟ -»•MÓ;…(»Åǧ,­ÀÇßûïí8÷Ñ£,ß»'Á+åwÿ Û ­¹-ýcïÏ -ß¹ã›ݶÿ ™«û‡õp™éÍ;½Ù)ƒ‡ß"¥ˆû3…©õVÏ!é» -·•™>÷û=m]—(£›#‰ß"1‹¯_·‡‹±Žû -3Ý')ŵÁ|ÉÙ§"Ïù×7ÁÙ ÓuÏ2ûŵ|¯K‘#­ó¹±¿µ:‘©Eí,Å&¿÷Ž»8“/±ÿç ›Iÿ ¯ Á µ×áv‹ƒ±A•!Ï®ù'ÅÏ/SùS££¿ë3…ÄÍ…ßµ£Ó ÷!Å{å%—õ !óÉ0å€{?«®Ÿ ›M©i“¡ç¹- ™[ó•5÷VÁ×bý<'‹ÍÍ&ÁÛ‹Ïfý É!»%©¥Y§×,å µ9…!·Ý …Ñ¡7½õZ› ×-«"Uñ;…{‰ ÏK¯?ÃùÄÕa‹é"ƒ -Õ4› -ÕÃG¡2!‹©^Ý ãŸ#… ÙUÙÑfÝJ‹$“·=ó”—Û€$¿ óùïU•¶¯?w¯ó Ù ¡ãó±Éy•"­.Å -³µÉÝËC© ‡;#¹Ç•iéÿÓ"ñå»$·™ù%™=Ë/ÏéC©ó/‰¡:ñ—Ÿ#•)«1õ=ÝVA§Ó£DÓáÁåtÅDý!Ù -³*ƒ‹4Å.«ãÏës÷¡JÁÍ‹#‹ç˜Ó!µ ©¶ÑÍ¥.ßß‘‹Ó°³›!¿¤!…Ñïtë™Kû¥SݱÝ6ƒtÍ"¦·—Áǵ˯DëFã³ÿó{á‡CÉ™¹ã££µ"×$£ÅÃ÷*‰¹ Á@Ç=™!Ë÷Í!ÛÃÇï{©Mó Ûý"Ó¹·ß Å>ÛW“§ÏÓ–·!¥"Ýï"µ(ó -Û“EÉ;™Dï"“É#ë3—÷¯¼ÕùÙqŸ*É"™…í½!¹ -¹ã ±8ë—ÃLí…)¯ñ á"¹{³ÿ‘™§ËwÑ£ƒ”ûå ‰~ï ×—ù6÷ÇqÏÉF…z“ëÍ‹Ç׫°¹¯p—Åñ+9㎻µ5Ï Ë£E³*Õ/³:óé…ƒ>!Ó¤‡[™'уååQËÏóëë[å0å‹‹Ø£Á<ÃL¡Õ!ç§7«Ÿ›:å¤ý­>·K·¥$ÛŸÕÇw鯡µ¿&¥¡&×JÏ‘‰8ã»<Ý™5×_=áó?¡Ï>£“‡›Yí1¯áÝ2‘ #÷™?ßK¡«—_‘×¥!õ›PÅDÛ‹'™O«›%Û%•…ó±YÅš¿¡8Çhëí Ï0˵ õ5ïWíWŸÏSÍËHÇËã‡ÿ;ç?³é7‡Ù<ËVãÕÑ™2½"Ï2ÿ0ã`á Ãí;û ©;ß».Ÿ.….±-…‡ßí&å±K™7û õ¥#á1ñ‡Mý‚ÇF•ßXÑÝ/Ë5ýƒ<³ˆÇ.±×#­J¥‰³ Õ.¯#·;õ1¥%× ëGýëÆé­"Ëí;ƒIåšË -£@­›2ŸõXˇµíYÿ0ûKëÃá -ÁµŽ‹ -ïëZ÷<¥¡¯4å«X›O×4ͱ{§CÅ­'Û"ƒAé#›)ûßµIÛw³µ/« Ë™DE͇• ‹ Û±·‡Eë çZ¿“ûE«…,õÃ;*³"ç'Éý$¹¥Ÿ=óJÙ÷ Å-½ÿ!µCÓÃñ6“é¯FÑ7Á'á…¥+Ó/O™w×ó£|«6û¡.Å… 1¿›aëJ£éÕ#¥éƒà ­« å[Õ á áñy—Ë…»­/û?ÉM[Ÿ£©$ƒÌ盯‡ß¥ñÉ í/é»4Ï2Ù -›³¥§•#­¢µ½0ÓÁžï&Ï/·Á¡á ¡'Épýµÿ|ç ÿ§™;×%÷ƒ9¥¥'u³“*…§Ÿm•™íƒxÁCça¿« £@µ*Ï Ù”×$·¿A»Kû1§£-éEé ‘ å;¿kÝé £0 ÁÓÃ1¥XÝ7±;ë̯{“4çñ]‡]—Å"Çy¹ÛÍ#Ã1Ý_Ó@¯Çßý¦‹>ÿ®ÿ;ý|ç`ÃdãØù…¿Ã‰z‹K‰»›@û®¥µÁ‡VÿÁóßJŸŽŸ"Ï:£/•«ç ¥‡‡"ãTŸó‡ ¹í × ©y á ™0½ ñí -™»Ÿ(Á¿@÷¥õ— ñïñv¡#ý¹»‘é#Ñ ±«0¹¥h™û“&› ½ ©9Ñ"Í‘!Ñ ã7‹kÇ;¡ )×/…(·™³…Ç ç ËLÍGç$û¹"ñ ‘xïNÍ ¥·!»$çOí!¹ ã"Ïc÷ ýÓu½¹á¯ Ï£‹»'ÓGý/½å ùóoéý Å"Ãj¿ ¿— ÿVݱ¿ ¥— ¹ ù2ÿçŸÏ;…ËÅÍBû ë˯ɕ±õÓ“+½V‰!‹2Bí!Ÿ¿Ç!©±»évµ×½v™ÍßÏýɆÝß Ï)©Åñû³‘Fç½í¯ÛQ“AßÕ$ƒÃÃ.ó‹RÅá­… §µ@¿³#ñï -³ñxÓŸÕÓÃ|+©Ó6PÅ›œÓ!Áh§Õ)ÙÊûc;“?ëVÍ:‰œ“ˉ - Ë¡÷ÐÿOµ³á"õ¨ÿ4— ³±{ã;©(Å@=ן›(Ñ6ÿ¬¡-•Ûµ‡ûµB|‰Eµ ëG‹*‘ ÝC•LûŠÇÃ(ç§Ñ ©ù'Û,i• Í.å³Ç£%­éo»½§5Íõ_“wÏ”¿É8…5ï4µ1ùSË8ɉ%ã×\û.…û$×ãa•+Ý£-ÃK­'£Ÿ‡å ÷+Ó§é£`û¯"ó³1“‹+íïký-Ù"ù1‘M›‰×!§$ÑCý1»ý8ÙI㉠Á2Ï ¯?ç!“³·¹ ŠÛ•ßnùŸ ó3‰C½©Ç훡Á ¹$Õ1£2ó(Ñ:‘Õ`*ûû'©Ù'•Ã,“9™F· çM±vÛëëË9Ç.¹I«ÉË-‰hå!Ñ õ·6ÇF©(¥—¿‡$›†)Á$ÿ'ç+Ù-ë2•4Ï‘%Ç'é1¹2›'‘™"ÿ,Û0‡÷‰Ÿ+­<ý8³ û÷²ɲÅ ùDå|×+Ñ ¥±Ñ ×)ðã2zã+áAéë•Y—,©½6•(ƒJ¡õ¿V×$8ßûQ÷‡É4Åç§"©Fÿ »Kë%ᕵ‰*ÑÃ#½\™‰­å(÷O·÷CÙ#Á-ÕLÿç!›<‘·Lý ¡!ýK§"Û(é¯ù™rÓ!©8™ï+¹›F÷"ÁˆÓ‡Ì—…;¹"­ñWÏG©Bý‡³½‹ãgë Ó(£]åU¤õù.Ÿ ͹——,Ÿ+ÅZùÛ/·Jû -—?ç2ÃcÉ£ ‹#ÓóÛB“BƒŽ«Ÿ“›$Ç$±Å“’ùñ†‘ »‡\‘Fß÷/»ÛCÝ8‹‹|ó‘ÃQÝ (ÓÏyу"ËÙÁl‰Z›Å—…›Ñí ó"ýRS±‰sï‰ïÇÇCÝ.õ£#sŸÉgƒ&™$å#ÃLÑWù5Ç(» ÕùZ³7•R…FëljïpËÇ!››£ýÇ.ųå Í·%Ó“Ó o͇û±•‡L½‹§Ç'¡¥$³ ™ ¡+ùŒÅÕ -׿#÷HHÉû¸¿ ‘ -Åý5³*ÓTå ïíà ×#ÁÁÅ…ÛÕ¹…Ù«•³ Ë@«í‹Pã…YíÛMω*£€áÿ¦ÙD¹ß*åáM×» -—É.½~‡·ˆ›>E»›!‡BÙdƒQ‡$éÉ#½"Ñ—ÛÇS“ ¥#¡™›3ã››‰¡ó÷‰Ï -¿ ñç+ëÿÑ™‡5ù­"[»-‰]·0ï½!¡Å!õ ‡"û#žév“…5¹ ­ ¡¨¯¥S•£A¹7ÁÑ Á€Ë!Ë%!¡?ŸËI§CñBQ‡ï)‡0Ë£Û‰ÑLÝ'ñ!éD©=·*á•Á"çÓ ·‹#“Ãí§<÷ ‘V¯¯,¡(×5ñ Ç«Z¿?…ƒÍ/%˽ï§!Õ •—+Ù~÷Ûù·ÿ0Ç‘OÕß =ñµýuÍÍ ½ϯ3ýn¡µÉÒÿzÅ4ñ#õ¥”ñ -ª…_¹Á©dõ£¡O­.¯ µ‡› ¥r—¯³ ‰…—ß ÏC“½(Ñ•…&å'“(›=Ë“^ƒ&ïÙ'¹&!³+# ÕJ5ÅGùM•%¥(…„ákï ëD!õnÁ(ë7a›y§E³ ™•E“O±…ŸC§ÉSå!ãV¿A㭦푫‰ñP¡pëO½ù}å!‰á#ó™¯"¯L‹™ -÷Õ#ã9·CÓ|¯+§DµLƒ‰"ó‡~Ù˜¡&§“ÿ ™Ž¡ÿű#§«Á·£¥¸©r™2¯³,ç-½K“kñ · #ñŸýÅ‹‰í:Å1)ã-µ±¹y#.‹‹·ÏµÙ ý"ç±%Q•|ßÓá—)­gÅ -™*ë¯ý Û"µÌ¥I½{Ÿ<ù$»¥ñ§À¡f%ù`­ÙÁŸ¤³ñ¶• ÍÇ͉£¯¿‘…­cÕVñ‡Dõ¿ÑD‘"•ˆ… C÷;ÝYƒ¹xá!Ó)tñAŸ¿÷.Ù© 9©áùå•óB™½7ÿÃ^í -˧³—=Ï%‡H-ÝCÇ9•ËÑpé_-­ªóÿ á3•³“Í'ã"ù@ÓÛD«§µƒ×DKÛ±ÃõÍ -™)NAµ˲+ß'ùx÷'û©š/Érƒ(‰%»Éåý—(Áb›“$ý>7Û+Ý¥§(ï˜-¯ §:/¯&Û]Ç!9Ù&7Ù)é#Í"…Q¥±µÍ÷²ïC%§1µá"íIó ¹Á‚™#¯ÿ&5û¿¥£ëu‰E‰‹DÏK÷.£…'¯½ç0Ãù*…ç5÷ñÉo±I7Ý—"Å ‡ Ÿ£C©+ëEµ˜Ù …¥C±£Ù)1ňç'áó‰í ™³™í ‡…B5ñ¿˜=ù>•£_û.E·—»‘í-=©”'=Åd·Ó(£O‘¯"§Gƒ±¡ÇÃû Í£ ©åÆ“éiË »áy÷… •©½=û¦ÓÑÉçžUíÈ•»=§8‘y“Bƒ é óHñ‰x¥Ë£ÙG»£/÷X—‡¯8¹?É7‘Ч59û€½W÷·‡ÑËÑ-±"¥WÍ{ƒ±¾·mÅÕï¸ñ2ÿ´¯¾‘”‘1ù. •§ñ%×z·rƒ½ Ù"“Ûß=õ ˸íKÿFã%Ï‘‹»0½\Ÿ“U•íníï:Á÷}Ù1“Íý -õM¯ÿ.‹Û>Ç”Ǿ‰Ã:¡—*ũф‹K¥Íó˜Ëdß!ñóoýÃíÁ"½(éRtù'¥ ‡ ×çJÛ)¯%× í³‡»²•™¡%‘“óL݃µ£çý¡*•Í×”¥W½2Á™B­»ó;÷é™Ó7ëSýËÁ…‘áÇB‘‡ ÿ&³Z(Í›¹Û³ ‹,… -ÙÑY…-“4¯o­ç¡5±+¹Ï…ÚïJ½ ÃÅ*ÅátÏ‘#« ÙíÓ ùÕ£ƒ«( ·ƒ"Ÿ‘ï"ù,Á … y!¿D"ïz™ÿÇ5Û—×µx¯—£4Ç—‘*ûCíí¨ÑtMÏçÁ>‰‘ƒG¥ŸñhG±=ùßqז鹇ÅI·‘™Ç '×"«j»~ó¾ÃÑ5á=å–Ë7›½•ÿ1‡bÙÍ.­O…‰µ;閉¨Rñ.±’}ã¾á­ßh«%£™Ý/û‡µn§ ‹›é2× ï%ã6ŽßÕ%ͿȭŒ—;™=‡q ­9ÿQûr‹5僳§2¯½q§8çªÑO¥$Ÿw±7©Ÿ½Êï-ñ-‰a“ ÇÅ+ét‡;‡wÙ8¿™Ý·s…ÍÇÅ5·EÁ$Ã/磩“ÁÕ)™]™…i¹÷~û($›ß”÷R¹Då¥Í¿Ú“׃֭nç!•$õÓVËb¥HÕ8ÕšÕ‰P‰KLJ£ñsÿ±±†ãz¾Ï·ÃÙëGñÚÏu·‰‹rÇBÙ‘‡aå í3ýcÙ2ç\ÍÕé³§ýLÝϳróf¨¹Ë™—ýÓÒ#á•!Ó†· …‰Ï‘l³Ñç@õ…¹TW½µß½•Yÿtà õŸ‹(ÍNÙûN£…­GïÁ ŸAë1‘k‡¯n×1ÙR­Öµ`©<¹'ß°ýÑ¡Å}Ïí0¹(‰qËJŸ]Ù(ûÓ›ñ@ï㦑!Ë©Ç~©TóDÇ.÷1©Á+¿H¥›í)Í¡Õ5£ ÛÓ.µñåó•Ç¢«#Ë2ó;«÷HË"Å/ó;‹€›;í8ó>ƒ[Õ&¥³K¹[›ç’³©‰ÅƒzÏUË!©>‰†‘Ùç…ý‹…%Ó€¯¡ý ¡õgÛ”?ÛÙëM9ËÕ·"¯)«ÙµG­<›YÝ~ÇÉ ã‘! Ë»©š7Óë#õNũխßЛ.Ãȧ&ÕûEÙ(™U ›q³VÓ¹ñ—÷sû¡Ťé¾µµÃ&—ÑKŸÝ5±e:»'õ(ƒ¸‡˜µPó²ƒgý¡k±ù¹×£u­{§œÏ¯©ïVŸ_Ï\ù„»:“XÿŠ©Í—}½ɤÑ?!!‘J¡3ÿ¥YóÛa¡ ƒ±7ßÙï;ãF©!¢­‚“±±Õ§¥·”…JÑÔÝ £Ï¿‡¿é¹MÁ¹ëPÝ@í£{ñ -ÉÆ•ù •ÿŸË«—Ç AÓÏF—\µÇ£÷qÛ<…˜áÅ&½'•]—[×IÙçMýÕµ§çzÑNݳ­ ¯ï «×Ó -/ÏW½žý%—É•ç -…ë½Mý-¡—?¹5‡• Õ­JñtÛ“­*ëÅ?ÛHÅá:¿ƒ ‘Gã8ó 5ÝWÓ9Ã-3‹BÿµÑ==¡ ­÷Kû´ -‹$û‚‘m×µ=éŠåñ•÷3™‘¥Í<Ç…Ñ©´cåÕcÁoƒDƒ ÏûG×S÷“ ÕËGŸ×A¿ Ï6 BÏ»»X¹ ÿÿÃ…I±M™k§Ö£F»Á³ -É>§ -5í%£Y­¹í‹Ç¥™9ÕÉÑ0¡{Í$7›Å0ƒ^í3ÕÿЃÎß-iç…ÏÍ.ín§$·û"ÉgåƒVçùbí&ͳß'í£a5§-ù˜ÑÃ6C«0‘1Á;‡w‹ Aû:¡·FóF‰‹‡³‰+©¢Í$õ’AãL¡FߢÕGµ,k¹%ÁgÇ(¹/õ)½mƒ'ë†:ç ëqý;Ÿ§¥)‡_ý…÷'éRë@‡¡ Û…åbí,»RÇ&™$Ù×Ñ™„ó*ùKÙk‘k‰Ÿ˜%½;“K™)ñísÇtÝAÙÓï=·g·2m—mûÑDój‡Ý‘Eé;ÍTó!ßÅ(ƒ«/—­ …u¥\Á× ÝQÇ%¥Ló(ý«+µ]—*‘4ÑE¯F£K¥ Ù<·)Ýï”õDýS£J©¿‡ ‰Nóý;'Ï›ãCÕ˧½)¥ª•d¯±,§.Ï"¯Ÿ‡Ž×"¹•õ—U‘Ê“!÷0»=Á ©?­QÃ~¯0£>¿‹yß*“pï -‡~ñ)¯AÙÝHj­õ'×̳ôë¹OÕvõ±a¹¿áØ¿‘÷iÿ¿à ãRåÆéÖÉtãcå±™ó¿r‰0óÿc‹Œ±Á£ˆÏ8·5ׇ¥™×°·5ËW…µÓ9ߓㅯû‚µB6Û²¡¥Ócý6­­“Žá?›ß›õ ŸÙ:Ç™ó‘\‘wã5§Ó¹z¥Çµ™Jñc“‚Ãʵ¹…ZŸ¿¡£‡F\Û½ÿ—åªÿv¯.ÉËÁïÀ¹ƒ|ûȵ½§\ÍÒÍ™ŸU›*ËËÍsÓ™á—9¡}ÓçO÷?‰Ã7ÇÐí¤Ó¹ ×Pƒ+㈓…»À——=ûTã(—†± >‡'¥&Ñ'µ·)“_áB‹ Ÿ•CÛT³hƒ “ýdÏ ÅH¯¯¡ÿMÙ$½aË ã'¿‰Ç/¿ÕÆË ÙÌÅ€ù®›xÕ¹÷Ø0ï£ÁcѤ§)¥võ–µ"½ŸÌ©v“©™2£ZýÝÁéÇ#ïÏM£ËÇý ¿óÃáÝUù ™´¯áÔÉGGU»¬åa#‘ -«ÿ§í#§¹‹bÝ|ÁiÇ_Ç÷€¡=‘!ý¹­©Ï•“¡ß¥‹¹"ÅÀ£&Ùÿ)¹J¯Ò ½óÁ'ç%©J¯ã±ßÅ£ͰÏjãÇ‘õ­ë;ÓŽ‡!÷Ñ7áª+×s±Eé©ßÅ·¯jÕ±xƒ;Õ ÅpËnÉ}ƒ°óƒ©Ô¥±ž±å:ábÁ ©G¿+õ‡1“b›ñ¼·«!Ÿ×åEç|¿Õ§åg¿OáD¥'ϱ«Âý)å>‰ÌÃÏÅÐï†õÙß,—#ý“ÿ…“³¡ ³ɰÙ›×E›ý©‹¡í±Ÿ²Ï##—o«*·á½@éѷ(…2Û ƒÑ$ç -ÇáÕ ·¯$!Û1•õáÅ)÷ï'‘“‡E'A­\Ã$µ¿ éÉ ñÓ#ÿ!‡Có Ùõ½ -Å'×@±2á.'Õ)ýÕO¥+/Ÿ•½Ó™.õ"©ù¹¬©_ç÷rá.¿ÿ •Ÿ^›/¡ñ‘Gǃ/óµŸr™—›µá$¥Qÿ©)ýëµå.ë­<Ÿ÷?¥ÕB÷Y¥§r¹&Çóí·2¿£2ãñ É ç­ ™¯W‹_ƒ‰‰6û5×ýµ1Å'óZã­å+õ1µ¿å³Ó*‹“që±xÁ&Ëå,ïI…-·õ?ß1Ïá1›¥ Ýó ©qÓ#Í~åÏÏŸ\•ó"¯:éíXûT•yÁ^½½¡Äù ÕÛ‘ÇûŸ#Ÿï"“\áå1÷)õ.§0éc×…ßçu­ßµ.« ‰<«Ë$×(£©Û“:<Å¥½%‡ó$± ÃWÓÕ"©ósÛ"‹?÷Eݵ/ ‹/« -‘#Õùų—!Ÿ)½4ý™/Í “çDëÉ·/Á ç<µ"û Ñ" ׯéǹ(ë “$©ñ“¯UÕ±ç…1C)•Á ÿC«V©-“Ë ½9‘h¿• ¯ïxÃ@ÓÏ ÉÇ× -©F?çLÑ ÉÇ«Q· 3ó!ãÁ¸å|‰2çGÓ]Ó³I¹*»žÝK¹ 7Ý»‚¥ûÑ=¿—ÍEã£QÁ;¯!Ÿ»Ãé3“&©Ã‘Åšÿé AŸLµ(3ñå©ÇFù!Ó>ÝF?‹J‡,åã µ%Ë®—¥§<ÇóqñH‰OÅUÏvKõ'»4å5­d±™{)÷µI³YÓ‹ï·CÍuÇ2±v•x·C‹'‰ —ç'µ‘· ­)+ÙELíÝÇJë&—‡ɪÏÓX÷S¿iå-ónßoÛÙ?©‡×6Çíë)A›#©#—¡"¡—¥Oýëå(÷#÷¿"­µÅ¹1·†åÉù ÓAƒ&Å‹\ïë“'‰¯©ç_û!=¿ ÷=¯gá9½ ­&Ë8¥ç!¹Óõ*±M­A)çb÷ÿ“©!«4Å}9Å!…¡0½}ÅAÑóË‘Lã¥å"×;ÿÝió׋¤ñ>ç)—É—¥pƒH…P‘ß ‹Í‹Eõ&‹vƒCßx…Coç½–£TÇE¯–¿=·E‡¢í_ñÁ»tǨÅÔÓOÙËŠ“T‹ ë/A½5ï -“C‡&ÅŽ)·4‘éMÓKɯŸÏ"ëOó'ç§(ûÍNŸ('ÓÀ‡> ‹+‹Û•)ù±_Õ$™‡E™û1…ÿ.1ïO$…'½‹ë×-¥á&ë Õ<½ “<"]å"Õé¿2«E±­Bý'¥³(é$Û$Á&ï©-™/ï\¹¯Ï§;c‘]Õõ éã*›J¡ -ËAÃ$ÑÝ)ù$ý áÝ!ñVåµ -¿ç ÿ×-Ë õ2‡CÇã -Ó;õ"ÝѨù“(ßç'Ù -ßDã­*™"¿$ßýBË"“@­&© µÕ·(ëÙ"ý&ËÁõEó$Ýóõý+™$¿+ù"Ý DÇ™£ ­ß?Áõ#Ï“-·Ù!Éã>õ*›•*Ó"Ó?» ñ£Y«­Û£Õ«5¹(­ ›Aåí§7ýéo™ß#Íѱ*¡U·ß«)ù‡+±ÓDÙ°AY/—ÈMÏÀ¹ó/7Û ñ·q‘ƒË! ÛP»+Í*³ñŽ—›?‰ƒ'×­½ËÍ Ñr£ ¿$Í'‹ç2‡^ë -‡¾Çï'ñaß«(…U¡Óå™+Í7—"‘õ•/á ãýAï‘DùÛ 0Á¿‡(Ç]˳©ŒŸ·1­¥)— ó#‹F£4ïß*· ™™-'b›$»çÑ—EÑ+)‡tá“ ×Mñ#—Ÿ ·ï­,C¯Ï ¯'—#ç;» -·)½s‘t<£b›Ñ ã%ùdÏ&ïžM癃$ÿé©A¿E‡“ÛHñ?0ŸlÁ6Ÿ‰ûKÝc‰1Ó*£õãe« É5¹—ÏXñ‚Ï-»­+ÝNùÚÛƒÑ^í*ÃË»6«\¿§«<¡UÏÍS×#·©©4ÁÏÝ8¯C¡½#ó“•Á³ÛÉlçÃsñD©$ùQ͉#Í"ßï(Ã3­÷^ŸÑ± ‘B‡Áù$ÁkÁÇݓ÷Ÿ‰ñÍy“3û*íx•ÃÛ#募$§yñKËÛ !×± -ã#ãÍ1™—Íó÷iã*牅±vƒ¡#›‰£2‰ \×+ïO2‰D™—€å(¥‰BËJý‡•» -¯!… ‘«Ï…'™‡™DEÓÉ«•O“Ý-¡'¹‰Õ@ÅÓÁ*ƒB'Å6à ÃÍ+³8»›Ás¡5 -™¿Ñ­ÝžÃoƒ á×ËÛ;³³°]Õ}³Ë/>™/“Íý³(Á ûb›*ï·«{¥.Å/¹Óó7û‰fE Û­› Û +õ,Ûx§0O¯‰Õ/û2Ç&¿³—(Ë@·»E¥G݇ýWÏ?óK4‡r¯`×n‹z•.ÃÓª5¡X9ÿ¥ë©·¥5¥(W©Z·™á Ÿ×Ë™Kµ ç"í]›É.“‡y¿¡!lÛ¡#åp÷'Í>Ñëï1íñ¬£Ë%Ûƒë(Ÿœµ‡‘ ý¤éUñÑ2õ£Íñ"É{ïÅ;™LÓ*Aãÿ …Ý -‰MÙwï á­x›O“ Ñm÷NçÛ<ÑpáëfÙ£TݱÁ• ÃOÕãu¹@ß}©Ÿß« õ¿†Ç…dùU©Ñ¥c½@‡¡‹‘ å÷ƒïN©«/ë#ÉbÕ¥^£IñO•!ù&¹¥N¿ñx³ ‡ûON“Q»ÑJû"ÏNá8¥1ñb«Õ\Å/‹›P³/¡Qƒ=ßÝeÝÉ÷…ÝÝFÉSã Ç Ñ#¡]Û"‰P‘(›[½0ÏÅ3ãO‡‘BÇJçÿÅ]ÙBãVÁ#¹Tý\©íZ»já-å"­NÙB—§‘"™PÉ2Aõ§FÍY£ÕS±ï@뵎ÿ“yë‘TûJ¯#ñbÝlÉï,õÀõÇë¡×Hç·wåÙ‰°±_™ÓßéuŒ±ªå9áPÅMÛÒ‰ÔÇ×Å2ç;í>Ç}ë`ßÖ…Wõ·ŸG؉­«—áEû,Ý8¡Á‘·‹n…Æñj˃û²ÿÙí‘ù(Ÿi‹­åB—z™‚ÿ -§'ß`›‹×gÏ'¿¹ù -³PÅ·bË Ã8Õ0÷±'³B¹…·#×6­ŸÉÑ“E‰z›©ËÁ'™nɦ¡!Ã/õ¥÷7«‡1—'»wû•¿‰©-½0¿$ù‡Á ¥+‡u+µZŸÅÇÿ#»k½©‡;‹Å‚¥m»˜‰?“£!¯"§P5¿?Ý»L‡ ;‰?ù-?Í•§”¹Ëã!½óC¯#ó&¿í -û"•}¹«·Ý9³EÃbÕ'“=—–é'Û|Ñ;Ý—s9Í"‘õ Í!¡•(‘xÙ=ã -E© Ó³«ÑoÓD¥± Û——˜£·¥Ñ>KåD¥ºÕDµG¯ ½…ùŸ‰jãž±·™<ý -‹׉¥µƒOûH£££¥§c±'÷C§"—ù)Í!‘W§ Çx#µ!ë5¿{­1Ý#£^¥ »…s7³&©±³õ—ƒ7¡/Ó«©­G±>™~ÝŒ¡‡Å‰Õõ¥½Ù~ݪó+÷S8Ù".ÌÑ‘ϯÍ?çÙç§y­‡‘A¡K™"-ùv± 7…›u±=±½:“‹8‰ˆ‘‡¯WÑ!÷¥¹›–Ó=·óZ÷’õ—û@¿Ù‘ ¥K?Ã/Å’G£ ë™§÷eÝz‡ÇS¹ÝmÇ Ÿá›ÇéËIÉ¡—«Ê©-ñ÷<ס¬ÙA• ±DÑ¡ùÅ—ëû,¡'¹•mÇ O³gÁ”ë›Ç Ûµù:Ÿ§E?‘HŸñý¶Ÿ¡!íŸ#5‹ÛÔ±gÙ¿¹AÅCñ‰²“5û9ÈíB‰®Ée­ADðÛ:;ñÝ$ù‰×¼¹e×#£‹ëÕUAûí{½¨ÕI¯Ÿÿ‚ÿ9õ¿#3›ë}³>ÛV7—hÑž¹Dƒ7§¶¯"ŸDÏ]± ·ó¿¢ùO9EÛÅ1¯“#ëŠÇ‰|öŸ83Ÿ'¥Åžù±ý¥‘ÁÝhëX¡d£ Ñw=ÛL›ñ¬ƒÑ”õÿ— é‹É·Ÿß‹‹6«£íc½ª¡‘?Éï›ÙÉAé1§ —„?÷D;³•X³Ÿû­Ã"£e£ÔãXyù–í"G‰÷È›¥ë ó5£pÇ4›±Ùõ;¯Û"©:å8‡Ï·uv»¯'¹·‹ßaó›ïÁu§Åóªùý(µ¦ý …"‘$Ïi™ÿ ‹‡ƒÑ ó‘Áo³7ÓCÑÏ ‹ ÉY‡z½÷‰YŸ·Ç 7ýßvÛD«ûÙ”©V‡ËåŸCÍJñmͬ›C™-µDýÔZ›·­®ë?—ß|•Ùãßµ÷ÉŠéO—Ù„™;{µÙç “ŒSýÙÑÓ -¥ëXÅ"¯·u™§µsÕ"›OñXålÓËÿ -Ÿ«"“\5ríË!Íb±‹Bíy͇"…É(—Šû 1¹.©§‡6™½@«I¯YÅ„ÏY‹§y·È«ÍL7ß$¿‡‰B·¢÷?µg­§“8ûË!áÍË9›¦Mã"å}£ CÁ‰×?ßÀçeµß{‹Aß;ÝÇÏ­ýC™“€ý!±0˜á)…/Éij‚÷Aߪ‹ã åùsí¿›º›)“1åñ¾ée•Ó/ÛJ¹Å¿…AÅñ ù%÷w¡"¹›ÿG—¯‹é ÷å“×=ë-Ñy7óaѶPµ´%Í¥¬Ïbõu©·µ"—ÀÿïCé°á~Û)ãÇÅ¡†ËÁ!“ÏQ³ÃÑ`ÿËKñrÁPË81ÝHë…E™™ñFE‘.Ï‘ÍÕÇÿÕJµ$‹ƒõ5ó¥—)去ý)çCõF«pA݇Ã'ëaÙT×!§"Õ§i¿;ã ë52• ¹7¥¦§}ᑯ1³…/£3ãÉÕdŸFÿƽ=±+/ý϶Í]¬…LE¡ Ý+›Òñ A‡¥"—µÁ¿å ÇkÕÊ© )ÝŠ‹Mï¿Ã¹á Íù¤«[‹4Õ’Ó -ÕéÙÓÏ¿<Ù!¯E“¿¬íN=¹é “•—­íL‹Ç óízÙvÕݰC£B‘dï{ Aßõ3Ç«Í7«ó&ß›ƒW© ¿³?Ó6‹pëS›ÕKÛ_÷OÓ'±ùŽIŧ|£¯çËN›å³‚›…álŸ®é#'ýQ‹w‡Ñ#%½J¾›/ÿç+Û›vîóÇMë–óNµ ­¸1©FÇp­+¡˜é×ß¡”³ÕŸh)••¡—@©£‘£‡=©o…¢•j¡»³pÕ£Vïù3ßH“`×A½Gý«Ñ&«“¡·ÃZù1É!Ÿ‚ŸsË“NÛ•D7£ ý -Sã±YJ±Gã'Ç5ëg•z™_ÿˆµ7A‰n‡¥( 5Íe­¸½"+ëxÓ´¡~Oµ(“!ÿ§ -¿¿©ºÍ€›(¹­³¡8õ(‡ƒý0•DÁ£'×$‡ §ï‹*Û0­YŸÝÙA™$7ëÛ.û -®§§Ý³½ˆŸ“qÕ¯­ˬ¿µÎß ûI³¡ ¥ù ™ù#륋ý ¡¯“&Ù³…Å !Ûů…bç=»ãÍ ±Õ<—?Åÿ ³˜Å2å«¡%»#½Ð›$ÓÖ… [ëBõ¹åMWå)ÓeµK›X“{)ÃBå\¡1Å€ý»Û Çn…ó“ºÑÍ%ƒƒÕßÒÿu‰6ÍD»›2«fÉ<·…µ<×’÷—ã&¯ª§Ÿã¥˜¿lë³ëÅ7­W“‹‘ËcD“ñÕ-¡YÉ'‰[ÅS‹;µË(ßÈω…åÛ­±(¹]ï¾Í>ï;íaãGÙÓ4å$¯ ï"•2ÑQû%‹ïh¯•ßÛ~µWë8³*ÕM»—ɨ³›1ÿ÷Öé‰å7ÓÎß8‹¸Ï£½ÀÝ Q׵Ǒ—õ©N™¡¹`ê¿cé—T¡Æ«Ìƒž©{×¾¡ÐÝ«k«±åG³ÛN¥RË‘™u‡×}Ë‘_ÁãÏñ±©¾…Ñ»´©ÃéEÉH­›óCÿ$ɽ¦ó{±B­µzÕ¦Ý!áz¶Ù»ñ­å&ÓÕ¥[á'›e…¥½ É‹'±®³ïçù$ Û&“;«/¯+¥«Ý#Å"ûÅO£(Û½é ×µ1ÃÓyýVņýù ‡Ã¿ó1©ÅQç!©sã!³z£å£¥ƒÍÁ˜Í ¥ÑÏõ8Ý&ÿ!§#£Ó é"ÙŽ…&©#›‹)Žs« éË¡“ ½ÿƒ … -é<ÉûWç.ñýÍM­×ÿžß²—ƒ^‹0§‘5×<¹Û8áŸ?ÕCÿ4çÅS1£Ù(É ¡Šë-ç:ƒ¯#û•1ó¢·°¡ƒ¡¸õ -IÛ!×zÛ1Ý'•qå+¡Ó“³~IõZ¹—ïï“P¯õE­2Ó&³¬(û2—ßõe·«Ë2¥›®•sÅ ¹õ Ÿ¬› ÁñuáÊ‘Ûý©Ù±r/Ï6’Ó‡Ç!›¥‘ ǹ¥•:÷Y·zÝÉ#½L£K³Q™0«£š¯ëûy‰LÁ¡³ç -©!Åž›Á/áÁ…³AÑPñ.Ë$­„§§'ƒ#õ^Ïû á‹"¥‰ŸÝ ½¯"û«PÁ*÷§±íçѯ¡© «—"Cí í óã<Ÿ)­|¹± õùEÑxë» ¿u­FÕ™ç!à -óµù -Ó¯ÓÏõw÷"‰¥õû'õ#Á -‹PÏ(ÙX·+™‡RïÝ ápÑ+™!¥,£½Ù«ƒË;½©¯<§¡¡Ù[Á•&¿÷"vë$×#ù¹Ï7ñ¿ª©"‡%Ñýœ‘ Ÿ9™™K¿~µ2û©}Õƒ“#£ -¥:»¯G­=Û"ÕCÑ#…÷-Õuß ± µ"Ï}Ñ<—XŸ ƒ4‘p…\c½Ã￘©'ï é¿í)ç—4ÁÁZµbÙ‘ ý©Ï½×õF×Zå… ç>•Ù™*)û Ó ¹ÍV™;­Nñn ÕsñÁ;¿*Ù¯ ï?—õ§DŸ ‘mý@£ Á“ -Ÿm˯㠙³vóÑ‘õíA§·ÏÉß¼ƒ:Á›©œË ¡ÆÙý·Ç‡–ýé¨Ç.ḯ"!§Ç¬ÿ'p­eÍ+­’½;½É ‘Ï÷tƒk·éPïKdñ#™ª—&ÛE‰¯;ûg‹¯Y‡8çl‡ų‡³„ÿ“ÉX»ɸÓrÙ ó— ‘(ÿ‰r©f‹QAÕ"ýA«ÅeÕQ•½‡åNc"›©ã"ë—‹’ÏzÅ%»SÇÇI£l± ‘©¯yõÛá½í„››!ý ÅóÛT§;¯ÃÍÏ«d‡cÃ,Ǩ™ÌÉ·h…š;­Ä¿«éO¯k‘Ïã»tË“—6¯fÓÿ‰¿Iûj)û£™›HÃÑ3ïÑ)÷Á•<Çk«?ÿÕ‚±|뮥QÓJµb¯£±sÅ燅ñA»Î¯á_™‘ óY‘“0ù fƒÕÛUñ9Ÿ„— ¡ºõ ­ŽÓŸçÊßOëYÓD§Wᛵ£jËAñt¥³Ͷ…Íuá#í¿€ íÔÃa¹=»Jõ½e­¥‹ ûL‰C‘÷OñãSÿA ø•ʳ ó’Á§ûƒØ¡+·Ù0Çn· ùϬ‘Ø¥#—¯ÖÕ±¯««L©kÑ™‡Öß?߈ƒÅLÝ…7ÿCÁ†²ùÔ¿“'ûÅõŠ…£×`ËF;žãUÕ!BCëÝM“«m/£°iÑ•Ç7ßT‡ñÒ•¼Aí›Ù®ùçNE­–§©ë²¥¿¹½ãuÍpé²ë…ñC…é®ñ͚ɇ‹¦ÇbÃI•Ρã@ËÄ“‘«»;­œ»Èÿ ïB©&ËÙÙÝ#õl‰¿z¡iáB¯@…õÅn­Š+«ÙÍåhÏc‹Ú¥*ýkÍÖEÛKóÉ¿ƒe5¹!ïuIƒ5õ3¹Ñ·ù=£_#‰*¹Y‰ŒË¿—õ„½u‹Ã¯]ëNÉÛ»©÷GéÊõqµQû nɬ§G§ -‘§=“¯=Ó®¹¥å'÷!¿õ7å'÷ í·(ÓH©©ó’×"ÛÝ>•ÛšŸñdÓbÝ»É-+Å)½‡!ÿ© -‡SGï"—ƒÉ ÝK›»%½#½ ­"à ßaÿ¿Å1ÕÅK¡Mÿ)›·ç4¹ÉÅ'Ñá^‡#ã¡#•ãF—/¥}“#“(³¦á/û7Ñ;£¯Iƒ"ÅÙÕÔ¿Ëé\‹&Põ>ÝÙi·_ñ®í4³5ƒùÀ²Ù¨Ã.±“ñËåŸtÕGÙÃÛ¹0ÓS¥N§Ÿ~ÿžÍÏ`õñxÅ÷6á½”ç ç ›,­ßÄÏ‘Uÿ“3¿ÍJŸ Ï/ç×ãÍ­‰U‹0åx‰ÿa›£çqÛWÉ*çT±ƒ›=Å É­"ÏáJÝ—ïéÃ=¡§¯.‡ž‘ݧÏ!…Sûý?Ýí·÷é1ƒt¡[цª±ÿKÏýã!•vÿÖ×µ¹!1µwŸá¡Û³š£ íXÿ²› ÇÁ_µœ×p‡#-»ÚŸï/§OËÌ™lÏ ÷DÉ!Û¯¯£²ýg‡9ãóÿÁj¹,3·¥ù…rëÿÅ#_ɇóóA±ã®Ý›7¥†á‘9ÿ3£rµŸÁ£—à 9¡©#CñBÁ*›|©ãÙ…§#ǧ“ Ï»Ïéábí˜=£Ëq÷Ã帓ZÅÌ1åÝÓUí01‡Ó7—ùÃËÏ ý ¥ …Ñ*4Ë ß ÉãטÉÛ­'û+Ï$Ó™*û›™é?çc›jÙÔ1ñ-­ñ#¹›#Ÿ©>ßV‘ÓÉqùÉÛ0±×§D¿Lµ‘É#Û#ƒjç"µT“"³å$•'¡IÑÕ«Ÿù<§ÿ1¹×/“#ɱƒ1«½Ç í½(ÿ“ Ã%Ñ<ƒAó¥ÅÏó“Ñ‹ ¹/ ݵÿ"—$õ³'‘NÝ/ûÓ:Á Û!Ý!©<™yÕAÉ Á•µù(¿Å#µïç…-«»ù-åÍ«"é³#õu;§1ëí‡1‰:·±­,¡ ű å#Ÿ#—M*ñ"™#¯"ãËF£§¡ -‰ -‹#‹ï\/·Ë"õ©Í~•ŸI­ £ É0‡'­”³E‹§$·"©—Jý"‹óN,ï1ƒ…=V¯÷ï‘…5ñÅ|»FÉÙ)Û,ËŸÏ{éOÏñãÐõ6C…™÷U)× ñ¹•Ô«[ƒb›s·¶­Dµv/ÝÍ!Ã%Ãá©ó±'³­§ßtí!Õ³Ù×v§å(ç–£+Ÿƒé¦ûÙ9å=ƒ7…Ï΋^©#»¥~_•ZMáãL“nÉ9ƒ!³Ç`õω-ßó‘£ ½n©w‹†½.7ÑE0Û û§£«}‹#›·-íÓÃ¥$£Ø“ˆÅ>å …ÔG÷ ãx¹W…´‡ˆ#ŰÕÎûBÍ…®§ˆÕ°Ÿ(£¿ùÊ ë¬³ËCý’ýÓ[õ4Ÿ![Ñ̯„‘­sÛ7ïn—3ÿ“ã[aÉÖÿNïÑݼí¡w—£­UÕ.yÁŠÉjãçDý/ß2ý!ï½H1­í[« åÍ)…,Ñ3ïÏTû…¿œÿJ³/ÁßÍ㟯*#Ÿû4Å‹ -C¹<ݽ7·=Ípµ;û­Iý‹õ9›#Ÿ#•Ÿ -…«OÓ-©Dÿ™Dáù&¯ »"›T¡MŸ¿`ù°­^‡¨|õY§Õ¹— -Í+ù3Õÿ ­Gõ¿.±1½ ÁýõíBÇ ¯¥3Ïsý ÑÕÑÏã›(åÅÁ×ÿ=ëÑ‚ñÿºãÁ«µ¿›t¿‰'½Å·OÍ‚9—*§Á ‡*—™·‘#Ö¯#—NõoõLñ‹ñ rõ ›!9Í7‰Tá+‰“!½E‹ZW/—.ýs¥\×Tý@™Î•9(¯ºõ Ñ1ã¡@§ŠñJñdëœÇ@™ m#×ß¶¡Jß-ÑS·‹?ÁÁ"Ñ!ýL¹%Ó&ŸÝ½O³.Á­B é#¹T•.—0Ó£FƒF%“)QÃO§1µ¡’ÍB“E‘:ƒ÷åÏ•¯»“§у§9Ñ"Å«3Ë:åû ±ŸÁ Á,ñMñëA¡$•*©P¿WKí × Ÿ(ýw¿ ë -±ló½.•ãÏ+íû!d¯,»›‰‚å)éÉgý5%áÁÙ*ߥ‘Ï"“ÉÙpÅ+½ñá‰(‹JçBË Û™3éç·áž-»3ÁvÑ Ã§.ùÇÛÝ-‡p¡=›Ÿ6ÏJÿ¿¸ÍZý‘Á>§íÊ鶯´•§º—ï¯ÕËÝ#…ŽËvµ†¹I#¡¨ß )¹K Ï>Á‹J¹ËX«ÔÓœŸ:³3Ÿ‚³ip«z÷¥«!—íZÅqË!³±,çá¡‹÷5ËËa‘.ý!ÇÀ•¡±ó ±¡"ËÊÛç„Û—ƒ«Õl¡ÍµƒpÿÇý×Ç7í'†ÙsÙ…õ¿Ç{¡ù¥Cá>­£‘0í»`Ó#ÕÕ9Ù:ó¹³B «#Ã>¿!‡°õ© «¦‹CÕY…@Å®¡z•WóTÉΗ—í—ˆÝÅ·\Ç -óáU£Áßñ¥!Ï›±…Ó‘´@ù -”íÁÇ3퀭%õ ±MÇ(—E•’ŸW±›©¨‘9Ë”åJ¹¶ÿ'Å ¹.¥Ã[³åÅfɂۂOÓ2á½"¹1¡ùGµ¥ÉßN³Ö—¹›*á"“¯—J‹›Á$ïWÙ‰'ÏÍ×ýIËÇ4‹¿U¿3¯ Í•¦Ó ½p“#ÿ(ÕiÃB‘¯Jù™rá®Ë`»?çrÕ›"›³ -•L˧a—l×qéÇ8œ%±6“|¥Á÷$Å•ý -í@糿»ª³ÁË3‰S߆µ»ÖµXlj¨…­‘¦ë'›‚‰“œ¹ £ ß#Ç:ÏV—K‹“5ÃÛ1£ÛßPÙ¾{#±*ó™›ãoù¿F‘Û3Åa§8ñ/ç2Á<å/ñý!ßkÝ¥!4Åù:—Õ©3…×=íw…8•6Ÿ4›!Ÿ™•‚‹+&·†¹†‰¡•À“˜—x§Jà -ÛÂ¹Ï  ×u»É™%·¬ÿ„éÍ™ý{É… Ëí(û‡½óyç׈ÿ Û±ã+Í•ƒ²£™Ç›GÕÌ×dÿ]¥/©‚ùµ¹«|í^±B¹FÅß‘s“0Û¥˜™Á"åé0«iç%ûóM¿j½ -·¤õÉ)…yÍÑ­8Ù>Ÿ‚Ïy·F·YÝ™•)ïá“[Í'±5«{ûƒ‹UÝoõg•&Ë€Áãs¹\¯5™z™d­£‡×·/¥AÁ¥2£‹ûÐÕ‰5Ç•Ët‘ÑuÿIѱõ›Õ>…xÓ¥u•'ÕÏ« #û[ó§Á˰ƒvõ•‰áµ -Ká%Íɶí*Õ×Ç•?YÁ’ᕬٸ­•Õ,«oã›Óo•4ñ:Ñ!#™¹«tŸ"Ç"ßï"óo»ýù&é R­Ã£7É« Ç&­§)±÷ »°ÏRÑ*‰¡Ý(—“›·Ÿ -‰Ç>Ý‹ÿH¹Ç­ËñëËåÊå± å©)•FÙ!ñ Q‰#Í™}…x©·§­\“u¿.Ų¯ËéGé§EÁAµ"µ#Í×— óy• ¿Ë-­ë áé*—ß8Ñ‘Ï*ƒ%¡É³ÍóBÛý+©ÝË9—:«û—Ù »7·’¯PÑÝF«k³+Ç$³9ñ -•/ù‰õƒ ÷‡1Ü…>çãïÍŸ@­± ›Ñ‘!ë5ó ¿!™ É@ý»0Í4©R“ ×­¥Ý£ÄÕ³†™Ù¹Ë"™ µ…í#ßh ‡ -ÑÝ}ý)ÿ2ë!¯³á -‹J½(ë¡'­¥›b‰žÿϵՕ͟ -»•MÓ;…(»Åǧ,­ÀÇßûïí8÷Ñ£,ß»'Á+åwÿ Û ­¹-ýcïÏ -ß¹ã›ݶÿ ™«û‡õp™éÍ;½Ù)ƒ‡ß"¥ˆû3…©õVÏ!é» -·•™>÷û=m]—(£›#‰ß"1‹¯_·‡‹±Žû -3Ý')ŵÁ|ÉÙ§"Ïù×7ÁÙ ÓuÏ2ûŵ|¯K‘#­ó¹±¿µ:‘©Eí,Å&¿÷Ž»8“/±ÿç ›Iÿ ¯ Á µ×áv‹ƒ±A•!Ï®ù'ÅÏ/SùS££¿ë3…ÄÍ…ßµ£Ó ÷!Å{å%—õ !óÉ0å€{?«®Ÿ ›M©i“¡ç¹- ™[ó•5÷VÁ×bý<'‹ÍÍ&ÁÛ‹Ïfý É!»%©¥Y§×,å µ9…!·Ý …Ñ¡7½õZ› ×-«"Uñ;…{‰ ÏK¯?ÃùÄÕa‹é"ƒ -Õ4› -ÕÃG¡2!‹©^Ý ãŸ#… ÙUÙÑfÝJ‹$“·=ó”—Û€$¿ óùïU•¶¯?w¯ó Ù ¡ãó±Éy•"­.Å -³µÉÝËC© ‡;#¹Ç•iéÿÓ"ñå»$·™ù%™=Ë/ÏéC©ó/‰¡:ñ—Ÿ#•)«1õ=ÝVA§Ó£DÓáÁåtÅDý!Ù -³*ƒ‹4Å.«ãÏës÷¡JÁÍ‹#‹ç˜Ó!µ ©¶ÑÍ¥.ßß‘‹Ó°³›!¿¤!…Ñïtë™Kû¥SݱÝ6ƒtÍ"¦·—Áǵ˯DëFã³ÿó{á‡CÉ™¹ã££µ"×$£ÅÃ÷*‰¹ Á@Ç=™!Ë÷Í!ÛÃÇï{©Mó Ûý"Ó¹·ß Å>ÛW“§ÏÓ–·!¥"Ýï"µ(ó -Û“EÉ;™Dï"“É#ë3—÷¯¼ÕùÙqŸ*É"™…í½!¹ -¹ã ±8ë—ÃLí…)¯ñ á"¹{³ÿ‘™§ËwÑ£ƒ”ûå ‰~ï ×—ù6÷ÇqÏÉF…z“ëÍ‹Ç׫°¹¯p—Åñ+9㎻µ5Ï Ë£E³*Õ/³:óé…ƒ>!Ó¤‡[™'уååQËÏóëë[å0å‹‹Ø£Á<ÃL¡Õ!ç§7«Ÿ›:å¤ý­>·K·¥$ÛŸÕÇw鯡µ¿&¥¡&×JÏ‘‰8ã»<Ý™5×_=áó?¡Ï>£“‡›Yí1¯áÝ2‘ #÷™?ßK¡«—_‘×¥!õ›PÅDÛ‹'™O«›%Û%•…ó±YÅš¿¡8Çhëí Ï0˵ õ5ïWíWŸÏSÍËHÇËã‡ÿ;ç?³é7‡Ù<ËVãÕÑ™2½"Ï2ÿ0ã`á Ãí;û ©;ß».Ÿ.….±-…‡ßí&å±K™7û õ¥#á1ñ‡Mý‚ÇF•ßXÑÝ/Ë5ýƒ<³ˆÇ.±×#­J¥‰³ Õ.¯#·;õ1¥%× ëGýëÆé­"Ëí;ƒIåšË -£@­›2ŸõXˇµíYÿ0ûKëÃá -ÁµŽ‹ -ïëZ÷<¥¡¯4å«X›O×4ͱ{§CÅ­'Û"ƒAé#›)ûßµIÛw³µ/« Ë™DE͇• ‹ Û±·‡Eë çZ¿“ûE«…,õÃ;*³"ç'Éý$¹¥Ÿ=óJÙ÷ Å-½ÿ!µCÓÃñ6“é¯FÑ7Á'á…¥+Ó/O™w×ó£|«6û¡.Å… 1¿›aëJ£éÕ#¥éƒà ­« å[Õ á áñy—Ë…»­/û?ÉM[Ÿ£©$ƒÌ盯‡ß¥ñÉ í/é»4Ï2Ù -›³¥§•#­¢µ½0ÓÁžï&Ï/·Á¡á ¡'Épýµÿ|ç ÿ§™;×%÷ƒ9¥¥'u³“*…§Ÿm•™íƒxÁCça¿« £@µ*Ï Ù”×$·¿A»Kû1§£-éEé ‘ å;¿kÝé £0 ÁÓÃ1¥XÝ7±;ë̯{“4çñ]‡]—Å"Çy¹ÛÍ#Ã1Ý_Ó@¯Çßý¦‹>ÿ®ÿ;ý|ç`ÃdãØù…¿Ã‰z‹K‰»›@û®¥µÁ‡VÿÁóßJŸŽŸ"Ï:£/•«ç ¥‡‡"ãTŸó‡ ¹í × ©y á ™0½ ñí -™»Ÿ(Á¿@÷¥õ— ñïñv¡#ý¹»‘é#Ñ ±«0¹¥h™û“&› ½ ©9Ñ"Í‘!Ñ ã7‹kÇ;¡ )×/…(·™³…Ç ç ËLÍGç$û¹"ñ ‘xïNÍ ¥·!»$çOí!¹ ã"Ïc÷ ýÓu½¹á¯ Ï£‹»'ÓGý/½å ùóoéý Å"Ãj¿ ¿— ÿVݱ¿ ¥— ¹ ù2ÿçŸÏ;…ËÅÍBû ë˯ɕ±õÓ“+½V‰!‹2Bí!Ÿ¿Ç!©±»évµ×½v™ÍßÏýɆÝß Ï)©Åñû³‘Fç½í¯ÛQ“AßÕ$ƒÃÃ.ó‹RÅá­… §µ@¿³#ñï -³ñxÓŸÕÓÃ|+©Ó6PÅ›œÓ!Áh§Õ)ÙÊûc;“?ëVÍ:‰œ“ˉ - Ë¡÷ÐÿOµ³á"õ¨ÿ4— ³±{ã;©(Å@=ן›(Ñ6ÿ¬¡-•Ûµ‡ûµB|‰Eµ ëG‹*‘ ÝC•LûŠÇÃ(ç§Ñ ©ù'Û,i• Í.å³Ç£%­éo»½§5Íõ_“wÏ”¿É8…5ï4µ1ùSË8ɉ%ã×\û.…û$×ãa•+Ý£-ÃK­'£Ÿ‡å ÷+Ó§é£`û¯"ó³1“‹+íïký-Ù"ù1‘M›‰×!§$ÑCý1»ý8ÙI㉠Á2Ï ¯?ç!“³·¹ ŠÛ•ßnùŸ ó3‰C½©Ç훡Á ¹$Õ1£2ó(Ñ:‘Õ`*ûû'©Ù'•Ã,“9™F· çM±vÛëëË9Ç.¹I«ÉË-‰hå!Ñ õ·6ÇF©(¥—¿‡$›†)Á$ÿ'ç+Ù-ë2•4Ï‘%Ç'é1¹2›'‘™"ÿ,Û0‡÷‰Ÿ+­<ý8³ û÷²ɲÅ ùDå|×+Ñ ¥±Ñ ×)ðã2zã+áAéë•Y—,©½6•(ƒJ¡õ¿V×$8ßûQ÷‡É4Åç§"©Fÿ »Kë%ᕵ‰*ÑÃ#½\™‰­å(÷O·÷CÙ#Á-ÕLÿç!›<‘·Lý ¡!ýK§"Û(é¯ù™rÓ!©8™ï+¹›F÷"ÁˆÓ‡Ì—…;¹"­ñWÏG©Bý‡³½‹ãgë Ó(£]åU¤õù.Ÿ ͹——,Ÿ+ÅZùÛ/·Jû -—?ç2ÃcÉ£ ‹#ÓóÛB“BƒŽ«Ÿ“›$Ç$±Å“’ùñ†‘ »‡\‘Fß÷/»ÛCÝ8‹‹|ó‘ÃQÝ (ÓÏyу"ËÙÁl‰Z›Å—…›Ñí ó"ýRS±‰sï‰ïÇÇCÝ.õ£#sŸÉgƒ&™$å#ÃLÑWù5Ç(» ÕùZ³7•R…FëljïpËÇ!››£ýÇ.ųå Í·%Ó“Ó o͇û±•‡L½‹§Ç'¡¥$³ ™ ¡+ùŒÅÕ -׿#÷HHÉû¸¿ ‘ -Åý5³*ÓTå ïíà ×#ÁÁÅ…ÛÕ¹…Ù«•³ Ë@«í‹Pã…YíÛMω*£€áÿ¦ÙD¹ß*åáM×» -—É.½~‡·ˆ›>E»›!‡BÙdƒQ‡$éÉ#½"Ñ—ÛÇS“ ¥#¡™›3ã››‰¡ó÷‰Ï -¿ ñç+ëÿÑ™‡5ù­"[»-‰]·0ï½!¡Å!õ ‡"û#žév“…5¹ ­ ¡¨¯¥S•£A¹7ÁÑ Á€Ë!Ë%!¡?ŸËI§CñBQ‡ï)‡0Ë£Û‰ÑLÝ'ñ!éD©=·*á•Á"çÓ ·‹#“Ãí§<÷ ‘V¯¯,¡(×5ñ Ç«Z¿?…ƒÍ/%˽ï§!Õ •—+Ù~÷Ûù·ÿ0Ç‘OÕß =ñµýuÍÍ ½ϯ3ýn¡µÉÒÿzÅ4ñ#õ¥”ñ -ª…_¹Á©dõ£¡O­.¯ µ‡› ¥r—¯³ ‰…—ß ÏC“½(Ñ•…&å'“(›=Ë“^ƒ&ïÙ'¹&!³+# ÕJ5ÅGùM•%¥(…„ákï ëD!õnÁ(ë7a›y§E³ ™•E“O±…ŸC§ÉSå!ãV¿A㭦푫‰ñP¡pëO½ù}å!‰á#ó™¯"¯L‹™ -÷Õ#ã9·CÓ|¯+§DµLƒ‰"ó‡~Ù˜¡&§“ÿ ™Ž¡ÿű#§«Á·£¥¸©r™2¯³,ç-½K“kñ · #ñŸýÅ‹‰í:Å1)ã-µ±¹y#.‹‹·ÏµÙ ý"ç±%Q•|ßÓá—)­gÅ -™*ë¯ý Û"µÌ¥I½{Ÿ<ù$»¥ñ§À¡f%ù`­ÙÁŸ¤³ñ¶• ÍÇ͉£¯¿‘…­cÕVñ‡Dõ¿ÑD‘"•ˆ… C÷;ÝYƒ¹xá!Ó)tñAŸ¿÷.Ù© 9©áùå•óB™½7ÿÃ^í -˧³—=Ï%‡H-ÝCÇ9•ËÑpé_-­ªóÿ á3•³“Í'ã"ù@ÓÛD«§µƒ×DKÛ±ÃõÍ -™)NAµ˲+ß'ùx÷'û©š/Érƒ(‰%»Éåý—(Áb›“$ý>7Û+Ý¥§(ï˜-¯ §:/¯&Û]Ç!9Ù&7Ù)é#Í"…Q¥±µÍ÷²ïC%§1µá"íIó ¹Á‚™#¯ÿ&5û¿¥£ëu‰E‰‹DÏK÷.£…'¯½ç0Ãù*…ç5÷ñÉo±I7Ý—"Å ‡ Ÿ£C©+ëEµ˜Ù …¥C±£Ù)1ňç'áó‰í ™³™í ‡…B5ñ¿˜=ù>•£_û.E·—»‘í-=©”'=Åd·Ó(£O‘¯"§Gƒ±¡ÇÃû Í£ ©åÆ“éiË »áy÷… •©½=û¦ÓÑÉçžUíÈ•»=§8‘y“Bƒ é óHñ‰x¥Ë£ÙG»£/÷X—‡¯8¹?É7‘Ч59û€½W÷·‡ÑËÑ-±"¥WÍ{ƒ±¾·mÅÕï¸ñ2ÿ´¯¾‘”‘1ù. •§ñ%×z·rƒ½ Ù"“Ûß=õ ˸íKÿFã%Ï‘‹»0½\Ÿ“U•íníï:Á÷}Ù1“Íý -õM¯ÿ.‹Û>Ç”Ǿ‰Ã:¡—*ũф‹K¥Íó˜Ëdß!ñóoýÃíÁ"½(éRtù'¥ ‡ ×çJÛ)¯%× í³‡»²•™¡%‘“óL݃µ£çý¡*•Í×”¥W½2Á™B­»ó;÷é™Ó7ëSýËÁ…‘áÇB‘‡ ÿ&³Z(Í›¹Û³ ‹,… -ÙÑY…-“4¯o­ç¡5±+¹Ï…ÚïJ½ ÃÅ*ÅátÏ‘#« ÙíÓ ùÕ£ƒ«( ·ƒ"Ÿ‘ï"ù,Á … y!¿D"ïz™ÿÇ5Û—×µx¯—£4Ç—‘*ûCíí¨ÑtMÏçÁ>‰‘ƒG¥ŸñhG±=ùßqז鹇ÅI·‘™Ç '×"«j»~ó¾ÃÑ5á=å–Ë7›½•ÿ1‡bÙÍ.­O…‰µ;閉¨Rñ.±’}ã¾á­ßh«%£™Ý/û‡µn§ ‹›é2× ï%ã6ŽßÕ%ͿȭŒ—;™=‡q ­9ÿQûr‹5僳§2¯½q§8çªÑO¥$Ÿw±7©Ÿ½Êï-ñ-‰a“ ÇÅ+ét‡;‡wÙ8¿™Ý·s…ÍÇÅ5·EÁ$Ã/磩“ÁÕ)™]™…i¹÷~û($›ß”÷R¹Då¥Í¿Ú“׃֭nç!•$õÓVËb¥HÕ8ÕšÕ‰P‰KLJ£ñsÿ±±†ãz¾Ï·ÃÙëGñÚÏu·‰‹rÇBÙ‘‡aå í3ýcÙ2ç\ÍÕé³§ýLÝϳróf¨¹Ë™—ýÓÒ#á•!Ó†· …‰Ï‘l³Ñç@õ…¹TW½µß½•Yÿtà õŸ‹(ÍNÙûN£…­GïÁ ŸAë1‘k‡¯n×1ÙR­Öµ`©<¹'ß°ýÑ¡Å}Ïí0¹(‰qËJŸ]Ù(ûÓ›ñ@ï㦑!Ë©Ç~©TóDÇ.÷1©Á+¿H¥›í)Í¡Õ5£ ÛÓ.µñåó•Ç¢«#Ë2ó;«÷HË"Å/ó;‹€›;í8ó>ƒ[Õ&¥³K¹[›ç’³©‰ÅƒzÏUË!©>‰†‘Ùç…ý‹…%Ó€¯¡ý ¡õgÛ”?ÛÙëM9ËÕ·"¯)«ÙµG­<›YÝ~ÇÉ ã‘! Ë»©š7Óë#õNũխßЛ.Ãȧ&ÕûEÙ(™U ›q³VÓ¹ñ—÷sû¡Ťé¾µµÃ&—ÑKŸÝ5±e:»'õ(ƒ¸‡˜µPó²ƒgý¡k±ù¹×£u­{§œÏ¯©ïVŸ_Ï\ù„»:“XÿŠ©Í—}½ɤÑ?!!‘J¡3ÿ¥YóÛa¡ ƒ±7ßÙï;ãF©!¢­‚“±±Õ§¥·”…JÑÔÝ £Ï¿‡¿é¹MÁ¹ëPÝ@í£{ñ -ÉÆ•ù •ÿŸË«—Ç AÓÏF—\µÇ£÷qÛ<…˜áÅ&½'•]—[×IÙçMýÕµ§çzÑNݳ­ ¯ï «×Ó -/ÏW½žý%—É•ç -…ë½Mý-¡—?¹5‡• Õ­JñtÛ“­*ëÅ?ÛHÅá:¿ƒ ‘Gã8ó 5ÝWÓ9Ã-3‹BÿµÑ==¡ ­÷Kû´ -‹$û‚‘m×µ=éŠåñ•÷3™‘¥Í<Ç…Ñ©´cåÕcÁoƒDƒ ÏûG×S÷“ ÕËGŸ×A¿ Ï6 BÏ»»X¹ ÿÿÃ…I±M™k§Ö£F»Á³ -É>§ -5í%£Y­¹í‹Ç¥™9ÕÉÑ0¡{Í$7›Å0ƒ^í3ÕÿЃÎß-iç…ÏÍ.ín§$·û"ÉgåƒVçùbí&ͳß'í£a5§-ù˜ÑÃ6C«0‘1Á;‡w‹ Aû:¡·FóF‰‹‡³‰+©¢Í$õ’AãL¡FߢÕGµ,k¹%ÁgÇ(¹/õ)½mƒ'ë†:ç ëqý;Ÿ§¥)‡_ý…÷'éRë@‡¡ Û…åbí,»RÇ&™$Ù×Ñ™„ó*ùKÙk‘k‰Ÿ˜%½;“K™)ñísÇtÝAÙÓï=·g·2m—mûÑDój‡Ý‘Eé;ÍTó!ßÅ(ƒ«/—­ …u¥\Á× ÝQÇ%¥Ló(ý«+µ]—*‘4ÑE¯F£K¥ Ù<·)Ýï”õDýS£J©¿‡ ‰Nóý;'Ï›ãCÕ˧½)¥ª•d¯±,§.Ï"¯Ÿ‡Ž×"¹•õ—U‘Ê“!÷0»=Á ©?­QÃ~¯0£>¿‹yß*“pï -‡~ñ)¯AÙÝHj­õ'×̳ôë¹OÕvõ±a¹¿áØ¿‘÷iÿ¿à ãRåÆéÖÉtãcå±™ó¿r‰0óÿc‹Œ±Á£ˆÏ8·5ׇ¥™×°·5ËW…µÓ9ߓㅯû‚µB6Û²¡¥Ócý6­­“Žá?›ß›õ ŸÙ:Ç™ó‘\‘wã5§Ó¹z¥Çµ™Jñc“‚Ãʵ¹…ZŸ¿¡£‡F\Û½ÿ—åªÿv¯.ÉËÁïÀ¹ƒ|ûȵ½§\ÍÒÍ™ŸU›*ËËÍsÓ™á—9¡}ÓçO÷?‰Ã7ÇÐí¤Ó¹ ×Pƒ+㈓…»À——=ûTã(—†± >‡'¥&Ñ'µ·)“_áB‹ Ÿ•CÛT³hƒ “ýdÏ ÅH¯¯¡ÿMÙ$½aË ã'¿‰Ç/¿ÕÆË ÙÌÅ€ù®›xÕ¹÷Ø0ï£ÁcѤ§)¥võ–µ"½ŸÌ©v“©™2£ZýÝÁéÇ#ïÏM£ËÇý ¿óÃáÝUù ™´¯áÔÉGGU»¬åa#‘ -«ÿ§í#§¹‹bÝ|ÁiÇ_Ç÷€¡=‘!ý¹­©Ï•“¡ß¥‹¹"ÅÀ£&Ùÿ)¹J¯Ò ½óÁ'ç%©J¯ã±ßÅ£ͰÏjãÇ‘õ­ë;ÓŽ‡!÷Ñ7áª+×s±Eé©ßÅ·¯jÕ±xƒ;Õ ÅpËnÉ}ƒ°óƒ©Ô¥±ž±å:ábÁ ©G¿+õ‡1“b›ñ¼·«!Ÿ×åEç|¿Õ§åg¿OáD¥'ϱ«Âý)å>‰ÌÃÏÅÐï†õÙß,—#ý“ÿ…“³¡ ³ɰÙ›×E›ý©‹¡í±Ÿ²Ï##—o«*·á½@éѷ(…2Û ƒÑ$ç -ÇáÕ ·¯$!Û1•õáÅ)÷ï'‘“‡E'A­\Ã$µ¿ éÉ ñÓ#ÿ!‡Có Ùõ½ -Å'×@±2á.'Õ)ýÕO¥+/Ÿ•½Ó™.õ"©ù¹¬©_ç÷rá.¿ÿ •Ÿ^›/¡ñ‘Gǃ/óµŸr™—›µá$¥Qÿ©)ýëµå.ë­<Ÿ÷?¥ÕB÷Y¥§r¹&Çóí·2¿£2ãñ É ç­ ™¯W‹_ƒ‰‰6û5×ýµ1Å'óZã­å+õ1µ¿å³Ó*‹“që±xÁ&Ëå,ïI…-·õ?ß1Ïá1›¥ Ýó ©qÓ#Í~åÏÏŸ\•ó"¯:éíXûT•yÁ^½½¡Äù ÕÛ‘ÇûŸ#Ÿï"“\áå1÷)õ.§0éc×…ßçu­ßµ.« ‰<«Ë$×(£©Û“:<Å¥½%‡ó$± ÃWÓÕ"©ósÛ"‹?÷Eݵ/ ‹/« -‘#Õùų—!Ÿ)½4ý™/Í “çDëÉ·/Á ç<µ"û Ñ" ׯéǹ(ë “$©ñ“¯UÕ±ç…1C)•Á ÿC«V©-“Ë ½9‘h¿• ¯ïxÃ@ÓÏ ÉÇ× -©F?çLÑ ÉÇ«Q· 3ó!ãÁ¸å|‰2çGÓ]Ó³I¹*»žÝK¹ 7Ý»‚¥ûÑ=¿—ÍEã£QÁ;¯!Ÿ»Ãé3“&©Ã‘Åšÿé AŸLµ(3ñå©ÇFù!Ó>ÝF?‹J‡,åã µ%Ë®—¥§<ÇóqñH‰OÅUÏvKõ'»4å5­d±™{)÷µI³YÓ‹ï·CÍuÇ2±v•x·C‹'‰ —ç'µ‘· ­)+ÙELíÝÇJë&—‡ɪÏÓX÷S¿iå-ónßoÛÙ?©‡×6Çíë)A›#©#—¡"¡—¥Oýëå(÷#÷¿"­µÅ¹1·†åÉù ÓAƒ&Å‹\ïë“'‰¯©ç_û!=¿ ÷=¯gá9½ ­&Ë8¥ç!¹Óõ*±M­A)çb÷ÿ“©!«4Å}9Å!…¡0½}ÅAÑóË‘Lã¥å"×;ÿÝió׋¤ñ>ç)—É—¥pƒH…P‘ß ‹Í‹Eõ&‹vƒCßx…Coç½–£TÇE¯–¿=·E‡¢í_ñÁ»tǨÅÔÓOÙËŠ“T‹ ë/A½5ï -“C‡&ÅŽ)·4‘éMÓKɯŸÏ"ëOó'ç§(ûÍNŸ('ÓÀ‡> ‹+‹Û•)ù±_Õ$™‡E™û1…ÿ.1ïO$…'½‹ë×-¥á&ë Õ<½ “<"]å"Õé¿2«E±­Bý'¥³(é$Û$Á&ï©-™/ï\¹¯Ï§;c‘]Õõ éã*›J¡ -ËAÃ$ÑÝ)ù$ý áÝ!ñVåµ -¿ç ÿ×-Ë õ2‡CÇã -Ó;õ"ÝѨù“(ßç'Ù -ßDã­*™"¿$ßýBË"“@­&© µÕ·(ëÙ"ý&ËÁõEó$Ýóõý+™$¿+ù"Ý DÇ™£ ­ß?Áõ#Ï“-·Ù!Éã>õ*›•*Ó"Ó?» ñ£Y«­Û£Õ«5¹(­ ›Aåí§7ýéo™ß#Íѱ*¡U·ß«)ù‡+±ÓDÙ°AY/—ÈMÏÀ¹ó/7Û ñ·q‘ƒË! ÛP»+Í*³ñŽ—›?‰ƒ'×­½ËÍ Ñr£ ¿$Í'‹ç2‡^ë -‡¾Çï'ñaß«(…U¡Óå™+Í7—"‘õ•/á ãýAï‘DùÛ 0Á¿‡(Ç]˳©ŒŸ·1­¥)— ó#‹F£4ïß*· ™™-'b›$»çÑ—EÑ+)‡tá“ ×Mñ#—Ÿ ·ï­,C¯Ï ¯'—#ç;» -·)½s‘t<£b›Ñ ã%ùdÏ&ïžM癃$ÿé©A¿E‡“ÛHñ?0ŸlÁ6Ÿ‰ûKÝc‰1Ó*£õãe« É5¹—ÏXñ‚Ï-»­+ÝNùÚÛƒÑ^í*ÃË»6«\¿§«<¡UÏÍS×#·©©4ÁÏÝ8¯C¡½#ó“•Á³ÛÉlçÃsñD©$ùQ͉#Í"ßï(Ã3­÷^ŸÑ± ‘B‡Áù$ÁkÁÇݓ÷Ÿ‰ñÍy“3û*íx•ÃÛ#募$§yñKËÛ !×± -ã#ãÍ1™—Íó÷iã*牅±vƒ¡#›‰£2‰ \×+ïO2‰D™—€å(¥‰BËJý‡•» -¯!… ‘«Ï…'™‡™DEÓÉ«•O“Ý-¡'¹‰Õ@ÅÓÁ*ƒB'Å6à ÃÍ+³8»›Ás¡5 -™¿Ñ­ÝžÃoƒ á×ËÛ;³³°]Õ}³Ë/>™/“Íý³(Á ûb›*ï·«{¥.Å/¹Óó7û‰fE Û­› Û +õ,Ûx§0O¯‰Õ/û2Ç&¿³—(Ë@·»E¥G݇ýWÏ?óK4‡r¯`×n‹z•.ÃÓª5¡X9ÿ¥ë©·¥5¥(W©Z·™á Ÿ×Ë™Kµ ç"í]›É.“‡y¿¡!lÛ¡#åp÷'Í>Ñëï1íñ¬£Ë%Ûƒë(Ÿœµ‡‘ ý¤éUñÑ2õ£Íñ"É{ïÅ;™LÓ*Aãÿ …Ý -‰MÙwï á­x›O“ Ñm÷NçÛ<ÑpáëfÙ£TݱÁ• ÃOÕãu¹@ß}©Ÿß« õ¿†Ç…dùU©Ñ¥c½@‡¡‹‘ å÷ƒïN©«/ë#ÉbÕ¥^£IñO•!ù&¹¥N¿ñx³ ‡ûON“Q»ÑJû"ÏNá8¥1ñb«Õ\Å/‹›P³/¡Qƒ=ßÝeÝÉ÷…ÝÝFÉSã Ç Ñ#¡]Û"‰P‘(›[½0ÏÅ3ãO‡‘BÇJçÿÅ]ÙBãVÁ#¹Tý\©íZ»já-å"­NÙB—§‘"™PÉ2Aõ§FÍY£ÕS±ï@뵎ÿ“yë‘TûJ¯#ñbÝlÉï,õÀõÇë¡×Hç·wåÙ‰°±_™ÓßéuŒ±ªå9áPÅMÛÒ‰ÔÇ×Å2ç;í>Ç}ë`ßÖ…Wõ·ŸG؉­«—áEû,Ý8¡Á‘·‹n…Æñj˃û²ÿÙí‘ù(Ÿi‹­åB—z™‚ÿ -§'ß`›‹×gÏ'¿¹ù -³PÅ·bË Ã8Õ0÷±'³B¹…·#×6­ŸÉÑ“E‰z›©ËÁ'™nɦ¡!Ã/õ¥÷7«‡1—'»wû•¿‰©-½0¿$ù‡Á ¥+‡u+µZŸÅÇÿ#»k½©‡;‹Å‚¥m»˜‰?“£!¯"§P5¿?Ý»L‡ ;‰?ù-?Í•§”¹Ëã!½óC¯#ó&¿í -û"•}¹«·Ý9³EÃbÕ'“=—–é'Û|Ñ;Ý—s9Í"‘õ Í!¡•(‘xÙ=ã -E© Ó³«ÑoÓD¥± Û——˜£·¥Ñ>KåD¥ºÕDµG¯ ½…ùŸ‰jãž±·™<ý -‹׉¥µƒOûH£££¥§c±'÷C§"—ù)Í!‘W§ Çx#µ!ë5¿{­1Ý#£^¥ »…s7³&©±³õ—ƒ7¡/Ó«©­G±>™~ÝŒ¡‡Å‰Õõ¥½Ù~ݪó+÷S8Ù".ÌÑ‘ϯÍ?çÙç§y­‡‘A¡K™"-ùv± 7…›u±=±½:“‹8‰ˆ‘‡¯WÑ!÷¥¹›–Ó=·óZ÷’õ—û@¿Ù‘ ¥K?Ã/Å’G£ ë™§÷eÝz‡ÇS¹ÝmÇ Ÿá›ÇéËIÉ¡—«Ê©-ñ÷<ס¬ÙA• ±DÑ¡ùÅ—ëû,¡'¹•mÇ O³gÁ”ë›Ç Ûµù:Ÿ§E?‘HŸñý¶Ÿ¡!íŸ#5‹ÛÔ±gÙ¿¹AÅCñ‰²“5û9ÈíB‰®Ée­ADðÛ:;ñÝ$ù‰×¼¹e×#£‹ëÕUAûí{½¨ÕI¯Ÿÿ‚ÿ9õ¿#3›ë}³>ÛV7—hÑž¹Dƒ7§¶¯"ŸDÏ]± ·ó¿¢ùO9EÛÅ1¯“#ëŠÇ‰|öŸ83Ÿ'¥Åžù±ý¥‘ÁÝhëX¡d£ Ñw=ÛL›ñ¬ƒÑ”õÿ— é‹É·Ÿß‹‹6«£íc½ª¡‘?Éï›ÙÉAé1§ —„?÷D;³•X³Ÿû­Ã"£e£ÔãXyù–í"G‰÷È›¥ë ó5£pÇ4›±Ùõ;¯Û"©:å8‡Ï·uv»¯'¹·‹ßaó›ïÁu§Åóªùý(µ¦ý …"‘$Ïi™ÿ ‹‡ƒÑ ó‘Áo³7ÓCÑÏ ‹ ÉY‡z½÷‰YŸ·Ç 7ýßvÛD«ûÙ”©V‡ËåŸCÍJñmͬ›C™-µDýÔZ›·­®ë?—ß|•Ùãßµ÷ÉŠéO—Ù„™;{µÙç “ŒSýÙÑÓ -¥ëXÅ"¯·u™§µsÕ"›OñXålÓËÿ -Ÿ«"“\5ríË!Íb±‹Bíy͇"…É(—Šû 1¹.©§‡6™½@«I¯YÅ„ÏY‹§y·È«ÍL7ß$¿‡‰B·¢÷?µg­§“8ûË!áÍË9›¦Mã"å}£ CÁ‰×?ßÀçeµß{‹Aß;ÝÇÏ­ýC™“€ý!±0˜á)…/Éij‚÷Aߪ‹ã åùsí¿›º›)“1åñ¾ée•Ó/ÛJ¹Å¿…AÅñ ù%÷w¡"¹›ÿG—¯‹é ÷å“×=ë-Ñy7óaѶPµ´%Í¥¬Ïbõu©·µ"—ÀÿïCé°á~Û)ãÇÅ¡†ËÁ!“ÏQ³ÃÑ`ÿËKñrÁPË81ÝHë…E™™ñFE‘.Ï‘ÍÕÇÿÕJµ$‹ƒõ5ó¥—)去ý)çCõF«pA݇Ã'ëaÙT×!§"Õ§i¿;ã ë52• ¹7¥¦§}ᑯ1³…/£3ãÉÕdŸFÿƽ=±+/ý϶Í]¬…LE¡ Ý+›Òñ A‡¥"—µÁ¿å ÇkÕÊ© )ÝŠ‹Mï¿Ã¹á Íù¤«[‹4Õ’Ó -ÕéÙÓÏ¿<Ù!¯E“¿¬íN=¹é “•—­íL‹Ç óízÙvÕݰC£B‘dï{ Aßõ3Ç«Í7«ó&ß›ƒW© ¿³?Ó6‹pëS›ÕKÛ_÷OÓ'±ùŽIŧ|£¯çËN›å³‚›…álŸ®é#'ýQ‹w‡Ñ#%½J¾›/ÿç+Û›vîóÇMë–óNµ ­¸1©FÇp­+¡˜é×ß¡”³ÕŸh)••¡—@©£‘£‡=©o…¢•j¡»³pÕ£Vïù3ßH“`×A½Gý«Ñ&«“¡·ÃZù1É!Ÿ‚ŸsË“NÛ•D7£ ý -Sã±YJ±Gã'Ç5ëg•z™_ÿˆµ7A‰n‡¥( 5Íe­¸½"+ëxÓ´¡~Oµ(“!ÿ§ -¿¿©ºÍ€›(¹­³¡8õ(‡ƒý0•DÁ£'×$‡ §ï‹*Û0­YŸÝÙA™$7ëÛ.û -®§§Ý³½ˆŸ“qÕ¯­ˬ¿µÎß ûI³¡ ¥ù ™ù#륋ý ¡¯“&Ù³…Å !Ûů…bç=»ãÍ ±Õ<—?Åÿ ³˜Å2å«¡%»#½Ð›$ÓÖ… [ëBõ¹åMWå)ÓeµK›X“{)ÃBå\¡1Å€ý»Û Çn…ó“ºÑÍ%ƒƒÕßÒÿu‰6ÍD»›2«fÉ<·…µ<×’÷—ã&¯ª§Ÿã¥˜¿lë³ëÅ7­W“‹‘ËcD“ñÕ-¡YÉ'‰[ÅS‹;µË(ßÈω…åÛ­±(¹]ï¾Í>ï;íaãGÙÓ4å$¯ ï"•2ÑQû%‹ïh¯•ßÛ~µWë8³*ÕM»—ɨ³›1ÿ÷Öé‰å7ÓÎß8‹¸Ï£½ÀÝ Q׵Ǒ—õ©N™¡¹`ê¿cé—T¡Æ«Ìƒž©{×¾¡ÐÝ«k«±åG³ÛN¥RË‘™u‡×}Ë‘_ÁãÏñ±©¾…Ñ»´©ÃéEÉH­›óCÿ$ɽ¦ó{±B­µzÕ¦Ý!áz¶Ù»ñ­å&ÓÕ¥[á'›e…¥½ É‹'±®³ïçù$ Û&“;«/¯+¥«Ý#Å"ûÅO£(Û½é ×µ1ÃÓyýVņýù ‡Ã¿ó1©ÅQç!©sã!³z£å£¥ƒÍÁ˜Í ¥ÑÏõ8Ý&ÿ!§#£Ó é"ÙŽ…&©#›‹)Žs« éË¡“ ½ÿƒ … -é<ÉûWç.ñýÍM­×ÿžß²—ƒ^‹0§‘5×<¹Û8áŸ?ÕCÿ4çÅS1£Ù(É ¡Šë-ç:ƒ¯#û•1ó¢·°¡ƒ¡¸õ -IÛ!×zÛ1Ý'•qå+¡Ó“³~IõZ¹—ïï“P¯õE­2Ó&³¬(û2—ßõe·«Ë2¥›®•sÅ ¹õ Ÿ¬› ÁñuáÊ‘Ûý©Ù±r/Ï6’Ó‡Ç!›¥‘ ǹ¥•:÷Y·zÝÉ#½L£K³Q™0«£š¯ëûy‰LÁ¡³ç -©!Åž›Á/áÁ…³AÑPñ.Ë$­„§§'ƒ#õ^Ïû á‹"¥‰ŸÝ ½¯"û«PÁ*÷§±íçѯ¡© «—"Cí í óã<Ÿ)­|¹± õùEÑxë» ¿u­FÕ™ç!à -óµù -Ó¯ÓÏõw÷"‰¥õû'õ#Á -‹PÏ(ÙX·+™‡RïÝ ápÑ+™!¥,£½Ù«ƒË;½©¯<§¡¡Ù[Á•&¿÷"vë$×#ù¹Ï7ñ¿ª©"‡%Ñýœ‘ Ÿ9™™K¿~µ2û©}Õƒ“#£ -¥:»¯G­=Û"ÕCÑ#…÷-Õuß ± µ"Ï}Ñ<—XŸ ƒ4‘p…\c½Ã￘©'ï é¿í)ç—4ÁÁZµbÙ‘ ý©Ï½×õF×Zå… ç>•Ù™*)û Ó ¹ÍV™;­Nñn ÕsñÁ;¿*Ù¯ ï?—õ§DŸ ‘mý@£ Á“ -Ÿm˯㠙³vóÑ‘õíA§·ÏÉß¼ƒ:Á›©œË ¡ÆÙý·Ç‡–ýé¨Ç.ḯ"!§Ç¬ÿ'p­eÍ+­’½;½É ‘Ï÷tƒk·éPïKdñ#™ª—&ÛE‰¯;ûg‹¯Y‡8çl‡ų‡³„ÿ“ÉX»ɸÓrÙ ó— ‘(ÿ‰r©f‹QAÕ"ýA«ÅeÕQ•½‡åNc"›©ã"ë—‹’ÏzÅ%»SÇÇI£l± ‘©¯yõÛá½í„››!ý ÅóÛT§;¯ÃÍÏ«d‡cÃ,Ǩ™ÌÉ·h…š;­Ä¿«éO¯k‘Ïã»tË“—6¯fÓÿ‰¿Iûj)û£™›HÃÑ3ïÑ)÷Á•<Çk«?ÿÕ‚±|뮥QÓJµb¯£±sÅ燅ñA»Î¯á_™‘ óY‘“0ù fƒÕÛUñ9Ÿ„— ¡ºõ ­ŽÓŸçÊßOëYÓD§Wᛵ£jËAñt¥³Ͷ…Íuá#í¿€ íÔÃa¹=»Jõ½e­¥‹ ûL‰C‘÷OñãSÿA ø•ʳ ó’Á§ûƒØ¡+·Ù0Çn· ùϬ‘Ø¥#—¯ÖÕ±¯««L©kÑ™‡Öß?߈ƒÅLÝ…7ÿCÁ†²ùÔ¿“'ûÅõŠ…£×`ËF;žãUÕ!BCëÝM“«m/£°iÑ•Ç7ßT‡ñÒ•¼Aí›Ù®ùçNE­–§©ë²¥¿¹½ãuÍpé²ë…ñC…é®ñ͚ɇ‹¦ÇbÃI•Ρã@ËÄ“‘«»;­œ»Èÿ ïB©&ËÙÙÝ#õl‰¿z¡iáB¯@…õÅn­Š+«ÙÍåhÏc‹Ú¥*ýkÍÖEÛKóÉ¿ƒe5¹!ïuIƒ5õ3¹Ñ·ù=£_#‰*¹Y‰ŒË¿—õ„½u‹Ã¯]ëNÉÛ»©÷GéÊõqµQû nɬ§G§ -‘§=“¯=Ó®¹¥å'÷!¿õ7å'÷ í·(ÓH©©ó’×"ÛÝ>•ÛšŸñdÓbÝ»É-+Å)½‡!ÿ© -‡SGï"—ƒÉ ÝK›»%½#½ ­"à ßaÿ¿Å1ÕÅK¡Mÿ)›·ç4¹ÉÅ'Ñá^‡#ã¡#•ãF—/¥}“#“(³¦á/û7Ñ;£¯Iƒ"ÅÙÕÔ¿Ëé\‹&Põ>ÝÙi·_ñ®í4³5ƒùÀ²Ù¨Ã.±“ñËåŸtÕGÙÃÛ¹0ÓS¥N§Ÿ~ÿžÍÏ`õñxÅ÷6á½”ç ç ›,­ßÄÏ‘Uÿ“3¿ÍJŸ Ï/ç×ãÍ­‰U‹0åx‰ÿa›£çqÛWÉ*çT±ƒ›=Å É­"ÏáJÝ—ïéÃ=¡§¯.‡ž‘ݧÏ!…Sûý?Ýí·÷é1ƒt¡[цª±ÿKÏýã!•vÿÖ×µ¹!1µwŸá¡Û³š£ íXÿ²› ÇÁ_µœ×p‡#-»ÚŸï/§OËÌ™lÏ ÷DÉ!Û¯¯£²ýg‡9ãóÿÁj¹,3·¥ù…rëÿÅ#_ɇóóA±ã®Ý›7¥†á‘9ÿ3£rµŸÁ£—à 9¡©#CñBÁ*›|©ãÙ…§#ǧ“ Ï»Ïéábí˜=£Ëq÷Ã帓ZÅÌ1åÝÓUí01‡Ó7—ùÃËÏ ý ¥ …Ñ*4Ë ß ÉãטÉÛ­'û+Ï$Ó™*û›™é?çc›jÙÔ1ñ-­ñ#¹›#Ÿ©>ßV‘ÓÉqùÉÛ0±×§D¿Lµ‘É#Û#ƒjç"µT“"³å$•'¡IÑÕ«Ÿù<§ÿ1¹×/“#ɱƒ1«½Ç í½(ÿ“ Ã%Ñ<ƒAó¥ÅÏó“Ñ‹ ¹/ ݵÿ"—$õ³'‘NÝ/ûÓ:Á Û!Ý!©<™yÕAÉ Á•µù(¿Å#µïç…-«»ù-åÍ«"é³#õu;§1ëí‡1‰:·±­,¡ ű å#Ÿ#—M*ñ"™#¯"ãËF£§¡ -‰ -‹#‹ï\/·Ë"õ©Í~•ŸI­ £ É0‡'­”³E‹§$·"©—Jý"‹óN,ï1ƒ…=V¯÷ï‘…5ñÅ|»FÉÙ)Û,ËŸÏ{éOÏñãÐõ6C…™÷U)× ñ¹•Ô«[ƒb›s·¶­Dµv/ÝÍ!Ã%Ãá©ó±'³­§ßtí!Õ³Ù×v§å(ç–£+Ÿƒé¦ûÙ9å=ƒ7…Ï΋^©#»¥~_•ZMáãL“nÉ9ƒ!³Ç`õω-ßó‘£ ½n©w‹†½.7ÑE0Û û§£«}‹#›·-íÓÃ¥$£Ø“ˆÅ>å …ÔG÷ ãx¹W…´‡ˆ#ŰÕÎûBÍ…®§ˆÕ°Ÿ(£¿ùÊ ë¬³ËCý’ýÓ[õ4Ÿ![Ñ̯„‘­sÛ7ïn—3ÿ“ã[aÉÖÿNïÑݼí¡w—£­UÕ.yÁŠÉjãçDý/ß2ý!ï½H1­í[« åÍ)…,Ñ3ïÏTû…¿œÿJ³/ÁßÍ㟯*#Ÿû4Å‹ -C¹<ݽ7·=Ípµ;û­Iý‹õ9›#Ÿ#•Ÿ -…«OÓ-©Dÿ™Dáù&¯ »"›T¡MŸ¿`ù°­^‡¨|õY§Õ¹— -Í+ù3Õÿ ­Gõ¿.±1½ ÁýõíBÇ ¯¥3Ïsý ÑÕÑÏã›(åÅÁ×ÿ=ëÑ‚ñÿºãÁ«µ¿›t¿‰'½Å·OÍ‚9—*§Á ‡*—™·‘#Ö¯#—NõoõLñ‹ñ rõ ›!9Í7‰Tá+‰“!½E‹ZW/—.ýs¥\×Tý@™Î•9(¯ºõ Ñ1ã¡@§ŠñJñdëœÇ@™ m#×ß¶¡Jß-ÑS·‹?ÁÁ"Ñ!ýL¹%Ó&ŸÝ½O³.Á­B é#¹T•.—0Ó£FƒF%“)QÃO§1µ¡’ÍB“E‘:ƒ÷åÏ•¯»“§у§9Ñ"Å«3Ë:åû ±ŸÁ Á,ñMñëA¡$•*©P¿WKí × Ÿ(ýw¿ ë -±ló½.•ãÏ+íû!d¯,»›‰‚å)éÉgý5%áÁÙ*ߥ‘Ï"“ÉÙpÅ+½ñá‰(‹JçBË Û™3éç·áž-»3ÁvÑ Ã§.ùÇÛÝ-‡p¡=›Ÿ6ÏJÿ¿¸ÍZý‘Á>§íÊ鶯´•§º—ï¯ÕËÝ#…ŽËvµ†¹I#¡¨ß )¹K Ï>Á‹J¹ËX«ÔÓœŸ:³3Ÿ‚³ip«z÷¥«!—íZÅqË!³±,çá¡‹÷5ËËa‘.ý!ÇÀ•¡±ó ±¡"ËÊÛç„Û—ƒ«Õl¡ÍµƒpÿÇý×Ç7í'†ÙsÙ…õ¿Ç{¡ù¥Cá>­£‘0í»`Ó#ÕÕ9Ù:ó¹³B «#Ã>¿!‡°õ© «¦‹CÕY…@Å®¡z•WóTÉΗ—í—ˆÝÅ·\Ç -óáU£Áßñ¥!Ï›±…Ó‘´@ù -”íÁÇ3퀭%õ ±MÇ(—E•’ŸW±›©¨‘9Ë”åJ¹¶ÿ'Å ¹.¥Ã[³åÅfɂۂOÓ2á½"¹1¡ùGµ¥ÉßN³Ö—¹›*á"“¯—J‹›Á$ïWÙ‰'ÏÍ×ýIËÇ4‹¿U¿3¯ Í•¦Ó ½p“#ÿ(ÕiÃB‘¯Jù™rá®Ë`»?çrÕ›"›³ -•L˧a—l×qéÇ8œ%±6“|¥Á÷$Å•ý -í@糿»ª³ÁË3‰S߆µ»ÖµXlj¨…­‘¦ë'›‚‰“œ¹ £ ß#Ç:ÏV—K‹“5ÃÛ1£ÛßPÙ¾{#±*ó™›ãoù¿F‘Û3Åa§8ñ/ç2Á<å/ñý!ßkÝ¥!4Åù:—Õ©3…×=íw…8•6Ÿ4›!Ÿ™•‚‹+&·†¹†‰¡•À“˜—x§Jà -ÛÂ¹Ï  ×u»É™%·¬ÿ„éÍ™ý{É… Ëí(û‡½óyç׈ÿ Û±ã+Í•ƒ²£™Ç›GÕÌ×dÿ]¥/©‚ùµ¹«|í^±B¹FÅß‘s“0Û¥˜™Á"åé0«iç%ûóM¿j½ -·¤õÉ)…yÍÑ­8Ù>Ÿ‚Ïy·F·YÝ™•)ïá“[Í'±5«{ûƒ‹UÝoõg•&Ë€Áãs¹\¯5™z™d­£‡×·/¥AÁ¥2£‹ûÐÕ‰5Ç•Ët‘ÑuÿIѱõ›Õ>…xÓ¥u•'ÕÏ« #û[ó§Á˰ƒvõ•‰áµ -Ká%Íɶí*Õ×Ç•?YÁ’ᕬٸ­•Õ,«oã›Óo•4ñ:Ñ!#™¹«tŸ"Ç"ßï"óo»ýù&é R­Ã£7É« Ç&­§)±÷ »°ÏRÑ*‰¡Ý(—“›·Ÿ -‰Ç>Ý‹ÿH¹Ç­ËñëËåÊå± å©)•FÙ!ñ Q‰#Í™}…x©·§­\“u¿.Ų¯ËéGé§EÁAµ"µ#Í×— óy• ¿Ë-­ë áé*—ß8Ñ‘Ï*ƒ%¡É³ÍóBÛý+©ÝË9—:«û—Ù »7·’¯PÑÝF«k³+Ç$³9ñ -•/ù‰õƒ ÷‡1Ü…>çãïÍŸ@­± ›Ñ‘!ë5ó ¿!™ É@ý»0Í4©R“ ×­¥Ý£ÄÕ³†™Ù¹Ë"™ µ…í#ßh ‡ -ÑÝ}ý)ÿ2ë!¯³á -‹J½(ë¡'­¥›b‰žÿϵՕ͟ -»•MÓ;…(»Åǧ,­ÀÇßûïí8÷Ñ£,ß»'Á+åwÿ Û ­¹-ýcïÏ -ß¹ã›ݶÿ ™«û‡õp™éÍ;½Ù)ƒ‡ß"¥ˆû3…©õVÏ!é» -·•™>÷û=m]—(£›#‰ß"1‹¯_·‡‹±Žû -3Ý')ŵÁ|ÉÙ§"Ïù×7ÁÙ ÓuÏ2ûŵ|¯K‘#­ó¹±¿µ:‘©Eí,Å&¿÷Ž»8“/±ÿç ›Iÿ ¯ Á µ×áv‹ƒ±A•!Ï®ù'ÅÏ/SùS££¿ë3…ÄÍ…ßµ£Ó ÷!Å{å%—õ !óÉ0å€{?«®Ÿ ›M©i“¡ç¹- ™[ó•5÷VÁ×bý<'‹ÍÍ&ÁÛ‹Ïfý É!»%©¥Y§×,å µ9…!·Ý …Ñ¡7½õZ› ×-«"Uñ;…{‰ ÏK¯?ÃùÄÕa‹é"ƒ -Õ4› -ÕÃG¡2!‹©^Ý ãŸ#… ÙUÙÑfÝJ‹$“·=ó”—Û€$¿ óùïU•¶¯?w¯ó Ù ¡ãó±Éy•"­.Å -³µÉÝËC© ‡;#¹Ç•iéÿÓ"ñå»$·™ù%™=Ë/ÏéC©ó/‰¡:ñ—Ÿ#•)«1õ=ÝVA§Ó£DÓáÁåtÅDý!Ù -³*ƒ‹4Å.«ãÏës÷¡JÁÍ‹#‹ç˜Ó!µ ©¶ÑÍ¥.ßß‘‹Ó°³›!¿¤!…Ñïtë™Kû¥SݱÝ6ƒtÍ"¦·—Áǵ˯DëFã³ÿó{á‡CÉ™¹ã££µ"×$£ÅÃ÷*‰¹ Á@Ç=™!Ë÷Í!ÛÃÇï{©Mó Ûý"Ó¹·ß Å>ÛW“§ÏÓ–·!¥"Ýï"µ(ó -Û“EÉ;™Dï"“É#ë3—÷¯¼ÕùÙqŸ*É"™…í½!¹ -¹ã ±8ë—ÃLí…)¯ñ á"¹{³ÿ‘™§ËwÑ£ƒ”ûå ‰~ï ×—ù6÷ÇqÏÉF…z“ëÍ‹Ç׫°¹¯p—Åñ+9㎻µ5Ï Ë£E³*Õ/³:óé…ƒ>!Ó¤‡[™'уååQËÏóëë[å0å‹‹Ø£Á<ÃL¡Õ!ç§7«Ÿ›:å¤ý­>·K·¥$ÛŸÕÇw鯡µ¿&¥¡&×JÏ‘‰8ã»<Ý™5×_=áó?¡Ï>£“‡›Yí1¯áÝ2‘ #÷™?ßK¡«—_‘×¥!õ›PÅDÛ‹'™O«›%Û%•…ó±YÅš¿¡8Çhëí Ï0˵ õ5ïWíWŸÏSÍËHÇËã‡ÿ;ç?³é7‡Ù<ËVãÕÑ™2½"Ï2ÿ0ã`á Ãí;û ©;ß».Ÿ.….±-…‡ßí&å±K™7û õ¥#á1ñ‡Mý‚ÇF•ßXÑÝ/Ë5ýƒ<³ˆÇ.±×#­J¥‰³ Õ.¯#·;õ1¥%× ëGýëÆé­"Ëí;ƒIåšË -£@­›2ŸõXˇµíYÿ0ûKëÃá -ÁµŽ‹ -ïëZ÷<¥¡¯4å«X›O×4ͱ{§CÅ­'Û"ƒAé#›)ûßµIÛw³µ/« Ë™DE͇• ‹ Û±·‡Eë çZ¿“ûE«…,õÃ;*³"ç'Éý$¹¥Ÿ=óJÙ÷ Å-½ÿ!µCÓÃñ6“é¯FÑ7Á'á…¥+Ó/O™w×ó£|«6û¡.Å… 1¿›aëJ£éÕ#¥éƒà ­« å[Õ á áñy—Ë…»­/û?ÉM[Ÿ£©$ƒÌ盯‡ß¥ñÉ í/é»4Ï2Ù -›³¥§•#­¢µ½0ÓÁžï&Ï/·Á¡á ¡'Épýµÿ|ç ÿ§™;×%÷ƒ9¥¥'u³“*…§Ÿm•™íƒxÁCça¿« £@µ*Ï Ù”×$·¿A»Kû1§£-éEé ‘ å;¿kÝé £0 ÁÓÃ1¥XÝ7±;ë̯{“4çñ]‡]—Å"Çy¹ÛÍ#Ã1Ý_Ó@¯Çßý¦‹>ÿ®ÿ;ý|ç`ÃdãØù…¿Ã‰z‹K‰»›@û®¥µÁ‡VÿÁóßJŸŽŸ"Ï:£/•«ç ¥‡‡"ãTŸó‡ ¹í × ©y á ™0½ ñí -™»Ÿ(Á¿@÷¥õ— ñïñv¡#ý¹»‘é#Ñ ±«0¹¥h™û“&› ½ ©9Ñ"Í‘!Ñ ã7‹kÇ;¡ )×/…(·™³…Ç ç ËLÍGç$û¹"ñ ‘xïNÍ ¥·!»$çOí!¹ ã"Ïc÷ ýÓu½¹á¯ Ï£‹»'ÓGý/½å ùóoéý Å"Ãj¿ ¿— ÿVݱ¿ ¥— ¹ ù2ÿçŸÏ;…ËÅÍBû ë˯ɕ±õÓ“+½V‰!‹2Bí!Ÿ¿Ç!©±»évµ×½v™ÍßÏýɆÝß Ï)©Åñû³‘Fç½í¯ÛQ“AßÕ$ƒÃÃ.ó‹RÅá­… §µ@¿³#ñï -³ñxÓŸÕÓÃ|+©Ó6PÅ›œÓ!Áh§Õ)ÙÊûc;“?ëVÍ:‰œ“ˉ - Ë¡÷ÐÿOµ³á"õ¨ÿ4— ³±{ã;©(Å@=ן›(Ñ6ÿ¬¡-•Ûµ‡ûµB|‰Eµ ëG‹*‘ ÝC•LûŠÇÃ(ç§Ñ ©ù'Û,i• Í.å³Ç£%­éo»½§5Íõ_“wÏ”¿É8…5ï4µ1ùSË8ɉ%ã×\û.…û$×ãa•+Ý£-ÃK­'£Ÿ‡å ÷+Ó§é£`û¯"ó³1“‹+íïký-Ù"ù1‘M›‰×!§$ÑCý1»ý8ÙI㉠Á2Ï ¯?ç!“³·¹ ŠÛ•ßnùŸ ó3‰C½©Ç훡Á ¹$Õ1£2ó(Ñ:‘Õ`*ûû'©Ù'•Ã,“9™F· çM±vÛëëË9Ç.¹I«ÉË-‰hå!Ñ õ·6ÇF©(¥—¿‡$›†)Á$ÿ'ç+Ù-ë2•4Ï‘%Ç'é1¹2›'‘™"ÿ,Û0‡÷‰Ÿ+­<ý8³ û÷²ɲÅ ùDå|×+Ñ ¥±Ñ ×)ðã2zã+áAéë•Y—,©½6•(ƒJ¡õ¿V×$8ßûQ÷‡É4Åç§"©Fÿ »Kë%ᕵ‰*ÑÃ#½\™‰­å(÷O·÷CÙ#Á-ÕLÿç!›<‘·Lý ¡!ýK§"Û(é¯ù™rÓ!©8™ï+¹›F÷"ÁˆÓ‡Ì—…;¹"­ñWÏG©Bý‡³½‹ãgë Ó(£]åU¤õù.Ÿ ͹——,Ÿ+ÅZùÛ/·Jû -—?ç2ÃcÉ£ ‹#ÓóÛB“BƒŽ«Ÿ“›$Ç$±Å“’ùñ†‘ »‡\‘Fß÷/»ÛCÝ8‹‹|ó‘ÃQÝ (ÓÏyу"ËÙÁl‰Z›Å—…›Ñí ó"ýRS±‰sï‰ïÇÇCÝ.õ£#sŸÉgƒ&™$å#ÃLÑWù5Ç(» ÕùZ³7•R…FëljïpËÇ!››£ýÇ.ųå Í·%Ó“Ó o͇û±•‡L½‹§Ç'¡¥$³ ™ ¡+ùŒÅÕ -׿#÷HHÉû¸¿ ‘ -Åý5³*ÓTå ïíà ×#ÁÁÅ…ÛÕ¹…Ù«•³ Ë@«í‹Pã…YíÛMω*£€áÿ¦ÙD¹ß*åáM×» -—É.½~‡·ˆ›>E»›!‡BÙdƒQ‡$éÉ#½"Ñ—ÛÇS“ ¥#¡™›3ã››‰¡ó÷‰Ï -¿ ñç+ëÿÑ™‡5ù­"[»-‰]·0ï½!¡Å!õ ‡"û#žév“…5¹ ­ ¡¨¯¥S•£A¹7ÁÑ Á€Ë!Ë%!¡?ŸËI§CñBQ‡ï)‡0Ë£Û‰ÑLÝ'ñ!éD©=·*á•Á"çÓ ·‹#“Ãí§<÷ ‘V¯¯,¡(×5ñ Ç«Z¿?…ƒÍ/%˽ï§!Õ •—+Ù~÷Ûù·ÿ0Ç‘OÕß =ñµýuÍÍ ½ϯ3ýn¡µÉÒÿzÅ4ñ#õ¥”ñ -ª…_¹Á©dõ£¡O­.¯ µ‡› ¥r—¯³ ‰…—ß ÏC“½(Ñ•…&å'“(›=Ë“^ƒ&ïÙ'¹&!³+# ÕJ5ÅGùM•%¥(…„ákï ëD!õnÁ(ë7a›y§E³ ™•E“O±…ŸC§ÉSå!ãV¿A㭦푫‰ñP¡pëO½ù}å!‰á#ó™¯"¯L‹™ -÷Õ#ã9·CÓ|¯+§DµLƒ‰"ó‡~Ù˜¡&§“ÿ ™Ž¡ÿű#§«Á·£¥¸©r™2¯³,ç-½K“kñ · #ñŸýÅ‹‰í:Å1)ã-µ±¹y#.‹‹·ÏµÙ ý"ç±%Q•|ßÓá—)­gÅ -™*ë¯ý Û"µÌ¥I½{Ÿ<ù$»¥ñ§À¡f%ù`­ÙÁŸ¤³ñ¶• ÍÇ͉£¯¿‘…­cÕVñ‡Dõ¿ÑD‘"•ˆ… C÷;ÝYƒ¹xá!Ó)tñAŸ¿÷.Ù© 9©áùå•óB™½7ÿÃ^í -˧³—=Ï%‡H-ÝCÇ9•ËÑpé_-­ªóÿ á3•³“Í'ã"ù@ÓÛD«§µƒ×DKÛ±ÃõÍ -™)NAµ˲+ß'ùx÷'û©š/Érƒ(‰%»Éåý—(Áb›“$ý>7Û+Ý¥§(ï˜-¯ §:/¯&Û]Ç!9Ù&7Ù)é#Í"…Q¥±µÍ÷²ïC%§1µá"íIó ¹Á‚™#¯ÿ&5û¿¥£ëu‰E‰‹DÏK÷.£…'¯½ç0Ãù*…ç5÷ñÉo±I7Ý—"Å ‡ Ÿ£C©+ëEµ˜Ù …¥C±£Ù)1ňç'áó‰í ™³™í ‡…B5ñ¿˜=ù>•£_û.E·—»‘í-=©”'=Åd·Ó(£O‘¯"§Gƒ±¡ÇÃû Í£ ©åÆ“éiË »áy÷… •©½=û¦ÓÑÉçžUíÈ•»=§8‘y“Bƒ é óHñ‰x¥Ë£ÙG»£/÷X—‡¯8¹?É7‘Ч59û€½W÷·‡ÑËÑ-±"¥WÍ{ƒ±¾·mÅÕï¸ñ2ÿ´¯¾‘”‘1ù. •§ñ%×z·rƒ½ Ù"“Ûß=õ ˸íKÿFã%Ï‘‹»0½\Ÿ“U•íníï:Á÷}Ù1“Íý -õM¯ÿ.‹Û>Ç”Ǿ‰Ã:¡—*ũф‹K¥Íó˜Ëdß!ñóoýÃíÁ"½(éRtù'¥ ‡ ×çJÛ)¯%× í³‡»²•™¡%‘“óL݃µ£çý¡*•Í×”¥W½2Á™B­»ó;÷é™Ó7ëSýËÁ…‘áÇB‘‡ ÿ&³Z(Í›¹Û³ ‹,… -ÙÑY…-“4¯o­ç¡5±+¹Ï…ÚïJ½ ÃÅ*ÅátÏ‘#« ÙíÓ ùÕ£ƒ«( ·ƒ"Ÿ‘ï"ù,Á … y!¿D"ïz™ÿÇ5Û—×µx¯—£4Ç—‘*ûCíí¨ÑtMÏçÁ>‰‘ƒG¥ŸñhG±=ùßqז鹇ÅI·‘™Ç '×"«j»~ó¾ÃÑ5á=å–Ë7›½•ÿ1‡bÙÍ.…‰µ;閉¨Rñ.±’}ã¾á­ßh«%£™Ý/û‡µn§ ‹›é2× ï%ã6ŽßÕ%ͿȭŒ—;™=‡q ­9ÿQûr‹5僳§2¯½q§8çªÑO¥$Ÿw±7©Ÿ½Êï-ñ-‰a“ ÇÅ+ét‡;‡wÙ8¿™Ý·s…ÍÇÅ5·EÁ$Ã/磩“ÁÕ)™]™…i¹÷~û($›ß”÷R¹Då¥Í¿Ú“׃֭nç!•$õÓVËb¥HÕ8ÕšÕ‰P‰KLJ£ñsÿ±±†ãz¾Ï·ÃÙëGñÚÏu·‰‹rÇBÙ‘‡aå í3ýcÙ2ç\ÍÕé³§ýLÝϳróf¨¹Ë™—ýÓÒ#á•!Ó†· …‰Ï‘l³Ñç@õ…¹TW½µß½•Yÿtà õŸ‹(ÍNÙûN£…­GïÁ ŸAë1‘k‡¯n×1ÙR­Öµ`©<¹'ß°ýÑ¡Å}Ïí0¹(‰qËJŸ]Ù(ûÓ›ñ@ï㦑!Ë©Ç~©TóDÇ.÷1©Á+¿H¥›í)Í¡Õ5£ ÛÓ.µñåó•Ç¢«#Ë2ó;«÷HË"Å/ó;‹€›;í8ó>ƒ[Õ&¥³K¹[›ç’³©‰ÅƒzÏUË!©>‰†‘Ùç…ý‹…%Ó€¯¡ý ¡õgÛ”?ÛÙëM9ËÕ·"¯)«ÙµG­<›YÝ~ÇÉ ã‘! Ë»©š7Óë#õNũխßЛ.Ãȧ&ÕûEÙ(™U ›q³VÓ¹ñ—÷sû¡Ťé¾µµÃ&—ÑKŸÝ5±e:»'õ(ƒ¸‡˜µPó²ƒgý¡k±ù¹×£u­{§œÏ¯©ïVŸ_Ï\ù„»:“XÿŠ©Í—}½ɤÑ?!!‘J¡3ÿ¥YóÛa¡ ƒ±7ßÙï;ãF©!¢­‚“±±Õ§¥·”…JÑÔÝ £Ï¿‡¿é¹MÁ¹ëPÝ@í£{ñ -ÉÆ•ù •ÿŸË«—Ç AÓÏF—\µÇ£÷qÛ<…˜áÅ&½'•]—[×IÙçMýÕµ§çzÑNݳ­ ¯ï «×Ó -/ÏW½žý%—É•ç -…ë½Mý-¡—?¹5‡• Õ­JñtÛ“­*ëÅ?ÛHÅá:¿ƒ ‘Gã8ó 5ÝWÓ9Ã-3‹BÿµÑ==¡ ­÷Kû´ -‹$û‚‘m×µ=éŠåñ•÷3™‘¥Í<Ç…Ñ©´cåÕcÁoƒDƒ ÏûG×S÷“ ÕËGŸ×A¿ Ï6 BÏ»»X¹ ÿÿÃ…I±M™k§Ö£F»Á³ -É>§ -5í%£Y­¹í‹Ç¥™9ÕÉÑ0¡{Í$7›Å0ƒ^í3ÕÿЃÎß-iç…ÏÍ.ín§$·û"ÉgåƒVçùbí&ͳß'í£a5§-ù˜ÑÃ6C«0‘1Á;‡w‹ Aû:¡·FóF‰‹‡³‰+©¢Í$õ’AãL¡FߢÕGµ,k¹%ÁgÇ(¹/õ)½mƒ'ë†:ç ëqý;Ÿ§¥)‡_ý…÷'éRë@‡¡ Û…åbí,»RÇ&™$Ù×Ñ™„ó*ùKÙk‘k‰Ÿ˜%½;“K™)ñísÇtÝAÙÓï=·g·2m—mûÑDój‡Ý‘Eé;ÍTó!ßÅ(ƒ«/—­ …u¥\Á× ÝQÇ%¥Ló(ý«+µ]—*‘4ÑE¯F£K¥ Ù<·)Ýï”õDýS£J©¿‡ ‰Nóý;'Ï›ãCÕ˧½)¥ª•d¯±,§.Ï"¯Ÿ‡Ž×"¹•õ—U‘Ê“!÷0»=Á ©?­QÃ~¯0£>¿‹yß*“pï -‡~ñ)¯AÙÝHj­õ'×̳ôë¹OÕvõ±a¹¿áØ¿‘÷iÿ¿à ãRåÆéÖÉtãcå±™ó¿r‰0óÿc‹Œ±Á£ˆÏ8·5ׇ¥™×°·5ËW…µÓ9ߓㅯû‚µB6Û²¡¥Ócý6­­“Žá?›ß›õ ŸÙ:Ç™ó‘\‘wã5§Ó¹z¥Çµ™Jñc“‚Ãʵ¹…ZŸ¿¡£‡F\Û½ÿ—åªÿv¯.ÉËÁïÀ¹ƒ|ûȵ½§\ÍÒÍ™ŸU›*ËËÍsÓ™á—9¡}ÓçO÷?‰Ã7ÇÐí¤Ó¹ ×Pƒ+㈓…»À——=ûTã(—†± >‡'¥&Ñ'µ·)“_áB‹ Ÿ•CÛT³hƒ “ýdÏ ÅH¯¯¡ÿMÙ$½aË ã'¿‰Ç/¿ÕÆË ÙÌÅ€ù®›xÕ¹÷Ø0ï£ÁcѤ§)¥võ–µ"½ŸÌ©v“©™2£ZýÝÁéÇ#ïÏM£ËÇý ¿óÃáÝUù ™´¯áÔÉGGU»¬åa#‘ -«ÿ§í#§¹‹bÝ|ÁiÇ_Ç÷€¡=‘!ý¹­©Ï•“¡ß¥‹¹"ÅÀ£&Ùÿ)¹J¯Ò ½óÁ'ç%©J¯ã±ßÅ£ͰÏjãÇ‘õ­ë;ÓŽ‡!÷Ñ7áª+×s±Eé©ßÅ·¯jÕ±xƒ;Õ ÅpËnÉ}ƒ°óƒ©Ô¥±ž±å:ábÁ ©G¿+õ‡1“b›ñ¼·«!Ÿ×åEç|¿Õ§åg¿OáD¥'ϱ«Âý)å>‰ÌÃÏÅÐï†õÙß,—#ý“ÿ…“³¡ ³ɰÙ›×E›ý©‹¡í±Ÿ²Ï##—o«*·á½@éѷ(…2Û ƒÑ$ç -ÇáÕ ·¯$!Û1•õáÅ)÷ï'‘“‡E'A­\Ã$µ¿ éÉ ñÓ#ÿ!‡Có Ùõ½ -Å'×@±2á.'Õ)ýÕO¥+/Ÿ•½Ó™.õ"©ù¹¬©_ç÷rá.¿ÿ •Ÿ^›/¡ñ‘Gǃ/óµŸr™—›µá$¥Qÿ©)ýëµå.ë­<Ÿ÷?¥ÕB÷Y¥§r¹&Çóí·2¿£2ãñ É ç­ ™¯W‹_ƒ‰‰6û5×ýµ1Å'óZã­å+õ1µ¿å³Ó*‹“që±xÁ&Ëå,ïI…-·õ?ß1Ïá1›¥ Ýó ©qÓ#Í~åÏÏŸ\•ó"¯:éíXûT•yÁ^½½¡Äù ÕÛ‘ÇûŸ#Ÿï"“\áå1÷)õ.§0éc×…ßçu­ßµ.« ‰<«Ë$×(£©Û“:<Å¥½%‡ó$± ÃWÓÕ"©ósÛ"‹?÷Eݵ/ ‹/« -‘#Õùų—!Ÿ)½4ý™/Í “çDëÉ·/Á ç<µ"û Ñ" ׯéǹ(ë “$©ñ“¯UÕ±ç…1C)•Á ÿC«V©-“Ë ½9‘h¿• ¯ïxÃ@ÓÏ ÉÇ× -©F?çLÑ ÉÇ«Q· 3ó!ãÁ¸å|‰2çGÓ]Ó³I¹*»žÝK¹ 7Ý»‚¥ûÑ=¿—ÍEã£QÁ;¯!Ÿ»Ãé3“&©Ã‘Åšÿé AŸLµ(3ñå©ÇFù!Ó>ÝF?‹J‡,åã µ%Ë®—¥§<ÇóqñH‰OÅUÏvKõ'»4å5­d±™{)÷µI³YÓ‹ï·CÍuÇ2±v•x·C‹'‰ —ç'µ‘· ­)+ÙELíÝÇJë&—‡ɪÏÓX÷S¿iå-ónßoÛÙ?©‡×6Çíë)A›#©#—¡"¡—¥Oýëå(÷#÷¿"­µÅ¹1·†åÉù ÓAƒ&Å‹\ïë“'‰¯©ç_û!=¿ ÷=¯gá9½ ­&Ë8¥ç!¹Óõ*±M­A)çb÷ÿ“©!«4Å}9Å!…¡0½}ÅAÑóË‘Lã¥å"×;ÿÝió׋¤ñ>ç)—É—¥pƒH…P‘ß ‹Í‹Eõ&‹vƒCßx…Coç½–£TÇE¯–¿=·E‡¢í_ñÁ»tǨÅÔÓOÙËŠ“T‹ ë/A½5ï -“C‡&ÅŽ)·4‘éMÓKɯŸÏ"ëOó'ç§(ûÍNŸ('ÓÀ‡> ‹+‹Û•)ù±_Õ$™‡E™û1…ÿ.1ïO$…'½‹ë×-¥á&ë Õ<½ “<"]å"Õé¿2«E±­Bý'¥³(é$Û$Á&ï©-™/ï\¹¯Ï§;c‘]Õõ éã*›J¡ -ËAÃ$ÑÝ)ù$ý áÝ!ñVåµ -¿ç ÿ×-Ë õ2‡CÇã -Ó;õ"ÝѨù“(ßç'Ù -ßDã­*™"¿$ßýBË"“@­&© µÕ·(ëÙ"ý&ËÁõEó$Ýóõý+™$¿+ù"Ý DÇ™£ ­ß?Áõ#Ï“-·Ù!Éã>õ*›•*Ó"Ó?» ñ£Y«­Û£Õ«5¹(­ ›Aåí§7ýéo™ß#Íѱ*¡U·ß«)ù‡+±ÓDÙ°AY/—ÈMÏÀ¹ó/7Û ñ·q‘ƒË! ÛP»+Í*³ñŽ—›?‰ƒ'×­½ËÍ Ñr£ ¿$Í'‹ç2‡^ë -‡¾Çï'ñaß«(…U¡Óå™+Í7—"‘õ•/á ãýAï‘DùÛ 0Á¿‡(Ç]˳©ŒŸ·1­¥)— ó#‹F£4ïß*· ™™-'b›$»çÑ—EÑ+)‡tá“ ×Mñ#—Ÿ ·ï­,C¯Ï ¯'—#ç;» -·)½s‘t<£b›Ñ ã%ùdÏ&ïžM癃$ÿé©A¿E‡“ÛHñ?0ŸlÁ6Ÿ‰ûKÝc‰1Ó*£õãe« É5¹—ÏXñ‚Ï-»­+ÝNùÚÛƒÑ^í*ÃË»6«\¿§«<¡UÏÍS×#·©©4ÁÏÝ8¯C¡½#ó“•Á³ÛÉlçÃsñD©$ùQ͉#Í"ßï(Ã3­÷^ŸÑ± ‘B‡Áù$ÁkÁÇݓ÷Ÿ‰ñÍy“3û*íx•ÃÛ#募$§yñKËÛ !×± -ã#ãÍ1™—Íó÷iã*牅±vƒ¡#›‰£2‰ \×+ïO2‰D™—€å(¥‰BËJý‡•» -¯!… ‘«Ï…'™‡™DEÓÉ«•O“Ý-¡'¹‰Õ@ÅÓÁ*ƒB'Å6à ÃÍ+³8»›Ás¡5 -™¿Ñ­ÝžÃoƒ á×ËÛ;³³°]Õ}³Ë/>™/“Íý³(Á ûb›*ï·«{¥.Å/¹Óó7û‰fE Û­› Û +õ,Ûx§0O¯‰Õ/û2Ç&¿³—(Ë@·»E¥G݇ýWÏ?óK4‡r¯`×n‹z•.ÃÓª5¡X9ÿ¥ë©·¥5¥(W©Z·™á Ÿ×Ë™Kµ ç"í]›É.“‡y¿¡!lÛ¡#åp÷'Í>Ñëï1íñ¬£Ë%Ûƒë(Ÿœµ‡‘ ý¤éUñÑ2õ£Íñ"É{ïÅ;™LÓ*Aãÿ …Ý -‰MÙwï á­x›O“ Ñm÷NçÛ<ÑpáëfÙ£TݱÁ• ÃOÕãu¹@ß}©Ÿß« õ¿†Ç…dùU©Ñ¥c½@‡¡‹‘ å÷ƒïN©«/ë#ÉbÕ¥^£IñO•!ù&¹¥N¿ñx³ ‡ûON“Q»ÑJû"ÏNá8¥1ñb«Õ\Å/‹›P³/¡Qƒ=ßÝeÝÉ÷…ÝÝFÉSã Ç Ñ#¡]Û"‰P‘(›[½0ÏÅ3ãO‡‘BÇJçÿÅ]ÙBãVÁ#¹Tý\©íZ»já-å"­NÙB—§‘"™PÉ2Aõ§FÍY£ÕS±ï@뵎ÿ“yë‘TûJ¯#ñbÝlÉï,õÀõÇë¡×Hç·wåÙ‰°±_™ÓßéuŒ±ªå9áPÅMÛÒ‰ÔÇ×Å2ç;í>Ç}ë`ßÖ…Wõ·ŸG؉­«—áEû,Ý8¡Á‘·‹n…Æñj˃û²ÿÙí‘ù(Ÿi‹­åB—z™‚ÿ -§'ß`›‹×gÏ'¿¹ù -³PÅ·bË Ã8Õ0÷±'³B¹…·#×6­ŸÉÑ“E‰z›©ËÁ'™nɦ¡!Ã/õ¥÷7«‡1—'»wû•¿‰©-½0¿$ù‡Á ¥+‡u+µZŸÅÇÿ#»k½©‡;‹Å‚¥m»˜‰?“£!¯"§P5¿?Ý»L‡ ;‰?ù-?Í•§”¹Ëã!½óC¯#ó&¿í -û"•}¹«·Ý9³EÃbÕ'“=—–é'Û|Ñ;Ý—s9Í"‘õ Í!¡•(‘xÙ=ã -E© Ó³«ÑoÓD¥± Û——˜£·¥Ñ>KåD¥ºÕDµG¯ ½…ùŸ‰jãž±·™<ý -‹׉¥µƒOûH£££¥§c±'÷C§"—ù)Í!‘W§ Çx#µ!ë5¿{­1Ý#£^¥ »…s7³&©±³õ—ƒ7¡/Ó«©­G±>™~ÝŒ¡‡Å‰Õõ¥½Ù~ݪó+÷S8Ù".ÌÑ‘ϯÍ?çÙç§y­‡‘A¡K™"-ùv± 7…›u±=±½:“‹8‰ˆ‘‡¯WÑ!÷¥¹›–Ó=·óZ÷’õ—û@¿Ù‘ ¥K?Ã/Å’G£ ë™§÷eÝz‡ÇS¹ÝmÇ Ÿá›ÇéËIÉ¡—«Ê©-ñ÷<ס¬ÙA• ±DÑ¡ùÅ—ëû,¡'¹•mÇ O³gÁ”ë›Ç Ûµù:Ÿ§E?‘HŸñý¶Ÿ¡!íŸ#5‹ÛÔ±gÙ¿¹AÅCñ‰²“5û9ÈíB‰®Ée­ADðÛ:;ñÝ$ù‰×¼¹e×#£‹ëÕUAûí{½¨ÕI¯Ÿÿ‚ÿ9õ¿#3›ë}³>ÛV7—hÑž¹Dƒ7§¶¯"ŸDÏ]± ·ó¿¢ùO9EÛÅ1¯“#ëŠÇ‰|öŸ83Ÿ'¥Åžù±ý¥‘ÁÝhëX¡d£ Ñw=ÛL›ñ¬ƒÑ”õÿ— é‹É·Ÿß‹‹6«£íc½ª¡‘?Éï›ÙÉAé1§ —„?÷D;³•X³Ÿû­Ã"£e£ÔãXyù–í"G‰÷È›¥ë ó5£pÇ4›±Ùõ;¯Û"©:å8‡Ï·uv»¯'¹·‹ßaó›ïÁu§Åóªùý(µ¦ý …"‘$Ïi™ÿ ‹‡ƒÑ ó‘Áo³7ÓCÑÏ ‹ ÉY‡z½÷‰YŸ·Ç 7ýßvÛD«ûÙ”©V‡ËåŸCÍJñmͬ›C™-µDýÔZ›·­®ë?—ß|•Ùãßµ÷ÉŠéO—Ù„™;{µÙç “ŒSýÙÑÓ -¥ëXÅ"¯·u™§µsÕ"›OñXålÓËÿ -Ÿ«"“\5ríË!Íb±‹Bíy͇"…É(—Šû 1¹.©§‡6™½@«I¯YÅ„ÏY‹§y·È«ÍL7ß$¿‡‰B·¢÷?µg­§“8ûË!áÍË9›¦Mã"å}£ CÁ‰×?ßÀçeµß{‹Aß;ÝÇÏ­ýC™“€ý!±0˜á)…/Éij‚÷Aߪ‹ã åùsí¿›º›)“1åñ¾ée•Ó/ÛJ¹Å¿…AÅñ ù%÷w¡"¹›ÿG—¯‹é ÷å“×=ë-Ñy7óaѶPµ´%Í¥¬Ïbõu©·µ"—ÀÿïCé°á~Û)ãÇÅ¡†ËÁ!“ÏQ³ÃÑ`ÿËKñrÁPË81ÝHë…E™™ñFE‘.Ï‘ÍÕÇÿµ$‹ƒõ5ó¥—)去ý)çCõF«pA݇Ã'ëaÙT×!§"Õ§i¿;ã ë52• ¹7¥¦§}ᑯ1³…/£3ãÉÕdŸFÿƽ=±+/ý϶Í]¬…LE¡ Ý+›Òñ A‡¥"—µÁ¿å ÇkÕÊ© )ÝŠ‹Mï¿Ã¹á Íù¤«[‹4Õ’Ó -ÕéÙÓÏ¿<Ù!¯E“¿¬íN=¹é “•—­íL‹Ç óízÙvÕݰC£B‘dï{ Aßõ3Ç«Í7«ó&ß›ƒW© ¿³?Ó6‹pëS›ÕKÛ_÷OÓ'±ùŽIŧ|£¯çËN›å³‚›…álŸ®é#'ýQ‹w‡Ñ#%½J¾›/ÿç+Û›vîóÇMë–óNµ ­¸1©FÇp­+¡˜é×ß¡”³ÕŸh)••¡—@©£‘£‡=©o…¢•j¡»³pÕ£Vïù3ßH“`×A½Gý«Ñ&«“¡·ÃZù1É!Ÿ‚ŸsË“NÛ•D7£ ý -Sã±YJ±Gã'Ç5ëg•z™_ÿˆµ7A‰n‡¥( 5Íe­¸½"+ëxÓ´¡~Oµ(“!ÿ§ -¿¿©ºÍ€›(¹­³¡8õ(‡ƒý0•DÁ£'×$‡ §ï‹*Û0­YŸÝÙA™$7ëÛ.û -®§§Ý³½ˆŸ“qÕ¯­ˬ¿µÎß ûI³¡ ¥ù ™ù#륋ý ¡¯“&Ù³…Å !Ûů…bç=»ãÍ ±Õ<—?Åÿ ³˜Å2å«¡%»#½Ð›$ÓÖ… [ëBõ¹åMWå)ÓeµK›X“{)ÃBå\¡1Å€ý»Û Çn…ó“ºÑÍ%ƒƒÕßÒÿu‰6ÍD»›2«fÉ<·…µ<×’÷—ã&¯ª§Ÿã¥˜¿lë³ëÅ7­W“‹‘ËcD“ñÕ-¡YÉ'‰[ÅS‹;µË(ßÈω…åÛ­±(¹]ï¾Í>ï;íaãGÙÓ4å$¯ ï"•2ÑQû%‹ïh¯•ßÛ~µWë8³*ÕM»—ɨ³›1ÿ÷Öé‰å7ÓÎß8‹¸Ï£½ÀÝ Q׵Ǒ—õ©N™¡¹`ê¿cé—T¡Æ«Ìƒž©{×¾¡ÐÝ«k«±åG³ÛN¥RË‘™u‡×}Ë‘_ÁãÏñ±©¾…Ñ»´©ÃéEÉH­›óCÿ$ɽ¦ó{±B­µzÕ¦Ý!áz¶Ù»ñ­å&ÓÕ¥[á'›e…¥½ É‹'±®³ïçù$ Û&“;«/¯+¥«Ý#Å"ûÅO£(Û½é ×µ1ÃÓyýVņýù ‡Ã¿ó1©ÅQç!©sã!³z£å£¥ƒÍÁ˜Í ¥ÑÏõ8Ý&ÿ!§#£Ó é"ÙŽ…&©#›‹)Žs« éË¡“ ½ÿƒ … -é<ÉûWç.ñýÍM­×ÿžß²—ƒ^‹0§‘5×<¹Û8áŸ?ÕCÿ4çÅS1£Ù(É ¡Šë-ç:ƒ¯#û•1ó¢·°¡ƒ¡¸õ -IÛ!×zÛ1Ý'•qå+¡Ó“³~IõZ¹—ïï“P¯õE­2Ó&³¬(û2—ßõe·«Ë2¥›®•sÅ ¹õ Ÿ¬› ÁñuáÊ‘Ûý©Ù±r/Ï6’Ó‡Ç!›¥‘ ǹ¥•:÷Y·zÝÉ#½L£K³Q™0«£š¯ëûy‰LÁ¡³ç -©!Åž›Á/áÁ…³AÑPñ.Ë$­„§§'ƒ#õ^Ïû á‹"¥‰ŸÝ ½¯"û«PÁ*÷§±íçѯ¡© «—"Cí í óã<Ÿ)­|¹± õùEÑxë» ¿u­FÕ™ç!à -óµù -Ó¯ÓÏõw÷"‰¥õû'õ#‹PÏ(ÙX·+™‡RïÝ ápÑ+™!¥,£½Ù«ƒË;½©¯<§¡¡Ù[Á•&¿÷"vë$×#ù¹Ï7ñ¿ª©"‡%Ñýœ‘ Ÿ9™™K¿~µ2û©}Õƒ“#£ -¥:»¯G­=Û"ÕCÑ#…÷-Õuß ± µ"Ï}Ñ<—XŸ ƒ4‘p…\c½Ã￘©'ï é¿í)ç—4ÁÁZµbÙ‘ ý©Ï½×õF×Zå… ç>•Ù™*)û Ó ¹ÍV™;­Nñn ÕsñÁ;¿*Ù¯ ï?—õ§DŸ ‘mý@£ Á“ -Ÿm˯㠙³vóÑ‘õíA§·ÏÉß¼ƒ:Á›©œË ¡ÆÙý·Ç‡–ýé¨Ç.ḯ"!§Ç¬ÿ'p­eÍ+­’½;½É ‘Ï÷tƒk·éPïKdñ#™ª—&ÛE‰¯;ûg‹¯Y‡8çl‡ų‡³„ÿ“ÉX»ɸÓrÙ ó— ‘(ÿ‰r©f‹QAÕ"ýA«ÅeÕQ•½‡åNc"›©ã"ë—‹’ÏzÅ%»SÇÇI£l± ‘©¯yõÛá½í„››!ý ÅóÛT§;¯ÃÍÏ«d‡cÃ,Ǩ™ÌÉ·h…š;­Ä¿«éO¯k‘Ïã»tË“—6¯fÓÿ‰¿Iûj)û£™›HÃÑ3ïÑ)÷Á•<Çk«?ÿÕ‚±|뮥QÓJµb¯£±sÅ燅ñA»Î¯á_™‘ óY‘“0ù fƒÕÛUñ9Ÿ„— ¡ºõ ­ŽÓŸçÊßOëYÓD§Wᛵ£jËAñt¥³Ͷ…Íuá#í¿€ íÔÃa¹=»Jõ½e­¥‹ ûL‰C‘÷OñãSÿA ø•ʳ ó’Á§ûƒØ¡+·Ù0Çn· ùϬ‘Ø¥#—¯ÖÕ±¯««L©kÑ™‡Öß?߈ƒÅLÝ…7ÿCÁ†²ùÔ¿“'ûÅõŠ…£×`ËF;žãUÕ!BCëÝM“«m/£°iÑ•Ç7ßT‡ñÒ•¼Aí›Ù®ùçNE­–§©ë²¥¿¹½ãuÍpé²ë…ñC…é®ñ͚ɇ‹¦ÇbÃI•Ρã@ËÄ“‘«»;­œ»Èÿ ïB©&ËÙÙÝ#õl‰¿z¡iáB¯@…õÅn­Š+«ÙÍåhÏc‹Ú¥*ýkÍÖEÛKóÉ¿ƒe5¹!ïuIƒ5õ3¹Ñ·ù=£_#‰*¹Y‰ŒË¿—õ„½u‹Ã¯]ëNÉÛ»©÷GéÊõqµQû nɬ§G§ -‘§=“¯=Ó®¹¥å'÷!¿õ7å'÷ í·(ÓH©©ó’×"ÛÝ>•ÛšŸñdÓbÝ»É-+Å)½‡!ÿ© -‡SGï"—ƒÉ ÝK›»%½#½ ­"à ßaÿ¿Å1ÕÅK¡Mÿ)›·ç4¹ÉÅ'Ñá^‡#ã¡#•ãF—/¥}“#“(³¦á/û7Ñ;£¯Iƒ"ÅÙÕÔ¿Ëé\‹&Põ>ÝÙi·_ñ®í4³5ƒùÀ²Ù¨Ã.±“ñËåŸtÕGÙÃÛ¹0ÓS¥N§Ÿ~ÿžÍÏ`õñxÅ÷6á½”ç ç ›,­ßÄÏ‘Uÿ“3¿ÍJŸ Ï/ç×ãÍ­‰U‹0åx‰ÿa›£çqÛWÉ*çT±ƒ›=Å É­"ÏáJÝ—ïéÃ=¡§¯.‡ž‘ݧÏ!…Sûý?Ýí·÷é1ƒt¡[цª±ÿKÏýã!•vÿÖ×µ¹!1µwŸá¡Û³š£ íXÿ²› ÇÁ_µœ×p‡#-»ÚŸï/§OËÌ™lÏ ÷DÉ!Û¯¯£²ýg‡9ãóÿÁj¹,3·¥ù…rëÿÅ#_ɇóóA±ã®Ý›7¥†á‘9ÿ3£rµŸÁ£—à 9¡©#CñBÁ*›|©ãÙ…§#ǧ“ Ï»Ïéábí˜=£Ëq÷Ã帓ZÅÌ1åÝÓUí01‡Ó7—ùÃËÏ ý ¥ …Ñ*4Ë ß ÉãטÉÛ­'û+Ï$Ó™*û›™é?çc›jÙÔ1ñ-­ñ#¹›#Ÿ©>ßV‘ÓÉqùÉÛ0±×§D¿Lµ‘É#Û#ƒjç"µT“"³å$•'¡IÑÕ«Ÿù<§ÿ1¹×/“#ɱƒ1«½Ç í½(ÿ“ Ã%Ñ<ƒAó¥ÅÏó“Ñ‹ ¹/ ݵÿ"—$õ³'‘NÝ/ûÓ:Á Û!Ý!©<™yÕAÉ Á•µù(¿Å#µïç…-«»ù-åÍ«"é³#õu;§1ëí‡1‰:·±­,¡ ű å#Ÿ#—M*ñ"™#¯"ãËF£§¡ -‰ -‹#‹ï\/·Ë"õ©Í~•ŸI­ £ É0‡'­”³E‹§$·"©—Jý"‹óN,ï1ƒ…=V¯÷ï‘…5ñÅ|»FÉÙ)Û,ËŸÏ{éOÏñãÐõ6C…™÷U)× ñ¹•Ô«[ƒb›s·¶­Dµv/ÝÍ!Ã%Ãá©ó±'³­§ßtí!Õ³Ù×v§å(ç–£+Ÿƒé¦ûÙ9å=ƒ7…Ï΋^©#»¥~_•ZMáãL“nÉ9ƒ!³Ç`õω-ßó‘£ ½n©w‹†½.7ÑE0Û û§£«}‹#›·-íÓÃ¥$£Ø“ˆÅ>å …ÔG÷ ãx¹W…´‡ˆ#ŰÕÎûBÍ…®§ˆÕ°Ÿ(£¿ùÊ ë¬³ËCý’ýÓ[õ4Ÿ![Ñ̯„‘­sÛ7ïn—3ÿ“ã[aÉÖÿNïÑݼí¡w—£­UÕ.yÁŠÉjãçDý/ß2ý!ï½H1­í[« åÍ)…,Ñ3ïÏTû…¿œÿJ³/ÁßÍ㟯*#Ÿû4Å‹ -C¹<ݽ7·=Ípµ;û­Iý‹õ9›#Ÿ#•Ÿ -…«OÓ-©Dÿ™Dáù&¯ »"›T¡MŸ¿`ù°­^‡¨|õY§Õ¹— -Í+ù3Õÿ ­Gõ¿.±1½ ÁýõíBÇ ¯¥3Ïsý ÑÕÑÏã›(åÅÁ×ÿ=ëÑ‚ñÿºãÁ«µ¿›t¿‰'½Å·OÍ‚9—*§Á ‡*—™·‘#Ö¯#—NõoõLñ‹ñ rõ ›!9Í7‰Tá+‰“!½E‹ZW/—.ýs¥\×Tý@™Î•9(¯ºõ Ñ1ã¡@§ŠñJñdëœÇ@™ m#×ß¶¡Jß-ÑS·‹?ÁÁ"Ñ!ýL¹%Ó&ŸÝ½O³.Á­B é#¹T•.—0Ó£FƒF%“)QÃO§1µ¡’ÍB“E‘:ƒ÷åÏ•¯»“§у§9Ñ"Å«3Ë:åû ±ŸÁ Á,ñMñëA¡$•*©P¿WKí × Ÿ(ýw¿ ë -±ló½.•ãÏ+íû!d¯,»›‰‚å)éÉgý5%áÁÙ*ߥ‘Ï"“ÉÙpÅ+½ñá‰(‹JçBË Û™3éç·áž-»3ÁvÑ Ã§.ùÇÛÝ-‡p¡=›Ÿ6ÏJÿ¿¸ÍZý‘Á>§íÊ鶯´•§º—ï¯ÕËÝ#…ŽËvµ†¹I#¡¨ß )¹K Ï>Á‹J¹ËX«ÔÓœŸ:³3Ÿ‚³ip«z÷¥«!—íZÅqË!³±,çá¡‹÷5ËËa‘.ý!ÇÀ•¡±ó ±¡"ËÊÛç„Û—ƒ«Õl¡ÍµƒpÿÇý×Ç7í'†ÙsÙ…õ¿Ç{¡ù¥Cá>­£‘0í»`Ó#ÕÕ9Ù:ó¹³B «#Ã>¿!‡°õ© «¦‹CÕY…@Å®¡z•WóTÉΗ—í—ˆÝÅ·\Ç -óáU£Áßñ¥!Ï›±…Ó‘´@ù -”íÁÇ3퀭%õ ±MÇ(—E•’ŸW±›©¨‘9Ë”åJ¹¶ÿ'Å ¹.¥Ã[³åÅfɂۂOÓ2á½"¹1¡ùGµ¥ÉßN³Ö—¹›*á"“¯—J‹›Á$ïWÙ‰'ÏÍ×ýIËÇ4‹¿U¿3¯ Í•¦Ó ½p“#ÿ(ÕiÃB‘¯Jù™rá®Ë`»?çrÕ›"›³ -•L˧a—l×qéÇ8œ%±6“|¥Á÷$Å•ý -í@糿»ª³ÁË3‰S߆µ»ÖµXlj¨…­‘¦ë'›‚‰“œ¹ £ ß#Ç:ÏV—K‹“5ÃÛ1£ÛßPÙ¾{#±*ó™›ãoù¿F‘Û3Åa§8ñ/ç2Á<å/ñý!ßkÝ¥!4Åù:—Õ©3…×=íw…8•6Ÿ4›!Ÿ™•‚‹+&·†¹†‰¡•À“˜—x§Jà -ÛÂ¹Ï  ×u»É™%·¬ÿ„éÍ™ý{É… Ëí(û‡½óyç׈ÿ Û±ã+Í•ƒ²£™Ç›GÕÌ×dÿ]¥/©‚ùµ¹«|í^±B¹FÅß‘s“0Û¥˜™Á"åé0«iç%ûóM¿j½ -·¤õÉ)…yÍÑ­8Ù>Ÿ‚Ïy·F·YÝ™•)ïá“[Í'±5«{ûƒ‹UÝoõg•&Ë€Áãs¹\¯5™z™d­£‡×·/¥AÁ¥2£‹ûÐÕ‰5Ç•Ët‘ÑuÿIѱõ›Õ>…xÓ¥u•'ÕÏ« #û[ó§Á˰ƒvõ•‰áµ -Ká%Íɶí*Õ×Ç•?YÁ’ᕬٸ­•Õ,«oã›Óo•4ñ:Ñ!#™¹«tŸ"Ç"ßï"óo»ýù&é R­Ã£7É« Ç&­§)±÷ »°ÏRÑ*‰¡Ý(—“›·Ÿ -‰Ç>Ý‹ÿH¹Ç­ËñëËåÊå± å©)•FÙ!ñ Q‰#Í™}…x©·§­\“u¿.Ų¯ËéGé§EÁAµ"µ#Í×— óy• ¿Ë-­ë áé*—ß8Ñ‘Ï*ƒ%¡É³ÍóBÛý+©ÝË9—:«û—Ù »7·’¯PÑÝF«k³+Ç$³9ñ -•/ù‰õƒ ÷‡1Ü…>çãïÍŸ@­± ›Ñ‘!ë5ó ¿!™ É@ý»0Í4©R“ ×­¥Ý£ÄÕ³†™Ù¹Ë"™ µ…í#ßh ‡ -ÑÝ}ý)ÿ2ë!¯³á -‹J½(ë¡'­¥›b‰žÿϵՕ͟ -»•MÓ;…(»Åǧ,­ÀÇßûïí8÷Ñ£,ß»'Á+åwÿ Û ­¹-ýcïÏ -ß¹ã›ݶÿ ™«û‡õp™éÍ;½Ù)ƒ‡ß"¥ˆû3…©õVÏ!é» -·•ÑNݳ­ ¯ï «×Ó -/ÏW½žý%—É•ç -…ë½Mý-¡—?¹5‡• Õ­JñtÛ“­*ëÅ?ÛHÅá:¿ƒ ‘Gã8ó 53‹BÿµÑ==¡ ­÷Kû´‹$û‚‘m×µ=éŠåñ•÷3™‘¥Í<Ç…Ñ©´c§!Iã «.&ù-³ ÓåÕcÁoƒDƒ ÏûG×S÷“ ÕËGŸ×A¿ Ï6 BÏ»»X¹ ÿÿÃ…I±M™k§Ö£F»Á³ -É>§ -5í%£Y­¹í‹Ç¥™9ÕÉÑ0¡{Í$7›Å0ƒ^í3ÕÿЃÎß-iç…ÏÍ.ín§$·û"ÉgåljÙ%ƒVçùbí&ͳß'í£a5ÑÃ6C«0‘1Á;‡w‹ Aû:¡·FóF‰‹‡³‰+©¢Í$õ’AãL¡FߢÕGµ,k¹%ÁgÇ(¹/õ)½mƒ'ë†:ç ëqý;Ÿ§¥)‡_ý…÷'éRë@‡¡ Û…åbí,»RÇ&™$ÙͽZ¯ ·›œ×ѵ‰™„ó*ùKÙk‘k‰%½;“K™)ñísÇtÝAÙÓï=—mûÑDój‡Ý‘Eé;ÍTó!ßÅ(ƒ«/—­ …u¥\Á× ÝQÇ%¥Ló(ý«+µ]—*‘4ÑE¯F£K¥ Ù<·)Ýï”õD£J©¿‡ ‰NóÅ(Ó°ý;'ãCÕ˧½)¥ª•d¯Ï~í±,§.Ï"¯Ÿ×"¹•‘Ê“ïEï!÷0Ë»=Á ©?­QÃ~¯0£>¿‹yß*“pï -‡~ñ)¯AÙÝHj­õ'×̳ë¹OÕvõ±a¹¿áØ¿‘÷iÿ¿à ãRåÆéÖÉtãc«¢÷Í2³`ëÊÁ²å±™ó¿r‰0óÿc‹Œý¼©2±Á£ˆÏ8·5ׇ¥™×°·5ËW…µÓ9ߓㅯû‚µB6Û²¡¥Ócý6­­“Žá?›ß›õ ŸÙ:Ç™ó‘\‘wã5§Ó¹z¥Çµ™JñcÃÊ…ZŸ¿¡£‡F\Û½ÿ—åªÿv¯.ÉËÁïÀ¹ƒß -|ûȵ½§\ÍÒÍ™ŸU“ÅÃ’ë[›*ËËÍsÓ™á—9¡}ÓçO÷?‰Ã7ÇÐí¤Ó¹ ×Pƒ+㈓…»À——=ûTã(—†± >‡'¥&Ñ'µ·)“_áB‹ Ÿ•CÛT³hƒ “ýdÏ ÅH¯¯¡ÿMÙ$½aË ã'¿‰¥1÷ÅÓ^Ç/¿ÕÆË ÙÌÅ€ù®›xÕ¹÷Ø0ï£ÁcѤ§)¥vÅEãiõ–µ"½ŸÌ©v“©™2£ZýÝÁë°çéÇ#ïÏMý‰K¿3ßç"û"£ËÇ™›ÿ!ý ¿óÃáÝUù ™´¯áÔÉGGU»¬åa#‘ -«ÿ§í#§¹‹bÝ|ÁiÇ_Ç÷€¡=‘!¯&‡ ‡xµý¹­©¿*ëªÏ•“¡ɾߥ‹¹"ÃÅÀ£&Ùÿ)¹J¯Ò ½óÁ'ëÐÿr¹1õ>ç%©J¯ã±ßÅ£ͰÏjãÇ‘õ­ë;ÓŽ‡!÷Ñ7áª+×s±Eé©ßÅ·¯jÕ±xƒ;Õ ÅpËnÉ}ƒ°óƒ©Ô¥±ž±å:ábÁ ©G¿+õ‡1“b›ñ¼¥×!·«!Ÿ×åEç|¿Õ§åg¿OáD¥'ϱ©•[«Âý)å>‰ÌÃÏï†õÙß,—#ý“ÿ…“³¡ ³ɰÙ›×E›ý©‹¡í±Ÿ²Ï##—o«*·á½@éѷ(…2Û ƒÑ$ç -ÇáÕ ·¯$!Û1•õáÅ)÷ï'‘“‡E'A­\Ã$µ¿ éÉ ñÓ#ÿ!‡Có Ùõ½ -Å'pï -çõ×@±2á.'Õ)ýÕO¥+/Ÿ•½Ó™.õ"©ù¹¬©_ç÷rá.¿ÿ •Ÿ^›/¡ñ‘Gǃ/óµá$¥Qÿ©)ýëµå.ë­<Ÿ÷?¥ÕB÷Y¥§r¹&Çóí·2¿£2ãñ É ç­ ™¯W‹_ƒ‰‰6û5×ýµ1Å'óZã­å+õ1µ¿å³Ó*‹“që±xÁ&Ë[‘‡Ÿ)ëµ"å,ïI…-·õ?ß1Ïá1›¥ Ýó ©qÓ#Í~åÏÏŸ\•ó"¯:éíXûT•yÁ^½½¡Äù ÕÛ‘ÇûŸ#Ÿï"“\áå1÷)õ.§0éc×…ßçu­ßµ.« ‰<«Ë$×(£©Û“:<Å¥½%‡ó$± ÃWÓÕ"©ósÛ"‹?÷Eݵ/ ‹/« -‘#Õùų—!Ÿ)½4ý™/Í “çDëÉ·/Á ç<µ"û Ñ" ׯéǹ(ë “$©ñ“¯UÕ±ç…1C)•Á ÿC«V©-“Ë ½9‘h¿• ¯ïxÃ@Ó˯FCõHÏ ÉÇ× -©F?çLÑ ÉÇÍ”I±Õ;ƒX»«Q· 3ó!ãÁ¸å|‰2çGÓ]Ó³I¹*»žÝK¹ 7Ý»‚¥ûÑ=¿—ÍEã£QÁ;¯!Ÿ»Ãé3“&©Ã‘Åšÿé AŸLµ(3ñå©ÇFù!Ó>ÝF?‹J‡,åã µ%Ë®—¥§<ÇóqñH‰OÅUÏvKõ'»4å5­…  Á'Gd±™{)÷µI³YÓ‹ï·CÍuÇ2±v•x·C‹'‰ —ç'µ‘· ­)+ÙELíÝÇJŸÀë&—‡ɪÏÓX÷S¿iå-ónßoÛÙ?©‡×6Çíë)A›#©#—¡"¡—¥Oýëå(÷#÷¿"­µÅ¹1·†åÉù ÓAƒ&Å‹\ïë“'‰¯©ç_û!=¿ ÷=¯gá9½ ­&Ë8¥ç!¹ÓŸ=õ*±M­A)çb÷ÿ“©!«4Å}9Å!…¡0½}ÅAÑóË‘Lã¥å"Ûh™*£¯ÓÊŸ×;ÿÝió׋¤ñ>ç)—É—¥pƒH…P‘ß ‹Í‹Eõ&‹vƒCßx…Coç½–£TÇE¯–¿=·E‡¢í_ñÁ»tǨÅÔÓOÙËŠ“T‹ ë/A½5ï -“C‡&ÅŽ)·4‘éMÓKɯŸÏ"ëOó'ç§(ûÍNŸ('ÓÀ‡> ‹+‹Û•)ù±_Õ$™‡E™û1…ÿ.1ïO$…'½‹ë×-¥á&ë Õ<½ “<"]å"Õé¿2«E±­Bý'¥³(é$Û$Á&ï©-™/ï\¹¯Ï§;c‘]Õõ éã*›J¡ -ËAÃ$ÑÝ)ù$ý áÝ!ñVåµ -¿ç ÿ×-Ë õ2‡CÇã -Ó;õ"ÝѨÍŠù“(ßç'Ù -ßDã­*™"¿$ßýBË"“@­&© µÕ·(ëÙ"ý&ËÁõEó$Ýóõý+™$¿+ù"Ý DÇ™£ ­ß?Áõ#Ï“-·Ù!Éã>õ*›•*Ó"Ó?» ñ£Y«£Õ«5¹(­ ›Aåí§7ýéo™ß#Íѱ*¡U·ß«)ù‡+±ÓDÙ°AY/—ÈMÏÀ¹ó/7Û ñ·q‘ƒË! ÛP»+Í*³ñŽ—›?‰ƒ'×­½ËÍ Ñr£ ¿$Í'‹ç2‡^ë -‡¾Çï'ñaß«(…U¡Óå™+Í7—"‘õ•/á ãýAï‘DùÛ 0Á¿‡(Ç]˳©ŒŸ·1­¥)— ó#‹F£4ïß*· ™™-'b›$»çÑ—EÑ+)‡tá“ ×Mñ#—Ÿ ·ï­,C¯Ï ¯'—#ç;» -·)½s‘t<£b›Ñ ã%ùdÏ&ïžM癃$ÿé©A¿E‡“ÛHñ?0ŸlÁ6Ÿ‰ûKÝc‰1Ó*£õãe« É5¹—ÏXñ‚Ï-»­+ÝNùÚÛƒÑ^í*ÃË»6«\¿§«<¡UÏÍS×#·©©4ÁÏÝ8¯C¡½#ó“•Á³ÛÉlçÃsñD©$ùQ͉#Í"ßï(Ã3­÷^ŸÑ± ‘B‡Áù$ÁkÁÇݓ÷Ÿ‰ñÍy“3û*íx•ÃÛ#募$§yñKËÛ !×± -ã#ãÍ1™—Íó÷i• -Ã5Ã~ã*牅±vƒ¡#›­LÁJÿ‰£2‰ \×+ïO2‰D™—€å(óû£Í)ëR¥‰BËJý‡•» -¯!§Tû0­©[… ‘«Ï…'™‡™DEÓÉ«•O“Ý-¡'¹‰Õ@ÅÓÁ*ƒB'Å6à ÃÍ+³8»›Ás¡5 -™¿Ñ­ÝžÃoƒ á×ËÛ;³³°]Õ}³Ë/>™/“Íý³(Á ûb›*ï·«{¥.Å/¹Óó7û‰fE Û­› Û +õ,Ûx§0O¯‰Õ/û2Ç&¿³—(Ë@·»E¥G݇ýWÏ?óK4‡r¯`×n‹z•.ÃÓª5¡X9ÿ¥ë©·¥5¥(W©Z·™á Ÿ×Ë™Kµ ç"í]›É.“‡y¿¡!lÛ¡#åp÷'Í>Ñëï1íñ¬£Ë%Ûƒë(Ÿœµ‡‘ ý¤éUñÑ2õ£Íñ"É{ïÅ;™LÓ*Aãÿ …Ý -‰MÙwï á­x›O“ Ñm÷NçÛ<ÑpáëfÙ£TݱÁ• ÃOÕãu¹@ß}©Ÿß« õ¿†Ç…dùU©Ñ¥c½@‡¡‹‘ å÷ƒïN©«/ë#ÉbÕ¥^£IñO•!ù&¹¥N¿ñx³ ‡ûON“Q»ÑJû"ÏNá8¥1ñb«Õ\Å/‹›P³/¡Qƒ=ßÝeÝÉ÷…ÝÝFÉSã Ç Ñ#¡]Û"‰P‘(›[½0ÏÅ3ãO‡‘BÇJçÿÅ]ÙBãVÁ#¹Tý\©íZ»já-å"­NÙB—§‘"™P‘ç&ŸdÉ2Aõ§FÍY£ÕS±ï@뵎ÿ“yë‘TûJ¯#ñbÝlÉï,õÀõÇë¡Ñ×Hç·wåÙ‰°±_™ÓßéuŒ±ªå9áPÅMÛÒ‰ÔÇ×Å2ç;í>Ç}ë`ßÖõ·ŸG؉­«—áEû,ÍÝ8¡Á‘·‹n…Ɖñj˃û²Ÿ”ÿÙí‘ù(Ÿi‹­åB—z™‚•ÿ -§'ß`›‹×gÏ'¿¹ù -³PÅ·bË Ã8Õ0÷±'³B¹…·#×6å©›ˆ­ŸÉÑ“E‰z›©ËÁ'™nɦ¡!Ã/õ¥÷7«‡1—'»wû•¿‰©-½0¿$ù‡Á ¥+‡u+µZb+ÉíŸÅñ~-£ÇXŸ@Çÿ#»k½©‡;±YÏ"Û·‹Å‚É•"¡¥m»˜‰?“£!¯"§P5¿?Ý»L‡ ;‰?ù-?Í•§”¹Ëã!½óC¯#ó&¿í -û"•}¹«·Ý9³E§£#Kë«ÃbÕ'“=—–é'Û|Ñ;Ý—s9Í"‘‘ªãë µí£õ Í!¡•(‘xÙ=ÏCí Eã -E© Ó³«Åx§J察‹‹·ï#ÑoÓD¥± Û——˜£·¥Ñ>KåD¥ºÕDµG¯ ½…ùŸ‰jãž±·™<ý -‹׉¥µƒOûH£££¥§c“E³;á —ù)Í!‘W§ Çx#µ!ë5¿{­1Ý#£^¥ »…s7³&©±³õ—ƒ7¡/Ó«©­G±>™~ÝŒ¡‡÷ƒÅ‰Õõ¥½Ù~ݪó+÷S8Ù".Ì«ÀÁ[Ñ‘ϯÍ?çÙç§y­‡‘A¡K™"-ùv± 7…›u±=±½:“‹8‰ˆ‘‡¯WÑ!÷¥¹›–Ó=·óZ÷’õ—û@¿Ù‘ ¥K?Ã/Å’G£ ë™§÷eÝz‡ÇS¹ÝmÇ Ÿá›ÇéËIÉ¡—«Ê©-ñ÷<ס¬ÙA• ±DÑ¡ùÅ—ëû,¡'¹•mÇ O³gÁ”ë›Ç Ûµù:Ÿ§E?‘HŸñý¶Ÿ¡!íŸ#5‹ÛÔ±gÙ¿¹AÅCñ‰²“5û9ÈíB‰®Ée­ADðÛ:;ñÝ$ù‰Á‘×¼¹e×#£‹ëÕUAûí{½¨ÕI¯Ÿÿ‚ÿ9õ¿#3›ë}³>ÛV7—hÑž¹Dƒ7§¶¯"ŸDÏ]± ·ó¿¢ùO9EÛÅ1¯“#ëŠÇ‰|ö™¦Ÿ83Ÿ'×~Ý!¥Åžù±ý¥‘ÁÝhëX¡d£ Ñw=ÛL›ñ¬ƒÑ”õÿ— ‡NÙ¬5«Ã"é‹É·Ÿß‹‹6«£íc½ª¡‘?Éï›ÙÉAé1§ —„?÷D;³•X§^û 7³Ÿû­¿[ßÃ"£e£ÔãXyû‹·ù–í"G‰÷È›¥ë ó5£pÇ4›±Ùõ;¯Û"©:å8‡Ï·uv»g»¯'¹·‹ßaó›ïÁu§Åóªùý(µ¦» ý …"‘$Ïi™ÿ ‹‡ƒÑ ó‘Áo³7ÓCÑÏ ‹ ÉY‡z½÷‰YŸ·Ç 7ýßvÛD«ûÙ”©V‡ËåŸCÍJñmͬ›C™-µDýÔZ›·­®ë?—ß|•Ùãßµ÷ÉŠéO—Ù„™;{µÙç “ŒSýÙÑÓ -¥ëXÅ"¯·u™§µsÕ"›OñXålÓËÿ -Ÿ«"“\5ríË!Íb±‹Bíy͇"…É(—Šû 1¹.©§‡6™½@«I¯YÅ„ÏY‹§y·È«ÍL7ß$¿‡‰B·¢÷?µg­§“8ûË!áÍÿé"í7Ë9›¦Mã"å}£ CÁ‰×?ßÀçeµß{‹Aß;ÝÇÏ­ýC™“€ý!±0˜á)…/Éij‚÷Aߪ‹ã åùsí¿›º›)“1åñ¾ée•Ó/ÛJ¹Å¿…AÅñ ù%÷w¡"¹›ÿG—¯‹é ÷å“×=ë-Ñy7óaѶPµ´%Í¥¬Ïbõu©·µ"—ÀÿïCé°û6?á~Û)ãÇÅ¡†ËÁ!“ÏQ³ÃÑ`ÿËKñrÁPË81ÝHë…E™™ñFE‘.Ï‘ÍÕÇÿµ$‹ƒõ5ó¥—)去ý)çCõF«pA݇Ã'ëaÙT×!§"Õ§i¿;ã ë52• ¹7¥¦§}ᑯ1س…/£3ãÉÕdŸFÿƽ=±+/ý϶Í]¬…LE¡ Ý+›Òñ A‡¥"—µÁ¿å ÇkÕÊ© )ÝŠ‹Mï¿Ã¹á Íù¤«[‹4Õ’Ó -ÕéÙÓÏ¿<Ù!¯E“¿¬íN=¹é “•—­íL‹Ç óízÙvÕݰC£B‘dï{ Aßõ3Ç«Í7«ó&ß›ƒW© ¿³?Ó6‹pëS›ÕKÛ_÷OÓ'±ùŽIŧ|£¯çËN›å³‚›…álŸ®é#'ýQ‹w‡Ñ#%½J¾›/ÿç+Û›vîóÇMë–óNµ ­¸1©FÇp­+¡˜é×ß¡”³ÕŸh)••¡—@©£‘£‡=©o…¢•j¡»³pÕ£Vïù3ßH“`×A½Gý«Ñ&«“¡·ÃZù1É!Ÿ‚ŸsËÕÁ3çÝГNÛ•D7£ ý -Sã±YJ±Gã'Ç5ëg•z™_ÿˆµ7A‰n‡¥( 5Íe­¸½"+ëxÓ´¡~Oµ(“!ÿ§ -¿¿©ºÍ€›(¹­³¡8õ(‡ƒý0•DÁ£'×$‡ §ï‹*Û0­YŸÝÙA™$7ëÛ.û -®§§Ý³½ˆŸ“qÕ¯­ˬ¿µÎß ûI³¡ ¥ù ™ù#륋ý ¡¯“&Ù³…ŸÎÅ !Ûů…bç=»ãÍ ±Õ<—?Åÿ ³˜Å2å«¡%»#©«½Ð›$ÓÖ… [ëBõ¹åMWå)ÏÖÓeµK›X“{)ÃBå\¡1Å€ý»Û Çn…ó“ºÑƒƒÕßÒÿu‰6ÍD»›2«fµ<×’÷—ã&¯ª§Ÿã¥˜¿lë³ëÅ7­W“‹‘ËcD“ñÕ-¡YÉ'‰[ÅÝS‹;µË(ßÈ­«XN‹;½Šω…åÛ­±(¹]ý=ï¾Í>ï;íaãGÙÓ4å$¯ ï"•2ÑQû%‹ïh¯•ßÛ~µWë8³*ÕM»—ɨß«³›1ÿ÷Öé‰å7ñ4ÓÎß8‹¸Ï£½ÀÝ Q׳Tû·µÇ‘—õ©N™¡¹`ê¿cé—T¡Æ«Ìƒž©{×¾¡ÐÝ««±åG³—²ÛN¥RË‘™u‡×}Ë‘_ÁãÏñ§XR±©¾ÿ£…Ñ»´©ÃéE¿1­vÉH‹´í¾­›óCÿ$ɽ¦ó{±B­µz¡šÕ¦Ý!áz¶Ù»ñ­å&ÓÕ¥[á'›eÍw…¥½ É‹'±®³ïçù$ Û&“;«/¯+¥«Ý#Å"ûÅO£(Û½é ×µ1ÃÓyýVņýù ‡Ã¿ó1©ÅQç!©sã!³z£å£¥ƒÍÁ˜Í ¥ÑÏõ8Ý&ÿ!§#£Ó é"ÙŽ…&©#›‹)Žs« éË¡“ ½ÿƒ … -é<ÉûWç.ñýÍM­×ÿžß²—ƒ^‹0§‘5×<¹Û8áŸ?ÕCÿ4çÅS1£Ù(É ·&‰2É¡Šë-ç:ƒ¯#û•1ó¢·°¡ƒ¡¸õ -IÛ!×zÛ1Ý'ÏóJ«,•qå+½o9]¥—ñ(¿¡Ó“³~IõZ¹—ïï“P¯õE­2Ó&³¬(û2—ßõe·«Ë2¥›®•sÅ ¹õ Ÿ¬› ÁñuáÊ‘Ûý©Ù±r/Ï6’Óá5‡Ç!›¥‘ ǹ¥•:÷Y·zÝÉ#½L£K³ÛzÅÍD÷ ç˜í Q™0«£š¯ëûy‰LÁ³(ñ}Ï¡³ç -©!Åž›Á/áÁ…ÑPñ.Ë$­„§§'ƒ#Ë>×/™&õ^Ïû ¥w©áá‹"¥‰ŸÝ ½¯"û«PÁ*÷§±íçѯ¡© «—"Cí í óã<Ÿ)­|¹± õùEÑxë» ¿u­FÕÏxÁJá™ç!à -ƒ·Ý ‰óµù -Ó¯ÓÏõw÷"‰¥õ‹PÏ(ÙX·+™‡RïÝ ápÑ+™!¥,£½Ù«ƒË;½©¯<§¯§É"¡¡Ù[Á•&¿÷"vë$×#Ï7ñ¿ª©"‡%Ñýœ‘ Ÿ9™™K¿~µ2ûßHã©©}Õƒ“#£ -¥:»¯G­=Û"ÕCÑ#…÷-Õuß ± µ"Ï}Ñ<—XŸ ƒ4óÈ‘p…\c½Ã￘©'ï é¿í)­ß¿Ç ‘=ç—4ÁÁZµbÙ‘ ý©Ï½án¿µã(×õF×Zå… ç>•Ù™*)û Ó ¹ÍV™;­Nñnùb¹5 ÕsÕ‡£ »'§$ñÁ;¿*Ù¯ ï?—õ§DŸ ‘mý@£ ÁýB……a“ -Ÿm˯㠙³vó‘õíA§·ÏÉß¼ƒ:‘‡Á›å¨©œß7áË ¡ÆÙý·Ç‡–ýé¨Ç.ḯ"!§Ç¬ÿ'›z— ãëp­eÍ+­’½;½É ‘ωõ÷tƒk·éPïKdñ#™ª—&é¸ïÛE‰Íßy÷"¯;ûg‹¯YÇÇ#‡8çl‡ų‡³„ÿ“ÉX»ɸÓrÙ ±µó†— ‘(ÿ‰r©f‹QAÕ"ýA«ÅeÕQ•½‡åNc"›©ã"ë—‹’ÏzÅ%»SÇÇI£l± ‘©¯yõÛá½í„››!ý Å‹šóÛT§;¯ÃÍÏ«d‡cÃ,Ǩ™ÌÉ·h…š;­Ä¿«éO¯k‘Ïã»tË“—6¯fÓÿ‰¿Iûj)û£™›HÃÑ3ïÑ)÷Á•<Çk«?ÿÕ‚±|뮥QÓJµb¯£±sÅ燅ñA»Î¯á_™‘ óY‘÷Qíb“0ù fƒÕÛUñ9Ÿ„— ¡ºõ ­ŽÓŸçÊßOëYÓD§Wᛵ£jËAñt¥³Õ0Ÿž­'‰„ÅϦÃ.³ªãmͶ…Íuá#ñYí¿€ íÔÃa¹=»Jõ½e­¥‹ ûL‰C‘÷OñãSÿA ø•Ê›n³ ó’Á§ûƒØ±[JÓkÛ&£2åéh»o·Ù0Çn· ùϬ‘Ø¡À¥#—¯ÖÕ±¯««L©kÑ™‡Öß?߈ƒÅLÍÂë¾Ý…7ÿCÁ†²ùÔ¿“'ûÅõŠ…£×`ËF;žãUÕ!BCëÝM“«m/£°iÑ•Ç7ßT‡ñÒ•¼Aí›Ù®ùçNE­–§©ë²¥¿¹½ãuÍpé²ë…ñC…é®ñ͚ɇ‹¦ÇbÃI•Ρã@ËÄ“‘«»;­œ»Èÿ ïB©&Ëë ÙÙÝ#õl•²‰¿z¡iáB¯@…õÅn­°9×›·ˈ­Š+«ÙÍåhÏc‹Ú¥*ýkÍÖEÛKóÉ¿ƒe5¹!ïuIƒ5õ3¹Ñ·ù=£_#‰*¹Y‰ŒË¿—õ„½u‹Ã¯]ëNÉÛ»©÷GéÊõqµQû nɬ§G§ -‘§=“¯=Ó®¹¥å'÷!¿õ7å'÷ í·(ÓH©©ó’×"ÛÝ>•ÛšÍÝ?óµŸñdÓbÝ»É-+Å)½‡!ÿ© -‡SGï"—ƒ»¯·$«0É ÝK›»%½#½ ­"à ßaÿ¿Å1ÕÅK¡Mÿ)›·ç4¹ÉÅ'Ñá^‡#ã¡#•ãF—/¥}“#“(û7Ñ;é\‹&i³5ƒùÀ²ñËåŸtÕGÙÃÛ¹0ÓSÇ¥N§Ÿ~ÿžÍÏ`õñxÅ÷6á½”ç ç ·9û0ã û›,­ßÄÏ‘Uÿ“3¿ÍJŸ Ï/ç×ãÍ­‰U‹0åx‰ÿa›£çqÛWÉ*çTÅ Ý—ïéÃ=¡§¯.‡ž‘õvá¿ ©ý?Ýí·÷é1ƒt¡[цû•ßãÀª±ÿKÏýã!•vÿÖ×µ¹!1µwŸá¡Û³š£ íXÿ²Á9égŸ‡Èµœ»ÚŸï/™lÏ ÷DÉ!Û¯¯£²ýg‡9ãóÿÁj¹,3·¥ëÿÅ#_ɇóóA±ã®Ý›7¥†á‘9ÿ3£rµŸÁ£—à 9¡©#CñBÁ*›|©ãÙ…§#ǧ“ Ï»Ïéábí˜=£Ëq÷Ã帓Z1åÝÓUí01‡Ó7—ùÃËÏ ý ¥ …Ñ*µj4Ë ß ÉãטÉÛ­'û+Ï$Ó™*û›™é?çc›jÙÔ1ñ-­ñ#¹›#Ÿ©>ßV‘ÓÉqùÉÛ0±×§D¿Lµ‘É#Û#ƒjç"µT“"³å$•'¡IÑÕ«Ÿù<§ÿ1¹×/“#ɱƒ1«½Ç í½(ÿ“ Ã%Ñ<ƒAó¥ÅÏó“Ñ‹ ¹/ ݵÿ"—$õ³'‘NÝ/ûÓ:Á Û!Ý!©å …ÔG÷ ãx¹W…´‡ˆ#ŰÕÎûBÍ…®§ˆÕ°Ÿ(£¿ùÊ ë¬³ËCý’ýÓ[õ4Ÿ![Ñ̯„‘­sÛ7ïn—3ÿ“ã[aÉÖÿNïÑݼí¡w—£Ýx©Û­UÕ.yÁŠãçDý/ß2ý!ï½H1­í[« åÍ)…,Ñ3ïÏTûÓ5…ÿJ³/ÁßÍ㟯*#Ÿû4Å‹ -C¹<ݽ7·=Ípµ;û­Iý‹õ9›#Ÿ#¡,ç0畟 -…«OÓ-©Dÿ™Dáù&¯ »"›T¡MŸ|õY§Õ¹— -Í+ù3Õÿ ­Gõ¿.±1½ ÁýõíBÇ ¯¥3Ïsý ÑÕÑÏã›(åÅÁ×ÿ=ëÑ‚ñÿºãÁ«µ¿›t¿‰'½Å½|÷T·OÍ‚9—*§Á ‡*—™·‘#Ö¯#—NõoõLñ‹ñ rõ ›!9Í7Ý=¥·C‰Tá+‰“!½E‹ZW/—.Áýs¥\×Tý@•™Î•9(¯ºõ Ñ1Ç1ã¡@§ŠñJñdÇiëœÇ@™ á½m#©L×ÝŽ‘ß¶í¦™P¡J·Rß-ÑS·‹?ÁÁ"Ñ!ýL¹%Ó&ŸÝ½O³.Á­B é#¹T•.—0Ó£FƒF%“)QÃO§1µ¡’ÓÈÍB“E‘:ƒ÷åÏ•¯»“§у§9Ñ"Å«3Ë:åû ±ŸÁ,ñMñëA¡$•*©P¿WKí × Ÿ(ýw¿ ë -±ló½.•d¯,»›‰‚å)éÉgߥ‘Ï"“ÉÙpÅ+½ñá‰(‹JçBË Û™3éç·áž-»3ÁvÑ Ã§.ùÇÛÝ-‡p¡=›Ÿ6ÏJÿ¿¸ÍZý‘Á>§íÊ鶯´•§º—ï¯ÕËÝ#…ŽËv‡ñ—뵆¹I#—B¡¨ß )¹K Ï>Á‹J¹ËX«ÔÓœŸ:³3Ÿ‚³ip«z÷¥«!—íZÅqË!³±,çá¡‹÷5ËËa‘.ý!ÇÀ•¡±ó ±¡"ËÊÛç„Û—ƒ«Õl¡ÍµƒpÿÇý×Ç7í'†ÙsÙ…¡^õ¿Ç{¡ù¥Cá>­£‘0í»`Ó#ÕÕ9Ù:ó¹³B «#Ã>¿!‡°õ© «¦‹CÕY…@Å®¡z•WóTÉΗ—í—ˆÝÅ·\Ç -óáU£Áßñ¥!Ï›±…Ó‘´@ù -”íÁÇ3퀭%õ ±MÇ(—E•’ŸW±›©¨‘9Ë”åJ¹¶ÿ'Å ¹.¥Ã[³åÅfɂۂOÓ2á½"‘5¹1¡ùGµ¥ÉßN³Öç7—¹›*á"“¯—J‹›Á$ïWÙ‰'ÏÍ×ñŒµ\ç‘KýIËÇ4‹¿U¿3¯ Í•¦Ó ½p“#ÿ(ÕiÃB‘¯Jù™rá®Ë`»?çrÕ›"›³ -‹§ §‘Ä•L˧a—l×qéÇ8œ%±6“|¥Á÷$Å•ý -í@ç¬Ï ç³À¿»ª³ÁË3‰S߆µ»ÖµXlj¨…­µ»‘¦™5ë'›‚‰“œ¹ £ ß#Ç:ÏV—K‹“5ÃÛ1£ÛßPÙ¾{#±*ó™›ãoù¿F‘Û3Åa§8ñ/ç2Á<å/ñý!ßkÝ÷®ý$åHñ%¥!4Åù:—Õ©3…×=íw…8•6Ÿ4›!Ÿ™•‚‹+&·†¹†‰¡•À“˜—x§Jà -ÛÂ¹Ï ×u»Éÿ„™ÇÄÇÉ… Ëí(û‡½óyçÿ Û±ã+Í•ƒ²£™Ç›GÕÌ×dÿ]¥/©‚ùµ¹«|í^±B¹FÅß‘s“0Û¥˜™Á"åé0«iç%å¸ó ûóM½ -·¤õÉ)…yͳ=Å…=“a­8Ù>Ÿ‚Ïy·FÝ™•)ûd¿#ïá“[Í'±5«{ûƒ‹UÝoõg³ZƒD­o©•&Ë€¯5™z­£‡×¥AÁ¥2£‹ûЉ5Ç•ÑuÿIÃS±õ›Õ>…xÁQ¥u•'#ó§Á˰ƒvõ•‰áµ -Ká%Íɶí*Õ×Ç•?YÁ’ᕬٸ­•Õ,«oã›Óo•4ñ:Ñ!#™¹«tŸ"Ç"ßï"óo»ýù&é R­Ã£7É« Ç&­§)±÷ »°ÏRÑ*‰¡Ý(—“›·Ÿ -‰Ç>Ý‹ÿH¹Ç­ËñëËåÊå± å©)•FÙ!ñ Q‰#Í™}…x©·§­\“u¿.Ų¯ËéGé§EÁAµ"µ#ñ5‰á!Ý&éÍ×— óy• ¿Ë-­ë áé*—ß8Ñ‘Ï*ƒ%¡É³ÍóBÛý+©ÝË9—:«û—Ù »7·’¯PÑÝF«k³+Ç$³9ñ -•/ù‰õƒ ÷‡1Ü…>çãïÍŸ@­± ›Ñ‘!ë5ó ¿!™ É@ý»0Í4©R“ ×­¥Ý£ÄÕ³†™Ù¹Ë"™ µ…í#ßh ‡ -ÑÝ}ý)ÿ2ë!¯³á -‹J½(ë¡'­¥›b‰žÿϵՕ͟ -»•MÓ;…(»Åǧ,­ÀÇßûïí8÷Ñ£,ß»'Á+åwÿ Û ­¹-ýcïÏ -ß¹ã›ݶÿ ™«û‡õp™éÍ;»G烙*‘Á ½Ù)ƒ‡ß"¥ˆû3…©õVÏ!é» -·•™>‰Hû!…ÁDÕ ÷›÷û=m]—(£›#‰ß"1‹¯_·‡‹±Žû -3Ý')ŵ×7ÁÙ ÓuÏ2ûŵ|¯K«6ó)%¯‹ÑFÏ“×2Í¡;Ç^á‹×ÙÍ/Ý0• Ÿ.¯ã"óbß<¥Ÿpá!7™"•“™I«­™ÕD‘:Ùé$á!ñ$Ç#¯«#×Ë—DçE­ ‡!›—A•ÿ -¿M‡+éë(…5ñ £“‰Ã1©bχr ËáµA/ãÛ<Ó› é#ç -ß÷,ÓHÍ1ѯ ¡.ã«ÓW¹½#í™ ™*eí‹rÃ'ù)½ -÷‘· É ‹ ×Y·#áÁ½-ûƒ6å¡.‡™ã ±é‹å Ñ ç£-ñ믟±µ1ïd—ã(ÅÁ#íÿ‘Ë*Õw›¹o«(“ûÍ¥DÏå!Ó¿(Ã<Ï>‹ñ0×ñ¿ù)ý\ý.Bó7ù‘­ ýˆµ ïÃ$Ù/ÿ1ÙHóÇA¿C¯8ñ÷ -Í=£2÷'¹×0Ïo«(‘÷¹Çù‡2½ñ/ÉdQ­†ÙG¡¾»;lÕ¨…¥"%õ!¥8%ï ËÝ2­ËÓcÑÕ‹u¿"×9§Éw¥‘±ŸYû¤ãFÕÚ³nÝ7½-ÝvFë’óx“¯\Ÿ2‡uåTÏÏÇ-?³ ·Š÷•ᬅŠÞÁ~ç’¯K­’ߩ粱‡É:µK<û{»‰³ Ãi¹ÔÝNó–³»Õ-ý8•¡/ë¦õOó‡Áµõ -Å*¹Çëá:—•É ³wë ï2Û·¼ƒ¿ñˣµFÃVå`ÇLå)'N±•¹•…<™&… …™¿-ÛÝ!#ç ç|˳ùGÙŸ0Ë`Ç •c±(-£'ß+ëà ű ±jó!ï$ %Ý3“aÇû ‹Aý -ñ ß×աù½wó*/Ë"ß$ï"Où ù/Õí!¿ Í}¹é"Ù³ƒ#·ï)ù-“ ÏËP­(?› Ë(…0©A-£*…ý¥KŸ"£$—õ"ý7'Ã!Ù#»>ËICÅ—Ó;Uñ)­!× Í-ÝÝ&‘có3™&/ù™ÍÍ`—õ‡&ó¹#íI"ï<×…õ»Ï ƒÕ£ß,£ ûA‰;Ÿµ1«S…å 1á›Ñµ¿ß5û@U‰¥(9¥Û!¿ÇÙ0­*ËGË#›`Á0­) »§Ÿלë‹ ‹ éDï¥-çõû³·ŸwÕÑ›‹å)‰_ñÙ/ÿ;» í…÷Så'7µ¿+?½!ƒ·$·ï7¿*ߥWóñ ¯"-«(¯e» ‰…¯÷!KÛY‰*Å|ƒ#­ ÑGõÕ£ ¹`Ñ(‰(#½á!ÿ ùl§ ;Ç!“ã “5“"Ó‰ ×(»1ÍÇŸ ‹1ýµ!Í Aƒ*Í@#Ç+õ³ËAóÃ'ù‘«I«Ù"9¡¹&‘P ñœ%«Íï~Ÿ9›!£ƒŸ(IëÃ%…Å-Éã!« ‘~ÿw+ç©$çÍï5Áé"“Vѽ ÓŸ¥±'ávù“…‚¡«‘¯ Aë>óqÇO™Ï;õI‰¡à U韩 ã·8ç¥ÿ!³í -Ï›•CjË ™«$…ÁQã#ý…ëPç µ·!«E­?£–Í í‘7É“Û -÷f™L?á -­«Ýñ+åÿQ©¤K×Ï!Í»›1¯9¯ý?• ý¥X»$)½³$•Xéñí,µ‰$Å «)ÓX¥#›©Eñ!ãŸë=™½"9… ‰Û …Á<ï[ï›Nû&õ/ ­]C‹?9Ý%#…½×:ßÏ×M£$Ý)5‡%åŸ#ƒŸ!÷²ñÕ-·…(%i-Ñ¡¿N5;Å'¨‹ñ‘5'ËÝ•)Ã%3ó³0ÿ7ýÉ1/ñÓAý©"Ýó¢+§ ×"‘”×*;µÍïã_-ùß]Ûb¥™‰1ýÂ÷³5×É›¿bÓãB£{‹‘‹Yu™ãµá¾•°ïËËOσíñ€‡4›V­µåª±¨ƒIç‘[‘[ÓÕµ¨Ñ‘ñØíƒ‡7±“˜¥ñ·ï—w羿|ý£«¼§f•š!õ˵ÏPñ©ƒûŇ¡Yƒ· Ÿ"ù1›Ó¬û Å©‰ãŒù#‘÷¤åLÍ'å­<·níÿ8“fµ)©8½Tó"ßɯƒóû͆×I·!Ý]ÃlϳW­ -å_ÑÉÙ•§¿— £”•1¯”åÛ~‡Y»­ët¹ á‡ë‚ãÍ2N¡D¿t÷!ϧ#ß"µç\ÿ>󹱿¹[XïQ‘µ:‘©Eí,Å&¿÷Ž»8“/ƒ ±ÿç ›Iÿ ¯ Á µ×áv‹ƒ±A•!Ï®¯Œù'ÅÏ/SùS£õzÍ$£¿ë3é…Ä«§­<Í…é»mßµ£Ó ÷!Å{å%—õ !óÉ0å€{?«®Ÿ ©i“µC¡ç¹- ™[󯎕5÷VÁ×bý<'‹ÍÍ&ÁÛ‹Ïfý É!»%©¥Y§×,å µ9…!·Ý …Ñ¡7½õZ› ×-«"Uñ;…{‰ ÏK¯?éÿ—×8ùÄÕa‹é"ƒ -Õ4› -ÕÃG¡2!‹©^Ý ãŸ#… ÙUÙÑfÝJ‹$“·=ÍSŸ… bó”—Û€$¿ óùïU›È•¶¯?w¯ó Ù ¡ãó±Éy•"­.Å -³µÉÝËC© ‡;#¹Ç•iéÿÓ"ñåï‹ç¿qó>ûÁã»$·™ù%™=Ë/ÏéC©ó/‰¡:ñ—Ÿ#•)«1õ=ÝVA§Ó£DÓáÁåtÅDý!Ù -³*ƒ‹4ù]ÉÉ/é(óës÷¡JI±#±ÁÍ‹#‹ç˜Ó!¯¢ç ïµ ©¶ÑÍ¥.ßß‘‹·+½†‰Ó°³›!¿¤!…Ñïtë™KŸuï.»1û¥SݱÝ6ƒtÍ"¦·—Áǵ˙€çÉ» ™"Í%Ý?‡Ÿ¯DëFã³ÿóéF›!÷){á‡CÉ™¹ã££µ"×$£ÅÃ÷*‰¹ Á@Ç=™!Ë÷Í!ÛÃÇï{©Mó ÛÅ>ÛW“§ÏÓ–·!¥"Ýï"µ(ó -Û“EÉ;™Dï"“É#ï¼Õù툱$&ÙqŸ*É"™…í½!¹ -¹ã ±8ë—¯ñ á"«#ï›}¹{³ÿ‘™§ËwÑ£ƒ”ûå ‰~ï ×—ù6÷ÇqÏÉF…z“ë׫°¹¯p—Åñ+9㎻µ5Ï Ë£E³*Õ/ë\‘!‡#³:óé…ƒ>!Ó¤‡[™'уååQË‹VÏóëë[å0éS§,©?ŸÉ)»³Ã©Ðß=§ï.Ûmå‹‹Ø£Á<ÃL¡Õ!ç§7«Ÿ›:å¤ý­>·K·¥$ÛŸÕÇw鯡µ¿&¥¡&×JÏ‘‰8ã»<Ý™5×_=áó?¡Ï>£“‡›Yí1¯áÝ2‘ #÷™?ßK¡«—_‘×¥!õ›PÅDÛ‹'™O«›%Û%•…ó±YÅš¿¡8Çhëí íWŸÏSÍËHã‘·ƒ(¹.V§Ñ‡Û1»X¥§,ÇËã‡ÿ;ç?³ƒËX=©›ƒŠ›;Ë?½ …?߉×ÙßÉ‘1¿[é7‡Ù<ËVãÕé8Ñ™2½"Ï2ÿ0•3ŧ«ß$ã§7Á¡1« -ÿI™<ã`á Ãí;û ©;÷qß».Ÿ.….±-…‡ßí&å±K™7û õ¥#á1ñ‡M©Õ”ù1ý‚ÇF•ßXÑÝ/Ë5ýƒ<³ˆÇ.±×#­J¥‰³ Õ.¯#·;ípÓ*‡3û ÷ƒ£Y‘,Ù£;Ó«;ýZõ1¥%× ëGýëÆé­"Ëí;ƒIåšË -£@­›2ŸÊ‡³"‹Û?ÓK½ÒëË §%.‰YõXˇµíYÿ0åã½é$í1ÃRûKëÃá -ÁµŽ¹ «6Ó.©!é3¯4å«X›O×4í°Í±{§CÅ­'Û"ƒAé#›)ûßµIÛw³µ/« Ë™DE͇• ‹ Û±·‡EŸ'Ÿ•ë çZ¿“ûE«…,õÃ;*³"ç'Éý$¹¥Ÿ=óJÙ÷ Å-Ãñ6“é¯FÑ7Á'á…×´Ó/O™w×ó¡.Å… 1¿›aëJ£éÕ#¥å[Õ á áñy—­/¡³“±+¹“û?ÉM[Ÿ£©$ƒÌÕ(­õÉk盯‡ß¥ñÉ ÍiÛñí/é»4Ï2Ù -›«u³¥§•#­¢µ½0†Ó×¶ÃJýš>ï&Ï/·Á¡á ¡'Épýµ_—ÿ|ç ÿ§™;×%÷ƒ9¥¥'ÿ§!—ƒ,×u³“*…§Ÿm•™íƒxÁCça¿« £@µ*Ï Ù”×$·‰™£-éEé ‘ å;¡AýJ¿kÝé £0 ÁÓÃ1¥XÝ7±;Åë̯{“4çñ]‡]Y—Å"óÇy¹ÛÍ#Ã1Ý_Ó@ßý¦‹>ÿ®ÿ;ÃdãØù…¿ãWÉz‹K‰»›@û®¥µÁ‡VÿÁóL½ßJÏ:£/•«ç ¥‡‡"ãTŸó‡ ¹í × ©y á ™0½ ñéóÝñ̓í -™»Ÿ(Á¿@÷¥õ— ñï‘é#Ñ ±«0¹¥h™û“&› ½ ©9Ñ"Í‘!Ñ ã7¥G¹ûÓ¿‹kÇ;¡ )×/…(·™³…Ç ç ËLÍGç$û¹"ñ ©…)ß ­o‘xïN÷ -«Û ™éå¹ ã"Ïc÷ ýÓu½¹á¯ Ͻå ùóoéý Å"Ãj¿ ¿— ÿVݱ¿ ¥— ¹ ù2ÿçŸÏ;…ËÅÍBHõ!ËýÕ —B±õÓ“+½V‰!µ6ýH³³$‹ ·é ƒÇõxã¿‹2Bí!Ÿ¿Ç!©±»évµ×½v™ÍßÏýɆÝß Ï)­ Ý?³ ‰ƒ × F‘‰Ý!‘ç½í¯ÛQɽçï¡!óR“AßÕ$ƒÃÃ.ó‹RÅá­… ó:ç@µï!óà í ÇŸŽÃóŸÛÛ©›©§µ@¿³#ñï -³ñxÓŸÕó#“ç!á‹"ÙÓÃ|+©Ó6PÅ›œÓ!Áh§Õ)õ'Gƒ/£•FÙÊûc;“?ëVÍ:“ˉ - Ë¡÷ÐÿOµ³ûsõ¨ñbÿ4— Å@=ן›(£ÎÑ6ÿ¬¡-•½x³¥€Ã·۵‡ûµB|‰Eµ ëGÛ^‘$ãÙ§•6·ÁS‹*‘ ÝC•LûŠÇÃ(ç§Ñ ©ù'Û,i• Í.å³Ç£%­éo»½§5Íõ_ß™(¹cõÎÏ”¿…D¡ó&£ Ý1»*ÏáJË/Õ ¯!—ßGûOƒ ¯#™<ÝSÛë>›=ñ±@Ý?™Ý#·`ý*ùßó“ÇI+ϵBÉ8…5ï4µ1ùSË8ɉ%ã/ˈñ,×\û.…û$×ãa•+Ý£-ÃK­'£Ÿ‡å ÷+Ó§éçó,ÝÁ.‰9“‹+íïký-Ù"ù1‘M›‰×!§$ÑCý1 ÿÿAñ¹5‰ Á2Ï ¯?ç!“³·¹ ŠùWãå ‡FÏŸ¯3á Û•ßnùŸ ó3‰C½©Ç훡Á ¹$Õ1£2ó(Ñ:‘Õ`›9»"—w*ûû'©ÿÃ<»5éû ÿfµ7¥Ã!Çù"ó ƒ(ƒ1ó2ùh郓+íó×DÇ%Ñ9· çM±vÛ«ÉË-‰hå!Ñ õ·6ÇF©(™ÃEÁ*áLã7¹5÷,‡÷0¥—¿‡$›†)Á$ÿ'ç+Ù-÷"«e‡Eë2•4Ï‘%ÃÇ Á¨¥Ç'é1¹2›'‘™"ÿ,Û0‡÷ñRé‘)“4¿¹ý¿6÷>‰Ÿ+­<ý8³ û÷²ɲÅ ùDåÑ ¥±Ñ ¡sÓ*×)ðã2zã+‰.÷>Ã*ë•Y—,©½6•(ƒJ¡õ¿V×$8ßûQ÷‡É4Åë%ᕵ‰*ÑÃ#½\™‰­å(÷O·÷C³Ùá¯$ËLÙ#Á-ÕLÿç!›<‘·Lý ¡!ýK§"Û(é¹<“Z¯ù¡¯M©8™ï+¹ÁˆÓ‡Ì—…;¹"ñoÑ-ý‡³½‹ãgõRë Ó(£]åU¤ë2õù.³-ûן ÍŽÙW͹€—,Ÿ+ÅZùãn± ûÁ ã7Û/·Jû -—?ç2ÃcÉ£ ‹#ÓóÛB“B“›$Ç$±Å“’ùñ†‘ »Å…E¯Å1õ&‡\‘Fß‹|ó‘ÃQÝ (ÓÏyу"ËÙÁl‰Z›Å—…›Ñí ó"ýRS±‰sï‰Ý.õ£#sŸÉgƒ&™$å#ÃLÑWÕùZ³7•R…FëljïpËÇ!››£ýÇ.ųå Í·%Ó“Ó o͇û±•‡L½‹§Ç'¡¥$³ ™ ¡+ùŒÅÕ -׿#÷HHÉû¸³*ÓTå ïíà ×#ÁÁÅ…÷Ñ•ÛÕ¹…Ù«•³ Ë@«í‹Pã…YíÛMω*£€áÿ¦¹„©D¡ û>«"ÙD¹ß*å» -—É.½~‡·ˆ›>E»›!‡BÙdƒQ‡$éÉ#½"ÇS“ ¥#õCÇq¡™›3ã›ûq›‰¡ó÷‰Ï -¿ ñç+ëÿÑ™‡5ù­"[»-‰]·0ï½!¡Å!õ ‡"žév“…5¹ ­ ¡¨¯Ý„‡¥S•£A¹7ÁÑ Á€Ë!Ë%!¡?ŸËI§CñBQ‡ï)‡0•T7Ë£Û‰×XÑLÝ'ñ!éD©=·*á•Á"çÓ ã©J·‹#“×!Ãß—í§<÷ ‘V¯¯,¡(×5ñ Ç«Z¿?…ƒÍ/%Ë¿ƒ‘" Û'i‹"‡Ó&Õ •—+Ù~÷Ûù·ÿ0Ç‘OÕß =ñµýuÍÍ ½ϯ3ýn¡µÉÒÿzÅ4ñ#õá¿ñ -ª…_¹Á©dõ£¡O­.¯ µ‡› ¥r—¯³ ‰…—ß ÏC…&å'“(›=Ë“^ƒ&³+# ÕJ5ÅGùM•%¥(…„õnÁ(ë7a›y§E³ ™•E“O±å!ãV¿Aã­¦«‰ñPÝ1ëO½ù}å!Ç!¿·‰WÍÕ¯L‹‰¡™ -÷Õ#ã9·CÓ|¯+§DµLƒ‰"ó‡~Ù˜¡&™Ž¡ÿű#§«Á·£¥¸©r™2¯³,ç-½K“kñ · #ñŸýÅ‹‰í:Å1)ã-µ±¹y#.‹‹·ÏµÙ ý"ç±%Q•|ßÓáý Û"½{Ÿ<ù$»¥ñ§À¡f%ù`Ï—ý'Ž­ÙÁŸ¤Û¬³ñ¶• ÍÇÍßAݨ‰£±&‘…­c•¹‰&ÕVñ‡Dõ¿ÑD‘"•ˆ… C÷;ÝYƒ§vW±^Ûq…Ǒ˙ ¥É¥¸åRÍ"I¹xá!Ó)ñ™…$7céËtñAŸ¿÷.Ù¯uŸÑA“rµ#‰C© 9©áù¥.­•-™v›Dÿå•óB™½7ÿÃ^í -˧ÇUë§“A1ÕrïEé‡H-ÝCÇ9•Ëá3•³“Í'ã"ù@ÓÛD«§µƒ×DKÛ±ÃõÍ -™)‡3­a˲+ß'áL7Óùx÷'û©š/ãtßBMÉrƒ(‰%»Éåý—(Áb›“$ý>7Û+Ù7!ÁEÝ¥§(ï˜-¯ §:/¯&Û·7ç Ù&7Ù)é#Í"“Ùµ–É -ûáC…Q¥±µÍ÷²ïC%§1µá"íIó ¹Á‚™#¯éQGó8ñ%…Aÿ&5û¿¥£õ.¿—7ëu‰E‰·z±#ƒ&‹DÏK÷.£…'¯½ç0§#ÏEõ£ -ËFáÃù*…ç5÷ñÏÐ!±»9•u¯û“eCùEã$ƒÙÀ7Õù¡ºÉo±I7Ý—"Å ‡ Ÿ£C©+ëEµ˜Ù …¥Có‰í ™³™í ‹8ÉEñ¿˜=û.E·—»‘í-=©”'=¿x—(/Õõ§Gƒ±¡ÇÃû Í£ ©åÆ“éiË »áy÷… •©½=û¦ÓÑá´;· ‹™­ÉçžUíÈ•»=§8‘y‡²“Bƒ é óHñ‰x¥Ë£ÙG»÷X—‡¯8¹?§RÉ7‘Š9û€Ã··‡ÿnÑËÑ-Í{±¾ñ‹ÿÂÃ…ÅÕ…Nï¸Ù.ñ2ÿ´¯¾‘”ù. •§ñ%×z·rƒ½ Ù"“Ûß=õ ˸Å ïO© -Á6©íKÿFã%Ͻ\Ÿ“U•íníï:ÁáÝÁ “ž£÷}¯FÇÃÃÛÇ”Ǿ‰ÃÁù1ßå1õ0:¡—*Å©Á;‘‚…ý'Ñ„‹KÍó˜ûjËd·÷uÁ^ß!ñóoýé%ÃíÁ"½(éRtù'¥ ‡ ×ãpï;¯ý!çJÛ)¯%× ÉzÝí³‡»²•™¡%‘“óL݃µ£çý¡*•Íïç!!×”¥W½2Á™B­»ó;÷é™Ó7ëSýËÁ…‘áÇB‘‡ ÿ&³Z(Í›¹Û³ Ÿ¯0á… -ÙÑY…-“4¯o­ç¡5¹ÏÇÅ…ÚïJ½ ÃÅ*ÅÉ Ó‡Í ½“ù§£'û0óátÏ‘#« ÙíÓ ùÕ£ƒ«( · -éÑ‘ÑÓ·ƒ"Ÿ‘ï"ù,Á … y!¿D"£ïz™ÿÇ5Û—×µx¯—£4·Ç—‘*ûCíÁ!‡Ûí¨ÑtMÏçÁ>‰‘ƒG¥ŸñhGé&™"§ N­·¥9˱=ùßq‡ÅI§?ƒ?͇vÓ%³·‘™Ç '×"«jÝ4»~ó¾ÿ¡…’ÃÑ5á=å–Ë7›½•ÿ1‡bÙÍ.­O‰ïž¹¨Rñ.±’}ã¾á­ßh«%£™Ý/û‡µn§ ‹›é2× ï%ã6ŽßÕ%ͿȭŒ=å<ío—;™=‡q ­9ÿQûr‹5僳§2¯½q§8çªÑO¥$Ÿw½Êï-ñ-‰a“ ÇÅ+Í Í2›&Ã[ï‡wÙ8¿™Ñd».Ó˜ÇÅ5·EÁ$Ã/磩“ÁÕ)™]™…iû($›ß”÷R¹Då¥Í¿Úͦ­nû’ç!•$›•õÓ¥8ÕRVËb¥HÕ8Õ‰KLJ£ñsÿ±å׫±†ÉÊŸ¡ãz¾·ÃëGÏu·‰‹rÇBÙ‘ÑW£É‡aÁµûå ýcÙ2ç\é³§ýLÝϳrÑ’óf¨¹Ë™—ýÓÒ#Ó†· …‰Ï‘lç@õ…W½µß½Ï -ÿtà õŸ‹(ÍNÙûNÓ‹ë¯óAŸ}}—G£…­GïÏ2ŸAë1‘k‡¯n×1­Öµ`©<«‡—E¹'ß°¿VËIýÑ¡¹¯/Å}Ïí0¹(‰qËJŸ]Ù(ûÓ›ñ@ï㦑!‰!›qË©Ç~©TóDÇ.÷1©Á+¿H¥›í)Í¡Õ5£ ÛÓ.µñåó•Ç¢«#Ë2ó;«÷HË"Å/ó;‹€›;í8ó>ƒ[Õ&¥³K¹[›ç’'ņÉ’³©‰ÅƒzÏUË!©>‘Ùç…ý‹…%Ó€¯¡ý ¡õgÛ”?ÛÙñ’ó-ƒ³"µáé1£ -™›ïëÙ -9é"ÝëM9ËÕ·"¯)«ÙµG­<›Yÿ/A™Só-‹ ÝÝ~ÇÉ ã‘! Ë»©š7Óë#— -õNũխßÐÃȧ&¥PÃgÕ#µkÕûEÙ(‘£™U ›q³VÓ¹ñ—÷sû¡ŤÓÉù™ÛSé¾ÏÒµµ‘³Ã&—ÑKŸÝ5:픃¸‡˜»!¿›XÙ;é|µP….ó²ƒgý¡k±ÿ2ù°ÏZõ¹×£u­{§œÏ¯©Ÿ_ù„“XÿŠ©Í½ÉɤÑ?!!‘J¡3ÿ¥YóÛa¡ ƒ±7ßÙï;ãF©!¢­‚“±—j±Õ§¥·”…JÇMÑÔí½F¡`Ý £ÏÓ¸¿‡¿é¹MÁ¹ëPÝ@í£{ñ -­˜ÉÆ•ù •ÿŸË«—Ç AÓÏF—\µÇ£÷qÛ<…˜áÅ&½'•]×I¹…ÙçMýÕµ§çzÑNݳ­ ¯ï «×Ó -/ÏW½žý%—É•ç -…ë½Mý-¡—?¹5‡• ÕñtÛ“­*ë£'ÛŒ!§Å?ÛHÅá:¿ƒ ‘Gã8ó 5ÝWÓ9Ã-3‹BÿµÑ==¡ ­÷Kû´ -‹$û‚‘m×»UÓkµ=éŠåñ•÷3™‘¥Í<Ç…Ñ©´c§!Iã «.&ù-³ ÓåÕcÁoƒDƒ ÏûG×S÷“ ÕËGŸ×A¿ Ï6 B»»X¹ ÿÿÃ…I±M§Ö£F»ÁÉ>§ -5í%£Y­¹í‹Ç¥™9ÕÉÑ0¡{Í$7›Å0ƒ^í3ÕƒÎß-iç…ÏÍ.ín§$·û"ÉgåljÙ%í&ͳß'í£a5§-ù˜ÑÃ6C«0‘1Á;‡w‹ Aû:¡‰˜å·FóF‰é]Q©Çd‡M»½A‹‡³‰+©¢Í$õ’AãL¡FŸ…ËÁÛÍ]£)ߢÕGµ,k¹%ÁgÇ(½ ‡)¹/õ)½mƒ'£c>ë†:ß&͟ç —P½ëqý;Ó°Ÿ§¥)‡_ý…÷'éRë@‡¡ Û…åbí,»RÇ&™$ÙͽZ¯ ·÷ ëƒ=ÏÉv›œ×ѵ‰™„ó*ùKÙk‘k‰¿TŸ˜%½;“K™)ñísÇtÝA½S£ÙÓï=·g·2m—mûÑD·ójÝ‘Eé;ÍTó!ßÅ(ƒ«/—­ …u¥\Á× ÝQÇ%¥Ló(ý«+µ]—*‘4ÑE¯F£K¥ Ù<·)Ýï”õD«ýS£J©¿‡ ‰NóÅ(Ó°ý;'Ï›ãCÕ˧½)¥ªˉ•d¯Ï~í±,§.Ï"¯Ÿß´•!»P¥‡Ž×"¹•õ—U‘Ê“Ã_ïEïç—"Ÿ¢ËçQ½J»=Á ©?­QÉ^ñ§qû-³Œ….Ã~¯0ß…Í£>¿å“‘ ±‹yß*“pï -‡~况ñ)¯AÙÝHj­õ'×̳Cô‹fÕë¹OÕvõ­¿“ƒ‡Ú³ÕE¹q©¯ƒÍÕ»‰yƒÑ¡P³SÉ)µÐ±a¹¿áØ¿‘÷i¿×ÿ¿à ãRõ×óÏH£Š«¢÷Í2³`ëÊÁ²ËVóŒå±™ó¿r‰0óÿc‹Œ±Á£ˆÏ8·5ׇ¥™×°·5ãjÙ¯…cËW…µÓ9ߓㅯû‚µB6Û²¡¥Ócý6åSÿ¡Ì­­“Žá?›ÉŸƒÃª›pË/ù9á -ÓšË.ËSó‘\‘wã5§Ó¹z¥Çµ™Jñc“‚Ãʵ¹…ZŸ¿¡£‡F\Û½ÿ—åªÿv¯.ÉËÁ½›·Z·Aß -|ûȵ½§\瘷¯Û!Ã’ë[Ç“9€ËËÍs‹F«ɧ·É&‹$ë:—9¡}×-©®·‘Ó¯É/í¡‹¯¸]µ‡å+çOáoç'É-Ÿ$ób÷?‰í —q·±ã³³¾ÍŸÌ¹2ÇÐí¤Ó¹ ×PãˆÝ®å“…»À——=¡åϵoûTã(û%Ƀ™-—†± >çLû.ç]‡'¥&ƒ EÕ‡Ñ'µ·)¹$»$뎓_áB‹ ‰;ÛCÛBŸ•CÛTýdÏ ÅHËç §½ï‰*«,õ ½¯¯¡ÿMÙ$½aË ã'¿‰¥1Ç/¿ÕÑVÆË «8ÙÌÅ€‹Rù®Õ«¹›xÕ¹ÿ5÷Øû-ù«0ï£ÁcѤ§)¥vÅEãiõ–µ"½ŸÌ©vሓ©‘;›™2£Zý±]Ý“±hÝÁéÇ#ïÏM›¶­ ý‰K¡ªÏ%¿3ß•_Õç"Ÿ‰ÁHû"£ËÇ™›ÿ!ýDÓ“‡óÃáÝUù ™´¯áÔÉGGU…)û|»¬åa#¡u‘ -«ÿ§í#§¹Ÿ"ý]±«‹bÝ|ÁiÇ_å{ÉÕÇ÷€¡=‘!¯&‡ ‡xµý¹­©¿*ëªÏ•“¡«Mɾߥ‹¹"ÃÅÀ£&Ùÿ)õ:§oÛ÷¹J¯Ò ½óÁ'ëÐÿr¹1õ>ç%©J¯ã±ßÅ£ͰÏjãÇ‘õ­ë;ÓŽ‡!÷Ñ7ᜳCáª+×s±Eé©ßÅ·¯jÕ±xƒ;Õ ÅpËnMÉ}ƒ°—vóƒ©Ô¥±žƒL±Ûeå:ábí;Õ'Á ©G¿+õ‡1“b›ñ¼¥×!·«!¡tŸ×åEç"ë -­`±Öç|¿Õ§åg¿O¿¯áD¥'ϱ¹B©•[«Âý)å>‰ÌÃÏÅÐï†õÙß,—#™£ý“ÿ…“³¡ ³ɰٱÛ­Í­u…%ÿ -›×E›ý©‹¡í±Ÿ²Ï##—o«*·á½@éѷ(…2Û ƒÑ$ç -µ1ÃcÍÏ!ûiÇáÕ ·¯$!Û1•õáÅ)‡<™÷ï'‘“‡EáÏi!Ó‘‘"ƒ©!“(ƒMÓ#'A­\Ã$µ¿ éÉ ñÓ#ÿ!‡Có Ùõ½ -Å'pï -çõ“ý˜• Á ×@±2á.'Õ)ýÕO¥+/Ÿ•½Ó™.õ"©ù¹¬©_ç…©J—F¯ ñ ÷rá.¿ÿ •Ÿ^›/¡ñåÇ ×lé(»!‘Gǃ/óµŸr™—›µá$¥Qÿ©)ýëµå.ë­<çÏcÓÿ ÇŸ÷?¥ÕB÷Y¥§r¹&Çóí·2¿£2ç…Ç Ã#§ Ÿãñ É ç­ ™¯W‹_ƒ‰‰6û5×ýµ1Å'óZã­å+õ1µ¿å³Ó*‹“që±xÁ&Ë[‘‡Ÿ)ëµ"å,ïI…-·õ?ß1Ïá1›Ïh¿(×·ù¥ Ýó ©qÓ#Í~åÏÏŸ\•ó"¯:éíXûT•yÁ^½½¡Äù ÕÛ‘ÇûŸ#Ÿï"“\áå1÷)õ.§0éc×…ßçu­ßµ.« ‰<«Ë$×(£©Û“:<Å¥½%‡ó$± ÃWÓÕ"©ósÛ"‹?©»û‹/« -‘#Õùų—!Ÿ)½4ý™/Í “Ï…‡ñ)‰ŸçDëÉ·/Á ç<µ"û Ñ" ׯéǹ(ë “$©ñ“¯UÕ±ç…1C)•Á ÿCÃYÿ=‰×R§>«V©-“Ë ½9‘hýûhÃK Ã¥YÑrÛKË'±;é!És¡*9«—|—¿• ¯ïxÃ@Ó‘!¹)9±#Ý)§Ë¯FCõHÏ ÉÇ× -©F?çLÑ ÉÇÍ”I±Õ;ƒX»«Q· 3ó!ãÁ¸å|‰2çGÓ]Ó³I¹*»žÝK¹ 7Ý»‚¥×'±×5Ù#— ߣù#ÛO÷LûÑ=¿—ÍEã£QÁ;¯!Ÿ»Ã«£×' à ƒÓ!ÿé AŸLµ(3ñå©ÇFù!Ó>ÝF?‹J‡,å¡)¥_õ8‘—!ã µ%Ë®—¥§<ÇóqñH‰OÅUÏvKõ'»4å5­Ç»Ÿã -Õ\£­@…  Á'G™{)÷µI³YÓ‹ï·CÍuÇ2±v•x·C‹'‰ —ç'µ‘ÃpíB½¹"· ­)+ÙELï>ƒíÝÇJŸÀë&—‡ɪÏÓX÷S¿iå-ónßoÛÙ?©‡×6Çíë)A›#©#åÕœ-³ §_§—¡"¡—¥Oý•";­…¬…/ëå(÷#÷¿"­µÅ¹1·†åý:·Ç1‹xÛÉù ÓAƒ&Å‹\ïë“'‰¯©ç_û!=¿ ÷=¯g¿J—Ï Ý?¡Ïç3‘)—*áx™Wá9½ ­&Ë8¥ç!÷#á1›¹Ó©t‹ 7µ(Ÿ=õ*±M­A)çb÷ÕMß¡Í*Á¹‰¥—Ùÿ“©!«4Å}9Å!…¡0½}ÅAÑóË‘Lã¥å"Ûh™*£¯ÓÊŸ»rɧ·&é'Ç×;ÿÝióý<)ã á$ÓsÛ.‹¤ñ>ç)¡ Í\—É—¥pƒH…P‘ß ‹Í‹Eõ&‹vƒCßx…Cç½–ÿ«åjï&•—*çÍ£TÇE¯–¿=·E‡¢í_ñÁǨÅÔÓOËŠ“T‹ ë/A½5ï -“C‡&ÅŽ)·4‘éMÓKɯŸÏ"ëOó'ç§(ûÍNŸ('ÓÀ‡> ‹+‹Û•)ù±_Õ$™‡E™û1…ÿ.1ïO$…'½‹ë×-¥á&ë Õ<½ “<"]å"Õé¿2«EÛ$Á&ï©-™/ï\¹¯Ï§;c‘]Õõ éã*›J¡ -ËAÃ$ÑÝ)ù$ý áÝ!ñVåµ -¿ç ÿ×-Ë õ2‡CÇã -Ó;õ"ÝѨÍŠù“(ßç'Ù -ßDã­*™"¿$ßýB·(ëÙ"ý&Ë×2›(í+ÉÛ!ÕÁõEó$Ýóõ§Ñ#»&•)Ã*ï.ý+™$¿+ù"Ý ±Áé~ßßDÇ™£ ­ß?Áõ#Ï“-·Ù!Éã>õ*›•*Ó"³DF¥ -ñO» —SÓ?» ñ£Y«­Û£Õ«5¹(­ ›Aåí§7ýéo™³ ÑGÍñé-‘$ß#Íѱ*¡U·¯ ›HÅ ±.û§&ß«)ù‡+±ÓDõd;Ù°AY/—ÈM÷Û ñ·q‘ƒË! ÛP»+Í*³ý1ï7Ó‹ ¿/£ —›?‰ƒ'×­½ËÍ Ñr£ ¿$Í'‹ç2‡^ë -‡¾Çï'ñaß«(ñ}¡Óå™+Í7—"‘õ•/á ãýA™í™Fµ!¿$ÿ‡(Ç]˳©ŒŸ·1­¥)— ó#•¹E½ ¡#(¿‹F£4ïß*· ™™-'b›$»çÑ—EÑ+)‡tá“ ×Mñ#—Ÿ ·ï­,C¯Ï ¯'—#ç;» -·)½s‘t<£b›ñ"¹-ç'“YÇ–Ñ ã%ùdÏ&4÷ƒ(÷]ïžM癃$ÿé©A¿E‡“ÛHñ?0ŸlÁ6Ÿ‰ûK¤Ýc‰1Ó*£õãe« É5¹—ÏXñ‚Ï-»­+ÝNÃË»6«\¿§«<¡UÏÍS×#·©©4ÁÏÝ8¯C¡½#Á³ÛÉlçùQ͉#Í"ßï¯ÃÅ1»ï(Ã3­÷^ŸÑ± ‘B‡Áù$ÁkÁÇݓ÷Ÿ‰ñÍy“3û*™Ë»«;íx•ÃÛ#募$§yñKËÛ !×± -ã#ãÍ1™—Íó÷iÙµy• -Ã5Ã~ã*牅±vƒ¡#›Ñ2•WÃ-ë­LÁJÿ‰£2‰ \×+ïO2‰D™—€å(óû£Í)ëR¥‰BËJý‡•» -¯!§Tû0­©[… ‘«Ï…'™‡™DEÓÉ«•O“Ý-¡'¹‰Å6à ÃÍ+³8¿Ñ­ÝžÛ;³³°]Õ}³Ë/>™/“Íý³(Á ûb›*ï·«{¥.Å/¹Óó7û‰fE Û­› Û +õ,Ûx§0O¯‰Õ/û2Ç&¿³—(Ë@·»E¥G݇ýWÏ?óK4ó~Ï!‡r¯`“™ñë™C¡X9ÿÕzK­]Í:‰J£“×JÝ(¥ë©·¥5¥(W×Ë™Kµ ç"í]›É.“‡y¿¡!lÛ¡#åp÷'Í>Ñëï1íñ¬£Ë%Ûƒë(Ÿœµ‡‘ ý¤éUñÑ2õ£Íñ"É{ïÅ;™LÓ*Aãÿ …Ý -‰MÙwï á­x›O“ ×l™9Ó"Û<ÑpáýjƒYëfÙ£TݱÁ• ¹@ß}©õ¿†Ç…dùUíÉÄËÓÓP¿w©Ñ¥c‘ å÷ƒïN©«/ë#ÉbÕ¥^£ù&¹¥N¿ñx³ ‡ûON“Q»ÑJû"ÏNá8¥1ñb‹›P³/¡Qƒ=ßÝeÝÉ÷…ÝÇ Ñ#¡]»åU™dÛ"‰P‘(›[½0ÏÅ3ãO‡‘BÇJçÿÅ]ÙBãVÁ#¹TíZ»jÙB—§‘"™P‘ç&ŸdÉ2Aõ§FÍY£ÕS±ï@뵎ÿßCý‡» “yë‘TûJ¯#ñbÝlÉï,õÀõÇë¡Ñ×Hç·wåÙ‰°±_™ÓßéuŒ±ªå9áPÅMÛÒ‰ÔÇ×Å2ç;í>Õ¬Ç}ë`ßÖ…Wõ·ŸG؉­«—áEû,åÍÝ8¡Á‘·‹n…Ɖñj˃Ñ,û²Ÿ”ÿÙí‘ù(Ÿi‹­åB—z™‚•§'›‹×gÏ'¿¹ù -³PÅ·bË Á°å©›ˆ­ŸÉÑ“E‰z›©ËÁ'™nɦ¡!Ã/õ¥÷7«‡1—'‡3»wû•¿é9‰©-½0¿$‡Ã:b+ÉíŸÅñ~-£ÇXŸ@Çÿ#»k½©‡;±YÏ"Û·‹Å‚É•"¡¥m»˜‰?“£!¯"§P5¿?ݧ”¹Ëã!½óC¯#ó&¿í -û"•}¹«·Ý9³E§£#Kë«ÃbÕ'“=—–é'Û|Ñ;Ý›­-›—/—s9Í"‘õ Í!¡•(‘xÙ=ÏCí Eã -E© Ó³«Åx§J察‹—8©› M‹·ï#ÑoÓD¥± Û——˜£·¥Ñ>KåDÁ )Ãñ¥ºÕDµG¯ ½…‰j㞥µƒOûH££§c“E³;á —ù)Í!‘W§ Çx#µ!ë5¿{­1Ý#£^¥ »…s7³&©±³õ—ƒ7¡/Ó«©­G±>ÝŒ¡‡÷ƒÅ‰Õõ¥½ݪó+÷S8Ù".Ì«ñ-×ÀÁ[Ñ‘ϯÍ?çÙç§y­‡‘A­1å«/ùv± 7…›u±=±‰ˆ‘‡¥¹›–Ó=·óZñ ÷’õ—û@¿Ù‘ ¥K?Ã/Å’ùMÁŸBóG£ ë™§÷eÝz‡ÇS¹ÝmÇ Ÿá›ÇéËIÉ¡—«Ê©-ñ÷<ס¬ÙA• ±DÑ¡ùÅ—ëû,•mB»¯Ç O³gÁ”ë›Ç Ûµ‘HŸñý¶Ÿ¡!‹íŸ#5ÿ»‹ÛÔ±gÙ¿¹AÅCñ‰²“5û9ÈíB‰®Ée­AD³yÏ‹#/ðÛ:;ñÝ$ù‰Á‘É4×¼¹e×#£‹ë¯=—‡³Óõ¿#3›ë}§¶¯"ŸDP¯L9‹[¡¿Ï]± ·ó¿¢¯“#ëŠÇ‰|ö™¦Ÿ83Ÿ'×~Ý!ù±ý¥‘ÁÝhÁ‡1‰A¡dç¿£ Ñw=ÛL›ñ¬ÕZƒÑ”õÿ— ‡NÙ¬5«Ã"éß‹‹6«£íc½ªÉAé1§ —„É?÷D;³•X§^û 7³Ÿû­½Ì“WïÓÃ"£e£ÔãXyû‹·ù–í"G‰÷È›¥¯Û"©:å8ý‡Ï›Rv»g»¯'¹·‹ßaó›ïóªùý(µ¦» ý …"‘$Ïi™ÿ ‹‡ƒÑ ó‘ÑÏ ‹ ÉYŸ·Ç 7ýßvÛD«ûÙ”©V‡ËåŸCÍJñmͬ›C™-µDýÔZ›·­®ë?—ß|•Ùãßµ÷ÉŠéO—Ù„™;{“ŒSýÝ9¥ÑÙÑÓ -¥ëXÅ"¯·u™§µsÕ"›OñXÆålÓËÿ -Ÿ«"“\5ríË!Íb±ýh×{¯·D9™4É(—Šû 1¹.©§‡6™½@ ûÙÏS«I¯YÅ„ÏY‹§y·È«ÍL7ß$¿‡‰B·¢÷?µg­§“8ûË!áÍß¡ÿé"í7Ë9›¦Mã"å}£ CÁ‰×?ßÀçeµß{‹Aß;ÝÇÏ­ýC™“€ý!…?éƒ ±0˜á)…/Éij‚ùsí¿›º›)ñ¾ée•Ó/ÛJýtç›;¿å]¹ù%÷w¡"¹›ÿG—¯‹é ÷å“×=ë-Ñy7óaѶPµ´%Í¥¬Ïbõu©·µ"—Àû6?á~Û)ãÇÅ¡†ËÁ!“ÏQ³ÃÑ`ÿËKñrÁPË81ÝHë…E™™ñFE‘.Ï‘ÍÕÇÿó¥•+—)»ý)çCõF«pA݇Ã'ëaÙT×!§"Õ§iÛ+·Ë• ¹7¥¦§}ØÉ•K³…/£ãÉŸFÿƽ=±+/ý϶Í]¬…LE¡ Ý+›Òñ A‡¥"—µÁ¿å ÇkÕÊ© )ÝŠ‹Mï¿Ã¹á Íù¤Ó±«[‹4Õ’Ó -ÕéÙÓÏ¿<Ù!¯E“¿¬íN=¹é “•—­íL‹Ç óízÙvÕݰC£B‘dï{ Aßõ3ý}Aç)­± Ç«Í7«ó&ß›ƒW© ¿³?Ó6‹pëS›ÕKÛ_÷OÓ'±ùŽIŧ|£¯çËN›å³‚›…álŸ®é#'ýQ‹w‡Ñ#%½J¾›/ÿç+Û›vîóÇMë–óNµ ­¸1©FÇp­+¡˜é×ß¡”³ÕŸh)••¡—@©£‘£‡=©o…¢•j¡»³pÕ£Vïù3ßH™“`×A½Gý«Ñ&«“¡·ÃZù1É!Ÿ‚ÕÁ3çÝГNÛ•D7£ çÛC×L¡=±Gã'Ç5ëg•z‰n‡¥( 5Íe­¸½"+ëxÓ´ï¡~Oµ(“!ÿ§ -¿¿©ºÍ€›(¹­³¡8õ(‡ƒý0•DÁ£'×$‡ §ï‹*Û0­YŸÝÙA™$7ëÛ.û -®§§Ý³½ˆŸÕ¯­ˬ¿µÎß ûI³¡ ¥ù ™ù#륋ý ¡¯“&Ù³…ŸÎÅ !Ûů…bç=»ãÍ ±³˜Å2å«¡%»#©«½Ð›$ÓÖ… [ëBõ¹åMWå)ÏÖÓeµK›X“{)ÃBå\¡1Å€ý»Û Çn…ó“ºÑÍ%ƒƒÕßÒÿu‰6ÍD»ÃcóŠ›2«fÉ<·…µ<×’÷Ë}—ã&¯ª§Ÿã¥˜¿lë³ëÅ7­W“‹‘ËcD“ñÕ-¡YÉ'‰[Å©"ÛL©ù0ûFÝS‹;µË(ßÈ­«XN‹;½Šω…åÛ­±(¡W‡5‡Y¹]ý=ï¾Í>ï;íaãGÙÓ4å$¯ ï"•2ÑQû%‹ïh¯•ßÛ~µWë8³*ÕM»—ɨ‡œß«³›1÷Öé‰û`å7¿Ìñ4ÓÎß8‹¸Ï£½ÀÝ Q׳Tû·µÇ‘—õ©­V½—Ÿ—³°õ-¹`ê¿cïé—T¡Æƒžõ#×.‘ã#©{×¾¡Ð•,Õhïg×Ò±CÝ«k«±åG³—²ÛN¥R‰D­…ïMË‘™u‡×}Õ‡ù)ÿÝEË‘_ÁãÏýÕóO¢³§åDñ§Xû)R±©¾ÿ£…Ñl‰{»´… û©ÃéEÉHÁñ Õj‹´Å´í¾óCÿ$ɽ¦ó{±Bë­µz‹¡šÕ¦Ý!áz¶±TÝdÙ»“"ÇlÉK÷dñ­å&ÓÕ—¸¥[á'›eÉ‘ÍwŸÖ…ǧוÓ"¥½ É‹'±®³ïçù$ Û&“;«/¯+¥«Ý#Å"ûÅO£(Û½é ×µ1ÃÓyýVņýù ‡Ã¿ó1©ÅQç!©sã!³z£å£¥ƒÍÁ˜Í ¥ÑÏõ8Ý&ÿ!§#£Ó é"ÙŽ…&©#›‹)Žs« éË¡“ ½ÿƒ … -é<ÉûWç.ñýÍM­×ÿž¯,)£«'ã²áŸ?ÕCÿ4çÅS1£Ù(É ·&‰2É¡Šë-ç:ƒ¯#û•1ó¢·°¡ƒ¡¸õ -IÛ!×Õ`›—Ž5ƒ5çgÇ÷¡Ó“³~IõZ¹—ïïó1õíËŸ“P¯õE­2Ó&ÓX1ãM½Ñ³¬(û2—ßõe·«Ë2¥›®•sÅ ¹õ É|Ÿ¬› ÁñuáÊ‘Ûý©Ù±r/Ï6’Ó¥U‡m¡Ùb·"Ùá5ãwÝ>×"Ç!›¥×­ …‘ ǹ¥•:÷Y·zÝÉ#½L£K³éŒÉ0ÿÛzÅÍD÷ ç˜í Q™0«£š¯ëûy‰LÁ³(ñ}Ï¡³ç -©!Åž›Á/áÁ…³AÑPñ.Ë$­„§§'ƒ#Ë>×/™&õ^Ïû ¥{£#‹!¥w©áá‹"¥ë‘‰ŸÝ ½¯"ûÇ*ù{¯«PÁ*÷ÿ ñ`çѯ¡Åp×!ÑB© «—"Cí Ñzñ!Ë)í óã<± õùEÑxë» ¿u­FÕ¿¥‘óÏxÁJá•å”Ã#Ï„›H•™ç!à -‘­ -Í'ƒ·Ý ‰óµù -Ó¯ÓÏÇ?ÑBÍ!Ñ©ß ·MÿÇ« -½#Å•õw÷"‰¥õû'õ#Á -ÙX·+™‡RïÝ ‹á“ápÑ+™!¥,£½Ù«ƒË;½©¯<§¯§É"¡¡Å¡Ù[Á•&¿÷"vë$×#ù¹Ï7ñ¿ª©"‡%Ñýœ‘ Ÿ9™™K¿~µ2ûózëKëÙ ãEßHã©“#£ -¥:»¯G­=Û"ÕCÑ#…÷-Õuß ± µ"Ï}Ñ<—XŸ ƒ4óÈûSÏÙ±‘p…\ÿÌc½Ã￘©'ï é¿í)­ß¿Ç ‘=õñ»†¥ç—4ÁÁZµbÙ‘ ý©Ï½Ñ£û. à án¿µã(×õF×Zå… £ßm«ÿ;ç>•Ù™*)û Ó ¹ÍV™;‡#ûKù2µ'­Nñnùb¹5 ÕsÕ‡£ »'§$ñÁ;¿*Ù¯ ï?—õ§DŸ ‘mý@£ Áï#Ç.µÝ|“ -Ÿm˯㠙³vóÁÑ‘õíA§·ÏÉß¼ë~ƒ:‘‡µŠå¨©œ“!½rß7áË ¡ÆÙÑÄ¡ ý·Ç‡–ý±`»¹õḯ"¬ÿ'p­eÍ+­’É ‘Ï÷tƒk·éPïKdñ#™ª—&»"Õ!á‡áJ±X»÷±ÛE‰Íßy÷"ÏqÏ‹¯Y‡8çl‡ų‡³„ÿ“ÉX»ɸÓrÙ ±µëAËó†Ë„½Kõ"‹QAÕ"ýA«ÅeÕQ•½‡åNc"›©ã"O¿÷…ÉJ… •ºƒ›ƒ!ᥕÂãÑ*—‹’ÏzÅ%»SÇÇI£l± ‘©í„››!ý Å‹š»%Õ¹=³0óÛT§;¯ÃÍÏ«d‡cÃ,Ǩ™ÌÉ·h…š;­Ä¿«éO¯k“jñ;‹l뽑Ïã»tË“—6¯fÓÿ‰¿Iûj)û£™›HÃÑ3ïÑ)÷Á•<Çk«?ÿÕ‚±|¥QÓJµb¯£±sÅ燅ñA»Î¯á_™‘ óY‘ùF¡xë"÷Qíb“0ù fƒÕ‰Z¿0ýï ŬɃÛUñ9õ ­ŽÓŸçÊßOëYÓDg§Wᛵ£jËAñt¥³ãbÕ0áaͶ…Íuá#óíh׳÷LhŸBñYí¿€ íÔÃa¹=»Jõ½e­¥‹ ûL‰C‘÷OñãSÿA ø•Ê›n³ ó’±[JÓkÛ&£2åéh»o¡+·Ù0Çn· ùϬ‘Ø¡À¥#¹Ö—¯ÖÕ±¯«ó «L©kÑ™‡Öß?߈ƒÅLÍÂë¾Ý…7ÿCÁ†²ùÔ¿“'ûÅõŠ…£×`ËF;žãUÕ!«m/£°iÑ•Ç7ßT‡ñÒ•¼Aí›Ù®ùçNE­–§©ë²¥¿¹½ãuÍpé²ë…ñCÏV…ɇ‹¦ÇbÃI§ 9‹«Áj¯›•Ρã@ËÄ“‘»ÈïS£«ë ›Iï'aÙÙÝ#õlÕ2Q‰Í©¡i¯@…õÅnˈ­Š+«ÙÍåhÏc‹Ú¥*ýkÍÖEÛKóÉ¿ƒe5¹!ïuIã=ƒ5ýYõ3¹Ñ·ù=£_#‰*¹Y‰ŒËõ„½u‹Ã¯]ëNÉÛ»©÷Gõqû n§=“¯=½,ÃdñÓ®¹¥£;Õ'ÿ -å'÷!¿õ7å'÷ í©ó’×"Û“*ãH¿/Ó¯rçL‘ ‰­;§&é -Ý>ѽáUñW•ÛšŸñdÓbÝ»É"­“Ñ © É-+Å)½‡!ÿ© -‡S§å+é—Gï"—ƒ»¯·$«0É ÝK›»%½#½ ­"à ßaÿ¿Å1ÕÅKùÍý.#¥#‰$½x›û Õ¥¡Mÿ)›·ç4¹ÉÅ'»/ÍÃ-—0¡#•ãF—/¥}“#“(³¦á/û7Ñ;£¯Iƒ"ÕÔ¿Ëé\‹&·_ñ®í4³5ƒùÀ²Ù¨Ã.±“ñËåŸtÕGÙÃÛ¹0ÓS•—ûǬÇ¥N§Ÿ~åÉ·GóF«ˆ‰«´óSÿžÍÏ`õùp™çÒ¯(ñxÅ÷6áÂ÷Ó"µ_)½”ç ç §ª•Ñ[íž·9û0ã û›,­ßÄÏ‘Uÿ“3¿ÍJŸ Ï/ç×Û?™!Ó—ã÷\Í­‰U‹0åx‰ÿa›£çqÛWÉ*çTûvÕ&™ÃýRÙrÕ0‰Ó8±ƒ›=Å É­"ÏáJÝ—ïéÃ=¡§¯.‡ž‘ݧÏ!…Sû±Ï#ŸŠ©¶õvá¿ ©ñzÏå-¥Áý?Ýí·÷é1ƒt¡[цû•ßãÀª±ÿKϳ8ßXÇaûŽýã!•vÿÖ×µ¹!1µwŸá¡Û³š£ íXÿ²Á9égŸ‡È› ÇÁ_µœ×p‡#-»ÚŸï/§OËÌ™lÏ Û¯¯£²ýg‡9ãóÿÁj¹,3·¥‰pÙ3Á…rëÿÅ#_ɇóóA±ã®Ý›7¥†á‘9ÿ3£rµŸÁ£—à 9¡©#CñBÁ*›|©ãÙ…§#ǧ“ Ï»Ïéábí˜=£Ëq÷Ã帓ZûaÅÌ1åÝÓUí01‡Ó7—ùÃËÏ ý Ó+‡&¥ …Ñ*µj4Ë ß éDZMíCÓ*õ ‘ñí˜ÉÛ­'™*û›™±Óé?çcӫ럫ÙÔ1ñ-­ñ#¹›#Ÿ©>ßV‘ÓÉqùÉÛ0±×§D¿Lµ‘É#Û#ƒjç"ß2“ á õ(µT“"³å$•'¡IÑÕ«Ÿù<§ÿ1¹×/“#ɱƒ1«½Ç í½(ÿ“ Ã%Ñ<ƒAó¥ÅÏó“Ñ‹ ¹/ ݵÿ"—$õ³'‘NÝ/ûÓ:Á Û!Ý!©å «Ñ#…ÔG—Ö÷ ãx¹Wå1…´‡ˆ#ŰÕÎûBÍ…®§ˆÕ°Ÿ(£¿Ó»ùÊ ë¬³ËCý’ýSëÓ[õ4åFŸ![¯„‘­sÛ7ïn—3ÿ“åÓã[aÉÖ¯`ÿNïÑݼí¡w—£³‰#¹IYÝx©Û­UÕ.yÁŠшÉjãçDý/ß2ý!ï½H1­í[« åÍ)¡N…,Ñ3ïÏTû…³sÿ-¿œµÿJ³/ÁßÍ㟯*#Ÿû4£s«§ZÁD-™µÅ‹ -C¹<ݽ7·=Ípµ;û­Iý‹õ9›#Ÿ#¡,ç0畟 -…«OÓ-©Dÿ™Dáù&¯ »"›T¡Mן¿`ù°­^‡¨|õY§Õ¹— -Í+ù3Õÿ ­Gõ¿.±1ûO‰1ÍÇ ¯¥3Ïsý ÑÕÑÏã›(Û ‹Cݯ"åÅÁ×ÿ=ëÑ‚ñµ¿›t¿½|÷TÍ‚9—*§Á Ö¯#—NõoµÂ±^« ‘é"—ñ rõ ›!9Í7Ý=¥·C‰Tá+‰“!½E‹ZW/—.ÁÍÆ»¼ýs¥\×Tý@•™Î•9(¯ºõ Ñ1Ç1ã¡@§ŠñJñdÇiëœÇ@­S™ m#©L×Jß¶í¦›¬™P¡J·Rß-ÑS·‹?ÁÁ"Ñ!ýL¹%Ó&ŸÝ½O³.Á­B Ó£FƒF%“)QÃO§1µ¡’ÓÈó€ÍB“E‘:ƒ÷åÏ•¯Ë:åû ±ŸÁ ó ù -Wß&&Á,ñMñëA¡$•*©P¿WKí × Ÿ(ñ8Á-›JÇDló½.•ãÏ+íû!d¯,»›‰‚å)éÉgý5%áÁÙ*ߥ‘Ï"“ÉÙpÅ+½ñá‰(‹JçBË Û™3éç·áž-»3ÁvÑ Ã§.ùÇÛÝ-‡p¡=›Ÿ6ÏJÿ¿¸ÍZý‘Á>§íÊ鶯´•§º—ï¯ÕËÝ#…ŽËv‡ñ—뵆¹I#—B¡¨ß )¹K ßûÏ>Á‹J¹ËXûA³ «Ôûp©YÓœŸ:×Só3Ÿ‚›|íU³ip«z÷¥«!£™—íZÅqË!³±,çá¡‹÷5ËËa‘.ý!ÇÀ•¡±ó ±¡"ËÊÛç„Û—ƒ«¡ÍµƒpÿÇý×Ç7í'†ÙsÙ…¡^õ¿Ç{¡ù¥CÛ£á>­£‘0í»`Ó#ÕÕ9Ù§ õ:ó¹³B «#Ã>¿!‡°õ© «¦‹CÕY…@Å®¡z•W½ÚóTÉΗ—í—ˆÝÅ·\Ç -óáU£Áßñ¥!Ï›±…Ó‘´”íÁÇ3í€ÓM­%õ ±MÇ(—E…q•’绫¡·‘œÿ1ŸW±›©¨‘9Ë”åJ¹¶ÿ'Å ¹.¥Ã[³åÅfɂۂOÓ2á½"‘5¹1¡ùGµ¥ÉßN³Öç7—¹›*á"ÝS·£ ÓÆ“¯—J‹›Á$ïWÙ‰'ÏÍ×ÇuñŒµ\ç‘KýIËÇ4‹¿U¿3¯ Í•¦Ó ½p“#ÿ(ÕiÃB‘¯Jù™rá®Ë`»?çrÕ›"›³ -‹§ §‘Ä•LËó7§a—l¥û|‡(×qéÇ8œ%±6“|¥Á÷$Å•ý -í@ç¬Ï ¡qç³À¿»ª³ÁË3‰SÏeÛµ»ÖµXÇ…­µ»½/Û2»\¥0¿9™5ãë'›‚‰“œ¹ £ ß#©zï å8Ñj½‘ƒÁÇ:ÏVëoã—K½8‡Å‹“5ÃÛ1‘*ãµ£ÛßPÙ¾{#‰FÛ<±*ó™›ãoù¿F‘Û3Åa§8ñ/ç2Á<å/ñý!ßkÝ÷®ý$åHñ%«qá:¥!4Åù:—Õ©3…×=íw…8•6Ÿ4›!Ÿ™•‚‹+&·†¹†‰¡•À“˜—x§Jà -ÛÂ¹Ï  ×uá3»É™%·¬ÿ„éÍ™ÇÄÇý{É… •'ÿ@Ëí(é„û‡½ïŽóyç׈ÿ Û±‰§¡@Ëzã+Í•É&ƒÅƒ²£³™Ç›GÕÌ×dÿ]¥/©‚ùµ¹«|í^±B¹FÅßۥ˜™Á"Ó:"åé0«iç%å¸ó ûóM¿j½ -·¤õÉ)…yÍ­¯…³=Å…=“a­8Ù>Ÿ‚ÇVÏy·Fé)·YÝ™•)ûd¿#ïá“[Í'±5«{ûƒ‹UÝoõg³ZƒD­o©ÇKË0ù'•&Ë€Áãs¹\¯5™z™d­£‡×·/¥AÁ¥2£‹ûÐÕ‰5Ç•Ët‘ë‹ÑuÿIÑ­kÃSõ›Õ>…xÁQÓ¥u•'ÕÏ« #û[ó§Á˰ƒvõ»Œáµ -Ká%Íɶí*Õ×Ç•?Y£:©"ᕬٸ­•Õ,«oã›Óo•4ñ:Ñ!#åÌ… "ßï"óo»ýù&é Í9íu­Ãㆋ±íµ£7É« Ç&­§)ÏRÑ*‰¡Ý(—“›·Ÿ -‰™:£ -@›“É5³6Ç>Ý‹ÿH¹Ç­ËñëËåÊå± å©)•FÙ!ñ Ã.Ë<µ -ç$Q‰#Í™}Û‡0» ï…x©·§­\“u¿.Ų¯ËéGé§EÁAµ"µ#ñ5‰á!Ý&éÍ×— óy• ¿—ß8Ñ‘Ï*ƒ%¡É³ÍóBÛý+©ÝË9—:«û—Ù »7·’¯PÑÝFÙt… -¹³9ñ -•/ù‰õƒ ÷‡1…>çãïÍŸ@­± ›Ñ‘!ë5ó ¿!™ É@ý»0Í4©R“ ×­¥Ùû¡¥!ËÝ£ÄÕñû‹&7£I¹ ³†™Ù¹Ë"™ µ…í#ßh ‡ -ÑÝ}ý)ÿ2‹J½(ë¡'­¥ÿϵՕ͟ -»•MÓ;…(»Åǧ,Çßûïí8÷Ñ£,ß»'Á+åwÿ Û ­¹-ýcïÏ -ß¹ã›ݶŸÈÅ:ç8§ Ñÿ ™«û‡ÿÔ³ÃGÏ•G½Ù)ƒ‡ß"¥ˆû3…©õVÏ!é» -·•¥1¿8ÝlÉï,õÀõÇë¡Ñ×Hç·wåÙ‰°±_™Óߌéu±ªµ"Ÿ<£8ƒ/Ï##¹kå9ýÅM©«ÛÒ‰ÔÅ2Ç×ç;í>å)Ç}Õ¬ë`ßÖ…Wõ·ŸG؉­«—áEû,åÍÝ8›G¡Á‘·÷û=m]—(‰Hû!…ÁDÕ ÷›£›#‰ß"1‹?¹*×£"Q¯_·‡‹ͯ±Žû -3Ý')ŵ×7ÁÙ ÓuÏ2Á|ÉÙ§"Ïùûŵ|¯KÑFÏ“×2‘#­‹ñ0×ñ¿ù)ý\ý.Bó7ù‘­ ýˆµ ïÃ$Ù/ÿ1ÙHóÇA¿C¯8ñ÷ -Í=£2÷'¹×0Ïo«(‘÷¹ÉdQ­†ÙGlÉ¡!¡¾»;Õ¨…¥"%õ!¥8%ï ËÝ2­ËÓcÑÕ‹u¿"Éw¥×9§‘v½Ké¥ç‘±ŸYû¤©­© -ׄãF׳néy¥?ÕÚ½-Ý7qÝvÛíÚ¯\Fë’óx“ÝÀŸ2åT­«‡uÇ-ÏŽíÏϳ ñfËE?·Š÷•‘hᬅŠÞ£–»¦Á~Lárë¦ÝNç’¯K­’ߩ粱‡É:µKéc<û{»‰³ Ãi¹Ôó–³»Õ-ý8•¡/õOó‡Áµõ -Å*¹Çëá:—•É ³wë ï2ۣ·¼ƒ¿Ëñ&BµFå`Õ›ÃVÇL'N±•¹•…<™&… …™¿-ÛÝ!#ç ç|˳ùGÙŸ0Ë`ß+ëà ű ±jÇ •c±(-£'“aÇû ‹Aý -ó!ï$ %Ý3¡ù½wó*/ñ ß×Õù/Õí!¿ Í}Ë"ß$ï"Où ËP­(?› Ë(…0¹é"Ù³ƒ#·ï)ù-“ Ï× Í-ÝÝ&‘c©A-£*…ý¥ý7'Ã!Ù#KŸ"£$—õ"Ó;Uñ)­!»>ËICÅ—ó3™&/ù™ÍÍ`—õ‡&×…õ»Ï ƒó¹#íI"ï<‰;Ÿµ1«SÕ£ß,£ ûA_ý<ñQç-±…å 1á›Ñµ›`Á0­) ‰¥(9¥Û!¿×­jÕ!Á Añ¿ß5û@UÇÙ0­*ËGË#‹ éDï¥-ç»§Ÿלë‹ õû³·ŸwÕÑ›‹å)‰_ñÙ/ÿ;» í…÷Så'7×(»1ÍÇŸ µ¿+?½!ƒ·$·ï7¿*ߥWí\ÉÏ9¥×:»±(3ƒ‚±óñ ¯"-«(¯e« Ý‘*A¹ù*» ‰…¯÷!K× ­FE“ý ±ÛY‰*Å|ƒ#­ ÑGõÕ£ ¹`Ñ(‰(#½á!ÿ ÇD£ÕVùl§ ;Ç!“ã “5“"Ó‰ • ý¥X»$)½Í@#Ç+õ³ËA‹1ýµ!Í Aƒ*ÇO™Ï;õI‰óÃ'ù‘«I«Ù"9¡¹&‘P ñœ%«Íï~Ÿ9›!£ƒŸ(IëÃ%…Å-Éã!« ‘~ÿw+ç©$çÍï5Áé"“Vѽ ÓŸ¥±'ávù“…‚¡«‘¯ Aë>óqã³å»‚µ¡à U韩 ã·8ç¥ÿ!³í -Ï›•CjË ™Û › ¿"1ñ -ójVÿëãCÿ&«$…ÁQã#ý…ëPç µ·!«E­?£–Í í‘7É“Û -÷f™L?á -­«Ýñ+åÿQ©¤K×Ï!Í»›1¯9¯ý?³$•Xéñí,µ‰$Å «)ÓX¥#ë=™½"9… ›©Eñ!ãŸ‰Û …Á<ï[û&õ/ ­]C‹?9—‰fo57ÿda"#=?Ý%#…½×:ßÏ×M£$Ý)5‡%åŸ#ƒŸ!÷²ñÕ-·…(%i-Ñ¡¿N5;Å'ñ‘5'ËÝ•)׋ß]ý¥™‰1ßó±#§#—Ý ­­5õï#ÓAý©"ÝÃ%3ó³0ÿ7ýÉ1/ñ•祫8 § ×"‘”ó¢+×*;µÍïã_-ùýÂ÷³5×É›¿bÓ£{ãB~ã‹‘ã$‹Yu£­™û°¿_ãá¾µσ鼃±•°ù2ïË·LËOëTíñ€‡4›V­µ±¨åªçƒI‘[Ã5Ï%µ¨é,Ñ‘‘¾íƒ‡7±“˜¯Ó¥ï©W羿|ý£«¼õצ§fï3!õ­W—ÏP£Yƒû›¹û · Ÿ"ù1åLÓ!ûåŸ8¯ -ù¹ÛåJ©‰Å¥J…MãŒù#‘÷¤>ƒÉ%#ÿ8“fß× ó ·+½Tó"¯ƒŸÕû‰·!§<ÃlϳW•1ÇMéFŸÇ­ -å_ÑÉÙ•§¿— £”»­µç\ÿ>óãÍ2‘;ÿù©5ët¹ á‡ë‚ϧ#ß"Ÿ¹[¿¹±Xí$í,É ‘©EïQ‘Å&¿÷Ž»8“/ƒ ±ÿç ›Iÿ ¯ Á µ×±A•!‹ƒÏ®ç{¯Œù'ÅÏ/SùS£õzÍ$ë3¹‹é¬«§ßÉ‹­<Í…é»m—½¹¿Å{å%!óÉ0å€{?«®Ÿ ›M©i“µCý<'‹ÍÍ&¡ç¹- ™[¯Žó•5÷VÁ×bÁÛ‹Ïfý É!»%©¥Y§×,×-«"Uñ;å µ9…!·Ý …Ñ¡7½õZ› ‰ ÏK¯?Ã…{©ÿ—×8Õa‹é"ƒ -ÕùÄ4› -ÕÃG«vï¡2!‹©^Ý ãŸ#… ÙUÙÝJ‹$“·=ÑfÛ€$¿ óùó”—ÍSŸ… bïU›È•¶¯?w¯ó Ù Ù -³*ƒ‹4Éy•"­.¡ãó±ƒÏIÝËC© Å -³µÉéC©ó/‰‡;#¹ÇÓ"ñå•iéÿó>ûÁãï‹ç¿q»$·™ù%™=Ë/ÏŸ#•)«1¡:ñ—õ=ÝVAåtÅDý!§Ó£DÓáÁ…8ïóù]ÉÉ/µ ©¶ÑÁÍ‹#ÍuÏ¥"é(óës÷¡JÅ.«ãÏçv‰çI±#±ËD½µZ‹ç˜Ó!¯¢ç ïß‘‹Í¥.ß·+½†‰¿¤!…ÑÓ°³›!ïtë™KÝDÕ‹û¥SݱŸuï.»1¦·—ÁÝ6ƒtÍ"Å«Õǵ˃<Ç#¥©õ0|™€çÉé -Ÿ#јÝ?‡Ÿ» ™"Í%Ç=™!Ë{á‡C¯DëFã³ÿóéF›!÷)×$£ÅÉ™¹ã££µ"Ã÷*‰¹ Á@÷Í!ÛÃÇï{©Mó ÛÓ–·!¥"ý"ÓÅ>ÛW¹·ß “§ÏÝï"µ(ó -Û“EÉ;™Dï"“É#ÃšÓ á¯¼Õù«3—÷툱$&™…í½!ÙqŸ*É"±8ë—¹ -¹ã ¹{³ÿÃLí…)¯ñ á"«#ï›}‘™§ƒ”ûå ËwÑ£—ù6÷‰~ï ×͋Džz“ëÇqÏÉF¯p—Å׫°¹ñ+9㎻µ5Ï Ë£E³*Õ/ë\‘!‡#³:óé…ƒ>!Ó¤‡[™'уååQ˧,Ã'çŸÉ)»Ïóëá‹Jå07«Ÿƒ)™³ÃåéC£Kß=§ï.·D£Á<ÃL¡Ç ÕÇwÁ©¯¡ý­>·K‡±¥$¿&¥¡&³¥9¿¡8ç_áëí ˵ Ñ¥5ïW‰8ã»<«³™5=áó?ÉÙ Ï>õ™ëJß ŸáŸÏOÍËH‘Ó åƒ(¹.V‡Û1»X¥é(¿ƒËXµ Û/©››;Ë?½ ã£9ßÙßÉ‘1ûXŇã(÷ËVãÕÅÑ׫ß$ãÑ™*½"Ï2ÿ0Á¡1ÇåÿI™<á Ãí;Õ§ -©;ß».ß)Á….±-ßí&å×7Û™7õ‡Ÿá1ñ‡M©Õ”ù1ý‚ÇF•ã‡ÿ;ç?³É ÑÝ/³#™ýƒ<Ç.±×#­»ÕEÓ*‡3û › ݃¥å ³ Õ.¯#·;‘,Ù»é#Ó«;õ1¥%åóëGýé­"Ëí;¡FãË -£@­›2³í ëË §%.‰Y͇³"‹Û?óHᡵñýCÿ0åÿ½é$í1ÃR‡›Yí1™á‘ #¿¹™?ßK—_‘×¥õÅDÛý#™O«›%A•…ó±YëÃá -ïSµŽ¹ É ã*Ó.©!é3ïÏW÷<¥¡¯4å«X›O±{×4í°Íé¦ûƒ§CÅ­'Û"ƒAé#›)ûßÛw³µ/« ˵I͇• ³E‹ Û±«…,·‡EŸ'Ÿ•ë çZ¿é¿˜“ûEõÃ;*³"ç'Éý$¹¥Ÿ=óJÙ÷ Å-· ‡±"»2§#½ÿ!µCÓÑ#Ãñ6“FÑ7‘±Ù -Õ7¡©ß ÝTŸz·ã#(ÓÕ á áÑ,¡M—¥+¯O™w×ó¡.Å… 1¿›a£|«6ûëJ£éÕ#¥éƒà ­« ÛÍ#Ã1Ý_Ù‚Ë…û?ÉM÷³“±+»­/½¡[ƒHé©$çXƒÌ­K—|Õ(÷­­õ¹XÏ0ç›Ék¯‡ß¥ñÉ ÍiÛñé…·Ï2Ù -›µ½0«u³¥§•#­¢†ÓÏ Ù”×$·ÃJ×¶ýš>Ážënµ§µï&Ï/·ÿ|ç ÿ§«‘ýµÁ¡á ¡'Ép_—×%÷™;ƒ9¥¥'ÿ§!—׃,u³“*…§Ÿm•™íïqûça¿±}‰#û'ƒxÁC« £@µ*Ã1¥XÝ7É7é¿Aï*Í ÓMû1§£-éEé ‘ ‰™å;¡AýJ¿kÝé £0 ÅÏK“4G½Qçñ]‡]ùï §ZY—Å"ÝóÇy¹Ó@‡V¯k‹>óhßѯÿ;sƒiýnç`—Ãd¡t‹KÿoÃÇq¿»fãW¿c¥›@ánÿÁóL½ßJÏ:£/ŸŽŸ"•«ç ¥‡‡"ãT©y á ™0½ ñŸó‡ ¹í × éóÝñ̓¥h™û“&› ½ í -™»Ÿ(Á¿@÷¥õ— ñïñv¡#ý¹»‘é#Ñ ±«0¹©9Ñ"Í‘!Ñ ã7¥G¹ûÓ¿‹kÇ;¡ )×/…(·AÙ·‘xïN™³…Ç ç ËLÍGç$û¹"ñ ©…)ß ­oÍ ¥·!»$çOí!÷ -«Û ™éåÏ;…ËÅÍB¹ ã"Ïc÷ ýÓu½¹á¯ Ͻå ùóoéý £‹»'ÓGý/Å"Ãj¿ ¿— AŸÙ"ùÉÙEÿVݱ¿ ¥— ‡ -ù¯#ób­©¹ ù2ÿçŸß… ¹§ —$Ÿj©±»évû ë˯ɕHõ!ËýÕ —B±õÓ“+½V‰!‹2Bí!Ÿ¿Ç!µ6ýH³³$‹ ·é ƒÇõx㿇¹2óÙõ&ýÏýɆÝß Ï)µ×½v™Í߉ ƒÛ¡Çûw­ Ý?³ ‰ƒ × F‘‰Ý!‘“AßÕ$ƒÃÃ.©Åñû³‘F×ßùÕ¡Áɽçï¡!óRç½í¯ÛQó‹RÅá­… Ë × Óé!Ý ñ}¹ñ#Ç¿!í© ÿB©C³·ƒ É ÷…$¿j™"µÃ§µ@¿³#ñó:ç@µï!óà í ÇŸŽÃóŸÛÛ©›©ó#“ç!á‹"Ùï -³ñxÓŸÕ©«©5É7+Áh§Õ)Å›œÓ!ë/A“ï -“CÏ·qõ'GÉ£•FÉ“?é$;É1Ý4ñÁ@ç@ÅZùƒQ‡$éÉ#½"ãn± ûÁ ã7ç2ÃcÉ£ ‹#Û/·Jû -—?ÓóÛB“BÑí ó"ýRSñ†‘ »Å“’ùƒŽ«ŸÏ ãû Ý“›$Ç$±Çw§P©»³ÙKßT÷Ûù%‹\Ž€Ç!ÃQÝ (‡\‘Fß…E¯Å1õ&÷/»ÛCÝ8‹½ ›Ÿõ‹|ó‘ÓÏyу"ËÙÁl‰Z›Å—…›Çÿ£?±‰sÿÏ Áç}ïÇÇCÝ.õ£#sŸÉgå#ÃLÑWƒ&™$ÕùZ³7ù5Ç(» “‰׫­•R…FëljïpËÇ!››·%Ó“Ó o£ýÇ.Å¡‰½‘Ãųå Íà ×#ÁÁÅ…͇û±•‡L½‹§Ç'¡¥$³ ™ ¡+ùŒÅÕ -׿#÷HHû¸É¿ ‘ -Åý5³*ÓTå ïí÷ѕ٫•³ Ïr͉ÛÕ¹…÷ßljµ«h» -—É.½~‡Ë@«í‹Pã…YíÛMω*£€ÇE¯Táÿ¦¹„©D¡ û>«"ÙD¹ß*åáM×E»›!‡BÙd·ˆ›>Ñ—Û›‰¡ó¡™›3ã›ÇS“ ¥#çV…ב õCÇqûqç+ëÿÑ™÷‰Ï -¿ ñ©=·*á•Á"å+év“…5¹‡5ù­"[½!¡Å!õ ‡"»-‰]·0ïÑ;ëWû#ËšµÍۓˉœ ­ ¡¨¯¥S•Ý„‡‰ -Á€Ë!Ë%!£A¹7ÁÑ ñBQ‡ï)‡0¡?ŸËI§CË¡ÑLÝ'ñ!éDË£Û‰•T7×XÓz»(ë çÓ ·‹#ã©J‘V¯¯,« -ÿO•sµ³ûs…Ý÷*Éë4í“%•÷ —!ÃtÃ#ñbuÍÍ ½ϯ3¡(×5ñ ±Û)Ç«Z¿?…ƒÍ/%ËÛù·ÿ0Ç‘O½ï§!¿ƒ‘" Û'i‹"‡Ó&Õy›(Õ •—+Ù~÷Õß =ñµýëG…§>‘$ã×ŸÑ =ã;©(©M{§ó«ñ ¡-•Ë~Ñ6·—½x³¥€ŸN‡2ï)ëH/¥¡µýnµBÛ1ûÓ+|‰E‰2ŧ*¯;Ù§•6·ÁS‹*‘ ÝC•Lû§Ñ ©§Ó$Û,ÉÒŠÇÃ(çÿzi• Í.廽§5Íõ_³Ç£%­éoñ#ß™(¹cõ¿“wϔ΅D¡ó&£ Ý1¯!—ßGûOƒ »*ÏáJË/Õ õI¯#™<ÝSÛñ±@Ý?™Ý#ë>›=·`ý*ùßó“ÇI+ϵBÉ8…5ï4µ1é`å ÷+Ó§éùSË8ɉ%ã/ˈñ,ÃK­'£Ÿ‡×\û.…û$×ãa•+Ý£-ñ ÝÑë Óãyçó,ÝÁ.‰9“‹+íïký-£`û¯"ó³1Ù"ù1‘M›‰×!§$ÑCý1•÷*û»5ãO—£ ÿÿAñ¹5»ý8ÙI㉠Á2Ï ¯?ç!“³·¹ Š£5£ ­í*ÓLùWãå ‡FÏŸ¯3á Û•ßnùõùNó'“ —*ó.ÏB§™µµ%é:¿Õ.Ÿ ó3‰C½ù Ç—µ «\©Ç훡Á ¹$Õ1£2ó(…^å5̓… ›› -™ ójÑ:‘Õ`›9»"—w· çM±vÛ*ûû'©Ù'•Ã,“9™FÿÃ<»5éû ÿfµ7¥Ã!Çù"ó ƒ(ƒ1ó2ùh郓+íó×DÇ%Ñ9ÁaÉó ¡ -“.«ÉË-‰hå!ëëË9Ç.¹IÑ Áºõ·6ÇF©(ÇÓ ¯‘»™ÃEÁ*áLã7¹5÷,‡÷0¥—¿‡$›†ÿ7›ñ3ã·S)Á$ÿ'ç+Ù-÷"«e‡E·;Õ5ë2•4Ï‘%­¯!ƒ‡]ù— Á8õ?ƒ2ÃÇ Á¨¥Ç'é1¹2›'‘÷ñ4é4¹-™"ÿ,Û0‡÷ùýhÓDñRé‘)“4“$ççŠã¿¹ý¿6÷>‰Ÿ+­<ý8³ ÿgñ-Ñ·Ù û÷²¿•E¡ƒé)•*¿;£?³1åá-ßá¿õñ -¥”Ýs¹Áª…_£©dõ¥r—¯³ ¡O­.¯ µ‡› ›=Ë“^ƒ&‰…—ß ÏC“½(Ñ•…&å'“(³+# ÕJïÙ'¹&!á¿Zé*a០D5ÅGùM•%¥(…„·£·ù!í‘Ç)õnÁ(ë7aákï ëD!™•E“O±›y§E³ å!ãV¿A…ŸC§ÉSá*Ç+íT«rÅûQ÷‡·,“ÅýÇû¹•醩 -— Úõ¿V±§8ßÁJ—qÍ á‰ÉÃ#½\™‰«Á -ᕵ‰*ç§"©Fÿ »1ÿÃW¡NÓGÕÇ­å(á—6·÷Céã2ƒVݳÙá¯$ËL»ÓýK§"›"ÁéÝ1›<ÑÁ·Lý ¡!Ù#Á-‰Í-ÿç!Éù}å!Ç!¿·‰WÍÕ¯L‹‰á#ó™¯"™ -÷‰¡÷;ŸL… Cùƒ¿³Ÿ,éõµ•oËŸÙó%ÛqÍWãljB¥É¥Ë™ Ÿ¥åRÍ"IÁá!Ó)céËÝq…$7t±Á(Ÿ™Ù¿9ƒ Ç#Iƒ ŸçEŸý «í“rŸû×$³© 9É áù¥.õG›DŸ -µ ÍC³LÍ -™)å•óB™Ã^í -ËE7ÿ³—=Ï%§ÇUëá¶· ?ÕrÓ+÷1à Ç9Á-©Ëë*Ý —Gå"Å“Ï3Íã"çpÑpÝ9óÿ -Ù ó‰ù@ãñ»§µƒ§.ÃïK½‰%»É©š/‡3­aNAµ˲+ß'áL7Óùx÷'ûÉrƒ(ãtßBMåý—(Áb›“$ï˜-¯ ý>7Û+ñ]9ãÙ7!ÁEÝ¥§(é#Í"§:/¯&Û]Ç!9Û·7ç Ù&7Ù)Á‚™#¯É -ËÙÙ áCýF…QáÍù•ÿ§1µ• %©ÙÁÕ;ó ¹™ó8÷Gµ …Aû¿Ç -5«˜¥<§5•õ.÷F‰EÁ 7“·z±#ƒ&¯½£¹Í ‹DÏK£ -…Ç-á©õÃ¥'Õ…Ÿñ…°Ñ³ É !•u¯ûõ9ùE›C‡ƒÕù§7ßÉo•—"‡ 7‰‹™× ;›ó‰Á­ ™Õí Ù “E¯¥CãB‡ Ÿ…Ÿ%ňíû áÿ1¡4¡#óóõ©”'=‹8ÉEñ¿˜=‡…B5û.E·—ù>•£_Ë=›E%»‘í-=¿x—/•µ§GµÇÃÇ”£O‘“·çí•çÓÑ!=©Ó Í£ ¥©“éiË »õ÷… Õ#·CÙ˜¡&Ó|¯+§DµLƒ‰"ó‡~™Ž¡§“ÿ ñˆ¯³,ç-ÿű#wÃ)§«Á·Ë‹"¥F£¥¸©r™2å½K“kñ · #ñŸýÅ‹‰f³i¿ -Ãsí:Å1)ã-µ·ÏµÙ ý"ç±¹y#.‹‹Ù!£qï0‡Ï -_•±%Q•|ßÓá—)­gÅ -™*ë¯ý Û"¿ ñ¹<“Z¯ùï+¹¡¯M™rÓ!©8™›F÷"ÁˆÓ‡Ì—…;¹"· £­ñWñoÑ-ù$ÅfýÁeÏGç„©BýŸ<évãgë õRåU£]Ó(»¥ñ§Àñ¶¡fù`%­ý'Ï—ŽŸ¤ÙÁÛ¬¡S³õù.£• ‰˜ë2㔟+8ͽ„½dýsßAïLÙW…Q¹—÷'—,ûX±&‰ZŸ ·6³-㋉&ó±Å ùDåɲÑ ¥±Ñ ‹Ýš‰#±k­#÷@í%ý&©Ié Ù%³7é+ù+ëjƒÍ |×+‡ŸQƒ±E‹±(ã2zã+¡sÓ*×)ð‰.÷>Ã*›¯Ó'ë•Y—,áAé‹W…D½©½6•(ƒJ¡÷(åB›¿^ó'ÉŸ‰U•»= §8í ƒ é óHñ‡²‰x‰Ë£ÙG£/»÷X—‡»p¹?¯8§RÉ7‘Ч59û€§Ò··çYÛ½Wõ›ßF‡Õ"ÿn§½ÑËÑ-±"¥WÍ{ƒ±¾û«ñ‹ÿ·m»‡Ã…ÅÕ…Ò±™…Nï¸Ù.ñ2‘”ÿ´¯¾‘1ù.ÃPF •§ñ%×z·rƒ½ Ù"Û›Å;‡}“Å ïO© -Á6©íKÿFã%Ï‘‹»0•íníï:Á½\Ÿ“UáÝÁ “ž£—Ù1“Íý -õM÷}¯ÿ.‹Û>Ǿ‰Ã¯FÇÃÃÛÇ”Á;Áù1ßå1õ0›§­:¡—*Å©‘‚…ý'Ñ„‹KÍ¥ó˜ËdûjÏ™÷uÁ^·ß!ñóoýé%ÃíÁ"½(éRtù'¥ ‡ ×ãpï;¯ý!çJÛ)¯%× í³‡»²ÉzÝ•™¡%‘݃µ£“óLçý¡*•Íïç!!×”¥W½2Á™B­»Ó7ëSýËó;÷é™Á…‘áÇB‘›¹Û³ ‡ ÿ&³Z(ÍŸ¯0á‹,¯o­ç¡5… -ÙÑY…-“4…Ú±+¹ÏÇÅïJ½ ÃÅ*ÅÉ Ó‡Í ½“ù§£'û0óù,Á … átÏ‘#§ÿf« ÙíÓ ùÕ£ƒ«( ·ƒ"Ÿ‘ï"· -éÑ‘ÑÓÍ6­‰y!¿D"ïz™ÿÇ5Û£µx¯—£4—×Ç—‘*ûCí·‰‘ƒGÁ!‡Ûí¨ÑtMÏçÁ>¥ŸñhGN­·¥9Ëé&™"§ ±=ùßqז鹇ÅI§?ƒ?͇vÓ%³?Ãq·‘™Ç '×"«jÝ4ó¾»~…’ûå–·&•ß,³ •ÿ1õߌ£0ŸÙÍ.‰ …‰å Ñ-ßh«%› Rñ.ÁÏ ‹›‰±¿}å¬ÿµn§ ± ‡×)ûß…Žï%û × ­Œ“<͉=í2ù —;ñ5©ûrë¡$ ­9ů…§2½q§8…Ó»³““ ý˧±7“ ÑO¥$«ï-ñ-«‡w¹"¡ét‡;Í Í2›&Ã[“Aá&õšÿÑd».ÉÝ·sóAÇñ+Õ Á$Ã/ç­¡÷÷R¹D奷‰‹rÙ‘ÇBÕ)™]™…i¹÷~û($›ß”‡aÑW£Éå Áµûí3ýcç\Ù2é³Ñ9ÍÕÍ­n›£Ù•$ëç!‹R±†ÅMå׫›•VÕ$¥8¥’ÕRËNà ËbÃ[Õ—,“׿ډEÕ8㊥Hë†Ùý†ƒÖͦ‰KÇ*‰Â‰P銧ýLÝÏÿW³rÓÒ#¨™—ý¹Ë‰Ïá•!Ó†…· ‘lÑ’ófë¯óAŸ}}—G£…­Gïë1‘kŸAÁ Ï2‡¯n×1Wç@õ…³Ñ¹Tß½½µµ`©<ûÓ›¹'ûå.«‡Ÿ ù9¿VËIËJŸ]Ù(ýÑ¡Å}Ϲ¯/í0¹(‰qñ@ïµñ㦑!‰!›qË©óDÇ.ËÇ~ÃFç ÷1©¥›í)Á+¿HÍ¡ÛÓ.Õ5£ Ë2…#ï«Ç¢«#åó•÷HË"Ë!û ó;‹€›;í8ó>ƒ[‡ ­cK¹[Õ&¥³›6Ù\Ï -­ÖåÙR±3'ņÿt•Yà õŸ‹(ûNÍNÙÓ‹× -û¯D?çL÷5¿• ¯à ÓÛd×Ríÿ=‰ù½9ï©-“Ë ŸÃ»ë?‘)ÃK ±;é!¹ÛKË'ÉsÏ—½9«Ë…«ECõHé8‘!ͧÇ9±#ƒX»‘(I±Õ;ãÉ7· 3ó!ŸRÓ]ÓÁ‰2çG³I¹*»žûÑ=Ç'ã—[ÝK¹ 7Ý•¥å0í=Ù5Ý'ý×'Ý Õ­«— ÅD÷L¥ù#‡,åéÝF?‹J£QÁ;¯!Õ4Ñٓ&©ÃñGƒ ·¡& à ÿé AŸÙµ(3ññù!ýrå5­¿:Kõ'»4¡)¥_¥"ÑÇ -ã µ%·W—¥§<ÇÓ`¥,+Ý ÅU¡ñH‰OÇ»Ÿã -Õ\£­@…  Á'G³YÓ• )÷µId±‹ïÏ(éÉ[…‰ —ç'µ‘•x·C‹'· £9Lß ­)+ÃpíB½¹" Ë»©š7Óç…ý‹…%Ó€¯¡ý ¡õgßQEïÙñ’ó-ƒ³"Û”?ÛÙµáé1£ -™›ïëÙ -9é"ÝëM9ËÕ·"¯)«ÙµG­<›Yÿ/A™Só-‹ ÝÝ~ÇÉ ã‘!ë#— -µPå»!í¥Pû+X™ÃgÕ#©Á•Ù;£ -Ù(é|©&›qÙA….Ÿ³Vу¹ýõ÷û¡•¡kíõNñ»aŸ2»é¾Ñ¹4Å©ùÍŠ°·ÏZ«?õç<£u“@ÏÒ‘³Ã&—ÕNÑK×PÏÑ{Ý5ÓsÿŠ…-ïVÃ÷C—áu™Y:‘%»'•5ù„Ý(õ(Ç“XÍx픇˜£5 ½‡Ä›.ýN—1½Nï;ãF©!ÉÑ?!!³Cßÿ£ƒ:óÛa¡ ƒ±7ßÙ¢­‚“±—j±Õ§¥›:·”…JÇMÑÔí½F¡`Ý £ÏÓ¸¿‡¿£6ÁÏû é¹MÁ¹ëPÝ@í£{ñ -­˜ÉÆ•ù •ÿŸ—Ç AÓÏFË«µÇ£÷qÛ<—\ÙçMýÕµ§…˜áÅ&½'•]—[×I¹…ï «×Ó -/ÏWçzÑNݳ­ ¯—ɽžý%ñtÛ“­*ë•ç -…ë½Mý-¡—?¹5‡• Õ­J¿ƒ ‘Gã8ó 5£'ÛŒ!§Å?ÛHÅá:ÝW3‹BÿµÑ==Ã-Ó9׃o÷K‡Œ­Ó¸¡ ãdÇ7í'ÉU -Ý-ƒû‚‘m©´c§!I½ 'Û%ù-³ Óåñ\Áoϵ5ƒ ·×S÷“ Õƒ'¿ ‹Ÿ§ BÏX¹ ÿùO…Iûz±Mù\™kµ=µMåù‚Ók»U£F…»Á³ -í%ݧ -5í5­¹í‹Ç¥¥ÕÉÑ0›Å0ÃDÁ 7«(ÕÿÐiç…ÏË)ƒ]-·û"½J›åñ•÷3™‘¥Í<DžуVçßÙ%Çw‹ Aû:¡í&ͳß'í£a§-5ÑÃ6C«0‘1Á;ù˜ÕG› k ·FóFá -åÅ©ÁJQ·‡M»½A‰+©¢‹‡³Í$—(“F3ÛËÁÑÍ]ù «¹K‰ùÏ$½ ‡)Kû¹/—ÁŸíD¹ËX»ƒ'ûA³ w>߃:±Ã§ ë|Ÿ:ß&J±Uù³3¹>ý;ë—P½…ÃÓÉ^¹Qµ³ií=¥)ÿ‡_¥ý…ûý¯—Ó?›Ñ%£™·ï+‡¡ ŸSË!ßná<‰)‹³±,ùQçáŸ>í,— ÷5ËûÇ&‹#™$ù áͽZ¯ ·£X÷ ëƒ=Ï¿U¿3Év‘¡^û=õ¿ãÇ{ï ³‡p“)å·Ÿ6ÛÏJÿ‹ ‘k‰¯M•Ý]³Bƒ›ÏÝ%ÕÝ!É!Ÿ˜ÇtÑ«ã“Kfó ±é¹ ñÛ«ÛísûÛÙÓ·­£Û£Á:£‘0ß r·2m»`ÛùË»‰•µ¡!Ù:ó§ õó‡Ïe© ï­ ‘’ÍTó!ãVµßÅ(¡¿!ƒ«/Ûyõ…u­&ù5åJ£ó(Á× “€‘9ÍÇ%¹Vý«+“‚ÿ'Å ¹.¥Ù—*Õ³åû+½+£K¥ •.OÑEù<· ™‰ ÕÓ2á§·)¯ ÍÙd½A¹Ý«Ó ½p“#‰÷ ‘£JýS¹1¹é™!á&½"Í+óÅ(Í û¢µ¯2Õ£‚Ï›ßNíX½)¥ªˉ•d¯ñ\ç7éFí—¹ÙÃÕ±,¯ŸÝS·£ «?•!»Pb§‹¥‡Ž×"µ ÕY£—Uãoóõ“¿F…­“µ»ïÃ_±·¥-»\‡"Ÿ¿9ÃZ!÷0ÿS¿\ñéWËÃçQý>Á å -­£ …ë £L©?­Q¿ ¹ £ ß#ë'ÑÁ ‹a‰É^ññ ï å8Ñj×ç • ‘ƒ£ Ÿ ç!Ç:ýCÓÝëoã“Í£>õ ËåÙ»t ±˯‹y“±ã.“pï -ÃÛ1ï£ ãµñƒ‡~£Ï!¯AÙÕ*ÝHƒ‹b­õ'¹‚{#»Ë³ôC‰Fƒ Õ…ëÇó<]›É)Ù&“ƒ}O›-í¹ÏEùC­¿³£.å+ÛõV‰y¡6­ ¯±aÇÉ'û-©à ¡ImÁãcçR…óÝ-ÕAÓMÍUûi³`R«Û«Z÷×ßoå±™ó¥ -Ñ–ËV©6ó—!÷3ÁÍ¥ ±@§/¥Ç$·ËÏ"ÕO9©2ÕŠ5+¡RϳùDÙ­]ßÍ%Ó1µ8‡—…Ÿ*©¥)ÇR… Ë £C6}×,ÏA» ãÓ.Ç@å§åS›:£>›Ç:³N›Ë/Ñ@¯/¹ -ƒ¹©%ï1¯:ñéÏç1:÷'÷9£\ƒÿ)Ÿ×åï^™á -™/Û`Ë.%óñ0¯&—\µå0¡0íL™\Ç&…Zí ££7‡Fû¡G»ÅåËÑH!Ƀ«¹Ëií?·A‡Aß -ÉQ÷™AÇ ŸU¯D9Û!wÑë[Ù6Ñ2ÇÍ"ýF·É&‹$›*³IÿW«á,¿aÓ™ë:á·4‹D×-ácóÓÉ/çQíµƒ]£[µ‡çOå+-ãÈç'ûGŸ$Õ>÷?“Mí ãµX¡@³‘3ñx¹2•mÁ,Ã7«mÛ+ ËEýhƒ+㈕8Ý®—$ýG©;å¡•[±`ûTã(û%Ƀ™-—†± >çLû.ç]‡'¥&ƒ EÕ‡Ñ'µ·)¹$»$ëŽË ã'¿‰“_áB‹ Ÿ•CÛT‰;ÛCÛB³hƒ “ýdÏ ÅHÅ%•PÍ`Ëç §½ï‰*ÙóeÇK«,õ ½¯¯¡ÿMÙ$½a•!‹*Ý„½ÍI‘ 0Ý{Ç/ù¥ÑVó/Ë «8¯”Å€‹Rù®Õ«¹›xÕ¹ÿ5ù¢û-ÁcÍŠѤÛÚ¥vùNE§)ýÕ?½ŸÌ©vሓ©‘;›™2£Z“±h±]ÝÝÁë°çéÇ#ïÏMý‰K›¶­ ¿3ß¡ªÏ%ç"•_Õû"Ÿ‰ÁH£ËÇ™›ÿ!ý ¿¿*‘k³C¯Y;™Ž‡!÷Û'“‡ýDÓÝU—náù ¡§¯÷M‰í:ßÇp¹"“¡«MŸqá£^!¿O§ñ?¿¯¥'½ïlÉGÇ Ç9FmÛ÷Æ…)û|×»åa#»'«¶©¡u¹BÝ|ÁiÇ_‘ -«ÿ§í#§¹Ÿ"óý]‘S«‹bå½ÿ©å{ÉÕ•‹Ç±y¡=‘!¯&‡ ÓDµý¹­©£&Ùÿ)ÍZÃõ:³4Û÷õ>‹4¹1µ,ç%©J¯Ïjãßç’‰ —Ç‘¹Jõ­ëáª+×s“6Ÿ¯jÕÝH·ƒ;Õ Åç±ËnMÉ}»2ÓI—vóƒ©Ô¥–ƒL±Ûeå:ábí;Õ'Á é:¿+õ‡1›ùKùp ½óÁ'ÁyÇ©íHý)¯˜¥×!·«!¡tåE»‘ç"ë -ç|¿E­`å>ÃÏʼnÌï†õÙß,—#ÅÐý“ÿ…“³™£—o«*·á½…2Û ƒÑ$ç -@éѷ(µ1ÃcÍÏ!ûiÛ1•õáÅ)ÇáÕ ·¯$!‡<™÷ï'‘“‡E³µ# ËááÏi!Ó‘‘"/÷!ÁÅ!ýiƒ©!“(ƒMÓ#'A­\Ã$µ¿ éÉ ñÓ#ÿ!‡C»xé+Ýó Ùõ½ -Å'pï -çõ“ý˜• Á ×@±2á.'Õ)ýÕO¥+/Ÿ•½Ó™.õ"©ù©‹¡í±ñ{ÅD¹O¡ ³ɰٱÛ­Í›×E›ý­u…%ÿ -åÇ ×lé(»!…©J—F¯ ñ ÷rá.¿ÿ •Ÿ^›/¡ñ›—ãˆÕ± ‘Gǃ/óµŸ÷?¥ÕB÷Ÿr™—›µá$¥Qÿ©)ýçÏcÓÿ Çëµå.ë­ƒÁÝÿŽé.³ÇJÙuoÛ1Ëýr­Ï—‡›>¯l÷S¿i×ß±—¡"ÓýÓi·B¥?ç5õ#Ëß!A›^í©£¡±'åÃB§íD-³ ­µÅ¹1Û5å•";­ýr…/ë¿"›÷#¹Óí á1›É»Åû|ÓAý:·Í'Û¡Ã=ñÏ ý†£&ÉÝ7½&å8ç÷=ñ!û!=¿ Ë‹\ïë“'•©ýËDMé‡(‡Ï ÛD§"¹û&5¡ŸD—Ï Ý?¿>á9½ ­&Ýç!‰ç3‘)—*­™W“ »"ň=Ý› G©ó:»=ãIÇ"›*Eß§>õ*ó7÷I­A)Ÿ=ý"‹ 7µ(µLéõ¿)ÕMß¡Í*£,‰åQ«(õ0;ÿ“©!¥—Ù¥»Ç…§.ûË{9Å!Ë‘Lã"ÅAÑóç©£ÇÓ ¹1©rÓÍã¥å"ÝKó‰>;ÿÛh™*£¯‘(Ÿé'ÇEɧ·&ý<)ã Í•ÇÁ.™#I‡!û‹Oç§(ûÍNŸ('ÓÀ‡> ‹+‹Û•)ù±_Õ$™‡E™û1…ÿ.1ïO$…'½‹ë×-"¥á&ë Õ<½ “<]å"Õé¿2«E‘]±­Bý'¥³(é$Û$Á&ï©-™/ï\¹¯Ï§;c¿Õõ éã*›J¡ -ËAÃ$ÑÝ)ù$ý áÝ!ñVåµ -ç ÿ×-Ë õ2‡CÇã -Ó;õ"ÝѨÍŠù“(ßç'Ù -ßDã­*™"¿$ßýBË"“@­&© µÕ·(ëÙ"ý&Ë×2›(í+ÉÛ!ÕÁõEó$Ýóõ§Ñ#»&•)Ã*ï.ý+™$¿+ù"Ý ÉÕ÷&…Õ7ã±Áé~ßßDÇ™£ ­ß?Áõ#Ï“-·ÅÙ!ß9‹¤×ùñ>ç)¡ Í\—É—…P‘¥pƒH‹vƒCß ‹Í‹Eõ&ßx…Cç½–o•—*ÿ«åjï&çÍ£TÇEÑ"±¯–¿=·EÉ› õ*›•*Ó"³DF¥ -ñO» —S» ñ©ûC«ã “ƒ4µ%¿UåãáÍë>‹³‡&±‘ÿJ)ÃÏ"…)ç&ó'ŸŸ­Û£Õ«5¹(­ ›Aåí§7ýéo™³ ÑGÍñé-‘$ß#Íѱ*¡U·¯ ›HÅ ±.û§&ß«)ù‡+±ÓDõd;Ù°AY/—ÈM÷ÏÀ¹ó/7Û ñ·q‘ƒË! ÛP»+Í*³ñŽù¿Åiý1ï7Ó‹ ¿/£ —›?‰ƒ'×­Í Ñr£ ¿$Á ‹ç2‡^ë -Çï'ñaß…§…Uñ}å¶¡Óå™+Í7—"‘õ•/á ãýA™í™Fµ!¿$Ãï‘DùÛ 0Á¿‡(Ç]˳©ŒŸ·1­¥)— ó#•¹E½ ¡#(¿‹F£4ïß*· ™™-'b›$»çÑ—EÑ+)‡tá“ ×Mñ#—Ÿ ·ï­,C¯Ï ¯'—#ç;» -·)“T‡¢í_½sñÁ<…8Ÿ*›ñ"¹-ç'¹Û:Mç™åŸÑ ã%ùdÏ&4÷ƒ(÷]»tÿé©A¿EǨ‡“ÛHñ?ÅÔÁ6Ÿ‰¹Ã-0¤‰1Ó*ƒ‡›õ« Ÿ,¹—ÏXÓOÏ-»­+½¡@ÙÛƒÑ^í*á5ËŠ»6«\¿§û«<÷ÏÉN…×#Á³Û©4ÁÏÝ8¯C¡½#ó“•Élç;™—Íó÷iùQ͉#Í"ßÃs«“—•ýñD©$ï¯ÃÅ1»ï(Ã3­™ Ë,å ÷^ŸÑ± ‘B‡Áù$ÁkÁÇݓ÷Ÿ‰ñíx•ÃÛ#Íy“3û*™Ë»«;± -ã#ãÍ1募$§yñKËÛ !×Ùµyý‡•» -¯!• -Ã5Ã~ã*牅­LÁJÿ±vƒ¡#›Ñ2•WÃ-뉣2‰ \×+ïO2‰D™—€å(¥‰BËJóû£Í)ëR… ‘«Ï…'§Tû0­©[™‡™DEÓÉ«•O“Ý-¡'¹‰™LÓ*Aãÿ …Å6à ÃÍ+³8Õ@ÅÓÁ*ƒB'¿Ñ­ÝžÁsû'§ -™ÃoÁ0á×˳£i³Ë/•] Í.Õ3ñ—>™/¹›Šó7ûý³(Á ¥~·õ_¥.Å/ûb›*ïõ,çs+˧0 ‰[ER› O¯‰Õ/û2·»E¥G݇Ávß.‰±!ÏÇ&¿³—(Ë@Ï?ÃíÇ74‡r¯`ϼ©·G³ó~Ï!×nµ •.Ó™ñë™C¡X9ÿ©5Í:‰@K· £Õ>¥5¥(W“×JÝ(¥ë©·ÿ6Á‹‰Åï™Kµ ç"¥PÉ ©Z%™á ŸÏ*»¿Ý'“‡y¿¡!›É.“åp÷'Í>lÛ¡#íñ¬£Ñëï1ŸœµË%Ûƒë(éUñÑ2‡‘ ý¤É{ïÅ;õ£Íñ"ï á­xÝ -‰MÙw›O“ ×l™9Ó"Ñm÷NçݱÁ• Û<ÑpáýjƒYëfÙ£T¹@ß}©ÃOÕãu…dùUŸß« õ¿†Ç©Ñ¥cíÉÄËÓÓP¿w‘ å÷½@‡¡‹ÿÅ]ÙBƒïN©«/ë#ÉbÕ¥^£ù&¹¥NIñO•!¿ñx8Ý6çN³ ‡ûO×Nã©N“Q»¿%‡U¹ÑJû"ÏN«žû ÷ á8¥1ñbû•—‹›P³/«Õ\Å/¡Qƒ=ßÑDÁ!™VÝeÝÉíùQ±w÷…ÝÇ Ñ#¡]ÝFÉSã ›[½0Ï»åU™dÛ"‰P‘(Å3ãO‡Ñ -)ÙO‘BÇJç“ Ó•PÙB—§ãVÁ#¹Tý\©íZ»já-å"­N‘"™PÉ2Aõ‘ç&Ÿd뵎ÿ§FÍY£ÕS±ï@ûJ¯#ñbßCý‡» “yë‘T¿¹ù -­ŸÉÑ“E‰z³PÅ·bË Á°³B¹…·#×6Ã8Õ0÷±'å©›ˆÁ'™n±8¡!Ã/W—(D7ÿh¿$«¡o-½0—'᫇1Ï;‡3µDû•¿‡ó§Á ¥+ßó·O+Û@/‹ó"b+ÉíŸÅŸ@©«&-£»k½©‡;¿ -; «—ÓÇÿ#±YÏ"Û·‹Å‚É•"¡©@—+·Ý9³E‰?“£!¯"§P5¿?Å2»L‡ ;‰?÷oC½Ï§”¹Ëã!ù-?Í•½·#½ ¯#¿í -û"ñ1¥.Û|Ñ;ݧ£#KÙ…ÃbÕ'“=—–é'›­-›—/—s9Í"‘í£¥ãë µõ Í!¡•(‘xÙ=ÏCí Eã -E© Ó“ŒÅxÛÍ7寗8©› M‹·ï#Ño‹(É¥± Á )ÃñÑ>KåD—˜£·¥ÕDµG¯ Á,é4㞉jùŸ£áJûH£‡™<ý -‹¹AÛ-ýõ7 ‘J“ó ­1Ý#ë(ç$§c£¥±'÷C§"« “E³;á § “W#ù)Í!¥%@ë5ƒ7¡/ÓË6»ùÓV7³&½›4‘E…»-±í&š­Gÿa™~ÝŒ¡‡ÙçÓ FÕå!ʼnÕõãQ¯9ÙFí5á%ﯛ«Šã°õjݪó+÷S. -Ù"·qñ-×ÏIë%ó>çç-Ñ‘ÿ­1¹z/±=±ÿT¡K™"-± 7…g‰ˆ‘‡½:“‹8¥¹›–¯WÑ!÷ƒ©ù á±åÓ=·ë—Û ‹ ýQõ‘ ³$ó&?Ó;ûFùMÁŸBó±DñgÙA• G£ ë»r÷eç‡ÇS¹ã‘;¯ ÝmÇ ŸáûDÉ¡éËIñ‡;áB©-ïb•:ùÅ—ëû,›>•m¡'¹çS¥¯Ó-»åžÇ Oƒ6-ë›Ç Ûµß-› Ÿ§E?Ÿñ“ -ñ&û…ŸíŸ#5Íeõ,ÛÔ‹Ùí-í#Á§MA“5û9©où‰®Ë)Ée¡®­ADû/¹IÏ‹#/Ý$ÿ;ñõ7Ë&×¼Á‘¥ƒ·É4óÝA± ·‹#ëÏJ×#‡¯=—‡­Ù›Û¿#3‡=ÕUAûßÑ,ÕIãIÍ:³>å)÷,7 ¹Dƒ7·l¯"ŸDûRP‹ ¥A9»"¯“#ÉS£7ÇÅ1µ9EÛëZÿwƒ†Ÿ83Ÿ'éÝ!çöÝhµX¥¡ƒë‰ÙJý¥ý Á‡1‰Aç¿¡dëX¥t— íÓGÿLõÿ£ ¯j=å4÷›éŸ7Ó^5«Ã"‹6«£—%ó'ß·ŸÕ)¡‘?Éï‡ÉAé1§ ‘-ÉÇ#‡ñ+;³§^û 7Ý4Éß…%¹½é ·­Gy…*©H“WïÓë^Ã"£eñÿûy9‰í"G‰¿_£Ý#Ç4Ý;É0ó5›±Ùõ;¯Û"¡å8ý‡Ï·u›Rv©3ýϯ+ßaÝý#…$'¹ý(¹}ï…“ÁuçO¿»…ùû˜Ãjý3‡ƒÑ » ý ‰‘$¿E™ÿ ‹ÑÏ ‹ ¡+ÓCï+³7›¿!ËÏŸ·Ç 7ý‡z½÷‰Yßvûá&«ûÿ­"Ÿ!-™-½)Ý>›C‡ËýÝ uCÓ -¥ëXùkZ›·­së?—‘X•Ùã‘Kßµ÷éO—ýY“-W§€‹™;{hÕk5¥‰hű3É—5Õ!Å—ÍAñ?ádÓTI9›·ç ­kSýÝ9¥Ñ±í±-ÃíË!ñXÅÕ"›O§Ÿ ¯·u™õ¦«"é9Óï^ÿ -Ÿ™4å4Û¯·D9ŸÒ‹Bã7͇"…É(Ïaû 1éÑÏY‹Ï‡6™½@ ÃS­†«I›;•«µ -™B7“ ù@ý#­%ƒ;÷?£ ©0›D·(Mã"ÍÇ#ûË!á÷Dÿé"í7×rCç"Û#×?‹#µ« @‹AµFý!"™ó9½-±0Õéƒ £¢á)…/¡WÏÉ,éA÷h‹ã åó2ÏaÝDß!… •›)ßJí¿ù"å¯ÛJ•Ó/õ3™ GÏÙJç›;¿í™¹ù%ÿQ¡"¹›ÅûAÅñ ÷‰DçK³‹é ë-í$ÉE7áP³×I‘%Íõu©·µ"‘ÿïCé°û6?á~Û)ãÇÅËÁ!“³-Ó4“=ÁP‘¡ÓLËKË81ÝHë…E©ËãŸÉñFE‘.χ ‹ÍÕÇÿs×Jñk÷±(=É#µ$¡&ë\õ5Á8ó¥•+—)™’»ý)—Ñ&¡!¹¥×1åKÛÃ'éHA݇• ¹7¥kÿ(•7Ñ:¯2Ó½¥1›#¯¯¥ëaÙT×!§"Õ§i©½Õ·¥ña2£ ã ë5ÓWãUÏ&ᑯ1¿>áká§Ø•ÍŒC›ýÁ5±+/µM±£ÿ{Õ>É•K³…/£3ŸF·ãÉÍ]ßÝ+© E¡ ™S›&ÛMÙƒñ A‡¥"½€‹M½—ù?© )å Ýá Íáùǣ?ËÍ!ù¤Ó±«[ãÍ"«ó «e÷)“­Ù!¯EËh‹4Ë^Ó -ÕãíL‹Ç ó¿«2íN=¹é Ë­õ30ß AßÕÁ·4ç_C·ÇdAç)­± ë`ŸA¿'›© ¿í%± m?›³'«ó&ßDűõ"…lIëS›…HÑá ›å³‚›…ËNÝ-£¯ç½JÁ%‡Ñ#%ál­0“é#'›vÑ ÙóÇMÛÁÿç+õdßÏ$õhé×µ õ:ËÕ!›S1©£‘½çq=Ÿh)•ŸŸ4³pÕ©oÏ•j¡»Ñ&© Ë(é8¡·£Vï‹i3ßH™¥-××AÕ;É!×`ŸsËÕÁ3ç±££ ñAÛ•D7çÃã'Ï» «•>5›C×L¡=Wù³¯™Õý -SãÝ9ÕÍeŸé;Û½"+( 5©s™_ç)µ7A©6ƒ`µ ‰nïÿ£^Oµ(“!§ -¿¿‡˜›(¹ûV•DÁ£'×$‡ ­³¡8õ(‡ƒý0ï‹*Û0­YŸ§ÝÙA™$7ëÛ.û -®§§Ý³½ˆŸ½3“qÕ¯­ˬ¿µÎß ûI³¡ ¥ù ™ù#륋ý ¡¯“&Ù³…ŸÎÅ !Ûů…bç=»ãÍ ±Å2å«¡%»#Õ<—?Åÿ ³˜½Ð›$¹²… [ëBåMWå)õ¹“{)ÃB‘?ÏÖÓeµK›Xå\¡1Å€ý»Û Çn…ó“ºÑÍ%·]ßZÕH»“(‘Pã&‰6÷?Õ‹¶ÏnÑ:‹ÍbõÁ“Ãc±'«G±+É<ïH›2‘4÷Ë}—ͧŸ‰ ãÓ‹‘ÕL÷Å7é“ë³ëÅ­Õ-ÅÝDÉ'ÝÍÓ$‰(©ù0Sÿ2µË(ÃN­ß4Í#ç+·"±(Ÿa…奓Tç¡3¹]ý=ï¾Í>— ‹Ï¯ «Ç!‹å•2íå=û%¯•©·• Çs³*ï@ç ©™†µÏdà ÿÛ?‡œß«1³›¯®ÿ÷Öé‰û`«Eñ4õÛ”ß8õ•‹ž›™Ž»ÙÏ£ïÝ ÁC׳TÉ<·¿c…G‘—åµÇ­V½—Ÿõ-N—³°ßS¹`á@ïé¯D¡Æƒž«Ìõ#×.×¾‘ã#©{¡Ð•,Õhïg×Ò±CÝ«k«FåGÏU—²µ”£vÛNË­Ž‰D¥AïMË‘‡“Y¿Õ‡ù)ÿËÝE‘_±.ÙãÏýÕóO¢³§ñõ,û)­.R±ùªÿ£‡-lí»´û éEÁ}¿1ïDÉHÁñ ÕjQ‹´Å´í×í¾­›óCÿ$Éõ“ó{±Bë­µz‹¡šÕ¦Ý!áz¶±TÝdÙ»“"ÇlÉKÿU÷dñ­å&ﮥ[ó\á'»=É‘ÍwŸÖ…ǧוÓ"¥½ É‹'±®³ï“;«/¯+¥çù$ Û&«Ý#Å"ûÅO£(Û½é ×µ1ÃÓyýVņýù ‡Ã¿ó1©ÅQç!©sã!³z£å£¥ƒçÑÏÍÁ˜Í ¥£Ó é"õ8Ý&ÿ!§#›‹)ŽÙŽ…&©#¡“ ½ÿs« éËûWç.ñýƒ … -é<É×<¹™55ÍM•×ÿžƒ^‹0Å—£«'ã)Ù®£Ù(É ƒ 1ÕCÿ4ç©?·&‰2É‹oÇ+×-¡Šë-õ -ILJ×Ër¡Ûû‰ó1© åç—Ž5Õ`›zÛ1Ý'ÏóJ«,‹ Ç‘$•qå+ -ŸÍ³eI¿1ï—ñ(¿Ù¥ý9çgÇ÷á5õí“1‰šãMñ -1 -ÑõEŸ -¯á%Ó&û2¹yå¹ -§¥Uµ ¯ -¡éÙ«Ë2¥Ý·Å Ñs÷õ «vÉ|› Ÿ¬ÁÛ—sç6ÿ‘Ï6ã;/ûƒ8Óá5‡«PÁ*÷Ë>×/™&õ^Ïû ¥{£#‹!¥w©áá‹"¥ë‘‰ŸÝ ½¯"ûÇ*ù{¯ñ`ÿ çѯ¡§±íÅp×!ÑBCí © «—"Ñzñ!Ë)…0ÿÓ!í óã<é>—›± õùEŸ)­|¹¿u­FÕÑxë» ÏxÁJá¿¥‘ó•å”Ã#ówéDÿÏ„›H•­ ÷íÃ×­ …‘ ǹ•:÷Y·¥zÝÉ#½L£K³éŒÉ0ÿÛzÅÍD÷ ç˜í Q™0«£š¯ëûy‰LÁ³(ñ}Ï¡³ç -Á/áÁ©!Åž›Õxñõ"™ç!à -õw÷"‘­ -Í'óµù -Óƒ·Ý ‰¯ÓÏÑ©ß ·Ç?ÑBÍ!ãwÝ>×"« -½#Å•Mÿlj¥õû'õ#Á -ÙX·+™‹PÏ(Ç!›¥‡RïÝ ápÑ+™!‹á“¥,£Ë;½©½Ù«ƒ¯<§§§'ƒ#¯§É"Å¡¡¡å¿÷"vÙ[Á•&…ç!×#ù»8Ó€Ï7ñ“ñ.¿ª©"‡%ÑË$­„Ñ‘ ¿~µ2ûŸ9™™KßHã©ózëKëÙ ãEÕuß ± “#£ -©}Õƒ¥:»¯GŸ ½"«­=Û"ÕCƒ¯ ©Ñ#…÷-“£û«µ"Ï}ûÑ<—XŸ ƒ4õJ“õé‰I©'ï é¿í)­ß¿Ç ‘=a˧+§!«õñ»†¥ç—4ÁÕíQóÈûSÏÙ±¹y¯‹•·6Ÿ—µ‘ý©Ï½µbÙ‘ ¿ …\Ñ£û. à Ñ[×õFÓ…Uå… án¿µã(Ñ£ßm«ÿ;û Ó ¹ÍV™;ç>•Ù™*)‡#ûKù2µ'­Nñnùb¹5 ÕsÕ‡£ »'§$¯dÉ -¥ ‘<Ç ñÁ;¿*Ù¯ É? ‘mý@£ Áï?—õ§DŸï#Ç.µÝ|ýB……a¯ã ™—Xó“ -ÝÃYËÁÑ‘õ§·‘%ã‡ß¼ë~ƒ:‘‡Á›µŠå¨©œ“!½rË •.á­„µ<×’ÙÑÄ¡ ý·Ç‡–ý¹õ±`»õ!ùé¨Ç.‘«½á¸¯"¬ÿ'!§Ç•µ›z— ãëp­eÍ+­’½;½É ‘ωõdñ#éPïKƒk·Ä÷tÙ8Ï"™ª—&±X»»"Õ!á‡áJé¸ï÷±û‹"ýp×0ÛE‰Íßy÷"Ïqϯ;ûg‹¯YÇÇ#‡8çl‡³„ÿų‡»ɸ£o‘"ßI‘"“ÉXÓrÙ ÿÑ×oÓ9á|ÁÙ9å=û½±µëAƒ7…Ïι›•ZM‹^©#ý&õ'»¥~_«›ûBµ áãL“nÉ9ƒ!³Ç`õÏËÃt‰-÷h•C§Iß•p›§ã-ñ–¬ó†‘£ ½n‹†©w½.7ÑE0Û û«%»3¯0û%£AÕ"é«åKõ"» ± — ûÿûA©fåN©"$ã"½‡“ñ¥ éÿ‡ƒ!­ -O¿¹ ³dÉJÑ*—ûeµã»SÇϽ‰ë—ý Å­b¯!ÇIÝ"± ¿1ὓ`ÇÛ»%Õ«³0¡,éŸgש)±Ã,Å6“iñÉ·hÏ1©*õ«•ÕH—6™0Óÿñ;£.é=ñã»t¯Ç;Ã×›HÉ=)£ ûjÑ) -ï•<—±hÓJÓ‹RÙ ÿ³w£ ë®Å˱s營·?»™—á_‘ óLë"$¡x“0å!íbù f‹c¹W‘=õýF¿0ï ÛbëIõ ­Ž³ÛUÅ.­ — ¡ºÓD ëYŸ!™óN×JÑB½$ÿO›ËAÙ(ƒI—÷§7Ç« -…Ýñcý.ýÙÈáaƒÕ0ã'­'© ß‚Á‰½ÓϦåß*ãmó­`Áí£ ãM»)ŸBÙ -áf¡«d£kóéR§;‰ˆ»J‰¹=ó5½¹å]Õ-‹ ñC—@ó ñ!—ˆ½³ Ý_‹1Á§ûÉ,Û&Ã#•¿Zå¿)™=“·Ù0Çn· ù¡+ýÙϬ¥#‘Ø¡À¹Öý—¯ÖÕ±¯««Ló ‰*±/ë#Å,“'ãc‡;ÿ¿©k©.·<‰(BƒÝ ?©-›<Ý;… åbë¾ãóEÿCßA7/Ý+ÕBý(‘¡¹?§ƒ¿2EƒG×`¯BÕ!÷$;ß«H‡Á7ã<“~ë³,Cÿ -·3i/ù'Óùõ•í½ A¿¥b‰=¥« ɇõD…ÅCñCÝ,Ÿ¥›*ÏV·6» ñ¿±~¹GñÝ…Å'CÍá Ù6§ 9ã`ï0Ýã@±P¹3Ë ¡ÿ ¯{ÿ;× +ÅB£EïS«±;‰bƒr©&˃'µˆË,û]Ë;Ý#“a§DålÕ2Qñ~ý`·-›•/õÑe‰Í©¡iŸ…«,áB‡F×õrã'9·Ïcõ -ÙAnåhÉ!+÷ß;¹!å'ç5¹ÛKåCµ:Û E·¿ 3Ó'Á“ã=ƒ5û$ßL§4Ëõ„¿—½u‹ÃëN¯]ÛÉ»©Åh÷GõqéÊû µQnñw¿Å1ÕÅKÓ®¹¥§=“¯=§G§ -‘Ù ÙTï½,Ãdñå'÷!¿£;Õ'ÿ -·(ÓH©õ7å'÷ í©ó’×"Û¯rçL‘ ‰“*ãH¿/ÓÍÝ?óµ•Ûš­;§&é -ÑÝ>½áUñWŸñdÓbÉ-+Å)½É"­“Ñ © Ý»‡!ÿ© -‡S»¯·$«0§å+é—Gï"—ƒ½ ­"à ßaÿÉ ÝK›»%½#ùÍý.#¥#Åv«8ƒ#‰$½x›û Õ¥ç4¹ÉÅ'óŽ¡Mÿ)›·Ñá^‡#ã‰>•Å ÿ³¡#•ãF—/»/ÍÃ-—0› ÇáQõ<-ËC‡#ßFŸï/›¥}²ù£x©Ã.¹0›#‡pÛÕGË,ÓWå¥}“#“(³¦á/û7Ñ;¯I£óˆƒ"ÅÙÕÔ¿Ëé\‹&i§Oõ>ÛJí4Ë*ñç8³5ƒÇÏ|û¹Ÿ‡2§·õÛO±>ÍG­Fó‚·óS¹4‰ù%¯(ËH™×L§/…)Ù'£2÷6ûAÅ­6ýgßGÉç™lÏ ÷DÉ!Ùç ©€¯ç )_Ã.Ó"Ñ[C» •ƒ ǯMûGã Õ+û0Ë%ÏÍ­™ãù'™!á6“3ÿ!ÿ±hÏ/ÁŸ »‚‹0ÿ$ÅXÿa牯É*Ÿ*ÛWýRÿ#Õ&Ë%8½:Õ0Ý/Å Ù1•F›Ï“HéD­"éÛ,›Z漢b«.×"‘÷š› ¯.û‹QÙTÏ!ëeË;݃±Ï#¡X‹,¿ ·iá»å-MÏç0÷‡'Ý•dé1¹)±+›ã™’ß·"ϱJ‘^±³8•)µ-—ýã!·5ë`Ñ¡ßéGŸáµnï@1™F£>¹!Ÿ£ égß&£ ËM“Zɬ¹,3·¥‡9ãóÿÁj…r‰pùÙ3ÁÙ—ɇóóA±ëÿÅ#_ã®Ý›7Á£—à 9¥†á‘9ÿ3£rµŸ¡©#CñBÁ*›|©ãÙ…§#ǧ“ Ï»Ïéábí˜=£Ëq÷Ã帓ZûaÅÌ1åÝÓUí01‡Ó7—ùÃËÏ ý Ó+‡&½k¥ Å3Á[Ñ*4Ë ß ±Ó«ëŸÙõ¹¥›«¿Ç±Mã É£à ÉÛ­'µjÉãטíCÓ*õ ‘ñí˜û+Ï$Ó™*û›ÇÓõ…rË)“1ñ-­ñ#¹›#Ÿ©>ßV‘±×§D¿LµÓÉqùÉÛ0‘É#Û#ƒjç"×ñ ¡ï*µT“"³å$•'ß2“ á õ(¡IÑÕ«Ÿù<§ÿ1¹×/‘NÝ/ûÓ:Á “#ɱƒ1«½Ç í½(ÿ“ Ã%Ñ<ƒAó¥ÅÏó“Ñ‹ ¹/ ݵÿ"—$õ³'™yÕAÉ ÁÛ!Ý!©å «Ñ#…ÔG—Ö÷ íl¹Wå1¡‚#ùdŰ‘ûB‹ký§ˆ¯(Ÿ(ïS£¿Ó»É®å û¸ùÊ ë¬³ËC³OýSëõ4ß&ÅJå.ƒzŸ![¯„£H‘ËÓ;—3Ù;§Xã[a£wÉÖ¯`ÿNßm“íµc÷+³‰#¹IYÝxÍb­UÕ.ÉJ¥ÉjшÛ ‹Cݯ"ãçDý/ß2ý!ï½H1­í[« åÍ)…,Ñ3ïÏTû¡NÓ5…³sÿ-¿œµÿJï`³/ÁßÍ㟯*#Ÿû4£sÅ‹ -C¹<ݽ7«§ZÁD-™µ‹õ9›#Ÿ#·=Ípµ;û­Iý¡,ç0ç©Dÿ™Dáù&•Ÿ -…«OÓ-¯ »"›T¡M‡¨×Ÿ¿`ù°­^|õY§Õ½ ÁýõíB¹— -Í+ù3Õÿ ­Gõ¿.±1ûO‰1ÑÕÑÏã›(Ç ¯¥3Ïsý ÍåÅÿ=ëÑ‚ñÝÏM›*ó›t¿Á6ÿºå«‰'µž÷TÇ'ñ ­fõ ›!9Í7ùf¯4à £"©½7·O—39—*§Á ‡*‘o·‘#Ö¯#—Nõo±^« ‘é"—ÍõLñ‹Ý=¥·C‰T½E‹ZWá+!/—.»QÁ»¼ÍÆ£Ú½¯ý@¥\ýs×TÑ1™Î••9(õ ¯ºÇ1@ã¡§ŠñdñJëœÇiÇ@­S™ á½³!!m#שLÝŽ‘égåÛÁJß¶í¦›¬™Pñ˜¡J·R“)QÃO§1µÁÁ"Ñ!ýLß-ÑS·‹?¹%Ó&ŸÝ½O³.Á­B é#¹T•.—0Ó£FƒF%¡’ÓÈó€ÍB“E‘:Ë:åû ±Ÿƒ÷åÏ•¯»“§у§9Ñ"Å«3ló½.•Á ó ù -Wß&&¿WKí × Ÿ(Á,ñMñëA¡$•*©Pñ8Á-›JÇDýw¿ ë -±ãÏ+íû!çBË Û™3‰‚å)éÉgd¯,»›ß¥‘Ï"“Éý5%áÁÙ*ÙpÅ+½ñá‰(‹J•©û'÷Š»3ÁvÑ éç·áž-ç.ùÇÛ&ã ç2ïI‘‹ÑÏ‚ÅaÑ ×µ¹†‡2‰¡¥Bý‘‘ÀÁ>ÓYà -§¬§ñh§J×¹™· áﯴ•™ … §ÕËÝ#—L…Å·‡á3éÍýÊ™%·¬ÿ„é ËvÓ"‡ñ—Ñ­Õiõ… Ë‘ý{•'Ëí(ù ù™r•Bÿ@û‡½«é„Ë`©çïŽÿ ½3çr¹ ׈‰§›"ÉÓ³ -ÉwËz¡@µ†Ï>ë -#É&“ñ•£½¿¯ë›³í—¡z•W½ÚóT¯[ÉΗ—Å“S¥ “Ýí&GÕÌÇ -óí õHµ9ù«²‹Õ …Ó念 ý«nÇ/¥!ƒÏ›±™¹F@ù -™(“0ÛÃ…íwËE…q•’绫¡‘œÿ1·ŸW™Á"ï í€ÕÓMµ)"åÉÃÉ%µ “—‰Çç%‹§ §¦ó ‘±Ïùû›H˹Nó7§a—lÃáŠëç—«¥û|‡(×qé½ -Û?‹›Á$ù$¿jïWÙ¯ÛÏ¡…yÍýFÇuç9……=±ç‘K£³=Åû2ÑÙ>¥ ËÇ4‹á­8Ç8ù@·Fß%ÇV±6­c祋 -··Yé)ïáÓß )—BÏ"¿#Í'±5ÉQã)…@ñ¥!ñ/¯QÁ<å/ñç—õ8ßkÿß—MåHñ%Y©³ZƒDÃý$ÇKË0ù'éá:…×=­„ãsÁÅë—õH¹\­©û¯™d¥2ñŸ4•S·/¥AÁ‰…8ûÐ÷$“³…•éÕËt -í@»#ÿIë‹‘ÑÃS¥YÏ ­k¡q½Õ>¡]óó±ÁQÍn¥u› ûÓÕÏ#»‡³Á« û[Á‹"ÁŽó§‰Sû"õÏeí&߆·µ -KóeÛ‡ á%Íñ©í*Õõ'ɶã(•?YÛO×ÇÁ’É£:©"é~ᕬ­ŸÙ¸ñ:Ñ!“û›$­•Õ,×Bã›óo»ýù&é ™¹åÌ… «tŸ"Ç"ßï"éÙ,Ïç µ#­ÃRÍ9íuㆩ*íµ£7É« Ç&­§)ÏRÑ*‰¡Ý(—±÷ »°™:£ -@›“É5“›·Ÿ -‰³6Ç>ÿH¹Çáñëˉ’©)íÙ!ñ å± åí‰#Í­íbÃ.‰µ -ç$…x¥?§Û­» ï­\ç¿.ůËéG¯N­¹-ýcïÏ -ßÍ×— óy• ¿ñ5‰á!Ý&éƒ%¡É³ÍóBË-­ë áé*Ãëß… í#‡ …iï¡ ýû—ß8Ñ‘Ï*Ûý+©ÝË9—:«û—Ù »7·’¯PÑÝF«k³+Ç$Ùt… -¹ƒ ÷‡1³9ñ -•/ù‰õg“Ù ÿ$­± ›Ñ‘!ë5Ü…>çãïÍŸ@¹»2—(ý­ó ™Ù¹Ë"™ µ…Í4©R“ ×­¥¿!™ É@ý»0Ùû¡¥!ËÝ£ÄÕñû‹&7£I¹ ³†í#ßh ‡ -ÑŸ -»•MÓ;…(»Ý}ý)ÿ2ë!¯³á -‹J½(ë¡'­¥›bÿϵՕ͉žÅǧ,­À÷Ñ£,ß»'Á+Çßûïí8åwÿ Û )ƒ‡ß"Éx¹ã›ݶÅ:ç8§ Ñÿ%ÿ ›«û‡³ÃGÏ•G©0õp™éÍ;»G­<™*‘Á ¥ˆû3…©·•õVÏ!é» -‹n…Ɖñj˃Ñ,û²Ÿ”ÿÙí‘…©_ç™Eù(Ÿi‹­åB—z™‚•™|ÿ -›‹§'ß`×gÏ'ï›N \ No newline at end of file diff --git a/Java/.recommenders/index/http___download_eclipse_org_recommenders_models_oxygen_/_0.nrm b/Java/.recommenders/index/http___download_eclipse_org_recommenders_models_oxygen_/_0.nrm deleted file mode 100644 index 19f64e5..0000000 --- a/Java/.recommenders/index/http___download_eclipse_org_recommenders_models_oxygen_/_0.nrm +++ /dev/null @@ -1 +0,0 @@ -NRMÿ|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||vvvwvvyvyvvx||vvvvvvy|yyvvvy|vv|vvv|yvyyvv||vxv||yy|vv|vvvvvvvvvyyvyyvvwxvyvvvvvvyyvvy|vvvvvvv|vyvvy|vvvwvv|yvvyvvxvvv|yvv|vyvvvv||vvxvvyv||y||vvvvxyyvvwvvyvvvv|vvv||vvy|vwvvvvw|yvvyvv|vvvvxvyvvv|vvvyvv||vyyvvyxvvvv|||vvvyvyvyvvvxxvvyvvvy||vxyvvvvvyv|vvv|xvwvyyvy|vw|vv|vvvvw|vvxvyy|vyvvvxyyvxvvvvvyv|vvyvvyw|vyyvvvy||vvvvvvwy|yyyvwvvyyvvvvvvvvvv|vv||wyyvyvvvvvvvvyvvvvvvvvyvyyyy|vv|ywvvvvvvyvyv|vvvvyvvv|yxvvyvvv||vvvvyy|vvvyv|vyvv|vvvyvywyyv|vvvyvvvvvvyyy|xvvvyyyy|vyv|y|vvy||vv|vvvvy|v|vvy|vvv|vvvvvyv|yvyy|vvvvvvvx|yy|vvvv|vvvvyv|vvv|vvvv||yvv|vxvvv|yv|vxvvwxvv|vvyyvvvyvyv|yvvvvvvv|vvvyvyv|yvv|yvyvvvvv|vvvvvvvvvvvy|v|yv||vvyvv|vvyvvvyvyv|vwvvvvxyvv|vvy|v|yv|vvvyvvv|wvvvyvvy|vvvvvvx|v|v|yvvvvvy|vvvvy||||vvv|vyvvv|vvvvvvvvxyv|yyvwvvvvvvwvv|vw|wvvvvvvvvy|vyvvvvvvvvvvvyvvvvvv||yvvvvvvvvvvv|vvvv|v|vvv|yvvvvvvv|vv|vvyvyvvvvvvwvvvvxvyvy|vvvv|vyvyvvvvwyvvvvvv|yxyvyyvvv|vvvv|yv|vxvvyxxvvyvxvvvvvvv|yv|vvyvv||vvyvv|vyvvy||vvvv|vvvvyvvvvvv||vvvyvy|vvvwvvyvv||vyyvvvvxvvvvvvv|vyvvvvyvvvyxv|vyvv|yv|vxvvvvvv|vvvvvvvvvvvxvvvvvvvvwvvv|vv|yvvvvvvvyyyvvwvyvvywvvvxy|vvvvyyvy|yvvvv|vvvvwvvv|||yvyv|vv||vv|vvvvvyv|vvvvvvvyvx|yvvvvvyvvvvvvy|vvvvvyvvv||vwyyvvvvvvvvvvvvy|vvvvvvvyvyvxvvvvyvvyvvvvvvvv|vvvvvx|yvwyyvvvvv|vv|v|vvvvvyvvv|vvyyvvvvyvyvvyvvvvvvyvvvvv|v|yyvvvv|vw|v|vvvv|yvyvyvy|vyvvvvvxvyvvvvv|y|vy|v|yvvyvv|vvvvvvxvvxyvvvvvvvvvvvyvvvyvvvvvvvvvvyvv|vvvyyvvvv|vvvvvvvvvvyvvv|vyvvvvyvv|wvvxyvvvyvx|yyvyv|yvvvvvvvv|v|vyvvvvyvvvv|vvvvy|vvyv|wy|yvvyyvyvv|vvvvvvv|yvvvyvyvvyx||xvy|yv|v|vvyyvy|yvvvvvvyvvvyyvvvyvyvvvvvyvxvvvvvwvvvvvyvvyvyvvvvvvvx|vvyxvvyvvvvvvyyvvvyvvvv|yvyv|vvvv|vvvvvx|vvvvvy|v|vvvvvvvvvyvvvyxvyvvyvyvvvvxvvvvvyvvvvv||xyyv|yvvvyyvv|yvyvvyvvyyvyyyyvvvvv|vyvyv|yv|v|yyvvv|vvv|vvvvvvvyvwvy|vxyvvvvvvvy|vvvvyvvvvvyy||vvv|yvvvyxvvvvyvv||vvvvvwvvv|vvvvyvvvvvyyvyvvvvxvyvvv|yyvw|v|vvxvv|||vyvvvyv|vxvyvvvvvvvvyvyvvvvvvvvyvyyvvvv|vvvyvvvy|yyvvv|v|vvvvv|vvvvvvvvvwvvvvvvvvvvvyvv|vyvvwyvxvyv|vvv|yvvvvvvvvv|yvyvvvv|wyy|vvvvvvv|vvyvv|vvvvvvvvvvvvvvvvvvyv||vvvvv|wyyvvvxwvx|vvyvyvyyvv|vvvwvvyyvyvvv|vyvyvxy|yvv|vvy||vyv|vvwvvvvvyyvvv|v|vvyvvvvv||||vvyv|v|vvvvwvvvvvvy|vvvvvyvv|y||vwyvvyv||vvyvv|vvyvvvyvxyyvvy|vvvvvvvy|vvyy|yyvvvvvvxvyvyy|vyvyvv|v|vvvvvw|vvvyvvvvvvvvvxyv|vvvvyvvvwvyvvvyvyvyv|vvvyyvyvwvvvvyvvvvvvyvvv|v|vvvvvwvwyv|vvyvvyyvvyvwv|vvvvwvvvvvvvvwvyvyvv|vy|yv|xvyyvvvvvvvv|vvvvvyvvvvvyvyyyywy|vvvv|vvvv|v|vvvyvyvvvv|vvvvvyvyvvvvvvvv|v||vvvvvv|vvyv|vy|vvvxv|yvvvvvyvvvvyvvyvvvvvy|v|vvvvvyv||v||xvvvyvvvvvv|vvvvvvvvvvvxvyvvvvvvyvwvvxvvvy|vyv|vvvyxyvwxvv|vvvvvyvyvvvvvvxxy|vvxyvvvvvvvvvxvyyyvvvwvvvyvvvvyvyvvvvyv|vy|vwvyvv|vv|vvvvyvwxvvvvvyyv||v|yxvvyyvvv||vvvvvyvvvv|vyyyvvvyvxvv|yvvvxxvvvy|yvyv|yyvv|vvwy|v|yw|vvvvvyyvvvvvvvxvvvvvvvv|vvvvvvvvvyvvvvvxy|vvvvvvvvyvvvvvyywvvvvyyyv|vvvvvvvyyyvvvvvyv|vyvv|wvvv|vyyxvvvyvvv||ywv|v|y|vvv|yvvvvvvv|vvvvyvvv|vvvyvyyvvvvwvvvv|wvvyvyvvvv||vyv|vyvv|yvvvvyvvv|vvvwyvvvvyyvvvwv|y|yvvvvyxvvyvyvyvvvvvvyvvvvvx||vyvvyvvvvwvv|vvvvvyv|vvxwvvvyv|vvv|vvv|vyvvvvv|xyvyvvvvvvvvvvvvvvvyvyv|v|v|yy|vwv|vyvvyvyvvy|y|vvvvyvvwvvvvyvvxvvvvvvvvvv|ywvvyvvxxvyyvvvvv|vx|yxv|yvvvyxvyvvxvvvv|vvvv|vvwv|vvvxyvyvvyyvvvvvyyvvxvvvyvvvvvvvvvvvvvyvv|vyvy|yvv|vvvvvvvvvvvvvvvyvvvyyvyvyv|vyyyvw|vyv|vvvvv|vvvv|vvvvvvvvyvwyv|vvwvv|vvvvyvxvvvyvv|yvvyyy|vvxxv|vvvvvwvyvv|y|vvvvxyvvvwyy|vvxvv||vvvvvvvyvxvyyvvvv|vvyvvvvvvvvvxyyvyyvyv|yv|vvyv|v|vvwvvyvv|yvvvxyvyvvvvyvvyw|wvvvvxvvv|xvvvv|v||vv|vy|||yvvyvvwv|vv|vvxvvvvvvvyvvvy|y|vv|vvvvvvvvvvv|vvvvvvvyvvvvvyvyvyv|yvvv|vvxyvvw|vvvvvvvvvvxvvvxvvvv|vw|vvvyvvvvvvvvvvvv|yv|yvv|vvvxvvvvv|yxvvvwvvyvyvvvvvvvvvvv|xvv|vv|yvvvyyvvvvvvyvwyv|vvvvvvvvvvvy|vyvvvvvv|xv|vvyvyvvvvv|vvv|vvvvyvywyw|vvxvy|vvvvvvvvvv|vyvvxvyvxvvvvvyvvyvv||||vvyvvyv|yvvyvvv|vvyvvvy|y|vy||vvvvvvvvvvv|vvvv|v|yvvvyyvvvvvyvvv|yvvxvyvvvyvvvvvvvyvvvvvxvvv|xvvvvvyv|vvvvvy|vvvvywv|v|vv|yvvvvvvvvvvyvvvy|vyvyvvvyvyyvvvvwvvvyyvyvyvvyvvvvvvv|vvyyvyvyyyvvyvvvvvyxv|yvvvvyvy|yvvv|yvyvv|vvvvyyvvvvvv|vvvyvvvvwvvvvyvyvvvvvvvv|vyvyvyv|vyvvyvvv|vxvyvvyvwywyvvy|vvyvvvyvvvvvyvvvvvvvvv||vvvyvyvx|vyv|vvvvvvvxvvyvvyvvvxvvyvvvyvvv||vvyvvvv|xyvyvvvvvvvvvvvvxvvvvv|vvvvvvvv|vyvvvyvvvvvvvvvy|vvvvvvxvvvvvvv|vvvvvv|yvyvyxvwvvy|vyyvvvv|vvvyv|vv||yvvwvvvvvvvvv|vvy|vvvvv|xyyyvvvv|vvvvvwvvyvvvvvvvvvvvvvvv|vvxyvvvvvvvvvvvvvv||vvvyvvvvvvvv|vvyvvvvvvvvvx|vvvyvvvv|vv|vvvvvv|vyvvvv|vvvvvyvvywvyvyvv||yvvvyvyy|yvyyyvyvyvvvyvvyv|yvvy|vv|xvyvyyvvvwyxvvvv|yvvvyv|vyvvv|y|vvyvvvvvvyvvvvvv|vvy|vyvy|vyvvy|wvyvvvvvvvvyvyyyvvyvvvxvvyv|xvvvvywwywvyvvyyvvvy|vvvvvvyvyvvyvvvvvvvvvvvvvvvvvyvvvyyw|yv|y|vv|vvvvv|vv|yvvvyvvvyv|vyvwvyv|vwvvxvvvvvvvvyvv|vv|vvvv|v|y|y|w|vvv|yvvvyvvyv|vv|xy|vvyvvvvvvvyyv|vvvvvwyvvvyvvvvyvvvv|vyvv|vvvvwv|vvw|yv|vvyvy|vvv|v||yvyvyv|yvvvvvv|v|yvyvyvv|vvvwv|vyvvvvvvvyvwv|vvvyvvvvvvvvyvvvvvvyvvyv|vyyv|v|vvvyxvvvvvyvvvvvv|vvwvvvv|vvyyvy|vyvvxyyxvyyvvvyvvxvvvyvv|vvvv|vv|yyvvvvwy|vyvv|vyyvvvyvxvvvvvv||vvvv|v|vv|xvvvv|v|vvxyvvvyvvvvvvvvyxvvv|vvvvv|yvvvvvy|yvvyvvvvvx|vvvvv|vv|vvvvv|vvvvvyvvvvvvvvvvvvvy|vvvvvv|yvyvvvvvxvvyyyvv|vvyv|vvvyvvy|vvvv|yvvvvvvyvvvv|yvvvwvvyvvvvyxvxvyv||yvvvvwvyvvvvvv|wvvy|yvvy|yv|yvvyyvvyvvvvyvvyvvvyvwvvv|vvvy|vvvvvv|vvvvvyyvv|vyy|vvvvwyvvvvvy|vv|yvvvwvyxvvvvvvyvyvyyyvvvv|vvvwvv|vvvwvvvvvvvvvv|vvvvvwvvvvvvxvvvxvvvvvvv|vvvvvvvvvvyvwvvvvwvvv|vyxvvyvvvvvvvvvvyvyxvv|vvvvvvyyvvvyyvyyvvwvvw|vvyxvvvyvyvyvvvvvvvvyvyv|vvvvvvvvvvyvvvvvyvvyyvvyvvvyyvvvvyxv||vvvvvyvvvvvvvvxyvvvyv|vvxvvvy|vvvvv||vv|vv|yyvvyvyvxvvvvvwvvvyxvvvvvvy|v||vyvvvyy|yxyvvyvvvwv|yvvy|ywvvvvvyvvv|v|xyvy|y|xyvvvvywvvvvv||y|wvvvyyvvyx|vvyvvxvvvyyyvvvyvyy|vvy|yvy|vyvvvyvvvvv|v|vvvvyvvvv||vyxvxvvyxvwwvvyyvvvwyvyv|vvvvvvvyvvv|vyvvvxyvvvvvvvvvvvvvvvvv|vvvyv|vvvvwvyvyvvvvvyvy|vvvvyyvvvvvvyvv|vvvvvvvv|yv|vvy|vvyvvvvvvvvv|vvyw|vvwvyvy|vvyvyvyyvvxv|vxyvv|vvvwvvvvvvvvvvvvv|v|vyvvvxvvyywvvvvvvvvy|vwvxyy|vv|vy||vy|vvwyvvv|vvvvvvyvv|yxvvvvvv|vvvvvywv|vxv|vvyvvv|yyxvy|xvxvyvyvyvyvvyv||vvvvvvvv|vvvyyvywvyvvywvvvvvvyvyvvvvxv|vv|vv|yyvv|yv|w|vwvxvvyv|y|vvxvvxvvyvvvv|yv|vvvvyyv|yvvvvvvvvvxvyv|v|vvvv|vvyv|yvvvv|vv|vy|vvyvy|vvyyvvyvvyyvvvxw|vvvvvv|xv||xvvxyvvyxvv|||vvyvvvvv|vvvvvvxvvvvvvvv||vyvvvvvvvv|v|vyvvyvvvvvyvvxyvxv|vvvvyyywvvyvyxyy|vvvvywv|vvy|vvw|vyxvyyvvyvvyvywvvv|vvyvyyvwvvvvvyyvvvvvyvyvywyvvvyyyvvy|vwvyyyvvv|yxvvyvvvvvv|vxvvx|yyvyxvvyvvwyvv|yvvvyyvxyyyvvyvwyvyvvyvvvvvvvvvvvvyvvvyvvvvvvvyyvvvvvvyvvvw|vyvv|vvvvyvvvvv|vyvvvyvvvvvvv|vvvvvvvvvywvvvvvyvywvvvvyyyxvyvvvvyvvvvvvvv|yvvvvvyvvw|vv|yyvvvy|v|v|vvw|vvv|vvv||vvvvvvvwvyyvv|vw|vvyyvv|vyvvwvvvyvvvvvvyvvvv|yvvxvxv|vv|vvvyvvvvvvvvvxyv|vvv||vyvvvv|vvvvy|vyvv|vyvvyvxvyy|yxvv|vvyvyvvv|vvv||vyvyvv|vv|vyvvvvvvyyvvvvvvyvv|vvvvvv|v|vvvvvvyyvvv|yyy|wvvvyv|vvvvvyvvvvv|yvvyxy|vyvwyvvy|yvvvvvyvvvvvyvyyvvyyyxv|vvyvyvvv|yvvvvvvvvvv||yyw|yvvvvvvvvvvvvy|vyvvyv|vvyvv||vvvvvvvvy|vv|vyyv|vvv|vv|vv|yvvyvvvvvvvvvyvv|y|v|vvy|vvvyv|vyvv|v|vyv|wvy|vvvvvywvyvyvvv|vvvvvvvvvvvvvxvvvy|v|yvyvywvvyyvvvvy|vvyyvyvvvv|vyvy||||w|vvyvvvv|vwv|y|yvvvvvvvvv|vyvvyyvyvwxvvvyvv|yvvvwy|ywyyv|vy|y|vwyvvvvvvvvyvvvyvvvyyv|vvvy|xvvyvvvvvvyvyvxvvvyv|vyyvwwvvyyvvv|vv|yvyvvvvxv|v|vvvxvx|vvvvy|yyv||vyvyxxy||vyy|v|vvvv|v||yvvv|yvvvyv|v|vxvvvy|vvvyv|vyvvvwvvvvvyyvy|y|vv|vvwyyvv|y||yvvyxvv|v|v|vvvv|vyvyyvvvvv|||vvvvvvyxv|vvyvvvv|vvyvvv|vvvvxwvyv|vvy|vy|v|y|vvvvyvvyyyvvvvv|vvvvvwwvyv|vvvvvvvvvy|vvyvv|yvyyyy|vvyvvvvvyvvxvvxvyvyvvxvvxvvyvvvvyvvvyvvyvyvvvvv||vxvvv|||yvvv|vv|vv|vvvy|yy|v|vx|||vvvyvv|vyvvxvvvyvyxyyvvvvvvvvvvv|vvvyyvvvvyyvyvy||vvvvvwvyvxvvvyvvyvvwvvvvvvvvvyv||vyvyyvvyvvwv|vvvy|vyvvyvyvvvvyyy|vvvyvv|wvyvvyyvvyy|vyvy|yvyv|yvvx|yvvvvxyvvvvvyv|yv|vvvv|vvvyvyvvv|vvvvyvvyvvwyvvyvvvv|vyvvvvvyyvyvvvvvv|yvyvy|vvwvvvvyvvvyyvvvvxy|vvyvvyv|vvvv|vyyv|vyvv|yvvvvvvvvv|yvvvvyvvvv|v|vvyvvvyvvvvvyvv|y|v||vvvvvvyv|vyy|vyvvvvvvvvvvvv||vvvyvvy|vywvvvyvvwvvvvwvvvvyvyvvvvvvvvvyvvvvyyvvvvyyyyvyvvyvvvvvyvv|vvvvv|yyv|vvvvvyvvxvyyvvvvvvyvvvvwvvyyvvxv|vyv|yvv|vv|vvv|v|vyvvvyvvvvvvvvvv|vvvvw|xvvyyvvvvvvv|vvwvvv|vvvvxyvvvwvwvvyvv|vvv|vvxwvvyyvvvvwyvv|vvy||vvvyvyvvvxvyvyvvvvvvvvvvv|yyyvvvvvv|yyvvxvy|yxvv|vvvxvyvvvvvv|vyvvv|vvv|vvyvvvvvvyvvvyvvvvv|vv|yvy|vvvyvvvvxvv|v|vyvyxvyy|wvvyvvvvvvyyvvvvvvv|vyvv|yw|vvvvyvvvvvvyvvvvvv|vyyvvy|yvvxv|vvyvvvvvy|yvvxvvvvvyyvyvyvvxv|vyvvyvvvvvvvv|vvvvvvyvvvvvvy|yyvvvyvy|vvvv|vyvvvvxv|y|vvvwvvvy|yv||wvvvvv|vywwvvxvwv|vyvxvvvv||vvvyvvvyvv|vv|yvywvvvv|yyvvvvvwv|yvvvvvvvvv|yyvyxvvvvvvvyv|vvvvyvvy|yvvyvvvyv|vvyyvv|vvv|vywvvvvvv|v|xvyxy|vvvxvvyvvvvvvyvxyvvxvvyvvyvv|yvvxyxvvvvvvvvvvvyvvvvvvvxvw|vvvvwvyvvvvvw|xvyvvvvvv|vvwvxyvvv|vy|wvyvvv|yvy|v||vvyvvvyyvv|vvyvvvv|v||vyv|vvvvvvvvvvvv|xvv|vyyvvv|vvyvvvvvv|v|vvvyvvv|vvvyxvv||vxvyvv|vvvvvyvvvvvyvvv|v||yyvv|vvvvvvvvvvvvv|vyvvvyxyvvyvyvvvxvv|vvyvvvvvvyyvvvyvvvvvvvv|v||vy|yvyyvvyvv|vvvvvvv|vvyyyvvvvv|vv|vvvyvv|v||vvv|vvvyvvvvvxyvvvxxvvyw|yy|vvxvvvvyvvvvvvvvvyvv|vvyvv|vyvvvvvvyyvvv|vyvyyyvvywvvyvvvvvyvvvvvvvvvvvvyyvvvvyvvvvvvvyxvvyvyyvyvvvyyvvvyv|vwvyv|vyvvvyv|vy|vv|vv|yvvvvy|yvwvvxyvyv||vvvyv|vvvyvvvvvyvvvvvvvvvyvvyvvvyvvywvvvvvvvvy|vyvvvvvyvvvxyvvvvvvvvvvvyvvvvyvv|vvyvvvvvv|vvyvv|||yvvvvxvvy|yv|vvv|vyvv|vv|vvvvv|vyvvvyyvvvvvvxv|yvywyvx|vyvvvvv|vyvy|vvyv||vvy|vvyvw|v|vvv|vv||vy|vv|vyvvvyxvvyy|v|vxvyvv|vyvvvvvvvyvv|vvyvyvvvvvvyv|vv||vvvvvvvyvyvvy|vvvwyvyvxyvv|yvvxvvvxvvvvx|vvyv|vyvyvvvvvvvwvvwv|vww|yvvvxyvv|vvx|vyvvvwvvvyyyvvwvvy|vvvvvvvvvvyvyyyvvvxvvvvy|vvvvvvx|vvyvvyvyvvvyvyvvyyvvwvvvvvv|v|vv|vv|wvv|yvx|xyv|w|vvv|vvvyvvvvvvvyvy|vvyvwwyvvvvvvvvvv|yvyyvvvxyvvv|vvyv|y|vyvvy|vvyvwvvvvvyvvv|vvvw|vvvyv|yvyvv|vvvvvvyv|ywyvv|vvyvvvvv||vyv|vvvy|||wvvvyvyv||v|vxvvvvvvvyx|y|||vyvwvvvvvwvvvy|vvyv|vvv|vyyyvyv|x||yvyvyvvvyvvvvvvv|vvvv|vyyvvvvvvy|vv||vvvvvvvvvvv|yvvvyvvv|||yxyyvvvyvvyyyvv|vvyvvvvvv|vvy|xyvvvvxvyvyvyvvyvyvvyvy|vvyyw|vvv|yvvvvvywvvvvvvvy|y|vvyv|vvvvvvvvvvvxvxvvyvvvyvvvvvvvy|vvvyxvyxvvyyvvvvvvvyvvwvvvvvv|vvywvvyvvyvyy|vvv||vvvxvyvyv|vvvvyvy|wvvvvvvvvvvvvvvvvvvvvxyvvvxvywvvyvvvv|vxvvvvv|v|yxvvvvvvvyvvyvvvvyvvvvyvvv|vyvvx|vvvvxvvyvvy|vwvxvwvvvv|xv|wvyy|yvvvv|vvv|vwvvvvvv|vvyv|xvywvyvvvv|vvvvvvvvv|yvv|vv|vvxvyv|v|vyvyvvvvxwyyvvvvv|wvxv|vvyvvvyvvv|vyvvvvyvv|v|vvyv|v|vvwvvwvyvyv|vvvvywyvv|vvv|yv|vvvwvvvyvxvvvvvvyvyvvvyvvvvvv|vvvyyxxv|vvv|vv|vvyvvvyyvvvvv|xvvyv|vv|vvvvyv|vvvyyyvvvvvvvvvvvvvvvvyv|v|vvvvvvvyvvvv|vvvvvvvvvyvvvvvvyw|yyvvvvvvvvx||yvvvvvxvxvvvvvyvyvvvvvvvvvvyvvvv||w|vvyvyyvvvvyvvv|vvvyvvyvvvv||vvyyxvvyvvv|vxvyvv|vyvyyvvvyv||vvvwvyyvvvvvvvvv|vvvvvvyvvvvywvvvyvvvvxvvvy|vvwvyv|v|vvvvyvxvvwvvyvxvvyvvyv|yvvyyvyvyvvvvyyvvvvvy|vvvvyvvyvvvvvvyvvvyv|y|yvvyvvvy|yvvx|vxvv|yy|vvyyvvvv|vxvvvvvvvvvvxvyvvyvvyv|vvvyxyvvv|wvvyv|vwvvvvvv|vvv|v|yyvvvvvvvvv|vyvvvvvywvywvvvyvvvvw|vvv|v|vv|yvvvyvyvyvyyvvvwv|vyvyvvvv|vvvyvvvvvyvvwvvvvvvvvvvvyyvyvyxvv|xvvyv||yvv|v|yvvvvvyvvv|vvvyx|yvv|vyyvvyvvvwvvvvvv|vvvvxywvvy|vyvvyv|ywwvvvv|vvy|vyvvvvwvv|vvv||vvyv|vvyvvyyvvvvvvvy|vxvxyyvyvvyv|vvxvvvvyvvyywvxvvvyvvv|vvvvvv|yvvyvvvvy|yy||vyvvvvvvvvyyvw|v|y|vvv|v|vvvvvyvvyvvv|yvvvyyv|vvvvvyxvv|vvvyyv|yy|yvvv|xvvvvwvv|xvv|vv|vvv|vvvvvyvvvvyyv|y|vy|vvyvvyvyvvvvvywvv|vvvv|vvvvvyv|vvv|vvwyvyv|vvvv|vvvvvy||vvv|v|yxvvvvvvyvvvyvvvvv|v|xvyyvxvvv|vvvvvvw|vyvyvvvv|yvvvvyvxvyvyvvvxvvvvv|vvvvvvvyvv|yvv|v|yvvvvyvyvvvyvvvvvvvvvwyvvvvvv|vvvvvvwvvvy|vvvyyy|vvvvvvyvvwvv||y|vvy|vvvvvvyyvvvvyyvvvvvv|v|yvv|yvv|x|vvvvvvvvv|vvv|vvvyvxvvyvvvv|v|v|yvvvvvvvvvvvvyvvvvyvy|vvvvwvvvv|vvvvvvvv|vv|yvvvvvvvyvvvvvvvyvvyvvwvvy|v|vvvvvvyvvvvxvvv|vvvvvvvvxvvvvyvv|vv|y|vvy|v|vvvvvxyvyvvxv|vvvvvvvv|vvvvvvv|vyyyvvvxvvy|yxvvvvyvy|vyvvyvvyv|yyvvvyvvvyv|vyvvyvyvvvvvvyvyvvvvyvyvxyvvvvvx|vvvvxvyvv|vvvvvvvxvyxvvvvyv|wvvwvvvvv|v|vyvvvyvvyvvv|vyvvvvvvvv|vvwvvv|vv|ywvv|vyv|vyvvvvvv||yvyvv|vv|vvv|vvvvv|vvvvvxvvvyyvvvvvvvvvvyxvvvv|yvwvv|xvyyvy|vxv|vvyvyvxvvyvv|yvyxvvw|vyvv|vvvvvvvvvy|wvv|vvvv|vv|vvvvvvvvy|vy|vvvyywyvyyvvvvwvyvvvyvvvvvvvvvv|y|yv|yyvvvvxvwvy|||vxyyv|vv|vvv|vv|yvvvvvw|yvyyyyv|vyyvvvyvvyvvvvvvyyv|vvyv|vyvvvvy|vvwv|vyxvvvvvv|vvvwvv||vvv|vxvvvvvwvv|vvvvvvvvvvvvvvwvvvvvyvvvvvvyyyyy|vvyywvyvv|vvyw|vy|vvvvvvvvvvvvvvyvvvvy|vvvvvyvxvvvvyyvyvvvxvvvxvvvyvvvvwvvyvvvvvxvvvvwvy|vvvvwvvyvvvyyxvv|vvvvwvyvvvvvyyv|vyyyvvvvyvvvyvv|vyyxvvyvyvv|vvvyyvvv|yvvvvvv|vvyvvxyvyvvyvvvvvvv||v|vv|vyvvvvvvy|v|vvxvvvyyvvvwvvvvvywyvvvv|v|vvxyyvvvvvvvvvxyyv|yvvvvvvyvvvvvyv|y|vwvvwvvvyvvvv|vy||vv|yvvyv|vvyvvvvvvyvvy|vyvvvyvy|yyyvvvvv|vvvvyvvxyvvvvvyvyvyv||y|vvvvvvvxvyy|vvxvyvvvvyvvvvvvv|vyvvvvvvyvvvyyv|vvvyyvvyvwvvyvvvvvvvv|vvvyvwvyvvvv|vyvv|vvvv|vvvvvv|vyyvvvvvvvvyyyyvvx||vv|vvvvvyvvyvyvvvv|vvyyxvvvvvvvy||vvvvvvyv|||yv|vvvyvvyyvvyvvvvvvv|vw|yvyy|vyvvvvvyyvvy|vvvvvvyvvyvyvvv|vvvvvvvw|vv|yvvvvvvwyy|vvvvv|||vvvvw|vvvvvvwvvvwvv|yvyv|v|vv|vvvyvxvvvwvyv||vv|yyvvvywvv|yvvvvywvvvvvvvyv||vyvyvyyyvvvvvyyvvvv|vvvvxvvvyvwvvyvvvyvvvyvvvvvvxv|vyvyvvvvvvyvyvxxvvvvvvyyvvv|v|vyvyvy||vyvyvvvvvywvvvvvv|vvvy|vvvvyvv|vyvvyvvyvvvvvvvv|vvvvvvv|vxxvvvvvvxxx|vvvvv|vv|vvvvvvyvvvvvvvvvyyvwvvv||vvvv|vvvv|vwvv|vvvvyvv|vyvyyvvyvyvyvvyv|vvyvvvx|yvwyyv|vv|v|vvvv|vvvv||vvvvvyvvy|vyyvv|vvvvvvvvvvvvvwvyyv|vvvvvvv|xvyvvvvvv|v||vvxwyvvxvvvvyvyvvvvvxvvv|yvy|yyyvvyvvvvvv|vvy|vvy|vvvyv||vvvxvvvyyvvv|vvvvvyvvvv|yvvvvvywvvyvvvv|vvvvyyyvwvvvvvwxvvv|yvvvvvyvxvvvv|vvv|yyvy|vvyvyvw|vvyv||vxwyyvvv||yv|yvv|v|vvy|vy|vy|yxvvvvxyvyvxvvvvvyvvvvyvvvyyv|yvvyvvvyvvv|vyvyyy|vvv|vxvvvvv|vvyv|vv|vy|vvyvvvvvvyvvvvvv|v|vyv||v|vvyyv|vvvvvwyvvvvvvyv|vvxvvvvy|vvvvyy|vvvv|vyvvvvy|vv|vx|vvyy||vvyvyvv||yyvvv|vvyvvvyvyvvvvvvxvv|vvyyvyvvvvvvxvvyvyvyyvvvvvyyvvvv|wvvyvvvv|yvwywvvvvvvvyvvvvyyyvvvvvvv|vvvyyyvvvv|vy|vvvvvvyvvvvvvvvvyvyvvvv|vyvvvvvvv|v|vvvvxv|vyyvvvvvvxyyvvvvvv|vyvyyvyv|yvyv||vvvyvyv|vvvvvvvyvvyv|v|vyvvvvvvyvvvyvwvvvvvvvvvvvvvvvvvvy|ywvvv|vvyvyvvvvvvvwyvvyyyvvvvvvvvvvvvvvwwvyvyvvyvvv|vyvyvywywvvvvvvvv|v|vvyyvvv|vy||w|vvyv|vyvvvvy|yyvvvvvvyvvvvvv|yv|vvvvvvvvvyyvvvv|yxvyvv|vvvvvvvyvvvyyvvvvyvvvvvvvv|vv|vy|v|vy|v|vyyv||vvvvwv||vvvyvvvvvvvyyyvvvv|vvvvvvyvvyvvvv|vvvyvyvvvvyyvvvy||vvvyvvyyvvvvyyvwvvvv|yvvvvvyvwvvyvvvvvvwyvvvv||xvvvwvvxvyxyvvvvvvvyvvyvv|yyvvv|vvyvyyvyvyywvvvyvv|v|vvvyxvvvvvvvyvvv|vvvvvvvvvvyyvv|yvv|vvvyvvvv|vvv|v|vvvvvvyyyvyyyvvvvyvvvyvvvvvvvy|yyvv|v|vvxvvvvvyv||vvvvvvvvvyyvyvvvyyvvw|vvvvvvv|vvvvvvv|v|vvyvvvyvvxvvvyvvv|vvvvv|vvv|vvvx|vv|vyv|yv|yvyvv||v|yvyvvxvyvv|yvvyvyyvvvyyvvvvyvvyvvyv|yvvvxvyyvvvvvyyvvvyyv|yvvvvvvvwvvvyvwvvyvvvvyv|vvyvvvyyxvwyvvvvvvvvyvvvyvv|vvvvvyvwvy||v|||vvvvxvvvxwy|vyv|xvv|wv|yvxy|vvyvvyyvvvwyvvvwv|v|vv|vvvvvvv|vyvyyvvvvvvvvyvvyyvvyvvv|vvvyy|yv|xvvv|vvvvyvvxv|vvvvvvyvvvyvv|vvvvvvvvyvyv|vvvvvyvvvxv|vxvvvvvvxyvvvvyv||vvyxvvvvvw|v|vvvyvvvv|vvvvwy|vyvvy|vvvwvvvvvvvvvvvvvvy|vyvvyvvx|vv|vvvvvv|vvvyvyyvwvvv|vvvv|v||v|vvvv|vvvyxyv||vwvvvvvvvvvv|y|vvvv|vvvvvvyvxxvvyvvvvvvyvvvv|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| \ No newline at end of file diff --git a/Java/.recommenders/index/http___download_eclipse_org_recommenders_models_oxygen_/_0.prx b/Java/.recommenders/index/http___download_eclipse_org_recommenders_models_oxygen_/_0.prx deleted file mode 100644 index 238226b..0000000 Binary files a/Java/.recommenders/index/http___download_eclipse_org_recommenders_models_oxygen_/_0.prx and /dev/null differ diff --git a/Java/.recommenders/index/http___download_eclipse_org_recommenders_models_oxygen_/_0.tii b/Java/.recommenders/index/http___download_eclipse_org_recommenders_models_oxygen_/_0.tii deleted file mode 100644 index 3b536ad..0000000 Binary files a/Java/.recommenders/index/http___download_eclipse_org_recommenders_models_oxygen_/_0.tii and /dev/null differ diff --git a/Java/.recommenders/index/http___download_eclipse_org_recommenders_models_oxygen_/_0.tis b/Java/.recommenders/index/http___download_eclipse_org_recommenders_models_oxygen_/_0.tis deleted file mode 100644 index d36d9c8..0000000 Binary files a/Java/.recommenders/index/http___download_eclipse_org_recommenders_models_oxygen_/_0.tis and /dev/null differ diff --git a/Java/.recommenders/index/http___download_eclipse_org_recommenders_models_oxygen_/segments.gen b/Java/.recommenders/index/http___download_eclipse_org_recommenders_models_oxygen_/segments.gen deleted file mode 100644 index 63a7ec9..0000000 Binary files a/Java/.recommenders/index/http___download_eclipse_org_recommenders_models_oxygen_/segments.gen and /dev/null differ diff --git a/Java/.recommenders/index/http___download_eclipse_org_recommenders_models_oxygen_/segments_1 b/Java/.recommenders/index/http___download_eclipse_org_recommenders_models_oxygen_/segments_1 deleted file mode 100644 index f1f5307..0000000 Binary files a/Java/.recommenders/index/http___download_eclipse_org_recommenders_models_oxygen_/segments_1 and /dev/null differ diff --git a/Java/RemoteSystemsTempFiles/.project b/Java/RemoteSystemsTempFiles/.project deleted file mode 100644 index 5447a64..0000000 --- a/Java/RemoteSystemsTempFiles/.project +++ /dev/null @@ -1,12 +0,0 @@ - - - RemoteSystemsTempFiles - - - - - - - org.eclipse.rse.ui.remoteSystemsTempNature - - diff --git a/Python/PyCharm/venv/1 b/Python/PyCharm/venv/1 deleted file mode 100644 index e51af9b..0000000 --- a/Python/PyCharm/venv/1 +++ /dev/null @@ -1,4 +0,0 @@ -i = input("Number: ") - -if (i == 0): - print("HELLO") \ No newline at end of file diff --git a/Python/PyCharm/venv/Lib/site-packages/easy-install.pth b/Python/PyCharm/venv/Lib/site-packages/easy-install.pth deleted file mode 100644 index eb9ab24..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/easy-install.pth +++ /dev/null @@ -1,2 +0,0 @@ -./setuptools-28.8.0-py3.6.egg -./pip-9.0.1-py3.6.egg diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/EGG-INFO/PKG-INFO b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/EGG-INFO/PKG-INFO deleted file mode 100644 index 6f1032a..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/EGG-INFO/PKG-INFO +++ /dev/null @@ -1,61 +0,0 @@ -Metadata-Version: 1.2 -Name: pip -Version: 9.0.1 -Summary: The PyPA recommended tool for installing Python packages. -Home-page: https://pip.pypa.io/ -Author: The pip developers -Author-email: python-virtualenv@groups.google.com -License: MIT -Description: pip - === - - The `PyPA recommended - `_ - tool for installing Python packages. - - * `Installation `_ - * `Documentation `_ - * `Changelog `_ - * `Github Page `_ - * `Issue Tracking `_ - * `User mailing list `_ - * `Dev mailing list `_ - * User IRC: #pypa on Freenode. - * Dev IRC: #pypa-dev on Freenode. - - - .. image:: https://img.shields.io/pypi/v/pip.svg - :target: https://pypi.python.org/pypi/pip - - .. image:: https://img.shields.io/travis/pypa/pip/master.svg - :target: http://travis-ci.org/pypa/pip - - .. image:: https://img.shields.io/appveyor/ci/pypa/pip.svg - :target: https://ci.appveyor.com/project/pypa/pip/history - - .. image:: https://readthedocs.org/projects/pip/badge/?version=stable - :target: https://pip.pypa.io/en/stable - - Code of Conduct - --------------- - - Everyone interacting in the pip project's codebases, issue trackers, chat - rooms, and mailing lists is expected to follow the `PyPA Code of Conduct`_. - - .. _PyPA Code of Conduct: https://www.pypa.io/en/latest/code-of-conduct/ - -Keywords: easy_install distutils setuptools egg virtualenv -Platform: UNKNOWN -Classifier: Development Status :: 5 - Production/Stable -Classifier: Intended Audience :: Developers -Classifier: License :: OSI Approved :: MIT License -Classifier: Topic :: Software Development :: Build Tools -Classifier: Programming Language :: Python :: 2 -Classifier: Programming Language :: Python :: 2.6 -Classifier: Programming Language :: Python :: 2.7 -Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.3 -Classifier: Programming Language :: Python :: 3.4 -Classifier: Programming Language :: Python :: 3.5 -Classifier: Programming Language :: Python :: Implementation :: PyPy -Requires-Python: >=2.6,!=3.0.*,!=3.1.*,!=3.2.* diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/EGG-INFO/SOURCES.txt b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/EGG-INFO/SOURCES.txt deleted file mode 100644 index e66d7ac..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/EGG-INFO/SOURCES.txt +++ /dev/null @@ -1,290 +0,0 @@ -AUTHORS.txt -CHANGES.txt -LICENSE.txt -MANIFEST.in -README.rst -setup.cfg -setup.py -docs/Makefile -docs/__init__.py -docs/conf.py -docs/configuration.rst -docs/cookbook.rst -docs/development.rst -docs/index.rst -docs/installing.rst -docs/logic.rst -docs/make.bat -docs/news.rst -docs/pipext.py -docs/quickstart.rst -docs/usage.rst -docs/user_guide.rst -docs/reference/index.rst -docs/reference/pip.rst -docs/reference/pip_download.rst -docs/reference/pip_freeze.rst -docs/reference/pip_hash.rst -docs/reference/pip_install.rst -docs/reference/pip_list.rst -docs/reference/pip_search.rst -docs/reference/pip_show.rst -docs/reference/pip_uninstall.rst -docs/reference/pip_wheel.rst -pip/__init__.py -pip/__main__.py -pip/basecommand.py -pip/baseparser.py -pip/cmdoptions.py -pip/download.py -pip/exceptions.py -pip/index.py -pip/locations.py -pip/pep425tags.py -pip/status_codes.py -pip/wheel.py -pip.egg-info/PKG-INFO -pip.egg-info/SOURCES.txt -pip.egg-info/dependency_links.txt -pip.egg-info/entry_points.txt -pip.egg-info/not-zip-safe -pip.egg-info/requires.txt -pip.egg-info/top_level.txt -pip/_vendor/README.rst -pip/_vendor/__init__.py -pip/_vendor/appdirs.py -pip/_vendor/distro.py -pip/_vendor/ipaddress.py -pip/_vendor/ordereddict.py -pip/_vendor/pyparsing.py -pip/_vendor/re-vendor.py -pip/_vendor/retrying.py -pip/_vendor/six.py -pip/_vendor/vendor.txt -pip/_vendor/cachecontrol/__init__.py -pip/_vendor/cachecontrol/_cmd.py -pip/_vendor/cachecontrol/adapter.py -pip/_vendor/cachecontrol/cache.py -pip/_vendor/cachecontrol/compat.py -pip/_vendor/cachecontrol/controller.py -pip/_vendor/cachecontrol/filewrapper.py -pip/_vendor/cachecontrol/heuristics.py -pip/_vendor/cachecontrol/serialize.py -pip/_vendor/cachecontrol/wrapper.py -pip/_vendor/cachecontrol/caches/__init__.py -pip/_vendor/cachecontrol/caches/file_cache.py -pip/_vendor/cachecontrol/caches/redis_cache.py -pip/_vendor/colorama/__init__.py -pip/_vendor/colorama/ansi.py -pip/_vendor/colorama/ansitowin32.py -pip/_vendor/colorama/initialise.py -pip/_vendor/colorama/win32.py -pip/_vendor/colorama/winterm.py -pip/_vendor/distlib/__init__.py -pip/_vendor/distlib/compat.py -pip/_vendor/distlib/database.py -pip/_vendor/distlib/index.py -pip/_vendor/distlib/locators.py -pip/_vendor/distlib/manifest.py -pip/_vendor/distlib/markers.py -pip/_vendor/distlib/metadata.py -pip/_vendor/distlib/resources.py -pip/_vendor/distlib/scripts.py -pip/_vendor/distlib/t32.exe -pip/_vendor/distlib/t64.exe -pip/_vendor/distlib/util.py -pip/_vendor/distlib/version.py -pip/_vendor/distlib/w32.exe -pip/_vendor/distlib/w64.exe -pip/_vendor/distlib/wheel.py -pip/_vendor/distlib/_backport/__init__.py -pip/_vendor/distlib/_backport/misc.py -pip/_vendor/distlib/_backport/shutil.py -pip/_vendor/distlib/_backport/sysconfig.cfg -pip/_vendor/distlib/_backport/sysconfig.py -pip/_vendor/distlib/_backport/tarfile.py -pip/_vendor/html5lib/__init__.py -pip/_vendor/html5lib/_ihatexml.py -pip/_vendor/html5lib/_inputstream.py -pip/_vendor/html5lib/_tokenizer.py -pip/_vendor/html5lib/_utils.py -pip/_vendor/html5lib/constants.py -pip/_vendor/html5lib/html5parser.py -pip/_vendor/html5lib/serializer.py -pip/_vendor/html5lib/_trie/__init__.py -pip/_vendor/html5lib/_trie/_base.py -pip/_vendor/html5lib/_trie/datrie.py -pip/_vendor/html5lib/_trie/py.py -pip/_vendor/html5lib/filters/__init__.py -pip/_vendor/html5lib/filters/alphabeticalattributes.py -pip/_vendor/html5lib/filters/base.py -pip/_vendor/html5lib/filters/inject_meta_charset.py -pip/_vendor/html5lib/filters/lint.py -pip/_vendor/html5lib/filters/optionaltags.py -pip/_vendor/html5lib/filters/sanitizer.py -pip/_vendor/html5lib/filters/whitespace.py -pip/_vendor/html5lib/treeadapters/__init__.py -pip/_vendor/html5lib/treeadapters/genshi.py -pip/_vendor/html5lib/treeadapters/sax.py -pip/_vendor/html5lib/treebuilders/__init__.py -pip/_vendor/html5lib/treebuilders/base.py -pip/_vendor/html5lib/treebuilders/dom.py -pip/_vendor/html5lib/treebuilders/etree.py -pip/_vendor/html5lib/treebuilders/etree_lxml.py -pip/_vendor/html5lib/treewalkers/__init__.py -pip/_vendor/html5lib/treewalkers/base.py -pip/_vendor/html5lib/treewalkers/dom.py -pip/_vendor/html5lib/treewalkers/etree.py -pip/_vendor/html5lib/treewalkers/etree_lxml.py -pip/_vendor/html5lib/treewalkers/genshi.py -pip/_vendor/lockfile/__init__.py -pip/_vendor/lockfile/linklockfile.py -pip/_vendor/lockfile/mkdirlockfile.py -pip/_vendor/lockfile/pidlockfile.py -pip/_vendor/lockfile/sqlitelockfile.py -pip/_vendor/lockfile/symlinklockfile.py -pip/_vendor/packaging/__about__.py -pip/_vendor/packaging/__init__.py -pip/_vendor/packaging/_compat.py -pip/_vendor/packaging/_structures.py -pip/_vendor/packaging/markers.py -pip/_vendor/packaging/requirements.py -pip/_vendor/packaging/specifiers.py -pip/_vendor/packaging/utils.py -pip/_vendor/packaging/version.py -pip/_vendor/pkg_resources/__init__.py -pip/_vendor/progress/__init__.py -pip/_vendor/progress/bar.py -pip/_vendor/progress/counter.py -pip/_vendor/progress/helpers.py -pip/_vendor/progress/spinner.py -pip/_vendor/requests/__init__.py -pip/_vendor/requests/adapters.py -pip/_vendor/requests/api.py -pip/_vendor/requests/auth.py -pip/_vendor/requests/cacert.pem -pip/_vendor/requests/certs.py -pip/_vendor/requests/compat.py -pip/_vendor/requests/cookies.py -pip/_vendor/requests/exceptions.py -pip/_vendor/requests/hooks.py -pip/_vendor/requests/models.py -pip/_vendor/requests/sessions.py -pip/_vendor/requests/status_codes.py -pip/_vendor/requests/structures.py -pip/_vendor/requests/utils.py -pip/_vendor/requests/packages/__init__.py -pip/_vendor/requests/packages/chardet/__init__.py -pip/_vendor/requests/packages/chardet/big5freq.py -pip/_vendor/requests/packages/chardet/big5prober.py -pip/_vendor/requests/packages/chardet/chardetect.py -pip/_vendor/requests/packages/chardet/chardistribution.py -pip/_vendor/requests/packages/chardet/charsetgroupprober.py -pip/_vendor/requests/packages/chardet/charsetprober.py -pip/_vendor/requests/packages/chardet/codingstatemachine.py -pip/_vendor/requests/packages/chardet/compat.py -pip/_vendor/requests/packages/chardet/constants.py -pip/_vendor/requests/packages/chardet/cp949prober.py -pip/_vendor/requests/packages/chardet/escprober.py -pip/_vendor/requests/packages/chardet/escsm.py -pip/_vendor/requests/packages/chardet/eucjpprober.py -pip/_vendor/requests/packages/chardet/euckrfreq.py -pip/_vendor/requests/packages/chardet/euckrprober.py -pip/_vendor/requests/packages/chardet/euctwfreq.py -pip/_vendor/requests/packages/chardet/euctwprober.py -pip/_vendor/requests/packages/chardet/gb2312freq.py -pip/_vendor/requests/packages/chardet/gb2312prober.py -pip/_vendor/requests/packages/chardet/hebrewprober.py -pip/_vendor/requests/packages/chardet/jisfreq.py -pip/_vendor/requests/packages/chardet/jpcntx.py -pip/_vendor/requests/packages/chardet/langbulgarianmodel.py -pip/_vendor/requests/packages/chardet/langcyrillicmodel.py -pip/_vendor/requests/packages/chardet/langgreekmodel.py -pip/_vendor/requests/packages/chardet/langhebrewmodel.py -pip/_vendor/requests/packages/chardet/langhungarianmodel.py -pip/_vendor/requests/packages/chardet/langthaimodel.py -pip/_vendor/requests/packages/chardet/latin1prober.py -pip/_vendor/requests/packages/chardet/mbcharsetprober.py -pip/_vendor/requests/packages/chardet/mbcsgroupprober.py -pip/_vendor/requests/packages/chardet/mbcssm.py -pip/_vendor/requests/packages/chardet/sbcharsetprober.py -pip/_vendor/requests/packages/chardet/sbcsgroupprober.py -pip/_vendor/requests/packages/chardet/sjisprober.py -pip/_vendor/requests/packages/chardet/universaldetector.py -pip/_vendor/requests/packages/chardet/utf8prober.py -pip/_vendor/requests/packages/urllib3/__init__.py -pip/_vendor/requests/packages/urllib3/_collections.py -pip/_vendor/requests/packages/urllib3/connection.py -pip/_vendor/requests/packages/urllib3/connectionpool.py -pip/_vendor/requests/packages/urllib3/exceptions.py -pip/_vendor/requests/packages/urllib3/fields.py -pip/_vendor/requests/packages/urllib3/filepost.py -pip/_vendor/requests/packages/urllib3/poolmanager.py -pip/_vendor/requests/packages/urllib3/request.py -pip/_vendor/requests/packages/urllib3/response.py -pip/_vendor/requests/packages/urllib3/contrib/__init__.py -pip/_vendor/requests/packages/urllib3/contrib/appengine.py -pip/_vendor/requests/packages/urllib3/contrib/ntlmpool.py -pip/_vendor/requests/packages/urllib3/contrib/pyopenssl.py -pip/_vendor/requests/packages/urllib3/contrib/socks.py -pip/_vendor/requests/packages/urllib3/packages/__init__.py -pip/_vendor/requests/packages/urllib3/packages/ordered_dict.py -pip/_vendor/requests/packages/urllib3/packages/six.py -pip/_vendor/requests/packages/urllib3/packages/ssl_match_hostname/__init__.py -pip/_vendor/requests/packages/urllib3/packages/ssl_match_hostname/_implementation.py -pip/_vendor/requests/packages/urllib3/util/__init__.py -pip/_vendor/requests/packages/urllib3/util/connection.py -pip/_vendor/requests/packages/urllib3/util/request.py -pip/_vendor/requests/packages/urllib3/util/response.py -pip/_vendor/requests/packages/urllib3/util/retry.py -pip/_vendor/requests/packages/urllib3/util/ssl_.py -pip/_vendor/requests/packages/urllib3/util/timeout.py -pip/_vendor/requests/packages/urllib3/util/url.py -pip/_vendor/webencodings/__init__.py -pip/_vendor/webencodings/labels.py -pip/_vendor/webencodings/mklabels.py -pip/_vendor/webencodings/tests.py -pip/_vendor/webencodings/x_user_defined.py -pip/commands/__init__.py -pip/commands/check.py -pip/commands/completion.py -pip/commands/download.py -pip/commands/freeze.py -pip/commands/hash.py -pip/commands/help.py -pip/commands/install.py -pip/commands/list.py -pip/commands/search.py -pip/commands/show.py -pip/commands/uninstall.py -pip/commands/wheel.py -pip/compat/__init__.py -pip/compat/dictconfig.py -pip/models/__init__.py -pip/models/index.py -pip/operations/__init__.py -pip/operations/check.py -pip/operations/freeze.py -pip/req/__init__.py -pip/req/req_file.py -pip/req/req_install.py -pip/req/req_set.py -pip/req/req_uninstall.py -pip/utils/__init__.py -pip/utils/appdirs.py -pip/utils/build.py -pip/utils/deprecation.py -pip/utils/encoding.py -pip/utils/filesystem.py -pip/utils/glibc.py -pip/utils/hashes.py -pip/utils/logging.py -pip/utils/outdated.py -pip/utils/packaging.py -pip/utils/setuptools_build.py -pip/utils/ui.py -pip/vcs/__init__.py -pip/vcs/bazaar.py -pip/vcs/git.py -pip/vcs/mercurial.py -pip/vcs/subversion.py \ No newline at end of file diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/EGG-INFO/dependency_links.txt b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/EGG-INFO/dependency_links.txt deleted file mode 100644 index 8b13789..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/EGG-INFO/dependency_links.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/EGG-INFO/entry_points.txt b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/EGG-INFO/entry_points.txt deleted file mode 100644 index 879fd89..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/EGG-INFO/entry_points.txt +++ /dev/null @@ -1,5 +0,0 @@ -[console_scripts] -pip = pip:main -pip3 = pip:main -pip3.6 = pip:main - diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/EGG-INFO/not-zip-safe b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/EGG-INFO/not-zip-safe deleted file mode 100644 index 8b13789..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/EGG-INFO/not-zip-safe +++ /dev/null @@ -1 +0,0 @@ - diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/EGG-INFO/requires.txt b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/EGG-INFO/requires.txt deleted file mode 100644 index 26b980b..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/EGG-INFO/requires.txt +++ /dev/null @@ -1,7 +0,0 @@ - -[testing] -pytest -virtualenv>=1.10 -scripttest>=1.3 -mock -pretend diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/EGG-INFO/top_level.txt b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/EGG-INFO/top_level.txt deleted file mode 100644 index a1b589e..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/EGG-INFO/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/__init__.py b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/__init__.py deleted file mode 100644 index 9c1d8f9..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/__init__.py +++ /dev/null @@ -1,331 +0,0 @@ -#!/usr/bin/env python -from __future__ import absolute_import - -import locale -import logging -import os -import optparse -import warnings - -import sys -import re - -# 2016-06-17 barry@debian.org: urllib3 1.14 added optional support for socks, -# but if invoked (i.e. imported), it will issue a warning to stderr if socks -# isn't available. requests unconditionally imports urllib3's socks contrib -# module, triggering this warning. The warning breaks DEP-8 tests (because of -# the stderr output) and is just plain annoying in normal usage. I don't want -# to add socks as yet another dependency for pip, nor do I want to allow-stder -# in the DEP-8 tests, so just suppress the warning. pdb tells me this has to -# be done before the import of pip.vcs. -from pip._vendor.requests.packages.urllib3.exceptions import DependencyWarning -warnings.filterwarnings("ignore", category=DependencyWarning) # noqa - - -from pip.exceptions import InstallationError, CommandError, PipError -from pip.utils import get_installed_distributions, get_prog -from pip.utils import deprecation, dist_is_editable -from pip.vcs import git, mercurial, subversion, bazaar # noqa -from pip.baseparser import ConfigOptionParser, UpdatingDefaultsHelpFormatter -from pip.commands import get_summaries, get_similar_commands -from pip.commands import commands_dict -from pip._vendor.requests.packages.urllib3.exceptions import ( - InsecureRequestWarning, -) - - -# assignment for flake8 to be happy - -# This fixes a peculiarity when importing via __import__ - as we are -# initialising the pip module, "from pip import cmdoptions" is recursive -# and appears not to work properly in that situation. -import pip.cmdoptions -cmdoptions = pip.cmdoptions - -# The version as used in the setup.py and the docs conf.py -__version__ = "9.0.1" - - -logger = logging.getLogger(__name__) - -# Hide the InsecureRequestWarning from urllib3 -warnings.filterwarnings("ignore", category=InsecureRequestWarning) - - -def autocomplete(): - """Command and option completion for the main option parser (and options) - and its subcommands (and options). - - Enable by sourcing one of the completion shell scripts (bash, zsh or fish). - """ - # Don't complete if user hasn't sourced bash_completion file. - if 'PIP_AUTO_COMPLETE' not in os.environ: - return - cwords = os.environ['COMP_WORDS'].split()[1:] - cword = int(os.environ['COMP_CWORD']) - try: - current = cwords[cword - 1] - except IndexError: - current = '' - - subcommands = [cmd for cmd, summary in get_summaries()] - options = [] - # subcommand - try: - subcommand_name = [w for w in cwords if w in subcommands][0] - except IndexError: - subcommand_name = None - - parser = create_main_parser() - # subcommand options - if subcommand_name: - # special case: 'help' subcommand has no options - if subcommand_name == 'help': - sys.exit(1) - # special case: list locally installed dists for uninstall command - if subcommand_name == 'uninstall' and not current.startswith('-'): - installed = [] - lc = current.lower() - for dist in get_installed_distributions(local_only=True): - if dist.key.startswith(lc) and dist.key not in cwords[1:]: - installed.append(dist.key) - # if there are no dists installed, fall back to option completion - if installed: - for dist in installed: - print(dist) - sys.exit(1) - - subcommand = commands_dict[subcommand_name]() - options += [(opt.get_opt_string(), opt.nargs) - for opt in subcommand.parser.option_list_all - if opt.help != optparse.SUPPRESS_HELP] - - # filter out previously specified options from available options - prev_opts = [x.split('=')[0] for x in cwords[1:cword - 1]] - options = [(x, v) for (x, v) in options if x not in prev_opts] - # filter options by current input - options = [(k, v) for k, v in options if k.startswith(current)] - for option in options: - opt_label = option[0] - # append '=' to options which require args - if option[1]: - opt_label += '=' - print(opt_label) - else: - # show main parser options only when necessary - if current.startswith('-') or current.startswith('--'): - opts = [i.option_list for i in parser.option_groups] - opts.append(parser.option_list) - opts = (o for it in opts for o in it) - - subcommands += [i.get_opt_string() for i in opts - if i.help != optparse.SUPPRESS_HELP] - - print(' '.join([x for x in subcommands if x.startswith(current)])) - sys.exit(1) - - -def create_main_parser(): - parser_kw = { - 'usage': '\n%prog [options]', - 'add_help_option': False, - 'formatter': UpdatingDefaultsHelpFormatter(), - 'name': 'global', - 'prog': get_prog(), - } - - parser = ConfigOptionParser(**parser_kw) - parser.disable_interspersed_args() - - pip_pkg_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) - parser.version = 'pip %s from %s (python %s)' % ( - __version__, pip_pkg_dir, sys.version[:3]) - - # add the general options - gen_opts = cmdoptions.make_option_group(cmdoptions.general_group, parser) - parser.add_option_group(gen_opts) - - parser.main = True # so the help formatter knows - - # create command listing for description - command_summaries = get_summaries() - description = [''] + ['%-27s %s' % (i, j) for i, j in command_summaries] - parser.description = '\n'.join(description) - - return parser - - -def parseopts(args): - parser = create_main_parser() - - # Note: parser calls disable_interspersed_args(), so the result of this - # call is to split the initial args into the general options before the - # subcommand and everything else. - # For example: - # args: ['--timeout=5', 'install', '--user', 'INITools'] - # general_options: ['--timeout==5'] - # args_else: ['install', '--user', 'INITools'] - general_options, args_else = parser.parse_args(args) - - # --version - if general_options.version: - sys.stdout.write(parser.version) - sys.stdout.write(os.linesep) - sys.exit() - - # pip || pip help -> print_help() - if not args_else or (args_else[0] == 'help' and len(args_else) == 1): - parser.print_help() - sys.exit() - - # the subcommand name - cmd_name = args_else[0] - - if cmd_name not in commands_dict: - guess = get_similar_commands(cmd_name) - - msg = ['unknown command "%s"' % cmd_name] - if guess: - msg.append('maybe you meant "%s"' % guess) - - raise CommandError(' - '.join(msg)) - - # all the args without the subcommand - cmd_args = args[:] - cmd_args.remove(cmd_name) - - return cmd_name, cmd_args - - -def check_isolated(args): - isolated = False - - if "--isolated" in args: - isolated = True - - return isolated - - -def main(args=None): - if args is None: - args = sys.argv[1:] - - # Configure our deprecation warnings to be sent through loggers - deprecation.install_warning_logger() - - autocomplete() - - try: - cmd_name, cmd_args = parseopts(args) - except PipError as exc: - sys.stderr.write("ERROR: %s" % exc) - sys.stderr.write(os.linesep) - sys.exit(1) - - # Needed for locale.getpreferredencoding(False) to work - # in pip.utils.encoding.auto_decode - try: - locale.setlocale(locale.LC_ALL, '') - except locale.Error as e: - # setlocale can apparently crash if locale are uninitialized - logger.debug("Ignoring error %s when setting locale", e) - command = commands_dict[cmd_name](isolated=check_isolated(cmd_args)) - return command.main(cmd_args) - - -# ########################################################### -# # Writing freeze files - -class FrozenRequirement(object): - - def __init__(self, name, req, editable, comments=()): - self.name = name - self.req = req - self.editable = editable - self.comments = comments - - _rev_re = re.compile(r'-r(\d+)$') - _date_re = re.compile(r'-(20\d\d\d\d\d\d)$') - - @classmethod - def from_dist(cls, dist, dependency_links): - location = os.path.normcase(os.path.abspath(dist.location)) - comments = [] - from pip.vcs import vcs, get_src_requirement - if dist_is_editable(dist) and vcs.get_backend_name(location): - editable = True - try: - req = get_src_requirement(dist, location) - except InstallationError as exc: - logger.warning( - "Error when trying to get requirement for VCS system %s, " - "falling back to uneditable format", exc - ) - req = None - if req is None: - logger.warning( - 'Could not determine repository location of %s', location - ) - comments.append( - '## !! Could not determine repository location' - ) - req = dist.as_requirement() - editable = False - else: - editable = False - req = dist.as_requirement() - specs = req.specs - assert len(specs) == 1 and specs[0][0] in ["==", "==="], \ - 'Expected 1 spec with == or ===; specs = %r; dist = %r' % \ - (specs, dist) - version = specs[0][1] - ver_match = cls._rev_re.search(version) - date_match = cls._date_re.search(version) - if ver_match or date_match: - svn_backend = vcs.get_backend('svn') - if svn_backend: - svn_location = svn_backend().get_location( - dist, - dependency_links, - ) - if not svn_location: - logger.warning( - 'Warning: cannot find svn location for %s', req) - comments.append( - '## FIXME: could not find svn URL in dependency_links ' - 'for this package:' - ) - else: - comments.append( - '# Installing as editable to satisfy requirement %s:' % - req - ) - if ver_match: - rev = ver_match.group(1) - else: - rev = '{%s}' % date_match.group(1) - editable = True - req = '%s@%s#egg=%s' % ( - svn_location, - rev, - cls.egg_name(dist) - ) - return cls(dist.project_name, req, editable, comments) - - @staticmethod - def egg_name(dist): - name = dist.egg_name() - match = re.search(r'-py\d\.\d$', name) - if match: - name = name[:match.start()] - return name - - def __str__(self): - req = self.req - if self.editable: - req = '-e %s' % req - return '\n'.join(list(self.comments) + [str(req)]) + '\n' - - -if __name__ == '__main__': - sys.exit(main()) diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/__main__.py b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/__main__.py deleted file mode 100644 index 5556539..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/__main__.py +++ /dev/null @@ -1,19 +0,0 @@ -from __future__ import absolute_import - -import os -import sys - -# If we are running from a wheel, add the wheel to sys.path -# This allows the usage python pip-*.whl/pip install pip-*.whl -if __package__ == '': - # __file__ is pip-*.whl/pip/__main__.py - # first dirname call strips of '/__main__.py', second strips off '/pip' - # Resulting path is the name of the wheel itself - # Add that to sys.path so we can import pip - path = os.path.dirname(os.path.dirname(__file__)) - sys.path.insert(0, path) - -import pip # noqa - -if __name__ == '__main__': - sys.exit(pip.main()) diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/__init__.py b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/__init__.py deleted file mode 100644 index bee5f5e..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/__init__.py +++ /dev/null @@ -1,107 +0,0 @@ -""" -pip._vendor is for vendoring dependencies of pip to prevent needing pip to -depend on something external. - -Files inside of pip._vendor should be considered immutable and should only be -updated to versions from upstream. -""" -from __future__ import absolute_import - -import glob -import os.path -import sys - -# Downstream redistributors which have debundled our dependencies should also -# patch this value to be true. This will trigger the additional patching -# to cause things like "six" to be available as pip. -DEBUNDLED = False - -# By default, look in this directory for a bunch of .whl files which we will -# add to the beginning of sys.path before attempting to import anything. This -# is done to support downstream re-distributors like Debian and Fedora who -# wish to create their own Wheels for our dependencies to aid in debundling. -WHEEL_DIR = os.path.abspath(os.path.dirname(__file__)) - - -# Define a small helper function to alias our vendored modules to the real ones -# if the vendored ones do not exist. This idea of this was taken from -# https://github.com/kennethreitz/requests/pull/2567. -def vendored(modulename): - vendored_name = "{0}.{1}".format(__name__, modulename) - - try: - __import__(vendored_name, globals(), locals(), level=0) - except ImportError: - try: - __import__(modulename, globals(), locals(), level=0) - except ImportError: - # We can just silently allow import failures to pass here. If we - # got to this point it means that ``import pip._vendor.whatever`` - # failed and so did ``import whatever``. Since we're importing this - # upfront in an attempt to alias imports, not erroring here will - # just mean we get a regular import error whenever pip *actually* - # tries to import one of these modules to use it, which actually - # gives us a better error message than we would have otherwise - # gotten. - pass - else: - sys.modules[vendored_name] = sys.modules[modulename] - base, head = vendored_name.rsplit(".", 1) - setattr(sys.modules[base], head, sys.modules[modulename]) - - -# If we're operating in a debundled setup, then we want to go ahead and trigger -# the aliasing of our vendored libraries as well as looking for wheels to add -# to our sys.path. This will cause all of this code to be a no-op typically -# however downstream redistributors can enable it in a consistent way across -# all platforms. -if DEBUNDLED: - # Actually look inside of WHEEL_DIR to find .whl files and add them to the - # front of our sys.path. - sys.path[:] = glob.glob(os.path.join(WHEEL_DIR, "*.whl")) + sys.path - - # Actually alias all of our vendored dependencies. - vendored("cachecontrol") - vendored("colorama") - vendored("distlib") - vendored("distro") - vendored("html5lib") - vendored("lockfile") - vendored("six") - vendored("six.moves") - vendored("six.moves.urllib") - vendored("packaging") - vendored("packaging.version") - vendored("packaging.specifiers") - vendored("pkg_resources") - vendored("progress") - vendored("retrying") - vendored("requests") - vendored("requests.packages") - vendored("requests.packages.urllib3") - vendored("requests.packages.urllib3._collections") - vendored("requests.packages.urllib3.connection") - vendored("requests.packages.urllib3.connectionpool") - vendored("requests.packages.urllib3.contrib") - vendored("requests.packages.urllib3.contrib.ntlmpool") - vendored("requests.packages.urllib3.contrib.pyopenssl") - vendored("requests.packages.urllib3.exceptions") - vendored("requests.packages.urllib3.fields") - vendored("requests.packages.urllib3.filepost") - vendored("requests.packages.urllib3.packages") - vendored("requests.packages.urllib3.packages.ordered_dict") - vendored("requests.packages.urllib3.packages.six") - vendored("requests.packages.urllib3.packages.ssl_match_hostname") - vendored("requests.packages.urllib3.packages.ssl_match_hostname." - "_implementation") - vendored("requests.packages.urllib3.poolmanager") - vendored("requests.packages.urllib3.request") - vendored("requests.packages.urllib3.response") - vendored("requests.packages.urllib3.util") - vendored("requests.packages.urllib3.util.connection") - vendored("requests.packages.urllib3.util.request") - vendored("requests.packages.urllib3.util.response") - vendored("requests.packages.urllib3.util.retry") - vendored("requests.packages.urllib3.util.ssl_") - vendored("requests.packages.urllib3.util.timeout") - vendored("requests.packages.urllib3.util.url") diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/appdirs.py b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/appdirs.py deleted file mode 100644 index 4b5c38b..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/appdirs.py +++ /dev/null @@ -1,552 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -# Copyright (c) 2005-2010 ActiveState Software Inc. -# Copyright (c) 2013 Eddy PetriÈ™or - -"""Utilities for determining application-specific dirs. - -See for details and usage. -""" -# Dev Notes: -# - MSDN on where to store app data files: -# http://support.microsoft.com/default.aspx?scid=kb;en-us;310294#XSLTH3194121123120121120120 -# - macOS: http://developer.apple.com/documentation/MacOSX/Conceptual/BPFileSystem/index.html -# - XDG spec for Un*x: http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html - -__version_info__ = (1, 4, 0) -__version__ = '.'.join(map(str, __version_info__)) - - -import sys -import os - -PY3 = sys.version_info[0] == 3 - -if PY3: - unicode = str - -if sys.platform.startswith('java'): - import platform - os_name = platform.java_ver()[3][0] - if os_name.startswith('Windows'): # "Windows XP", "Windows 7", etc. - system = 'win32' - elif os_name.startswith('Mac'): # "macOS", etc. - system = 'darwin' - else: # "Linux", "SunOS", "FreeBSD", etc. - # Setting this to "linux2" is not ideal, but only Windows or Mac - # are actually checked for and the rest of the module expects - # *sys.platform* style strings. - system = 'linux2' -else: - system = sys.platform - - - -def user_data_dir(appname=None, appauthor=None, version=None, roaming=False): - r"""Return full path to the user-specific data dir for this application. - - "appname" is the name of application. - If None, just the system directory is returned. - "appauthor" (only used on Windows) is the name of the - appauthor or distributing body for this application. Typically - it is the owning company name. This falls back to appname. You may - pass False to disable it. - "version" is an optional version path element to append to the - path. You might want to use this if you want multiple versions - of your app to be able to run independently. If used, this - would typically be ".". - Only applied when appname is present. - "roaming" (boolean, default False) can be set True to use the Windows - roaming appdata directory. That means that for users on a Windows - network setup for roaming profiles, this user data will be - sync'd on login. See - - for a discussion of issues. - - Typical user data directories are: - macOS: ~/Library/Application Support/ - Unix: ~/.local/share/ # or in $XDG_DATA_HOME, if defined - Win XP (not roaming): C:\Documents and Settings\\Application Data\\ - Win XP (roaming): C:\Documents and Settings\\Local Settings\Application Data\\ - Win 7 (not roaming): C:\Users\\AppData\Local\\ - Win 7 (roaming): C:\Users\\AppData\Roaming\\ - - For Unix, we follow the XDG spec and support $XDG_DATA_HOME. - That means, by default "~/.local/share/". - """ - if system == "win32": - if appauthor is None: - appauthor = appname - const = roaming and "CSIDL_APPDATA" or "CSIDL_LOCAL_APPDATA" - path = os.path.normpath(_get_win_folder(const)) - if appname: - if appauthor is not False: - path = os.path.join(path, appauthor, appname) - else: - path = os.path.join(path, appname) - elif system == 'darwin': - path = os.path.expanduser('~/Library/Application Support/') - if appname: - path = os.path.join(path, appname) - else: - path = os.getenv('XDG_DATA_HOME', os.path.expanduser("~/.local/share")) - if appname: - path = os.path.join(path, appname) - if appname and version: - path = os.path.join(path, version) - return path - - -def site_data_dir(appname=None, appauthor=None, version=None, multipath=False): - """Return full path to the user-shared data dir for this application. - - "appname" is the name of application. - If None, just the system directory is returned. - "appauthor" (only used on Windows) is the name of the - appauthor or distributing body for this application. Typically - it is the owning company name. This falls back to appname. You may - pass False to disable it. - "version" is an optional version path element to append to the - path. You might want to use this if you want multiple versions - of your app to be able to run independently. If used, this - would typically be ".". - Only applied when appname is present. - "multipath" is an optional parameter only applicable to *nix - which indicates that the entire list of data dirs should be - returned. By default, the first item from XDG_DATA_DIRS is - returned, or '/usr/local/share/', - if XDG_DATA_DIRS is not set - - Typical user data directories are: - macOS: /Library/Application Support/ - Unix: /usr/local/share/ or /usr/share/ - Win XP: C:\Documents and Settings\All Users\Application Data\\ - Vista: (Fail! "C:\ProgramData" is a hidden *system* directory on Vista.) - Win 7: C:\ProgramData\\ # Hidden, but writeable on Win 7. - - For Unix, this is using the $XDG_DATA_DIRS[0] default. - - WARNING: Do not use this on Windows. See the Vista-Fail note above for why. - """ - if system == "win32": - if appauthor is None: - appauthor = appname - path = os.path.normpath(_get_win_folder("CSIDL_COMMON_APPDATA")) - if appname: - if appauthor is not False: - path = os.path.join(path, appauthor, appname) - else: - path = os.path.join(path, appname) - elif system == 'darwin': - path = os.path.expanduser('/Library/Application Support') - if appname: - path = os.path.join(path, appname) - else: - # XDG default for $XDG_DATA_DIRS - # only first, if multipath is False - path = os.getenv('XDG_DATA_DIRS', - os.pathsep.join(['/usr/local/share', '/usr/share'])) - pathlist = [os.path.expanduser(x.rstrip(os.sep)) for x in path.split(os.pathsep)] - if appname: - if version: - appname = os.path.join(appname, version) - pathlist = [os.sep.join([x, appname]) for x in pathlist] - - if multipath: - path = os.pathsep.join(pathlist) - else: - path = pathlist[0] - return path - - if appname and version: - path = os.path.join(path, version) - return path - - -def user_config_dir(appname=None, appauthor=None, version=None, roaming=False): - r"""Return full path to the user-specific config dir for this application. - - "appname" is the name of application. - If None, just the system directory is returned. - "appauthor" (only used on Windows) is the name of the - appauthor or distributing body for this application. Typically - it is the owning company name. This falls back to appname. You may - pass False to disable it. - "version" is an optional version path element to append to the - path. You might want to use this if you want multiple versions - of your app to be able to run independently. If used, this - would typically be ".". - Only applied when appname is present. - "roaming" (boolean, default False) can be set True to use the Windows - roaming appdata directory. That means that for users on a Windows - network setup for roaming profiles, this user data will be - sync'd on login. See - - for a discussion of issues. - - Typical user data directories are: - macOS: same as user_data_dir - Unix: ~/.config/ # or in $XDG_CONFIG_HOME, if defined - Win *: same as user_data_dir - - For Unix, we follow the XDG spec and support $XDG_CONFIG_HOME. - That means, by deafult "~/.config/". - """ - if system in ["win32", "darwin"]: - path = user_data_dir(appname, appauthor, None, roaming) - else: - path = os.getenv('XDG_CONFIG_HOME', os.path.expanduser("~/.config")) - if appname: - path = os.path.join(path, appname) - if appname and version: - path = os.path.join(path, version) - return path - - -def site_config_dir(appname=None, appauthor=None, version=None, multipath=False): - """Return full path to the user-shared data dir for this application. - - "appname" is the name of application. - If None, just the system directory is returned. - "appauthor" (only used on Windows) is the name of the - appauthor or distributing body for this application. Typically - it is the owning company name. This falls back to appname. You may - pass False to disable it. - "version" is an optional version path element to append to the - path. You might want to use this if you want multiple versions - of your app to be able to run independently. If used, this - would typically be ".". - Only applied when appname is present. - "multipath" is an optional parameter only applicable to *nix - which indicates that the entire list of config dirs should be - returned. By default, the first item from XDG_CONFIG_DIRS is - returned, or '/etc/xdg/', if XDG_CONFIG_DIRS is not set - - Typical user data directories are: - macOS: same as site_data_dir - Unix: /etc/xdg/ or $XDG_CONFIG_DIRS[i]/ for each value in - $XDG_CONFIG_DIRS - Win *: same as site_data_dir - Vista: (Fail! "C:\ProgramData" is a hidden *system* directory on Vista.) - - For Unix, this is using the $XDG_CONFIG_DIRS[0] default, if multipath=False - - WARNING: Do not use this on Windows. See the Vista-Fail note above for why. - """ - if system in ["win32", "darwin"]: - path = site_data_dir(appname, appauthor) - if appname and version: - path = os.path.join(path, version) - else: - # XDG default for $XDG_CONFIG_DIRS - # only first, if multipath is False - path = os.getenv('XDG_CONFIG_DIRS', '/etc/xdg') - pathlist = [os.path.expanduser(x.rstrip(os.sep)) for x in path.split(os.pathsep)] - if appname: - if version: - appname = os.path.join(appname, version) - pathlist = [os.sep.join([x, appname]) for x in pathlist] - - if multipath: - path = os.pathsep.join(pathlist) - else: - path = pathlist[0] - return path - - -def user_cache_dir(appname=None, appauthor=None, version=None, opinion=True): - r"""Return full path to the user-specific cache dir for this application. - - "appname" is the name of application. - If None, just the system directory is returned. - "appauthor" (only used on Windows) is the name of the - appauthor or distributing body for this application. Typically - it is the owning company name. This falls back to appname. You may - pass False to disable it. - "version" is an optional version path element to append to the - path. You might want to use this if you want multiple versions - of your app to be able to run independently. If used, this - would typically be ".". - Only applied when appname is present. - "opinion" (boolean) can be False to disable the appending of - "Cache" to the base app data dir for Windows. See - discussion below. - - Typical user cache directories are: - macOS: ~/Library/Caches/ - Unix: ~/.cache/ (XDG default) - Win XP: C:\Documents and Settings\\Local Settings\Application Data\\\Cache - Vista: C:\Users\\AppData\Local\\\Cache - - On Windows the only suggestion in the MSDN docs is that local settings go in - the `CSIDL_LOCAL_APPDATA` directory. This is identical to the non-roaming - app data dir (the default returned by `user_data_dir` above). Apps typically - put cache data somewhere *under* the given dir here. Some examples: - ...\Mozilla\Firefox\Profiles\\Cache - ...\Acme\SuperApp\Cache\1.0 - OPINION: This function appends "Cache" to the `CSIDL_LOCAL_APPDATA` value. - This can be disabled with the `opinion=False` option. - """ - if system == "win32": - if appauthor is None: - appauthor = appname - path = os.path.normpath(_get_win_folder("CSIDL_LOCAL_APPDATA")) - if appname: - if appauthor is not False: - path = os.path.join(path, appauthor, appname) - else: - path = os.path.join(path, appname) - if opinion: - path = os.path.join(path, "Cache") - elif system == 'darwin': - path = os.path.expanduser('~/Library/Caches') - if appname: - path = os.path.join(path, appname) - else: - path = os.getenv('XDG_CACHE_HOME', os.path.expanduser('~/.cache')) - if appname: - path = os.path.join(path, appname) - if appname and version: - path = os.path.join(path, version) - return path - - -def user_log_dir(appname=None, appauthor=None, version=None, opinion=True): - r"""Return full path to the user-specific log dir for this application. - - "appname" is the name of application. - If None, just the system directory is returned. - "appauthor" (only used on Windows) is the name of the - appauthor or distributing body for this application. Typically - it is the owning company name. This falls back to appname. You may - pass False to disable it. - "version" is an optional version path element to append to the - path. You might want to use this if you want multiple versions - of your app to be able to run independently. If used, this - would typically be ".". - Only applied when appname is present. - "opinion" (boolean) can be False to disable the appending of - "Logs" to the base app data dir for Windows, and "log" to the - base cache dir for Unix. See discussion below. - - Typical user cache directories are: - macOS: ~/Library/Logs/ - Unix: ~/.cache//log # or under $XDG_CACHE_HOME if defined - Win XP: C:\Documents and Settings\\Local Settings\Application Data\\\Logs - Vista: C:\Users\\AppData\Local\\\Logs - - On Windows the only suggestion in the MSDN docs is that local settings - go in the `CSIDL_LOCAL_APPDATA` directory. (Note: I'm interested in - examples of what some windows apps use for a logs dir.) - - OPINION: This function appends "Logs" to the `CSIDL_LOCAL_APPDATA` - value for Windows and appends "log" to the user cache dir for Unix. - This can be disabled with the `opinion=False` option. - """ - if system == "darwin": - path = os.path.join( - os.path.expanduser('~/Library/Logs'), - appname) - elif system == "win32": - path = user_data_dir(appname, appauthor, version) - version = False - if opinion: - path = os.path.join(path, "Logs") - else: - path = user_cache_dir(appname, appauthor, version) - version = False - if opinion: - path = os.path.join(path, "log") - if appname and version: - path = os.path.join(path, version) - return path - - -class AppDirs(object): - """Convenience wrapper for getting application dirs.""" - def __init__(self, appname, appauthor=None, version=None, roaming=False, - multipath=False): - self.appname = appname - self.appauthor = appauthor - self.version = version - self.roaming = roaming - self.multipath = multipath - - @property - def user_data_dir(self): - return user_data_dir(self.appname, self.appauthor, - version=self.version, roaming=self.roaming) - - @property - def site_data_dir(self): - return site_data_dir(self.appname, self.appauthor, - version=self.version, multipath=self.multipath) - - @property - def user_config_dir(self): - return user_config_dir(self.appname, self.appauthor, - version=self.version, roaming=self.roaming) - - @property - def site_config_dir(self): - return site_config_dir(self.appname, self.appauthor, - version=self.version, multipath=self.multipath) - - @property - def user_cache_dir(self): - return user_cache_dir(self.appname, self.appauthor, - version=self.version) - - @property - def user_log_dir(self): - return user_log_dir(self.appname, self.appauthor, - version=self.version) - - -#---- internal support stuff - -def _get_win_folder_from_registry(csidl_name): - """This is a fallback technique at best. I'm not sure if using the - registry for this guarantees us the correct answer for all CSIDL_* - names. - """ - import _winreg - - shell_folder_name = { - "CSIDL_APPDATA": "AppData", - "CSIDL_COMMON_APPDATA": "Common AppData", - "CSIDL_LOCAL_APPDATA": "Local AppData", - }[csidl_name] - - key = _winreg.OpenKey( - _winreg.HKEY_CURRENT_USER, - r"Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" - ) - dir, type = _winreg.QueryValueEx(key, shell_folder_name) - return dir - - -def _get_win_folder_with_pywin32(csidl_name): - from win32com.shell import shellcon, shell - dir = shell.SHGetFolderPath(0, getattr(shellcon, csidl_name), 0, 0) - # Try to make this a unicode path because SHGetFolderPath does - # not return unicode strings when there is unicode data in the - # path. - try: - dir = unicode(dir) - - # Downgrade to short path name if have highbit chars. See - # . - has_high_char = False - for c in dir: - if ord(c) > 255: - has_high_char = True - break - if has_high_char: - try: - import win32api - dir = win32api.GetShortPathName(dir) - except ImportError: - pass - except UnicodeError: - pass - return dir - - -def _get_win_folder_with_ctypes(csidl_name): - import ctypes - - csidl_const = { - "CSIDL_APPDATA": 26, - "CSIDL_COMMON_APPDATA": 35, - "CSIDL_LOCAL_APPDATA": 28, - }[csidl_name] - - buf = ctypes.create_unicode_buffer(1024) - ctypes.windll.shell32.SHGetFolderPathW(None, csidl_const, None, 0, buf) - - # Downgrade to short path name if have highbit chars. See - # . - has_high_char = False - for c in buf: - if ord(c) > 255: - has_high_char = True - break - if has_high_char: - buf2 = ctypes.create_unicode_buffer(1024) - if ctypes.windll.kernel32.GetShortPathNameW(buf.value, buf2, 1024): - buf = buf2 - - return buf.value - -def _get_win_folder_with_jna(csidl_name): - import array - from com.sun import jna - from com.sun.jna.platform import win32 - - buf_size = win32.WinDef.MAX_PATH * 2 - buf = array.zeros('c', buf_size) - shell = win32.Shell32.INSTANCE - shell.SHGetFolderPath(None, getattr(win32.ShlObj, csidl_name), None, win32.ShlObj.SHGFP_TYPE_CURRENT, buf) - dir = jna.Native.toString(buf.tostring()).rstrip("\0") - - # Downgrade to short path name if have highbit chars. See - # . - has_high_char = False - for c in dir: - if ord(c) > 255: - has_high_char = True - break - if has_high_char: - buf = array.zeros('c', buf_size) - kernel = win32.Kernel32.INSTANCE - if kernal.GetShortPathName(dir, buf, buf_size): - dir = jna.Native.toString(buf.tostring()).rstrip("\0") - - return dir - -if system == "win32": - try: - import win32com.shell - _get_win_folder = _get_win_folder_with_pywin32 - except ImportError: - try: - from ctypes import windll - _get_win_folder = _get_win_folder_with_ctypes - except ImportError: - try: - import com.sun.jna - _get_win_folder = _get_win_folder_with_jna - except ImportError: - _get_win_folder = _get_win_folder_from_registry - - -#---- self test code - -if __name__ == "__main__": - appname = "MyApp" - appauthor = "MyCompany" - - props = ("user_data_dir", "site_data_dir", - "user_config_dir", "site_config_dir", - "user_cache_dir", "user_log_dir") - - print("-- app dirs (with optional 'version')") - dirs = AppDirs(appname, appauthor, version="1.0") - for prop in props: - print("%s: %s" % (prop, getattr(dirs, prop))) - - print("\n-- app dirs (without optional 'version')") - dirs = AppDirs(appname, appauthor) - for prop in props: - print("%s: %s" % (prop, getattr(dirs, prop))) - - print("\n-- app dirs (without optional 'appauthor')") - dirs = AppDirs(appname) - for prop in props: - print("%s: %s" % (prop, getattr(dirs, prop))) - - print("\n-- app dirs (with disabled 'appauthor')") - dirs = AppDirs(appname, appauthor=False) - for prop in props: - print("%s: %s" % (prop, getattr(dirs, prop))) diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/cachecontrol/__init__.py b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/cachecontrol/__init__.py deleted file mode 100644 index ec9da2e..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/cachecontrol/__init__.py +++ /dev/null @@ -1,11 +0,0 @@ -"""CacheControl import Interface. - -Make it easy to import from cachecontrol without long namespaces. -""" -__author__ = 'Eric Larson' -__email__ = 'eric@ionrock.org' -__version__ = '0.11.7' - -from .wrapper import CacheControl -from .adapter import CacheControlAdapter -from .controller import CacheController diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/cachecontrol/_cmd.py b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/cachecontrol/_cmd.py deleted file mode 100644 index afdcc88..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/cachecontrol/_cmd.py +++ /dev/null @@ -1,60 +0,0 @@ -import logging - -from pip._vendor import requests - -from pip._vendor.cachecontrol.adapter import CacheControlAdapter -from pip._vendor.cachecontrol.cache import DictCache -from pip._vendor.cachecontrol.controller import logger - -from argparse import ArgumentParser - - -def setup_logging(): - logger.setLevel(logging.DEBUG) - handler = logging.StreamHandler() - logger.addHandler(handler) - - -def get_session(): - adapter = CacheControlAdapter( - DictCache(), - cache_etags=True, - serializer=None, - heuristic=None, - ) - sess = requests.Session() - sess.mount('http://', adapter) - sess.mount('https://', adapter) - - sess.cache_controller = adapter.controller - return sess - - -def get_args(): - parser = ArgumentParser() - parser.add_argument('url', help='The URL to try and cache') - return parser.parse_args() - - -def main(args=None): - args = get_args() - sess = get_session() - - # Make a request to get a response - resp = sess.get(args.url) - - # Turn on logging - setup_logging() - - # try setting the cache - sess.cache_controller.cache_response(resp.request, resp.raw) - - # Now try to get it - if sess.cache_controller.cached_request(resp.request): - print('Cached!') - else: - print('Not cached :(') - - -if __name__ == '__main__': - main() diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/cachecontrol/adapter.py b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/cachecontrol/adapter.py deleted file mode 100644 index 2348856..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/cachecontrol/adapter.py +++ /dev/null @@ -1,125 +0,0 @@ -import types -import functools - -from pip._vendor.requests.adapters import HTTPAdapter - -from .controller import CacheController -from .cache import DictCache -from .filewrapper import CallbackFileWrapper - - -class CacheControlAdapter(HTTPAdapter): - invalidating_methods = set(['PUT', 'DELETE']) - - def __init__(self, cache=None, - cache_etags=True, - controller_class=None, - serializer=None, - heuristic=None, - *args, **kw): - super(CacheControlAdapter, self).__init__(*args, **kw) - self.cache = cache or DictCache() - self.heuristic = heuristic - - controller_factory = controller_class or CacheController - self.controller = controller_factory( - self.cache, - cache_etags=cache_etags, - serializer=serializer, - ) - - def send(self, request, **kw): - """ - Send a request. Use the request information to see if it - exists in the cache and cache the response if we need to and can. - """ - if request.method == 'GET': - cached_response = self.controller.cached_request(request) - if cached_response: - return self.build_response(request, cached_response, - from_cache=True) - - # check for etags and add headers if appropriate - request.headers.update( - self.controller.conditional_headers(request) - ) - - resp = super(CacheControlAdapter, self).send(request, **kw) - - return resp - - def build_response(self, request, response, from_cache=False): - """ - Build a response by making a request or using the cache. - - This will end up calling send and returning a potentially - cached response - """ - if not from_cache and request.method == 'GET': - # Check for any heuristics that might update headers - # before trying to cache. - if self.heuristic: - response = self.heuristic.apply(response) - - # apply any expiration heuristics - if response.status == 304: - # We must have sent an ETag request. This could mean - # that we've been expired already or that we simply - # have an etag. In either case, we want to try and - # update the cache if that is the case. - cached_response = self.controller.update_cached_response( - request, response - ) - - if cached_response is not response: - from_cache = True - - # We are done with the server response, read a - # possible response body (compliant servers will - # not return one, but we cannot be 100% sure) and - # release the connection back to the pool. - response.read(decode_content=False) - response.release_conn() - - response = cached_response - - # We always cache the 301 responses - elif response.status == 301: - self.controller.cache_response(request, response) - else: - # Wrap the response file with a wrapper that will cache the - # response when the stream has been consumed. - response._fp = CallbackFileWrapper( - response._fp, - functools.partial( - self.controller.cache_response, - request, - response, - ) - ) - if response.chunked: - super_update_chunk_length = response._update_chunk_length - - def _update_chunk_length(self): - super_update_chunk_length() - if self.chunk_left == 0: - self._fp._close() - response._update_chunk_length = types.MethodType(_update_chunk_length, response) - - resp = super(CacheControlAdapter, self).build_response( - request, response - ) - - # See if we should invalidate the cache. - if request.method in self.invalidating_methods and resp.ok: - cache_url = self.controller.cache_url(request.url) - self.cache.delete(cache_url) - - # Give the request a from_cache attr to let people use it - resp.from_cache = from_cache - - return resp - - def close(self): - self.cache.close() - super(CacheControlAdapter, self).close() diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/cachecontrol/cache.py b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/cachecontrol/cache.py deleted file mode 100644 index 7389a73..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/cachecontrol/cache.py +++ /dev/null @@ -1,39 +0,0 @@ -""" -The cache object API for implementing caches. The default is a thread -safe in-memory dictionary. -""" -from threading import Lock - - -class BaseCache(object): - - def get(self, key): - raise NotImplemented() - - def set(self, key, value): - raise NotImplemented() - - def delete(self, key): - raise NotImplemented() - - def close(self): - pass - - -class DictCache(BaseCache): - - def __init__(self, init_dict=None): - self.lock = Lock() - self.data = init_dict or {} - - def get(self, key): - return self.data.get(key, None) - - def set(self, key, value): - with self.lock: - self.data.update({key: value}) - - def delete(self, key): - with self.lock: - if key in self.data: - self.data.pop(key) diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/cachecontrol/caches/__init__.py b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/cachecontrol/caches/__init__.py deleted file mode 100644 index f9e66a1..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/cachecontrol/caches/__init__.py +++ /dev/null @@ -1,18 +0,0 @@ -from textwrap import dedent - -try: - from .file_cache import FileCache -except ImportError: - notice = dedent(''' - NOTE: In order to use the FileCache you must have - lockfile installed. You can install it via pip: - pip install lockfile - ''') - print(notice) - - -try: - import redis - from .redis_cache import RedisCache -except ImportError: - pass diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/cachecontrol/caches/file_cache.py b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/cachecontrol/caches/file_cache.py deleted file mode 100644 index b77728f..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/cachecontrol/caches/file_cache.py +++ /dev/null @@ -1,116 +0,0 @@ -import hashlib -import os - -from pip._vendor.lockfile import LockFile -from pip._vendor.lockfile.mkdirlockfile import MkdirLockFile - -from ..cache import BaseCache -from ..controller import CacheController - - -def _secure_open_write(filename, fmode): - # We only want to write to this file, so open it in write only mode - flags = os.O_WRONLY - - # os.O_CREAT | os.O_EXCL will fail if the file already exists, so we only - # will open *new* files. - # We specify this because we want to ensure that the mode we pass is the - # mode of the file. - flags |= os.O_CREAT | os.O_EXCL - - # Do not follow symlinks to prevent someone from making a symlink that - # we follow and insecurely open a cache file. - if hasattr(os, "O_NOFOLLOW"): - flags |= os.O_NOFOLLOW - - # On Windows we'll mark this file as binary - if hasattr(os, "O_BINARY"): - flags |= os.O_BINARY - - # Before we open our file, we want to delete any existing file that is - # there - try: - os.remove(filename) - except (IOError, OSError): - # The file must not exist already, so we can just skip ahead to opening - pass - - # Open our file, the use of os.O_CREAT | os.O_EXCL will ensure that if a - # race condition happens between the os.remove and this line, that an - # error will be raised. Because we utilize a lockfile this should only - # happen if someone is attempting to attack us. - fd = os.open(filename, flags, fmode) - try: - return os.fdopen(fd, "wb") - except: - # An error occurred wrapping our FD in a file object - os.close(fd) - raise - - -class FileCache(BaseCache): - def __init__(self, directory, forever=False, filemode=0o0600, - dirmode=0o0700, use_dir_lock=None, lock_class=None): - - if use_dir_lock is not None and lock_class is not None: - raise ValueError("Cannot use use_dir_lock and lock_class together") - - if use_dir_lock: - lock_class = MkdirLockFile - - if lock_class is None: - lock_class = LockFile - - self.directory = directory - self.forever = forever - self.filemode = filemode - self.dirmode = dirmode - self.lock_class = lock_class - - - @staticmethod - def encode(x): - return hashlib.sha224(x.encode()).hexdigest() - - def _fn(self, name): - # NOTE: This method should not change as some may depend on it. - # See: https://github.com/ionrock/cachecontrol/issues/63 - hashed = self.encode(name) - parts = list(hashed[:5]) + [hashed] - return os.path.join(self.directory, *parts) - - def get(self, key): - name = self._fn(key) - if not os.path.exists(name): - return None - - with open(name, 'rb') as fh: - return fh.read() - - def set(self, key, value): - name = self._fn(key) - - # Make sure the directory exists - try: - os.makedirs(os.path.dirname(name), self.dirmode) - except (IOError, OSError): - pass - - with self.lock_class(name) as lock: - # Write our actual file - with _secure_open_write(lock.path, self.filemode) as fh: - fh.write(value) - - def delete(self, key): - name = self._fn(key) - if not self.forever: - os.remove(name) - - -def url_to_file_path(url, filecache): - """Return the file cache path based on the URL. - - This does not ensure the file exists! - """ - key = CacheController.cache_url(url) - return filecache._fn(key) diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/cachecontrol/caches/redis_cache.py b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/cachecontrol/caches/redis_cache.py deleted file mode 100644 index 9f5d55f..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/cachecontrol/caches/redis_cache.py +++ /dev/null @@ -1,41 +0,0 @@ -from __future__ import division - -from datetime import datetime - - -def total_seconds(td): - """Python 2.6 compatability""" - if hasattr(td, 'total_seconds'): - return td.total_seconds() - - ms = td.microseconds - secs = (td.seconds + td.days * 24 * 3600) - return (ms + secs * 10**6) / 10**6 - - -class RedisCache(object): - - def __init__(self, conn): - self.conn = conn - - def get(self, key): - return self.conn.get(key) - - def set(self, key, value, expires=None): - if not expires: - self.conn.set(key, value) - else: - expires = expires - datetime.now() - self.conn.setex(key, total_seconds(expires), value) - - def delete(self, key): - self.conn.delete(key) - - def clear(self): - """Helper for clearing all the keys in a database. Use with - caution!""" - for key in self.conn.keys(): - self.conn.delete(key) - - def close(self): - self.conn.disconnect() diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/cachecontrol/compat.py b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/cachecontrol/compat.py deleted file mode 100644 index 018e6ac..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/cachecontrol/compat.py +++ /dev/null @@ -1,20 +0,0 @@ -try: - from urllib.parse import urljoin -except ImportError: - from urlparse import urljoin - - -try: - import cPickle as pickle -except ImportError: - import pickle - - -from pip._vendor.requests.packages.urllib3.response import HTTPResponse -from pip._vendor.requests.packages.urllib3.util import is_fp_closed - -# Replicate some six behaviour -try: - text_type = (unicode,) -except NameError: - text_type = (str,) diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/cachecontrol/controller.py b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/cachecontrol/controller.py deleted file mode 100644 index 5eb961f..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/cachecontrol/controller.py +++ /dev/null @@ -1,353 +0,0 @@ -""" -The httplib2 algorithms ported for use with requests. -""" -import logging -import re -import calendar -import time -from email.utils import parsedate_tz - -from pip._vendor.requests.structures import CaseInsensitiveDict - -from .cache import DictCache -from .serialize import Serializer - - -logger = logging.getLogger(__name__) - -URI = re.compile(r"^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?") - - -def parse_uri(uri): - """Parses a URI using the regex given in Appendix B of RFC 3986. - - (scheme, authority, path, query, fragment) = parse_uri(uri) - """ - groups = URI.match(uri).groups() - return (groups[1], groups[3], groups[4], groups[6], groups[8]) - - -class CacheController(object): - """An interface to see if request should cached or not. - """ - def __init__(self, cache=None, cache_etags=True, serializer=None): - self.cache = cache or DictCache() - self.cache_etags = cache_etags - self.serializer = serializer or Serializer() - - @classmethod - def _urlnorm(cls, uri): - """Normalize the URL to create a safe key for the cache""" - (scheme, authority, path, query, fragment) = parse_uri(uri) - if not scheme or not authority: - raise Exception("Only absolute URIs are allowed. uri = %s" % uri) - - scheme = scheme.lower() - authority = authority.lower() - - if not path: - path = "/" - - # Could do syntax based normalization of the URI before - # computing the digest. See Section 6.2.2 of Std 66. - request_uri = query and "?".join([path, query]) or path - defrag_uri = scheme + "://" + authority + request_uri - - return defrag_uri - - @classmethod - def cache_url(cls, uri): - return cls._urlnorm(uri) - - def parse_cache_control(self, headers): - """ - Parse the cache control headers returning a dictionary with values - for the different directives. - """ - retval = {} - - cc_header = 'cache-control' - if 'Cache-Control' in headers: - cc_header = 'Cache-Control' - - if cc_header in headers: - parts = headers[cc_header].split(',') - parts_with_args = [ - tuple([x.strip().lower() for x in part.split("=", 1)]) - for part in parts if -1 != part.find("=") - ] - parts_wo_args = [ - (name.strip().lower(), 1) - for name in parts if -1 == name.find("=") - ] - retval = dict(parts_with_args + parts_wo_args) - return retval - - def cached_request(self, request): - """ - Return a cached response if it exists in the cache, otherwise - return False. - """ - cache_url = self.cache_url(request.url) - logger.debug('Looking up "%s" in the cache', cache_url) - cc = self.parse_cache_control(request.headers) - - # Bail out if the request insists on fresh data - if 'no-cache' in cc: - logger.debug('Request header has "no-cache", cache bypassed') - return False - - if 'max-age' in cc and cc['max-age'] == 0: - logger.debug('Request header has "max_age" as 0, cache bypassed') - return False - - # Request allows serving from the cache, let's see if we find something - cache_data = self.cache.get(cache_url) - if cache_data is None: - logger.debug('No cache entry available') - return False - - # Check whether it can be deserialized - resp = self.serializer.loads(request, cache_data) - if not resp: - logger.warning('Cache entry deserialization failed, entry ignored') - return False - - # If we have a cached 301, return it immediately. We don't - # need to test our response for other headers b/c it is - # intrinsically "cacheable" as it is Permanent. - # See: - # https://tools.ietf.org/html/rfc7231#section-6.4.2 - # - # Client can try to refresh the value by repeating the request - # with cache busting headers as usual (ie no-cache). - if resp.status == 301: - msg = ('Returning cached "301 Moved Permanently" response ' - '(ignoring date and etag information)') - logger.debug(msg) - return resp - - headers = CaseInsensitiveDict(resp.headers) - if not headers or 'date' not in headers: - if 'etag' not in headers: - # Without date or etag, the cached response can never be used - # and should be deleted. - logger.debug('Purging cached response: no date or etag') - self.cache.delete(cache_url) - logger.debug('Ignoring cached response: no date') - return False - - now = time.time() - date = calendar.timegm( - parsedate_tz(headers['date']) - ) - current_age = max(0, now - date) - logger.debug('Current age based on date: %i', current_age) - - # TODO: There is an assumption that the result will be a - # urllib3 response object. This may not be best since we - # could probably avoid instantiating or constructing the - # response until we know we need it. - resp_cc = self.parse_cache_control(headers) - - # determine freshness - freshness_lifetime = 0 - - # Check the max-age pragma in the cache control header - if 'max-age' in resp_cc and resp_cc['max-age'].isdigit(): - freshness_lifetime = int(resp_cc['max-age']) - logger.debug('Freshness lifetime from max-age: %i', - freshness_lifetime) - - # If there isn't a max-age, check for an expires header - elif 'expires' in headers: - expires = parsedate_tz(headers['expires']) - if expires is not None: - expire_time = calendar.timegm(expires) - date - freshness_lifetime = max(0, expire_time) - logger.debug("Freshness lifetime from expires: %i", - freshness_lifetime) - - # Determine if we are setting freshness limit in the - # request. Note, this overrides what was in the response. - if 'max-age' in cc: - try: - freshness_lifetime = int(cc['max-age']) - logger.debug('Freshness lifetime from request max-age: %i', - freshness_lifetime) - except ValueError: - freshness_lifetime = 0 - - if 'min-fresh' in cc: - try: - min_fresh = int(cc['min-fresh']) - except ValueError: - min_fresh = 0 - # adjust our current age by our min fresh - current_age += min_fresh - logger.debug('Adjusted current age from min-fresh: %i', - current_age) - - # Return entry if it is fresh enough - if freshness_lifetime > current_age: - logger.debug('The response is "fresh", returning cached response') - logger.debug('%i > %i', freshness_lifetime, current_age) - return resp - - # we're not fresh. If we don't have an Etag, clear it out - if 'etag' not in headers: - logger.debug( - 'The cached response is "stale" with no etag, purging' - ) - self.cache.delete(cache_url) - - # return the original handler - return False - - def conditional_headers(self, request): - cache_url = self.cache_url(request.url) - resp = self.serializer.loads(request, self.cache.get(cache_url)) - new_headers = {} - - if resp: - headers = CaseInsensitiveDict(resp.headers) - - if 'etag' in headers: - new_headers['If-None-Match'] = headers['ETag'] - - if 'last-modified' in headers: - new_headers['If-Modified-Since'] = headers['Last-Modified'] - - return new_headers - - def cache_response(self, request, response, body=None): - """ - Algorithm for caching requests. - - This assumes a requests Response object. - """ - # From httplib2: Don't cache 206's since we aren't going to - # handle byte range requests - cacheable_status_codes = [200, 203, 300, 301] - if response.status not in cacheable_status_codes: - logger.debug( - 'Status code %s not in %s', - response.status, - cacheable_status_codes - ) - return - - response_headers = CaseInsensitiveDict(response.headers) - - # If we've been given a body, our response has a Content-Length, that - # Content-Length is valid then we can check to see if the body we've - # been given matches the expected size, and if it doesn't we'll just - # skip trying to cache it. - if (body is not None and - "content-length" in response_headers and - response_headers["content-length"].isdigit() and - int(response_headers["content-length"]) != len(body)): - return - - cc_req = self.parse_cache_control(request.headers) - cc = self.parse_cache_control(response_headers) - - cache_url = self.cache_url(request.url) - logger.debug('Updating cache with response from "%s"', cache_url) - - # Delete it from the cache if we happen to have it stored there - no_store = False - if cc.get('no-store'): - no_store = True - logger.debug('Response header has "no-store"') - if cc_req.get('no-store'): - no_store = True - logger.debug('Request header has "no-store"') - if no_store and self.cache.get(cache_url): - logger.debug('Purging existing cache entry to honor "no-store"') - self.cache.delete(cache_url) - - # If we've been given an etag, then keep the response - if self.cache_etags and 'etag' in response_headers: - logger.debug('Caching due to etag') - self.cache.set( - cache_url, - self.serializer.dumps(request, response, body=body), - ) - - # Add to the cache any 301s. We do this before looking that - # the Date headers. - elif response.status == 301: - logger.debug('Caching permanant redirect') - self.cache.set( - cache_url, - self.serializer.dumps(request, response) - ) - - # Add to the cache if the response headers demand it. If there - # is no date header then we can't do anything about expiring - # the cache. - elif 'date' in response_headers: - # cache when there is a max-age > 0 - if cc and cc.get('max-age'): - if cc['max-age'].isdigit() and int(cc['max-age']) > 0: - logger.debug('Caching b/c date exists and max-age > 0') - self.cache.set( - cache_url, - self.serializer.dumps(request, response, body=body), - ) - - # If the request can expire, it means we should cache it - # in the meantime. - elif 'expires' in response_headers: - if response_headers['expires']: - logger.debug('Caching b/c of expires header') - self.cache.set( - cache_url, - self.serializer.dumps(request, response, body=body), - ) - - def update_cached_response(self, request, response): - """On a 304 we will get a new set of headers that we want to - update our cached value with, assuming we have one. - - This should only ever be called when we've sent an ETag and - gotten a 304 as the response. - """ - cache_url = self.cache_url(request.url) - - cached_response = self.serializer.loads( - request, - self.cache.get(cache_url) - ) - - if not cached_response: - # we didn't have a cached response - return response - - # Lets update our headers with the headers from the new request: - # http://tools.ietf.org/html/draft-ietf-httpbis-p4-conditional-26#section-4.1 - # - # The server isn't supposed to send headers that would make - # the cached body invalid. But... just in case, we'll be sure - # to strip out ones we know that might be problmatic due to - # typical assumptions. - excluded_headers = [ - "content-length", - ] - - cached_response.headers.update( - dict((k, v) for k, v in response.headers.items() - if k.lower() not in excluded_headers) - ) - - # we want a 200 b/c we have content via the cache - cached_response.status = 200 - - # update our cache - self.cache.set( - cache_url, - self.serializer.dumps(request, cached_response), - ) - - return cached_response diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/cachecontrol/filewrapper.py b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/cachecontrol/filewrapper.py deleted file mode 100644 index f1e1ce0..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/cachecontrol/filewrapper.py +++ /dev/null @@ -1,78 +0,0 @@ -from io import BytesIO - - -class CallbackFileWrapper(object): - """ - Small wrapper around a fp object which will tee everything read into a - buffer, and when that file is closed it will execute a callback with the - contents of that buffer. - - All attributes are proxied to the underlying file object. - - This class uses members with a double underscore (__) leading prefix so as - not to accidentally shadow an attribute. - """ - - def __init__(self, fp, callback): - self.__buf = BytesIO() - self.__fp = fp - self.__callback = callback - - def __getattr__(self, name): - # The vaguaries of garbage collection means that self.__fp is - # not always set. By using __getattribute__ and the private - # name[0] allows looking up the attribute value and raising an - # AttributeError when it doesn't exist. This stop thigns from - # infinitely recursing calls to getattr in the case where - # self.__fp hasn't been set. - # - # [0] https://docs.python.org/2/reference/expressions.html#atom-identifiers - fp = self.__getattribute__('_CallbackFileWrapper__fp') - return getattr(fp, name) - - def __is_fp_closed(self): - try: - return self.__fp.fp is None - except AttributeError: - pass - - try: - return self.__fp.closed - except AttributeError: - pass - - # We just don't cache it then. - # TODO: Add some logging here... - return False - - def _close(self): - if self.__callback: - self.__callback(self.__buf.getvalue()) - - # We assign this to None here, because otherwise we can get into - # really tricky problems where the CPython interpreter dead locks - # because the callback is holding a reference to something which - # has a __del__ method. Setting this to None breaks the cycle - # and allows the garbage collector to do it's thing normally. - self.__callback = None - - def read(self, amt=None): - data = self.__fp.read(amt) - self.__buf.write(data) - if self.__is_fp_closed(): - self._close() - - return data - - def _safe_read(self, amt): - data = self.__fp._safe_read(amt) - if amt == 2 and data == b'\r\n': - # urllib executes this read to toss the CRLF at the end - # of the chunk. - return data - - self.__buf.write(data) - if self.__is_fp_closed(): - self._close() - - return data diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/cachecontrol/heuristics.py b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/cachecontrol/heuristics.py deleted file mode 100644 index 94715a4..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/cachecontrol/heuristics.py +++ /dev/null @@ -1,138 +0,0 @@ -import calendar -import time - -from email.utils import formatdate, parsedate, parsedate_tz - -from datetime import datetime, timedelta - -TIME_FMT = "%a, %d %b %Y %H:%M:%S GMT" - - -def expire_after(delta, date=None): - date = date or datetime.now() - return date + delta - - -def datetime_to_header(dt): - return formatdate(calendar.timegm(dt.timetuple())) - - -class BaseHeuristic(object): - - def warning(self, response): - """ - Return a valid 1xx warning header value describing the cache - adjustments. - - The response is provided too allow warnings like 113 - http://tools.ietf.org/html/rfc7234#section-5.5.4 where we need - to explicitly say response is over 24 hours old. - """ - return '110 - "Response is Stale"' - - def update_headers(self, response): - """Update the response headers with any new headers. - - NOTE: This SHOULD always include some Warning header to - signify that the response was cached by the client, not - by way of the provided headers. - """ - return {} - - def apply(self, response): - updated_headers = self.update_headers(response) - - if updated_headers: - response.headers.update(updated_headers) - warning_header_value = self.warning(response) - if warning_header_value is not None: - response.headers.update({'Warning': warning_header_value}) - - return response - - -class OneDayCache(BaseHeuristic): - """ - Cache the response by providing an expires 1 day in the - future. - """ - def update_headers(self, response): - headers = {} - - if 'expires' not in response.headers: - date = parsedate(response.headers['date']) - expires = expire_after(timedelta(days=1), - date=datetime(*date[:6])) - headers['expires'] = datetime_to_header(expires) - headers['cache-control'] = 'public' - return headers - - -class ExpiresAfter(BaseHeuristic): - """ - Cache **all** requests for a defined time period. - """ - - def __init__(self, **kw): - self.delta = timedelta(**kw) - - def update_headers(self, response): - expires = expire_after(self.delta) - return { - 'expires': datetime_to_header(expires), - 'cache-control': 'public', - } - - def warning(self, response): - tmpl = '110 - Automatically cached for %s. Response might be stale' - return tmpl % self.delta - - -class LastModified(BaseHeuristic): - """ - If there is no Expires header already, fall back on Last-Modified - using the heuristic from - http://tools.ietf.org/html/rfc7234#section-4.2.2 - to calculate a reasonable value. - - Firefox also does something like this per - https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching_FAQ - http://lxr.mozilla.org/mozilla-release/source/netwerk/protocol/http/nsHttpResponseHead.cpp#397 - Unlike mozilla we limit this to 24-hr. - """ - cacheable_by_default_statuses = set([ - 200, 203, 204, 206, 300, 301, 404, 405, 410, 414, 501 - ]) - - def update_headers(self, resp): - headers = resp.headers - - if 'expires' in headers: - return {} - - if 'cache-control' in headers and headers['cache-control'] != 'public': - return {} - - if resp.status not in self.cacheable_by_default_statuses: - return {} - - if 'date' not in headers or 'last-modified' not in headers: - return {} - - date = calendar.timegm(parsedate_tz(headers['date'])) - last_modified = parsedate(headers['last-modified']) - if date is None or last_modified is None: - return {} - - now = time.time() - current_age = max(0, now - date) - delta = date - calendar.timegm(last_modified) - freshness_lifetime = max(0, min(delta / 10, 24 * 3600)) - if freshness_lifetime <= current_age: - return {} - - expires = date + freshness_lifetime - return {'expires': time.strftime(TIME_FMT, time.gmtime(expires))} - - def warning(self, resp): - return None diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/cachecontrol/serialize.py b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/cachecontrol/serialize.py deleted file mode 100644 index 8f9c589..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/cachecontrol/serialize.py +++ /dev/null @@ -1,196 +0,0 @@ -import base64 -import io -import json -import zlib - -from pip._vendor.requests.structures import CaseInsensitiveDict - -from .compat import HTTPResponse, pickle, text_type - - -def _b64_encode_bytes(b): - return base64.b64encode(b).decode("ascii") - - -def _b64_encode_str(s): - return _b64_encode_bytes(s.encode("utf8")) - - -def _b64_encode(s): - if isinstance(s, text_type): - return _b64_encode_str(s) - return _b64_encode_bytes(s) - - -def _b64_decode_bytes(b): - return base64.b64decode(b.encode("ascii")) - - -def _b64_decode_str(s): - return _b64_decode_bytes(s).decode("utf8") - - -class Serializer(object): - - def dumps(self, request, response, body=None): - response_headers = CaseInsensitiveDict(response.headers) - - if body is None: - body = response.read(decode_content=False) - - # NOTE: 99% sure this is dead code. I'm only leaving it - # here b/c I don't have a test yet to prove - # it. Basically, before using - # `cachecontrol.filewrapper.CallbackFileWrapper`, - # this made an effort to reset the file handle. The - # `CallbackFileWrapper` short circuits this code by - # setting the body as the content is consumed, the - # result being a `body` argument is *always* passed - # into cache_response, and in turn, - # `Serializer.dump`. - response._fp = io.BytesIO(body) - - data = { - "response": { - "body": _b64_encode_bytes(body), - "headers": dict( - (_b64_encode(k), _b64_encode(v)) - for k, v in response.headers.items() - ), - "status": response.status, - "version": response.version, - "reason": _b64_encode_str(response.reason), - "strict": response.strict, - "decode_content": response.decode_content, - }, - } - - # Construct our vary headers - data["vary"] = {} - if "vary" in response_headers: - varied_headers = response_headers['vary'].split(',') - for header in varied_headers: - header = header.strip() - data["vary"][header] = request.headers.get(header, None) - - # Encode our Vary headers to ensure they can be serialized as JSON - data["vary"] = dict( - (_b64_encode(k), _b64_encode(v) if v is not None else v) - for k, v in data["vary"].items() - ) - - return b",".join([ - b"cc=2", - zlib.compress( - json.dumps( - data, separators=(",", ":"), sort_keys=True, - ).encode("utf8"), - ), - ]) - - def loads(self, request, data): - # Short circuit if we've been given an empty set of data - if not data: - return - - # Determine what version of the serializer the data was serialized - # with - try: - ver, data = data.split(b",", 1) - except ValueError: - ver = b"cc=0" - - # Make sure that our "ver" is actually a version and isn't a false - # positive from a , being in the data stream. - if ver[:3] != b"cc=": - data = ver + data - ver = b"cc=0" - - # Get the version number out of the cc=N - ver = ver.split(b"=", 1)[-1].decode("ascii") - - # Dispatch to the actual load method for the given version - try: - return getattr(self, "_loads_v{0}".format(ver))(request, data) - except AttributeError: - # This is a version we don't have a loads function for, so we'll - # just treat it as a miss and return None - return - - def prepare_response(self, request, cached): - """Verify our vary headers match and construct a real urllib3 - HTTPResponse object. - """ - # Special case the '*' Vary value as it means we cannot actually - # determine if the cached response is suitable for this request. - if "*" in cached.get("vary", {}): - return - - # Ensure that the Vary headers for the cached response match our - # request - for header, value in cached.get("vary", {}).items(): - if request.headers.get(header, None) != value: - return - - body_raw = cached["response"].pop("body") - - headers = CaseInsensitiveDict(data=cached['response']['headers']) - if headers.get('transfer-encoding', '') == 'chunked': - headers.pop('transfer-encoding') - - cached['response']['headers'] = headers - - try: - body = io.BytesIO(body_raw) - except TypeError: - # This can happen if cachecontrol serialized to v1 format (pickle) - # using Python 2. A Python 2 str(byte string) will be unpickled as - # a Python 3 str (unicode string), which will cause the above to - # fail with: - # - # TypeError: 'str' does not support the buffer interface - body = io.BytesIO(body_raw.encode('utf8')) - - return HTTPResponse( - body=body, - preload_content=False, - **cached["response"] - ) - - def _loads_v0(self, request, data): - # The original legacy cache data. This doesn't contain enough - # information to construct everything we need, so we'll treat this as - # a miss. - return - - def _loads_v1(self, request, data): - try: - cached = pickle.loads(data) - except ValueError: - return - - return self.prepare_response(request, cached) - - def _loads_v2(self, request, data): - try: - cached = json.loads(zlib.decompress(data).decode("utf8")) - except ValueError: - return - - # We need to decode the items that we've base64 encoded - cached["response"]["body"] = _b64_decode_bytes( - cached["response"]["body"] - ) - cached["response"]["headers"] = dict( - (_b64_decode_str(k), _b64_decode_str(v)) - for k, v in cached["response"]["headers"].items() - ) - cached["response"]["reason"] = _b64_decode_str( - cached["response"]["reason"], - ) - cached["vary"] = dict( - (_b64_decode_str(k), _b64_decode_str(v) if v is not None else v) - for k, v in cached["vary"].items() - ) - - return self.prepare_response(request, cached) diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/cachecontrol/wrapper.py b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/cachecontrol/wrapper.py deleted file mode 100644 index ea421aa..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/cachecontrol/wrapper.py +++ /dev/null @@ -1,21 +0,0 @@ -from .adapter import CacheControlAdapter -from .cache import DictCache - - -def CacheControl(sess, - cache=None, - cache_etags=True, - serializer=None, - heuristic=None): - - cache = cache or DictCache() - adapter = CacheControlAdapter( - cache, - cache_etags=cache_etags, - serializer=serializer, - heuristic=heuristic, - ) - sess.mount('http://', adapter) - sess.mount('https://', adapter) - - return sess diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/colorama/__init__.py b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/colorama/__init__.py deleted file mode 100644 index 670e6b3..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/colorama/__init__.py +++ /dev/null @@ -1,7 +0,0 @@ -# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. -from .initialise import init, deinit, reinit, colorama_text -from .ansi import Fore, Back, Style, Cursor -from .ansitowin32 import AnsiToWin32 - -__version__ = '0.3.7' - diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/colorama/ansi.py b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/colorama/ansi.py deleted file mode 100644 index 7877658..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/colorama/ansi.py +++ /dev/null @@ -1,102 +0,0 @@ -# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. -''' -This module generates ANSI character codes to printing colors to terminals. -See: http://en.wikipedia.org/wiki/ANSI_escape_code -''' - -CSI = '\033[' -OSC = '\033]' -BEL = '\007' - - -def code_to_chars(code): - return CSI + str(code) + 'm' - -def set_title(title): - return OSC + '2;' + title + BEL - -def clear_screen(mode=2): - return CSI + str(mode) + 'J' - -def clear_line(mode=2): - return CSI + str(mode) + 'K' - - -class AnsiCodes(object): - def __init__(self): - # the subclasses declare class attributes which are numbers. - # Upon instantiation we define instance attributes, which are the same - # as the class attributes but wrapped with the ANSI escape sequence - for name in dir(self): - if not name.startswith('_'): - value = getattr(self, name) - setattr(self, name, code_to_chars(value)) - - -class AnsiCursor(object): - def UP(self, n=1): - return CSI + str(n) + 'A' - def DOWN(self, n=1): - return CSI + str(n) + 'B' - def FORWARD(self, n=1): - return CSI + str(n) + 'C' - def BACK(self, n=1): - return CSI + str(n) + 'D' - def POS(self, x=1, y=1): - return CSI + str(y) + ';' + str(x) + 'H' - - -class AnsiFore(AnsiCodes): - BLACK = 30 - RED = 31 - GREEN = 32 - YELLOW = 33 - BLUE = 34 - MAGENTA = 35 - CYAN = 36 - WHITE = 37 - RESET = 39 - - # These are fairly well supported, but not part of the standard. - LIGHTBLACK_EX = 90 - LIGHTRED_EX = 91 - LIGHTGREEN_EX = 92 - LIGHTYELLOW_EX = 93 - LIGHTBLUE_EX = 94 - LIGHTMAGENTA_EX = 95 - LIGHTCYAN_EX = 96 - LIGHTWHITE_EX = 97 - - -class AnsiBack(AnsiCodes): - BLACK = 40 - RED = 41 - GREEN = 42 - YELLOW = 43 - BLUE = 44 - MAGENTA = 45 - CYAN = 46 - WHITE = 47 - RESET = 49 - - # These are fairly well supported, but not part of the standard. - LIGHTBLACK_EX = 100 - LIGHTRED_EX = 101 - LIGHTGREEN_EX = 102 - LIGHTYELLOW_EX = 103 - LIGHTBLUE_EX = 104 - LIGHTMAGENTA_EX = 105 - LIGHTCYAN_EX = 106 - LIGHTWHITE_EX = 107 - - -class AnsiStyle(AnsiCodes): - BRIGHT = 1 - DIM = 2 - NORMAL = 22 - RESET_ALL = 0 - -Fore = AnsiFore() -Back = AnsiBack() -Style = AnsiStyle() -Cursor = AnsiCursor() diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/colorama/ansitowin32.py b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/colorama/ansitowin32.py deleted file mode 100644 index b7ff6f2..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/colorama/ansitowin32.py +++ /dev/null @@ -1,236 +0,0 @@ -# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. -import re -import sys -import os - -from .ansi import AnsiFore, AnsiBack, AnsiStyle, Style -from .winterm import WinTerm, WinColor, WinStyle -from .win32 import windll, winapi_test - - -winterm = None -if windll is not None: - winterm = WinTerm() - - -def is_stream_closed(stream): - return not hasattr(stream, 'closed') or stream.closed - - -def is_a_tty(stream): - return hasattr(stream, 'isatty') and stream.isatty() - - -class StreamWrapper(object): - ''' - Wraps a stream (such as stdout), acting as a transparent proxy for all - attribute access apart from method 'write()', which is delegated to our - Converter instance. - ''' - def __init__(self, wrapped, converter): - # double-underscore everything to prevent clashes with names of - # attributes on the wrapped stream object. - self.__wrapped = wrapped - self.__convertor = converter - - def __getattr__(self, name): - return getattr(self.__wrapped, name) - - def write(self, text): - self.__convertor.write(text) - - -class AnsiToWin32(object): - ''' - Implements a 'write()' method which, on Windows, will strip ANSI character - sequences from the text, and if outputting to a tty, will convert them into - win32 function calls. - ''' - ANSI_CSI_RE = re.compile('\001?\033\[((?:\d|;)*)([a-zA-Z])\002?') # Control Sequence Introducer - ANSI_OSC_RE = re.compile('\001?\033\]((?:.|;)*?)(\x07)\002?') # Operating System Command - - def __init__(self, wrapped, convert=None, strip=None, autoreset=False): - # The wrapped stream (normally sys.stdout or sys.stderr) - self.wrapped = wrapped - - # should we reset colors to defaults after every .write() - self.autoreset = autoreset - - # create the proxy wrapping our output stream - self.stream = StreamWrapper(wrapped, self) - - on_windows = os.name == 'nt' - # We test if the WinAPI works, because even if we are on Windows - # we may be using a terminal that doesn't support the WinAPI - # (e.g. Cygwin Terminal). In this case it's up to the terminal - # to support the ANSI codes. - conversion_supported = on_windows and winapi_test() - - # should we strip ANSI sequences from our output? - if strip is None: - strip = conversion_supported or (not is_stream_closed(wrapped) and not is_a_tty(wrapped)) - self.strip = strip - - # should we should convert ANSI sequences into win32 calls? - if convert is None: - convert = conversion_supported and not is_stream_closed(wrapped) and is_a_tty(wrapped) - self.convert = convert - - # dict of ansi codes to win32 functions and parameters - self.win32_calls = self.get_win32_calls() - - # are we wrapping stderr? - self.on_stderr = self.wrapped is sys.stderr - - def should_wrap(self): - ''' - True if this class is actually needed. If false, then the output - stream will not be affected, nor will win32 calls be issued, so - wrapping stdout is not actually required. This will generally be - False on non-Windows platforms, unless optional functionality like - autoreset has been requested using kwargs to init() - ''' - return self.convert or self.strip or self.autoreset - - def get_win32_calls(self): - if self.convert and winterm: - return { - AnsiStyle.RESET_ALL: (winterm.reset_all, ), - AnsiStyle.BRIGHT: (winterm.style, WinStyle.BRIGHT), - AnsiStyle.DIM: (winterm.style, WinStyle.NORMAL), - AnsiStyle.NORMAL: (winterm.style, WinStyle.NORMAL), - AnsiFore.BLACK: (winterm.fore, WinColor.BLACK), - AnsiFore.RED: (winterm.fore, WinColor.RED), - AnsiFore.GREEN: (winterm.fore, WinColor.GREEN), - AnsiFore.YELLOW: (winterm.fore, WinColor.YELLOW), - AnsiFore.BLUE: (winterm.fore, WinColor.BLUE), - AnsiFore.MAGENTA: (winterm.fore, WinColor.MAGENTA), - AnsiFore.CYAN: (winterm.fore, WinColor.CYAN), - AnsiFore.WHITE: (winterm.fore, WinColor.GREY), - AnsiFore.RESET: (winterm.fore, ), - AnsiFore.LIGHTBLACK_EX: (winterm.fore, WinColor.BLACK, True), - AnsiFore.LIGHTRED_EX: (winterm.fore, WinColor.RED, True), - AnsiFore.LIGHTGREEN_EX: (winterm.fore, WinColor.GREEN, True), - AnsiFore.LIGHTYELLOW_EX: (winterm.fore, WinColor.YELLOW, True), - AnsiFore.LIGHTBLUE_EX: (winterm.fore, WinColor.BLUE, True), - AnsiFore.LIGHTMAGENTA_EX: (winterm.fore, WinColor.MAGENTA, True), - AnsiFore.LIGHTCYAN_EX: (winterm.fore, WinColor.CYAN, True), - AnsiFore.LIGHTWHITE_EX: (winterm.fore, WinColor.GREY, True), - AnsiBack.BLACK: (winterm.back, WinColor.BLACK), - AnsiBack.RED: (winterm.back, WinColor.RED), - AnsiBack.GREEN: (winterm.back, WinColor.GREEN), - AnsiBack.YELLOW: (winterm.back, WinColor.YELLOW), - AnsiBack.BLUE: (winterm.back, WinColor.BLUE), - AnsiBack.MAGENTA: (winterm.back, WinColor.MAGENTA), - AnsiBack.CYAN: (winterm.back, WinColor.CYAN), - AnsiBack.WHITE: (winterm.back, WinColor.GREY), - AnsiBack.RESET: (winterm.back, ), - AnsiBack.LIGHTBLACK_EX: (winterm.back, WinColor.BLACK, True), - AnsiBack.LIGHTRED_EX: (winterm.back, WinColor.RED, True), - AnsiBack.LIGHTGREEN_EX: (winterm.back, WinColor.GREEN, True), - AnsiBack.LIGHTYELLOW_EX: (winterm.back, WinColor.YELLOW, True), - AnsiBack.LIGHTBLUE_EX: (winterm.back, WinColor.BLUE, True), - AnsiBack.LIGHTMAGENTA_EX: (winterm.back, WinColor.MAGENTA, True), - AnsiBack.LIGHTCYAN_EX: (winterm.back, WinColor.CYAN, True), - AnsiBack.LIGHTWHITE_EX: (winterm.back, WinColor.GREY, True), - } - return dict() - - def write(self, text): - if self.strip or self.convert: - self.write_and_convert(text) - else: - self.wrapped.write(text) - self.wrapped.flush() - if self.autoreset: - self.reset_all() - - - def reset_all(self): - if self.convert: - self.call_win32('m', (0,)) - elif not self.strip and not is_stream_closed(self.wrapped): - self.wrapped.write(Style.RESET_ALL) - - - def write_and_convert(self, text): - ''' - Write the given text to our wrapped stream, stripping any ANSI - sequences from the text, and optionally converting them into win32 - calls. - ''' - cursor = 0 - text = self.convert_osc(text) - for match in self.ANSI_CSI_RE.finditer(text): - start, end = match.span() - self.write_plain_text(text, cursor, start) - self.convert_ansi(*match.groups()) - cursor = end - self.write_plain_text(text, cursor, len(text)) - - - def write_plain_text(self, text, start, end): - if start < end: - self.wrapped.write(text[start:end]) - self.wrapped.flush() - - - def convert_ansi(self, paramstring, command): - if self.convert: - params = self.extract_params(command, paramstring) - self.call_win32(command, params) - - - def extract_params(self, command, paramstring): - if command in 'Hf': - params = tuple(int(p) if len(p) != 0 else 1 for p in paramstring.split(';')) - while len(params) < 2: - # defaults: - params = params + (1,) - else: - params = tuple(int(p) for p in paramstring.split(';') if len(p) != 0) - if len(params) == 0: - # defaults: - if command in 'JKm': - params = (0,) - elif command in 'ABCD': - params = (1,) - - return params - - - def call_win32(self, command, params): - if command == 'm': - for param in params: - if param in self.win32_calls: - func_args = self.win32_calls[param] - func = func_args[0] - args = func_args[1:] - kwargs = dict(on_stderr=self.on_stderr) - func(*args, **kwargs) - elif command in 'J': - winterm.erase_screen(params[0], on_stderr=self.on_stderr) - elif command in 'K': - winterm.erase_line(params[0], on_stderr=self.on_stderr) - elif command in 'Hf': # cursor position - absolute - winterm.set_cursor_position(params, on_stderr=self.on_stderr) - elif command in 'ABCD': # cursor position - relative - n = params[0] - # A - up, B - down, C - forward, D - back - x, y = {'A': (0, -n), 'B': (0, n), 'C': (n, 0), 'D': (-n, 0)}[command] - winterm.cursor_adjust(x, y, on_stderr=self.on_stderr) - - - def convert_osc(self, text): - for match in self.ANSI_OSC_RE.finditer(text): - start, end = match.span() - text = text[:start] + text[end:] - paramstring, command = match.groups() - if command in '\x07': # \x07 = BEL - params = paramstring.split(";") - # 0 - change title and icon (we will only change title) - # 1 - change icon (we don't support this) - # 2 - change title - if params[0] in '02': - winterm.set_title(params[1]) - return text diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/colorama/initialise.py b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/colorama/initialise.py deleted file mode 100644 index 834962a..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/colorama/initialise.py +++ /dev/null @@ -1,82 +0,0 @@ -# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. -import atexit -import contextlib -import sys - -from .ansitowin32 import AnsiToWin32 - - -orig_stdout = None -orig_stderr = None - -wrapped_stdout = None -wrapped_stderr = None - -atexit_done = False - - -def reset_all(): - if AnsiToWin32 is not None: # Issue #74: objects might become None at exit - AnsiToWin32(orig_stdout).reset_all() - - -def init(autoreset=False, convert=None, strip=None, wrap=True): - - if not wrap and any([autoreset, convert, strip]): - raise ValueError('wrap=False conflicts with any other arg=True') - - global wrapped_stdout, wrapped_stderr - global orig_stdout, orig_stderr - - orig_stdout = sys.stdout - orig_stderr = sys.stderr - - if sys.stdout is None: - wrapped_stdout = None - else: - sys.stdout = wrapped_stdout = \ - wrap_stream(orig_stdout, convert, strip, autoreset, wrap) - if sys.stderr is None: - wrapped_stderr = None - else: - sys.stderr = wrapped_stderr = \ - wrap_stream(orig_stderr, convert, strip, autoreset, wrap) - - global atexit_done - if not atexit_done: - atexit.register(reset_all) - atexit_done = True - - -def deinit(): - if orig_stdout is not None: - sys.stdout = orig_stdout - if orig_stderr is not None: - sys.stderr = orig_stderr - - -@contextlib.contextmanager -def colorama_text(*args, **kwargs): - init(*args, **kwargs) - try: - yield - finally: - deinit() - - -def reinit(): - if wrapped_stdout is not None: - sys.stdout = wrapped_stdout - if wrapped_stderr is not None: - sys.stderr = wrapped_stderr - - -def wrap_stream(stream, convert, strip, autoreset, wrap): - if wrap: - wrapper = AnsiToWin32(stream, - convert=convert, strip=strip, autoreset=autoreset) - if wrapper.should_wrap(): - stream = wrapper.stream - return stream - - diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/colorama/win32.py b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/colorama/win32.py deleted file mode 100644 index 3d1d2f2..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/colorama/win32.py +++ /dev/null @@ -1,154 +0,0 @@ -# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. - -# from winbase.h -STDOUT = -11 -STDERR = -12 - -try: - import ctypes - from ctypes import LibraryLoader - windll = LibraryLoader(ctypes.WinDLL) - from ctypes import wintypes -except (AttributeError, ImportError): - windll = None - SetConsoleTextAttribute = lambda *_: None - winapi_test = lambda *_: None -else: - from ctypes import byref, Structure, c_char, POINTER - - COORD = wintypes._COORD - - class CONSOLE_SCREEN_BUFFER_INFO(Structure): - """struct in wincon.h.""" - _fields_ = [ - ("dwSize", COORD), - ("dwCursorPosition", COORD), - ("wAttributes", wintypes.WORD), - ("srWindow", wintypes.SMALL_RECT), - ("dwMaximumWindowSize", COORD), - ] - def __str__(self): - return '(%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d)' % ( - self.dwSize.Y, self.dwSize.X - , self.dwCursorPosition.Y, self.dwCursorPosition.X - , self.wAttributes - , self.srWindow.Top, self.srWindow.Left, self.srWindow.Bottom, self.srWindow.Right - , self.dwMaximumWindowSize.Y, self.dwMaximumWindowSize.X - ) - - _GetStdHandle = windll.kernel32.GetStdHandle - _GetStdHandle.argtypes = [ - wintypes.DWORD, - ] - _GetStdHandle.restype = wintypes.HANDLE - - _GetConsoleScreenBufferInfo = windll.kernel32.GetConsoleScreenBufferInfo - _GetConsoleScreenBufferInfo.argtypes = [ - wintypes.HANDLE, - POINTER(CONSOLE_SCREEN_BUFFER_INFO), - ] - _GetConsoleScreenBufferInfo.restype = wintypes.BOOL - - _SetConsoleTextAttribute = windll.kernel32.SetConsoleTextAttribute - _SetConsoleTextAttribute.argtypes = [ - wintypes.HANDLE, - wintypes.WORD, - ] - _SetConsoleTextAttribute.restype = wintypes.BOOL - - _SetConsoleCursorPosition = windll.kernel32.SetConsoleCursorPosition - _SetConsoleCursorPosition.argtypes = [ - wintypes.HANDLE, - COORD, - ] - _SetConsoleCursorPosition.restype = wintypes.BOOL - - _FillConsoleOutputCharacterA = windll.kernel32.FillConsoleOutputCharacterA - _FillConsoleOutputCharacterA.argtypes = [ - wintypes.HANDLE, - c_char, - wintypes.DWORD, - COORD, - POINTER(wintypes.DWORD), - ] - _FillConsoleOutputCharacterA.restype = wintypes.BOOL - - _FillConsoleOutputAttribute = windll.kernel32.FillConsoleOutputAttribute - _FillConsoleOutputAttribute.argtypes = [ - wintypes.HANDLE, - wintypes.WORD, - wintypes.DWORD, - COORD, - POINTER(wintypes.DWORD), - ] - _FillConsoleOutputAttribute.restype = wintypes.BOOL - - _SetConsoleTitleW = windll.kernel32.SetConsoleTitleA - _SetConsoleTitleW.argtypes = [ - wintypes.LPCSTR - ] - _SetConsoleTitleW.restype = wintypes.BOOL - - handles = { - STDOUT: _GetStdHandle(STDOUT), - STDERR: _GetStdHandle(STDERR), - } - - def winapi_test(): - handle = handles[STDOUT] - csbi = CONSOLE_SCREEN_BUFFER_INFO() - success = _GetConsoleScreenBufferInfo( - handle, byref(csbi)) - return bool(success) - - def GetConsoleScreenBufferInfo(stream_id=STDOUT): - handle = handles[stream_id] - csbi = CONSOLE_SCREEN_BUFFER_INFO() - success = _GetConsoleScreenBufferInfo( - handle, byref(csbi)) - return csbi - - def SetConsoleTextAttribute(stream_id, attrs): - handle = handles[stream_id] - return _SetConsoleTextAttribute(handle, attrs) - - def SetConsoleCursorPosition(stream_id, position, adjust=True): - position = COORD(*position) - # If the position is out of range, do nothing. - if position.Y <= 0 or position.X <= 0: - return - # Adjust for Windows' SetConsoleCursorPosition: - # 1. being 0-based, while ANSI is 1-based. - # 2. expecting (x,y), while ANSI uses (y,x). - adjusted_position = COORD(position.Y - 1, position.X - 1) - if adjust: - # Adjust for viewport's scroll position - sr = GetConsoleScreenBufferInfo(STDOUT).srWindow - adjusted_position.Y += sr.Top - adjusted_position.X += sr.Left - # Resume normal processing - handle = handles[stream_id] - return _SetConsoleCursorPosition(handle, adjusted_position) - - def FillConsoleOutputCharacter(stream_id, char, length, start): - handle = handles[stream_id] - char = c_char(char.encode()) - length = wintypes.DWORD(length) - num_written = wintypes.DWORD(0) - # Note that this is hard-coded for ANSI (vs wide) bytes. - success = _FillConsoleOutputCharacterA( - handle, char, length, start, byref(num_written)) - return num_written.value - - def FillConsoleOutputAttribute(stream_id, attr, length, start): - ''' FillConsoleOutputAttribute( hConsole, csbi.wAttributes, dwConSize, coordScreen, &cCharsWritten )''' - handle = handles[stream_id] - attribute = wintypes.WORD(attr) - length = wintypes.DWORD(length) - num_written = wintypes.DWORD(0) - # Note that this is hard-coded for ANSI (vs wide) bytes. - return _FillConsoleOutputAttribute( - handle, attribute, length, start, byref(num_written)) - - def SetConsoleTitle(title): - return _SetConsoleTitleW(title) diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/colorama/winterm.py b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/colorama/winterm.py deleted file mode 100644 index 60309d3..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/colorama/winterm.py +++ /dev/null @@ -1,162 +0,0 @@ -# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. -from . import win32 - - -# from wincon.h -class WinColor(object): - BLACK = 0 - BLUE = 1 - GREEN = 2 - CYAN = 3 - RED = 4 - MAGENTA = 5 - YELLOW = 6 - GREY = 7 - -# from wincon.h -class WinStyle(object): - NORMAL = 0x00 # dim text, dim background - BRIGHT = 0x08 # bright text, dim background - BRIGHT_BACKGROUND = 0x80 # dim text, bright background - -class WinTerm(object): - - def __init__(self): - self._default = win32.GetConsoleScreenBufferInfo(win32.STDOUT).wAttributes - self.set_attrs(self._default) - self._default_fore = self._fore - self._default_back = self._back - self._default_style = self._style - # In order to emulate LIGHT_EX in windows, we borrow the BRIGHT style. - # So that LIGHT_EX colors and BRIGHT style do not clobber each other, - # we track them separately, since LIGHT_EX is overwritten by Fore/Back - # and BRIGHT is overwritten by Style codes. - self._light = 0 - - def get_attrs(self): - return self._fore + self._back * 16 + (self._style | self._light) - - def set_attrs(self, value): - self._fore = value & 7 - self._back = (value >> 4) & 7 - self._style = value & (WinStyle.BRIGHT | WinStyle.BRIGHT_BACKGROUND) - - def reset_all(self, on_stderr=None): - self.set_attrs(self._default) - self.set_console(attrs=self._default) - - def fore(self, fore=None, light=False, on_stderr=False): - if fore is None: - fore = self._default_fore - self._fore = fore - # Emulate LIGHT_EX with BRIGHT Style - if light: - self._light |= WinStyle.BRIGHT - else: - self._light &= ~WinStyle.BRIGHT - self.set_console(on_stderr=on_stderr) - - def back(self, back=None, light=False, on_stderr=False): - if back is None: - back = self._default_back - self._back = back - # Emulate LIGHT_EX with BRIGHT_BACKGROUND Style - if light: - self._light |= WinStyle.BRIGHT_BACKGROUND - else: - self._light &= ~WinStyle.BRIGHT_BACKGROUND - self.set_console(on_stderr=on_stderr) - - def style(self, style=None, on_stderr=False): - if style is None: - style = self._default_style - self._style = style - self.set_console(on_stderr=on_stderr) - - def set_console(self, attrs=None, on_stderr=False): - if attrs is None: - attrs = self.get_attrs() - handle = win32.STDOUT - if on_stderr: - handle = win32.STDERR - win32.SetConsoleTextAttribute(handle, attrs) - - def get_position(self, handle): - position = win32.GetConsoleScreenBufferInfo(handle).dwCursorPosition - # Because Windows coordinates are 0-based, - # and win32.SetConsoleCursorPosition expects 1-based. - position.X += 1 - position.Y += 1 - return position - - def set_cursor_position(self, position=None, on_stderr=False): - if position is None: - # I'm not currently tracking the position, so there is no default. - # position = self.get_position() - return - handle = win32.STDOUT - if on_stderr: - handle = win32.STDERR - win32.SetConsoleCursorPosition(handle, position) - - def cursor_adjust(self, x, y, on_stderr=False): - handle = win32.STDOUT - if on_stderr: - handle = win32.STDERR - position = self.get_position(handle) - adjusted_position = (position.Y + y, position.X + x) - win32.SetConsoleCursorPosition(handle, adjusted_position, adjust=False) - - def erase_screen(self, mode=0, on_stderr=False): - # 0 should clear from the cursor to the end of the screen. - # 1 should clear from the cursor to the beginning of the screen. - # 2 should clear the entire screen, and move cursor to (1,1) - handle = win32.STDOUT - if on_stderr: - handle = win32.STDERR - csbi = win32.GetConsoleScreenBufferInfo(handle) - # get the number of character cells in the current buffer - cells_in_screen = csbi.dwSize.X * csbi.dwSize.Y - # get number of character cells before current cursor position - cells_before_cursor = csbi.dwSize.X * csbi.dwCursorPosition.Y + csbi.dwCursorPosition.X - if mode == 0: - from_coord = csbi.dwCursorPosition - cells_to_erase = cells_in_screen - cells_before_cursor - if mode == 1: - from_coord = win32.COORD(0, 0) - cells_to_erase = cells_before_cursor - elif mode == 2: - from_coord = win32.COORD(0, 0) - cells_to_erase = cells_in_screen - # fill the entire screen with blanks - win32.FillConsoleOutputCharacter(handle, ' ', cells_to_erase, from_coord) - # now set the buffer's attributes accordingly - win32.FillConsoleOutputAttribute(handle, self.get_attrs(), cells_to_erase, from_coord) - if mode == 2: - # put the cursor where needed - win32.SetConsoleCursorPosition(handle, (1, 1)) - - def erase_line(self, mode=0, on_stderr=False): - # 0 should clear from the cursor to the end of the line. - # 1 should clear from the cursor to the beginning of the line. - # 2 should clear the entire line. - handle = win32.STDOUT - if on_stderr: - handle = win32.STDERR - csbi = win32.GetConsoleScreenBufferInfo(handle) - if mode == 0: - from_coord = csbi.dwCursorPosition - cells_to_erase = csbi.dwSize.X - csbi.dwCursorPosition.X - if mode == 1: - from_coord = win32.COORD(0, csbi.dwCursorPosition.Y) - cells_to_erase = csbi.dwCursorPosition.X - elif mode == 2: - from_coord = win32.COORD(0, csbi.dwCursorPosition.Y) - cells_to_erase = csbi.dwSize.X - # fill the entire screen with blanks - win32.FillConsoleOutputCharacter(handle, ' ', cells_to_erase, from_coord) - # now set the buffer's attributes accordingly - win32.FillConsoleOutputAttribute(handle, self.get_attrs(), cells_to_erase, from_coord) - - def set_title(self, title): - win32.SetConsoleTitle(title) diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distlib/__init__.py b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distlib/__init__.py deleted file mode 100644 index d186b0a..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distlib/__init__.py +++ /dev/null @@ -1,23 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (C) 2012-2016 Vinay Sajip. -# Licensed to the Python Software Foundation under a contributor agreement. -# See LICENSE.txt and CONTRIBUTORS.txt. -# -import logging - -__version__ = '0.2.4' - -class DistlibException(Exception): - pass - -try: - from logging import NullHandler -except ImportError: # pragma: no cover - class NullHandler(logging.Handler): - def handle(self, record): pass - def emit(self, record): pass - def createLock(self): self.lock = None - -logger = logging.getLogger(__name__) -logger.addHandler(NullHandler()) diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distlib/_backport/__init__.py b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distlib/_backport/__init__.py deleted file mode 100644 index f7dbf4c..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distlib/_backport/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -"""Modules copied from Python 3 standard libraries, for internal use only. - -Individual classes and functions are found in d2._backport.misc. Intended -usage is to always import things missing from 3.1 from that module: the -built-in/stdlib objects will be used if found. -""" diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distlib/_backport/misc.py b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distlib/_backport/misc.py deleted file mode 100644 index cfb318d..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distlib/_backport/misc.py +++ /dev/null @@ -1,41 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (C) 2012 The Python Software Foundation. -# See LICENSE.txt and CONTRIBUTORS.txt. -# -"""Backports for individual classes and functions.""" - -import os -import sys - -__all__ = ['cache_from_source', 'callable', 'fsencode'] - - -try: - from imp import cache_from_source -except ImportError: - def cache_from_source(py_file, debug=__debug__): - ext = debug and 'c' or 'o' - return py_file + ext - - -try: - callable = callable -except NameError: - from collections import Callable - - def callable(obj): - return isinstance(obj, Callable) - - -try: - fsencode = os.fsencode -except AttributeError: - def fsencode(filename): - if isinstance(filename, bytes): - return filename - elif isinstance(filename, str): - return filename.encode(sys.getfilesystemencoding()) - else: - raise TypeError("expect bytes or str, not %s" % - type(filename).__name__) diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distlib/_backport/shutil.py b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distlib/_backport/shutil.py deleted file mode 100644 index 159e49e..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distlib/_backport/shutil.py +++ /dev/null @@ -1,761 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (C) 2012 The Python Software Foundation. -# See LICENSE.txt and CONTRIBUTORS.txt. -# -"""Utility functions for copying and archiving files and directory trees. - -XXX The functions here don't copy the resource fork or other metadata on Mac. - -""" - -import os -import sys -import stat -from os.path import abspath -import fnmatch -import collections -import errno -from . import tarfile - -try: - import bz2 - _BZ2_SUPPORTED = True -except ImportError: - _BZ2_SUPPORTED = False - -try: - from pwd import getpwnam -except ImportError: - getpwnam = None - -try: - from grp import getgrnam -except ImportError: - getgrnam = None - -__all__ = ["copyfileobj", "copyfile", "copymode", "copystat", "copy", "copy2", - "copytree", "move", "rmtree", "Error", "SpecialFileError", - "ExecError", "make_archive", "get_archive_formats", - "register_archive_format", "unregister_archive_format", - "get_unpack_formats", "register_unpack_format", - "unregister_unpack_format", "unpack_archive", "ignore_patterns"] - -class Error(EnvironmentError): - pass - -class SpecialFileError(EnvironmentError): - """Raised when trying to do a kind of operation (e.g. copying) which is - not supported on a special file (e.g. a named pipe)""" - -class ExecError(EnvironmentError): - """Raised when a command could not be executed""" - -class ReadError(EnvironmentError): - """Raised when an archive cannot be read""" - -class RegistryError(Exception): - """Raised when a registry operation with the archiving - and unpacking registries fails""" - - -try: - WindowsError -except NameError: - WindowsError = None - -def copyfileobj(fsrc, fdst, length=16*1024): - """copy data from file-like object fsrc to file-like object fdst""" - while 1: - buf = fsrc.read(length) - if not buf: - break - fdst.write(buf) - -def _samefile(src, dst): - # Macintosh, Unix. - if hasattr(os.path, 'samefile'): - try: - return os.path.samefile(src, dst) - except OSError: - return False - - # All other platforms: check for same pathname. - return (os.path.normcase(os.path.abspath(src)) == - os.path.normcase(os.path.abspath(dst))) - -def copyfile(src, dst): - """Copy data from src to dst""" - if _samefile(src, dst): - raise Error("`%s` and `%s` are the same file" % (src, dst)) - - for fn in [src, dst]: - try: - st = os.stat(fn) - except OSError: - # File most likely does not exist - pass - else: - # XXX What about other special files? (sockets, devices...) - if stat.S_ISFIFO(st.st_mode): - raise SpecialFileError("`%s` is a named pipe" % fn) - - with open(src, 'rb') as fsrc: - with open(dst, 'wb') as fdst: - copyfileobj(fsrc, fdst) - -def copymode(src, dst): - """Copy mode bits from src to dst""" - if hasattr(os, 'chmod'): - st = os.stat(src) - mode = stat.S_IMODE(st.st_mode) - os.chmod(dst, mode) - -def copystat(src, dst): - """Copy all stat info (mode bits, atime, mtime, flags) from src to dst""" - st = os.stat(src) - mode = stat.S_IMODE(st.st_mode) - if hasattr(os, 'utime'): - os.utime(dst, (st.st_atime, st.st_mtime)) - if hasattr(os, 'chmod'): - os.chmod(dst, mode) - if hasattr(os, 'chflags') and hasattr(st, 'st_flags'): - try: - os.chflags(dst, st.st_flags) - except OSError as why: - if (not hasattr(errno, 'EOPNOTSUPP') or - why.errno != errno.EOPNOTSUPP): - raise - -def copy(src, dst): - """Copy data and mode bits ("cp src dst"). - - The destination may be a directory. - - """ - if os.path.isdir(dst): - dst = os.path.join(dst, os.path.basename(src)) - copyfile(src, dst) - copymode(src, dst) - -def copy2(src, dst): - """Copy data and all stat info ("cp -p src dst"). - - The destination may be a directory. - - """ - if os.path.isdir(dst): - dst = os.path.join(dst, os.path.basename(src)) - copyfile(src, dst) - copystat(src, dst) - -def ignore_patterns(*patterns): - """Function that can be used as copytree() ignore parameter. - - Patterns is a sequence of glob-style patterns - that are used to exclude files""" - def _ignore_patterns(path, names): - ignored_names = [] - for pattern in patterns: - ignored_names.extend(fnmatch.filter(names, pattern)) - return set(ignored_names) - return _ignore_patterns - -def copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2, - ignore_dangling_symlinks=False): - """Recursively copy a directory tree. - - The destination directory must not already exist. - If exception(s) occur, an Error is raised with a list of reasons. - - If the optional symlinks flag is true, symbolic links in the - source tree result in symbolic links in the destination tree; if - it is false, the contents of the files pointed to by symbolic - links are copied. If the file pointed by the symlink doesn't - exist, an exception will be added in the list of errors raised in - an Error exception at the end of the copy process. - - You can set the optional ignore_dangling_symlinks flag to true if you - want to silence this exception. Notice that this has no effect on - platforms that don't support os.symlink. - - The optional ignore argument is a callable. If given, it - is called with the `src` parameter, which is the directory - being visited by copytree(), and `names` which is the list of - `src` contents, as returned by os.listdir(): - - callable(src, names) -> ignored_names - - Since copytree() is called recursively, the callable will be - called once for each directory that is copied. It returns a - list of names relative to the `src` directory that should - not be copied. - - The optional copy_function argument is a callable that will be used - to copy each file. It will be called with the source path and the - destination path as arguments. By default, copy2() is used, but any - function that supports the same signature (like copy()) can be used. - - """ - names = os.listdir(src) - if ignore is not None: - ignored_names = ignore(src, names) - else: - ignored_names = set() - - os.makedirs(dst) - errors = [] - for name in names: - if name in ignored_names: - continue - srcname = os.path.join(src, name) - dstname = os.path.join(dst, name) - try: - if os.path.islink(srcname): - linkto = os.readlink(srcname) - if symlinks: - os.symlink(linkto, dstname) - else: - # ignore dangling symlink if the flag is on - if not os.path.exists(linkto) and ignore_dangling_symlinks: - continue - # otherwise let the copy occurs. copy2 will raise an error - copy_function(srcname, dstname) - elif os.path.isdir(srcname): - copytree(srcname, dstname, symlinks, ignore, copy_function) - else: - # Will raise a SpecialFileError for unsupported file types - copy_function(srcname, dstname) - # catch the Error from the recursive copytree so that we can - # continue with other files - except Error as err: - errors.extend(err.args[0]) - except EnvironmentError as why: - errors.append((srcname, dstname, str(why))) - try: - copystat(src, dst) - except OSError as why: - if WindowsError is not None and isinstance(why, WindowsError): - # Copying file access times may fail on Windows - pass - else: - errors.extend((src, dst, str(why))) - if errors: - raise Error(errors) - -def rmtree(path, ignore_errors=False, onerror=None): - """Recursively delete a directory tree. - - If ignore_errors is set, errors are ignored; otherwise, if onerror - is set, it is called to handle the error with arguments (func, - path, exc_info) where func is os.listdir, os.remove, or os.rmdir; - path is the argument to that function that caused it to fail; and - exc_info is a tuple returned by sys.exc_info(). If ignore_errors - is false and onerror is None, an exception is raised. - - """ - if ignore_errors: - def onerror(*args): - pass - elif onerror is None: - def onerror(*args): - raise - try: - if os.path.islink(path): - # symlinks to directories are forbidden, see bug #1669 - raise OSError("Cannot call rmtree on a symbolic link") - except OSError: - onerror(os.path.islink, path, sys.exc_info()) - # can't continue even if onerror hook returns - return - names = [] - try: - names = os.listdir(path) - except os.error: - onerror(os.listdir, path, sys.exc_info()) - for name in names: - fullname = os.path.join(path, name) - try: - mode = os.lstat(fullname).st_mode - except os.error: - mode = 0 - if stat.S_ISDIR(mode): - rmtree(fullname, ignore_errors, onerror) - else: - try: - os.remove(fullname) - except os.error: - onerror(os.remove, fullname, sys.exc_info()) - try: - os.rmdir(path) - except os.error: - onerror(os.rmdir, path, sys.exc_info()) - - -def _basename(path): - # A basename() variant which first strips the trailing slash, if present. - # Thus we always get the last component of the path, even for directories. - return os.path.basename(path.rstrip(os.path.sep)) - -def move(src, dst): - """Recursively move a file or directory to another location. This is - similar to the Unix "mv" command. - - If the destination is a directory or a symlink to a directory, the source - is moved inside the directory. The destination path must not already - exist. - - If the destination already exists but is not a directory, it may be - overwritten depending on os.rename() semantics. - - If the destination is on our current filesystem, then rename() is used. - Otherwise, src is copied to the destination and then removed. - A lot more could be done here... A look at a mv.c shows a lot of - the issues this implementation glosses over. - - """ - real_dst = dst - if os.path.isdir(dst): - if _samefile(src, dst): - # We might be on a case insensitive filesystem, - # perform the rename anyway. - os.rename(src, dst) - return - - real_dst = os.path.join(dst, _basename(src)) - if os.path.exists(real_dst): - raise Error("Destination path '%s' already exists" % real_dst) - try: - os.rename(src, real_dst) - except OSError: - if os.path.isdir(src): - if _destinsrc(src, dst): - raise Error("Cannot move a directory '%s' into itself '%s'." % (src, dst)) - copytree(src, real_dst, symlinks=True) - rmtree(src) - else: - copy2(src, real_dst) - os.unlink(src) - -def _destinsrc(src, dst): - src = abspath(src) - dst = abspath(dst) - if not src.endswith(os.path.sep): - src += os.path.sep - if not dst.endswith(os.path.sep): - dst += os.path.sep - return dst.startswith(src) - -def _get_gid(name): - """Returns a gid, given a group name.""" - if getgrnam is None or name is None: - return None - try: - result = getgrnam(name) - except KeyError: - result = None - if result is not None: - return result[2] - return None - -def _get_uid(name): - """Returns an uid, given a user name.""" - if getpwnam is None or name is None: - return None - try: - result = getpwnam(name) - except KeyError: - result = None - if result is not None: - return result[2] - return None - -def _make_tarball(base_name, base_dir, compress="gzip", verbose=0, dry_run=0, - owner=None, group=None, logger=None): - """Create a (possibly compressed) tar file from all the files under - 'base_dir'. - - 'compress' must be "gzip" (the default), "bzip2", or None. - - 'owner' and 'group' can be used to define an owner and a group for the - archive that is being built. If not provided, the current owner and group - will be used. - - The output tar file will be named 'base_name' + ".tar", possibly plus - the appropriate compression extension (".gz", or ".bz2"). - - Returns the output filename. - """ - tar_compression = {'gzip': 'gz', None: ''} - compress_ext = {'gzip': '.gz'} - - if _BZ2_SUPPORTED: - tar_compression['bzip2'] = 'bz2' - compress_ext['bzip2'] = '.bz2' - - # flags for compression program, each element of list will be an argument - if compress is not None and compress not in compress_ext: - raise ValueError("bad value for 'compress', or compression format not " - "supported : {0}".format(compress)) - - archive_name = base_name + '.tar' + compress_ext.get(compress, '') - archive_dir = os.path.dirname(archive_name) - - if not os.path.exists(archive_dir): - if logger is not None: - logger.info("creating %s", archive_dir) - if not dry_run: - os.makedirs(archive_dir) - - # creating the tarball - if logger is not None: - logger.info('Creating tar archive') - - uid = _get_uid(owner) - gid = _get_gid(group) - - def _set_uid_gid(tarinfo): - if gid is not None: - tarinfo.gid = gid - tarinfo.gname = group - if uid is not None: - tarinfo.uid = uid - tarinfo.uname = owner - return tarinfo - - if not dry_run: - tar = tarfile.open(archive_name, 'w|%s' % tar_compression[compress]) - try: - tar.add(base_dir, filter=_set_uid_gid) - finally: - tar.close() - - return archive_name - -def _call_external_zip(base_dir, zip_filename, verbose=False, dry_run=False): - # XXX see if we want to keep an external call here - if verbose: - zipoptions = "-r" - else: - zipoptions = "-rq" - from distutils.errors import DistutilsExecError - from distutils.spawn import spawn - try: - spawn(["zip", zipoptions, zip_filename, base_dir], dry_run=dry_run) - except DistutilsExecError: - # XXX really should distinguish between "couldn't find - # external 'zip' command" and "zip failed". - raise ExecError("unable to create zip file '%s': " - "could neither import the 'zipfile' module nor " - "find a standalone zip utility") % zip_filename - -def _make_zipfile(base_name, base_dir, verbose=0, dry_run=0, logger=None): - """Create a zip file from all the files under 'base_dir'. - - The output zip file will be named 'base_name' + ".zip". Uses either the - "zipfile" Python module (if available) or the InfoZIP "zip" utility - (if installed and found on the default search path). If neither tool is - available, raises ExecError. Returns the name of the output zip - file. - """ - zip_filename = base_name + ".zip" - archive_dir = os.path.dirname(base_name) - - if not os.path.exists(archive_dir): - if logger is not None: - logger.info("creating %s", archive_dir) - if not dry_run: - os.makedirs(archive_dir) - - # If zipfile module is not available, try spawning an external 'zip' - # command. - try: - import zipfile - except ImportError: - zipfile = None - - if zipfile is None: - _call_external_zip(base_dir, zip_filename, verbose, dry_run) - else: - if logger is not None: - logger.info("creating '%s' and adding '%s' to it", - zip_filename, base_dir) - - if not dry_run: - zip = zipfile.ZipFile(zip_filename, "w", - compression=zipfile.ZIP_DEFLATED) - - for dirpath, dirnames, filenames in os.walk(base_dir): - for name in filenames: - path = os.path.normpath(os.path.join(dirpath, name)) - if os.path.isfile(path): - zip.write(path, path) - if logger is not None: - logger.info("adding '%s'", path) - zip.close() - - return zip_filename - -_ARCHIVE_FORMATS = { - 'gztar': (_make_tarball, [('compress', 'gzip')], "gzip'ed tar-file"), - 'bztar': (_make_tarball, [('compress', 'bzip2')], "bzip2'ed tar-file"), - 'tar': (_make_tarball, [('compress', None)], "uncompressed tar file"), - 'zip': (_make_zipfile, [], "ZIP file"), - } - -if _BZ2_SUPPORTED: - _ARCHIVE_FORMATS['bztar'] = (_make_tarball, [('compress', 'bzip2')], - "bzip2'ed tar-file") - -def get_archive_formats(): - """Returns a list of supported formats for archiving and unarchiving. - - Each element of the returned sequence is a tuple (name, description) - """ - formats = [(name, registry[2]) for name, registry in - _ARCHIVE_FORMATS.items()] - formats.sort() - return formats - -def register_archive_format(name, function, extra_args=None, description=''): - """Registers an archive format. - - name is the name of the format. function is the callable that will be - used to create archives. If provided, extra_args is a sequence of - (name, value) tuples that will be passed as arguments to the callable. - description can be provided to describe the format, and will be returned - by the get_archive_formats() function. - """ - if extra_args is None: - extra_args = [] - if not isinstance(function, collections.Callable): - raise TypeError('The %s object is not callable' % function) - if not isinstance(extra_args, (tuple, list)): - raise TypeError('extra_args needs to be a sequence') - for element in extra_args: - if not isinstance(element, (tuple, list)) or len(element) !=2: - raise TypeError('extra_args elements are : (arg_name, value)') - - _ARCHIVE_FORMATS[name] = (function, extra_args, description) - -def unregister_archive_format(name): - del _ARCHIVE_FORMATS[name] - -def make_archive(base_name, format, root_dir=None, base_dir=None, verbose=0, - dry_run=0, owner=None, group=None, logger=None): - """Create an archive file (eg. zip or tar). - - 'base_name' is the name of the file to create, minus any format-specific - extension; 'format' is the archive format: one of "zip", "tar", "bztar" - or "gztar". - - 'root_dir' is a directory that will be the root directory of the - archive; ie. we typically chdir into 'root_dir' before creating the - archive. 'base_dir' is the directory where we start archiving from; - ie. 'base_dir' will be the common prefix of all files and - directories in the archive. 'root_dir' and 'base_dir' both default - to the current directory. Returns the name of the archive file. - - 'owner' and 'group' are used when creating a tar archive. By default, - uses the current owner and group. - """ - save_cwd = os.getcwd() - if root_dir is not None: - if logger is not None: - logger.debug("changing into '%s'", root_dir) - base_name = os.path.abspath(base_name) - if not dry_run: - os.chdir(root_dir) - - if base_dir is None: - base_dir = os.curdir - - kwargs = {'dry_run': dry_run, 'logger': logger} - - try: - format_info = _ARCHIVE_FORMATS[format] - except KeyError: - raise ValueError("unknown archive format '%s'" % format) - - func = format_info[0] - for arg, val in format_info[1]: - kwargs[arg] = val - - if format != 'zip': - kwargs['owner'] = owner - kwargs['group'] = group - - try: - filename = func(base_name, base_dir, **kwargs) - finally: - if root_dir is not None: - if logger is not None: - logger.debug("changing back to '%s'", save_cwd) - os.chdir(save_cwd) - - return filename - - -def get_unpack_formats(): - """Returns a list of supported formats for unpacking. - - Each element of the returned sequence is a tuple - (name, extensions, description) - """ - formats = [(name, info[0], info[3]) for name, info in - _UNPACK_FORMATS.items()] - formats.sort() - return formats - -def _check_unpack_options(extensions, function, extra_args): - """Checks what gets registered as an unpacker.""" - # first make sure no other unpacker is registered for this extension - existing_extensions = {} - for name, info in _UNPACK_FORMATS.items(): - for ext in info[0]: - existing_extensions[ext] = name - - for extension in extensions: - if extension in existing_extensions: - msg = '%s is already registered for "%s"' - raise RegistryError(msg % (extension, - existing_extensions[extension])) - - if not isinstance(function, collections.Callable): - raise TypeError('The registered function must be a callable') - - -def register_unpack_format(name, extensions, function, extra_args=None, - description=''): - """Registers an unpack format. - - `name` is the name of the format. `extensions` is a list of extensions - corresponding to the format. - - `function` is the callable that will be - used to unpack archives. The callable will receive archives to unpack. - If it's unable to handle an archive, it needs to raise a ReadError - exception. - - If provided, `extra_args` is a sequence of - (name, value) tuples that will be passed as arguments to the callable. - description can be provided to describe the format, and will be returned - by the get_unpack_formats() function. - """ - if extra_args is None: - extra_args = [] - _check_unpack_options(extensions, function, extra_args) - _UNPACK_FORMATS[name] = extensions, function, extra_args, description - -def unregister_unpack_format(name): - """Removes the pack format from the registry.""" - del _UNPACK_FORMATS[name] - -def _ensure_directory(path): - """Ensure that the parent directory of `path` exists""" - dirname = os.path.dirname(path) - if not os.path.isdir(dirname): - os.makedirs(dirname) - -def _unpack_zipfile(filename, extract_dir): - """Unpack zip `filename` to `extract_dir` - """ - try: - import zipfile - except ImportError: - raise ReadError('zlib not supported, cannot unpack this archive.') - - if not zipfile.is_zipfile(filename): - raise ReadError("%s is not a zip file" % filename) - - zip = zipfile.ZipFile(filename) - try: - for info in zip.infolist(): - name = info.filename - - # don't extract absolute paths or ones with .. in them - if name.startswith('/') or '..' in name: - continue - - target = os.path.join(extract_dir, *name.split('/')) - if not target: - continue - - _ensure_directory(target) - if not name.endswith('/'): - # file - data = zip.read(info.filename) - f = open(target, 'wb') - try: - f.write(data) - finally: - f.close() - del data - finally: - zip.close() - -def _unpack_tarfile(filename, extract_dir): - """Unpack tar/tar.gz/tar.bz2 `filename` to `extract_dir` - """ - try: - tarobj = tarfile.open(filename) - except tarfile.TarError: - raise ReadError( - "%s is not a compressed or uncompressed tar file" % filename) - try: - tarobj.extractall(extract_dir) - finally: - tarobj.close() - -_UNPACK_FORMATS = { - 'gztar': (['.tar.gz', '.tgz'], _unpack_tarfile, [], "gzip'ed tar-file"), - 'tar': (['.tar'], _unpack_tarfile, [], "uncompressed tar file"), - 'zip': (['.zip'], _unpack_zipfile, [], "ZIP file") - } - -if _BZ2_SUPPORTED: - _UNPACK_FORMATS['bztar'] = (['.bz2'], _unpack_tarfile, [], - "bzip2'ed tar-file") - -def _find_unpack_format(filename): - for name, info in _UNPACK_FORMATS.items(): - for extension in info[0]: - if filename.endswith(extension): - return name - return None - -def unpack_archive(filename, extract_dir=None, format=None): - """Unpack an archive. - - `filename` is the name of the archive. - - `extract_dir` is the name of the target directory, where the archive - is unpacked. If not provided, the current working directory is used. - - `format` is the archive format: one of "zip", "tar", or "gztar". Or any - other registered format. If not provided, unpack_archive will use the - filename extension and see if an unpacker was registered for that - extension. - - In case none is found, a ValueError is raised. - """ - if extract_dir is None: - extract_dir = os.getcwd() - - if format is not None: - try: - format_info = _UNPACK_FORMATS[format] - except KeyError: - raise ValueError("Unknown unpack format '{0}'".format(format)) - - func = format_info[1] - func(filename, extract_dir, **dict(format_info[2])) - else: - # we need to look at the registered unpackers supported extensions - format = _find_unpack_format(filename) - if format is None: - raise ReadError("Unknown archive format '{0}'".format(filename)) - - func = _UNPACK_FORMATS[format][1] - kwargs = dict(_UNPACK_FORMATS[format][2]) - func(filename, extract_dir, **kwargs) diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distlib/_backport/sysconfig.cfg b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distlib/_backport/sysconfig.cfg deleted file mode 100644 index 1746bd0..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distlib/_backport/sysconfig.cfg +++ /dev/null @@ -1,84 +0,0 @@ -[posix_prefix] -# Configuration directories. Some of these come straight out of the -# configure script. They are for implementing the other variables, not to -# be used directly in [resource_locations]. -confdir = /etc -datadir = /usr/share -libdir = /usr/lib -statedir = /var -# User resource directory -local = ~/.local/{distribution.name} - -stdlib = {base}/lib/python{py_version_short} -platstdlib = {platbase}/lib/python{py_version_short} -purelib = {base}/lib/python{py_version_short}/site-packages -platlib = {platbase}/lib/python{py_version_short}/site-packages -include = {base}/include/python{py_version_short}{abiflags} -platinclude = {platbase}/include/python{py_version_short}{abiflags} -data = {base} - -[posix_home] -stdlib = {base}/lib/python -platstdlib = {base}/lib/python -purelib = {base}/lib/python -platlib = {base}/lib/python -include = {base}/include/python -platinclude = {base}/include/python -scripts = {base}/bin -data = {base} - -[nt] -stdlib = {base}/Lib -platstdlib = {base}/Lib -purelib = {base}/Lib/site-packages -platlib = {base}/Lib/site-packages -include = {base}/Include -platinclude = {base}/Include -scripts = {base}/Scripts -data = {base} - -[os2] -stdlib = {base}/Lib -platstdlib = {base}/Lib -purelib = {base}/Lib/site-packages -platlib = {base}/Lib/site-packages -include = {base}/Include -platinclude = {base}/Include -scripts = {base}/Scripts -data = {base} - -[os2_home] -stdlib = {userbase}/lib/python{py_version_short} -platstdlib = {userbase}/lib/python{py_version_short} -purelib = {userbase}/lib/python{py_version_short}/site-packages -platlib = {userbase}/lib/python{py_version_short}/site-packages -include = {userbase}/include/python{py_version_short} -scripts = {userbase}/bin -data = {userbase} - -[nt_user] -stdlib = {userbase}/Python{py_version_nodot} -platstdlib = {userbase}/Python{py_version_nodot} -purelib = {userbase}/Python{py_version_nodot}/site-packages -platlib = {userbase}/Python{py_version_nodot}/site-packages -include = {userbase}/Python{py_version_nodot}/Include -scripts = {userbase}/Scripts -data = {userbase} - -[posix_user] -stdlib = {userbase}/lib/python{py_version_short} -platstdlib = {userbase}/lib/python{py_version_short} -purelib = {userbase}/lib/python{py_version_short}/site-packages -platlib = {userbase}/lib/python{py_version_short}/site-packages -include = {userbase}/include/python{py_version_short} -scripts = {userbase}/bin -data = {userbase} - -[osx_framework_user] -stdlib = {userbase}/lib/python -platstdlib = {userbase}/lib/python -purelib = {userbase}/lib/python/site-packages -platlib = {userbase}/lib/python/site-packages -include = {userbase}/include -scripts = {userbase}/bin -data = {userbase} diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distlib/_backport/sysconfig.py b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distlib/_backport/sysconfig.py deleted file mode 100644 index ec28480..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distlib/_backport/sysconfig.py +++ /dev/null @@ -1,788 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (C) 2012 The Python Software Foundation. -# See LICENSE.txt and CONTRIBUTORS.txt. -# -"""Access to Python's configuration information.""" - -import codecs -import os -import re -import sys -from os.path import pardir, realpath -try: - import configparser -except ImportError: - import ConfigParser as configparser - - -__all__ = [ - 'get_config_h_filename', - 'get_config_var', - 'get_config_vars', - 'get_makefile_filename', - 'get_path', - 'get_path_names', - 'get_paths', - 'get_platform', - 'get_python_version', - 'get_scheme_names', - 'parse_config_h', -] - - -def _safe_realpath(path): - try: - return realpath(path) - except OSError: - return path - - -if sys.executable: - _PROJECT_BASE = os.path.dirname(_safe_realpath(sys.executable)) -else: - # sys.executable can be empty if argv[0] has been changed and Python is - # unable to retrieve the real program name - _PROJECT_BASE = _safe_realpath(os.getcwd()) - -if os.name == "nt" and "pcbuild" in _PROJECT_BASE[-8:].lower(): - _PROJECT_BASE = _safe_realpath(os.path.join(_PROJECT_BASE, pardir)) -# PC/VS7.1 -if os.name == "nt" and "\\pc\\v" in _PROJECT_BASE[-10:].lower(): - _PROJECT_BASE = _safe_realpath(os.path.join(_PROJECT_BASE, pardir, pardir)) -# PC/AMD64 -if os.name == "nt" and "\\pcbuild\\amd64" in _PROJECT_BASE[-14:].lower(): - _PROJECT_BASE = _safe_realpath(os.path.join(_PROJECT_BASE, pardir, pardir)) - - -def is_python_build(): - for fn in ("Setup.dist", "Setup.local"): - if os.path.isfile(os.path.join(_PROJECT_BASE, "Modules", fn)): - return True - return False - -_PYTHON_BUILD = is_python_build() - -_cfg_read = False - -def _ensure_cfg_read(): - global _cfg_read - if not _cfg_read: - from ..resources import finder - backport_package = __name__.rsplit('.', 1)[0] - _finder = finder(backport_package) - _cfgfile = _finder.find('sysconfig.cfg') - assert _cfgfile, 'sysconfig.cfg exists' - with _cfgfile.as_stream() as s: - _SCHEMES.readfp(s) - if _PYTHON_BUILD: - for scheme in ('posix_prefix', 'posix_home'): - _SCHEMES.set(scheme, 'include', '{srcdir}/Include') - _SCHEMES.set(scheme, 'platinclude', '{projectbase}/.') - - _cfg_read = True - - -_SCHEMES = configparser.RawConfigParser() -_VAR_REPL = re.compile(r'\{([^{]*?)\}') - -def _expand_globals(config): - _ensure_cfg_read() - if config.has_section('globals'): - globals = config.items('globals') - else: - globals = tuple() - - sections = config.sections() - for section in sections: - if section == 'globals': - continue - for option, value in globals: - if config.has_option(section, option): - continue - config.set(section, option, value) - config.remove_section('globals') - - # now expanding local variables defined in the cfg file - # - for section in config.sections(): - variables = dict(config.items(section)) - - def _replacer(matchobj): - name = matchobj.group(1) - if name in variables: - return variables[name] - return matchobj.group(0) - - for option, value in config.items(section): - config.set(section, option, _VAR_REPL.sub(_replacer, value)) - -#_expand_globals(_SCHEMES) - - # FIXME don't rely on sys.version here, its format is an implementation detail - # of CPython, use sys.version_info or sys.hexversion -_PY_VERSION = sys.version.split()[0] -_PY_VERSION_SHORT = sys.version[:3] -_PY_VERSION_SHORT_NO_DOT = _PY_VERSION[0] + _PY_VERSION[2] -_PREFIX = os.path.normpath(sys.prefix) -_EXEC_PREFIX = os.path.normpath(sys.exec_prefix) -_CONFIG_VARS = None -_USER_BASE = None - - -def _subst_vars(path, local_vars): - """In the string `path`, replace tokens like {some.thing} with the - corresponding value from the map `local_vars`. - - If there is no corresponding value, leave the token unchanged. - """ - def _replacer(matchobj): - name = matchobj.group(1) - if name in local_vars: - return local_vars[name] - elif name in os.environ: - return os.environ[name] - return matchobj.group(0) - return _VAR_REPL.sub(_replacer, path) - - -def _extend_dict(target_dict, other_dict): - target_keys = target_dict.keys() - for key, value in other_dict.items(): - if key in target_keys: - continue - target_dict[key] = value - - -def _expand_vars(scheme, vars): - res = {} - if vars is None: - vars = {} - _extend_dict(vars, get_config_vars()) - - for key, value in _SCHEMES.items(scheme): - if os.name in ('posix', 'nt'): - value = os.path.expanduser(value) - res[key] = os.path.normpath(_subst_vars(value, vars)) - return res - - -def format_value(value, vars): - def _replacer(matchobj): - name = matchobj.group(1) - if name in vars: - return vars[name] - return matchobj.group(0) - return _VAR_REPL.sub(_replacer, value) - - -def _get_default_scheme(): - if os.name == 'posix': - # the default scheme for posix is posix_prefix - return 'posix_prefix' - return os.name - - -def _getuserbase(): - env_base = os.environ.get("PYTHONUSERBASE", None) - - def joinuser(*args): - return os.path.expanduser(os.path.join(*args)) - - # what about 'os2emx', 'riscos' ? - if os.name == "nt": - base = os.environ.get("APPDATA") or "~" - if env_base: - return env_base - else: - return joinuser(base, "Python") - - if sys.platform == "darwin": - framework = get_config_var("PYTHONFRAMEWORK") - if framework: - if env_base: - return env_base - else: - return joinuser("~", "Library", framework, "%d.%d" % - sys.version_info[:2]) - - if env_base: - return env_base - else: - return joinuser("~", ".local") - - -def _parse_makefile(filename, vars=None): - """Parse a Makefile-style file. - - A dictionary containing name/value pairs is returned. If an - optional dictionary is passed in as the second argument, it is - used instead of a new dictionary. - """ - # Regexes needed for parsing Makefile (and similar syntaxes, - # like old-style Setup files). - _variable_rx = re.compile("([a-zA-Z][a-zA-Z0-9_]+)\s*=\s*(.*)") - _findvar1_rx = re.compile(r"\$\(([A-Za-z][A-Za-z0-9_]*)\)") - _findvar2_rx = re.compile(r"\${([A-Za-z][A-Za-z0-9_]*)}") - - if vars is None: - vars = {} - done = {} - notdone = {} - - with codecs.open(filename, encoding='utf-8', errors="surrogateescape") as f: - lines = f.readlines() - - for line in lines: - if line.startswith('#') or line.strip() == '': - continue - m = _variable_rx.match(line) - if m: - n, v = m.group(1, 2) - v = v.strip() - # `$$' is a literal `$' in make - tmpv = v.replace('$$', '') - - if "$" in tmpv: - notdone[n] = v - else: - try: - v = int(v) - except ValueError: - # insert literal `$' - done[n] = v.replace('$$', '$') - else: - done[n] = v - - # do variable interpolation here - variables = list(notdone.keys()) - - # Variables with a 'PY_' prefix in the makefile. These need to - # be made available without that prefix through sysconfig. - # Special care is needed to ensure that variable expansion works, even - # if the expansion uses the name without a prefix. - renamed_variables = ('CFLAGS', 'LDFLAGS', 'CPPFLAGS') - - while len(variables) > 0: - for name in tuple(variables): - value = notdone[name] - m = _findvar1_rx.search(value) or _findvar2_rx.search(value) - if m is not None: - n = m.group(1) - found = True - if n in done: - item = str(done[n]) - elif n in notdone: - # get it on a subsequent round - found = False - elif n in os.environ: - # do it like make: fall back to environment - item = os.environ[n] - - elif n in renamed_variables: - if (name.startswith('PY_') and - name[3:] in renamed_variables): - item = "" - - elif 'PY_' + n in notdone: - found = False - - else: - item = str(done['PY_' + n]) - - else: - done[n] = item = "" - - if found: - after = value[m.end():] - value = value[:m.start()] + item + after - if "$" in after: - notdone[name] = value - else: - try: - value = int(value) - except ValueError: - done[name] = value.strip() - else: - done[name] = value - variables.remove(name) - - if (name.startswith('PY_') and - name[3:] in renamed_variables): - - name = name[3:] - if name not in done: - done[name] = value - - else: - # bogus variable reference (e.g. "prefix=$/opt/python"); - # just drop it since we can't deal - done[name] = value - variables.remove(name) - - # strip spurious spaces - for k, v in done.items(): - if isinstance(v, str): - done[k] = v.strip() - - # save the results in the global dictionary - vars.update(done) - return vars - - -def get_makefile_filename(): - """Return the path of the Makefile.""" - if _PYTHON_BUILD: - return os.path.join(_PROJECT_BASE, "Makefile") - if hasattr(sys, 'abiflags'): - config_dir_name = 'config-%s%s' % (_PY_VERSION_SHORT, sys.abiflags) - else: - config_dir_name = 'config' - return os.path.join(get_path('stdlib'), config_dir_name, 'Makefile') - - -def _init_posix(vars): - """Initialize the module as appropriate for POSIX systems.""" - # load the installed Makefile: - makefile = get_makefile_filename() - try: - _parse_makefile(makefile, vars) - except IOError as e: - msg = "invalid Python installation: unable to open %s" % makefile - if hasattr(e, "strerror"): - msg = msg + " (%s)" % e.strerror - raise IOError(msg) - # load the installed pyconfig.h: - config_h = get_config_h_filename() - try: - with open(config_h) as f: - parse_config_h(f, vars) - except IOError as e: - msg = "invalid Python installation: unable to open %s" % config_h - if hasattr(e, "strerror"): - msg = msg + " (%s)" % e.strerror - raise IOError(msg) - # On AIX, there are wrong paths to the linker scripts in the Makefile - # -- these paths are relative to the Python source, but when installed - # the scripts are in another directory. - if _PYTHON_BUILD: - vars['LDSHARED'] = vars['BLDSHARED'] - - -def _init_non_posix(vars): - """Initialize the module as appropriate for NT""" - # set basic install directories - vars['LIBDEST'] = get_path('stdlib') - vars['BINLIBDEST'] = get_path('platstdlib') - vars['INCLUDEPY'] = get_path('include') - vars['SO'] = '.pyd' - vars['EXE'] = '.exe' - vars['VERSION'] = _PY_VERSION_SHORT_NO_DOT - vars['BINDIR'] = os.path.dirname(_safe_realpath(sys.executable)) - -# -# public APIs -# - - -def parse_config_h(fp, vars=None): - """Parse a config.h-style file. - - A dictionary containing name/value pairs is returned. If an - optional dictionary is passed in as the second argument, it is - used instead of a new dictionary. - """ - if vars is None: - vars = {} - define_rx = re.compile("#define ([A-Z][A-Za-z0-9_]+) (.*)\n") - undef_rx = re.compile("/[*] #undef ([A-Z][A-Za-z0-9_]+) [*]/\n") - - while True: - line = fp.readline() - if not line: - break - m = define_rx.match(line) - if m: - n, v = m.group(1, 2) - try: - v = int(v) - except ValueError: - pass - vars[n] = v - else: - m = undef_rx.match(line) - if m: - vars[m.group(1)] = 0 - return vars - - -def get_config_h_filename(): - """Return the path of pyconfig.h.""" - if _PYTHON_BUILD: - if os.name == "nt": - inc_dir = os.path.join(_PROJECT_BASE, "PC") - else: - inc_dir = _PROJECT_BASE - else: - inc_dir = get_path('platinclude') - return os.path.join(inc_dir, 'pyconfig.h') - - -def get_scheme_names(): - """Return a tuple containing the schemes names.""" - return tuple(sorted(_SCHEMES.sections())) - - -def get_path_names(): - """Return a tuple containing the paths names.""" - # xxx see if we want a static list - return _SCHEMES.options('posix_prefix') - - -def get_paths(scheme=_get_default_scheme(), vars=None, expand=True): - """Return a mapping containing an install scheme. - - ``scheme`` is the install scheme name. If not provided, it will - return the default scheme for the current platform. - """ - _ensure_cfg_read() - if expand: - return _expand_vars(scheme, vars) - else: - return dict(_SCHEMES.items(scheme)) - - -def get_path(name, scheme=_get_default_scheme(), vars=None, expand=True): - """Return a path corresponding to the scheme. - - ``scheme`` is the install scheme name. - """ - return get_paths(scheme, vars, expand)[name] - - -def get_config_vars(*args): - """With no arguments, return a dictionary of all configuration - variables relevant for the current platform. - - On Unix, this means every variable defined in Python's installed Makefile; - On Windows and Mac OS it's a much smaller set. - - With arguments, return a list of values that result from looking up - each argument in the configuration variable dictionary. - """ - global _CONFIG_VARS - if _CONFIG_VARS is None: - _CONFIG_VARS = {} - # Normalized versions of prefix and exec_prefix are handy to have; - # in fact, these are the standard versions used most places in the - # distutils2 module. - _CONFIG_VARS['prefix'] = _PREFIX - _CONFIG_VARS['exec_prefix'] = _EXEC_PREFIX - _CONFIG_VARS['py_version'] = _PY_VERSION - _CONFIG_VARS['py_version_short'] = _PY_VERSION_SHORT - _CONFIG_VARS['py_version_nodot'] = _PY_VERSION[0] + _PY_VERSION[2] - _CONFIG_VARS['base'] = _PREFIX - _CONFIG_VARS['platbase'] = _EXEC_PREFIX - _CONFIG_VARS['projectbase'] = _PROJECT_BASE - try: - _CONFIG_VARS['abiflags'] = sys.abiflags - except AttributeError: - # sys.abiflags may not be defined on all platforms. - _CONFIG_VARS['abiflags'] = '' - - if os.name in ('nt', 'os2'): - _init_non_posix(_CONFIG_VARS) - if os.name == 'posix': - _init_posix(_CONFIG_VARS) - # Setting 'userbase' is done below the call to the - # init function to enable using 'get_config_var' in - # the init-function. - if sys.version >= '2.6': - _CONFIG_VARS['userbase'] = _getuserbase() - - if 'srcdir' not in _CONFIG_VARS: - _CONFIG_VARS['srcdir'] = _PROJECT_BASE - else: - _CONFIG_VARS['srcdir'] = _safe_realpath(_CONFIG_VARS['srcdir']) - - # Convert srcdir into an absolute path if it appears necessary. - # Normally it is relative to the build directory. However, during - # testing, for example, we might be running a non-installed python - # from a different directory. - if _PYTHON_BUILD and os.name == "posix": - base = _PROJECT_BASE - try: - cwd = os.getcwd() - except OSError: - cwd = None - if (not os.path.isabs(_CONFIG_VARS['srcdir']) and - base != cwd): - # srcdir is relative and we are not in the same directory - # as the executable. Assume executable is in the build - # directory and make srcdir absolute. - srcdir = os.path.join(base, _CONFIG_VARS['srcdir']) - _CONFIG_VARS['srcdir'] = os.path.normpath(srcdir) - - if sys.platform == 'darwin': - kernel_version = os.uname()[2] # Kernel version (8.4.3) - major_version = int(kernel_version.split('.')[0]) - - if major_version < 8: - # On macOS before 10.4, check if -arch and -isysroot - # are in CFLAGS or LDFLAGS and remove them if they are. - # This is needed when building extensions on a 10.3 system - # using a universal build of python. - for key in ('LDFLAGS', 'BASECFLAGS', - # a number of derived variables. These need to be - # patched up as well. - 'CFLAGS', 'PY_CFLAGS', 'BLDSHARED'): - flags = _CONFIG_VARS[key] - flags = re.sub('-arch\s+\w+\s', ' ', flags) - flags = re.sub('-isysroot [^ \t]*', ' ', flags) - _CONFIG_VARS[key] = flags - else: - # Allow the user to override the architecture flags using - # an environment variable. - # NOTE: This name was introduced by Apple in OSX 10.5 and - # is used by several scripting languages distributed with - # that OS release. - if 'ARCHFLAGS' in os.environ: - arch = os.environ['ARCHFLAGS'] - for key in ('LDFLAGS', 'BASECFLAGS', - # a number of derived variables. These need to be - # patched up as well. - 'CFLAGS', 'PY_CFLAGS', 'BLDSHARED'): - - flags = _CONFIG_VARS[key] - flags = re.sub('-arch\s+\w+\s', ' ', flags) - flags = flags + ' ' + arch - _CONFIG_VARS[key] = flags - - # If we're on OSX 10.5 or later and the user tries to - # compiles an extension using an SDK that is not present - # on the current machine it is better to not use an SDK - # than to fail. - # - # The major usecase for this is users using a Python.org - # binary installer on OSX 10.6: that installer uses - # the 10.4u SDK, but that SDK is not installed by default - # when you install Xcode. - # - CFLAGS = _CONFIG_VARS.get('CFLAGS', '') - m = re.search('-isysroot\s+(\S+)', CFLAGS) - if m is not None: - sdk = m.group(1) - if not os.path.exists(sdk): - for key in ('LDFLAGS', 'BASECFLAGS', - # a number of derived variables. These need to be - # patched up as well. - 'CFLAGS', 'PY_CFLAGS', 'BLDSHARED'): - - flags = _CONFIG_VARS[key] - flags = re.sub('-isysroot\s+\S+(\s|$)', ' ', flags) - _CONFIG_VARS[key] = flags - - if args: - vals = [] - for name in args: - vals.append(_CONFIG_VARS.get(name)) - return vals - else: - return _CONFIG_VARS - - -def get_config_var(name): - """Return the value of a single variable using the dictionary returned by - 'get_config_vars()'. - - Equivalent to get_config_vars().get(name) - """ - return get_config_vars().get(name) - - -def get_platform(): - """Return a string that identifies the current platform. - - This is used mainly to distinguish platform-specific build directories and - platform-specific built distributions. Typically includes the OS name - and version and the architecture (as supplied by 'os.uname()'), - although the exact information included depends on the OS; eg. for IRIX - the architecture isn't particularly important (IRIX only runs on SGI - hardware), but for Linux the kernel version isn't particularly - important. - - Examples of returned values: - linux-i586 - linux-alpha (?) - solaris-2.6-sun4u - irix-5.3 - irix64-6.2 - - Windows will return one of: - win-amd64 (64bit Windows on AMD64 (aka x86_64, Intel64, EM64T, etc) - win-ia64 (64bit Windows on Itanium) - win32 (all others - specifically, sys.platform is returned) - - For other non-POSIX platforms, currently just returns 'sys.platform'. - """ - if os.name == 'nt': - # sniff sys.version for architecture. - prefix = " bit (" - i = sys.version.find(prefix) - if i == -1: - return sys.platform - j = sys.version.find(")", i) - look = sys.version[i+len(prefix):j].lower() - if look == 'amd64': - return 'win-amd64' - if look == 'itanium': - return 'win-ia64' - return sys.platform - - if os.name != "posix" or not hasattr(os, 'uname'): - # XXX what about the architecture? NT is Intel or Alpha, - # Mac OS is M68k or PPC, etc. - return sys.platform - - # Try to distinguish various flavours of Unix - osname, host, release, version, machine = os.uname() - - # Convert the OS name to lowercase, remove '/' characters - # (to accommodate BSD/OS), and translate spaces (for "Power Macintosh") - osname = osname.lower().replace('/', '') - machine = machine.replace(' ', '_') - machine = machine.replace('/', '-') - - if osname[:5] == "linux": - # At least on Linux/Intel, 'machine' is the processor -- - # i386, etc. - # XXX what about Alpha, SPARC, etc? - return "%s-%s" % (osname, machine) - elif osname[:5] == "sunos": - if release[0] >= "5": # SunOS 5 == Solaris 2 - osname = "solaris" - release = "%d.%s" % (int(release[0]) - 3, release[2:]) - # fall through to standard osname-release-machine representation - elif osname[:4] == "irix": # could be "irix64"! - return "%s-%s" % (osname, release) - elif osname[:3] == "aix": - return "%s-%s.%s" % (osname, version, release) - elif osname[:6] == "cygwin": - osname = "cygwin" - rel_re = re.compile(r'[\d.]+') - m = rel_re.match(release) - if m: - release = m.group() - elif osname[:6] == "darwin": - # - # For our purposes, we'll assume that the system version from - # distutils' perspective is what MACOSX_DEPLOYMENT_TARGET is set - # to. This makes the compatibility story a bit more sane because the - # machine is going to compile and link as if it were - # MACOSX_DEPLOYMENT_TARGET. - cfgvars = get_config_vars() - macver = cfgvars.get('MACOSX_DEPLOYMENT_TARGET') - - if True: - # Always calculate the release of the running machine, - # needed to determine if we can build fat binaries or not. - - macrelease = macver - # Get the system version. Reading this plist is a documented - # way to get the system version (see the documentation for - # the Gestalt Manager) - try: - f = open('/System/Library/CoreServices/SystemVersion.plist') - except IOError: - # We're on a plain darwin box, fall back to the default - # behaviour. - pass - else: - try: - m = re.search(r'ProductUserVisibleVersion\s*' - r'(.*?)', f.read()) - finally: - f.close() - if m is not None: - macrelease = '.'.join(m.group(1).split('.')[:2]) - # else: fall back to the default behaviour - - if not macver: - macver = macrelease - - if macver: - release = macver - osname = "macosx" - - if ((macrelease + '.') >= '10.4.' and - '-arch' in get_config_vars().get('CFLAGS', '').strip()): - # The universal build will build fat binaries, but not on - # systems before 10.4 - # - # Try to detect 4-way universal builds, those have machine-type - # 'universal' instead of 'fat'. - - machine = 'fat' - cflags = get_config_vars().get('CFLAGS') - - archs = re.findall('-arch\s+(\S+)', cflags) - archs = tuple(sorted(set(archs))) - - if len(archs) == 1: - machine = archs[0] - elif archs == ('i386', 'ppc'): - machine = 'fat' - elif archs == ('i386', 'x86_64'): - machine = 'intel' - elif archs == ('i386', 'ppc', 'x86_64'): - machine = 'fat3' - elif archs == ('ppc64', 'x86_64'): - machine = 'fat64' - elif archs == ('i386', 'ppc', 'ppc64', 'x86_64'): - machine = 'universal' - else: - raise ValueError( - "Don't know machine value for archs=%r" % (archs,)) - - elif machine == 'i386': - # On OSX the machine type returned by uname is always the - # 32-bit variant, even if the executable architecture is - # the 64-bit variant - if sys.maxsize >= 2**32: - machine = 'x86_64' - - elif machine in ('PowerPC', 'Power_Macintosh'): - # Pick a sane name for the PPC architecture. - # See 'i386' case - if sys.maxsize >= 2**32: - machine = 'ppc64' - else: - machine = 'ppc' - - return "%s-%s-%s" % (osname, release, machine) - - -def get_python_version(): - return _PY_VERSION_SHORT - - -def _print_dict(title, data): - for index, (key, value) in enumerate(sorted(data.items())): - if index == 0: - print('%s: ' % (title)) - print('\t%s = "%s"' % (key, value)) - - -def _main(): - """Display all information sysconfig detains.""" - print('Platform: "%s"' % get_platform()) - print('Python version: "%s"' % get_python_version()) - print('Current installation scheme: "%s"' % _get_default_scheme()) - print() - _print_dict('Paths', get_paths()) - print() - _print_dict('Variables', get_config_vars()) - - -if __name__ == '__main__': - _main() diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distlib/_backport/tarfile.py b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distlib/_backport/tarfile.py deleted file mode 100644 index d66d856..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distlib/_backport/tarfile.py +++ /dev/null @@ -1,2607 +0,0 @@ -#------------------------------------------------------------------- -# tarfile.py -#------------------------------------------------------------------- -# Copyright (C) 2002 Lars Gustaebel -# All rights reserved. -# -# 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. -# -from __future__ import print_function - -"""Read from and write to tar format archives. -""" - -__version__ = "$Revision$" - -version = "0.9.0" -__author__ = "Lars Gust\u00e4bel (lars@gustaebel.de)" -__date__ = "$Date: 2011-02-25 17:42:01 +0200 (Fri, 25 Feb 2011) $" -__cvsid__ = "$Id: tarfile.py 88586 2011-02-25 15:42:01Z marc-andre.lemburg $" -__credits__ = "Gustavo Niemeyer, Niels Gust\u00e4bel, Richard Townsend." - -#--------- -# Imports -#--------- -import sys -import os -import stat -import errno -import time -import struct -import copy -import re - -try: - import grp, pwd -except ImportError: - grp = pwd = None - -# os.symlink on Windows prior to 6.0 raises NotImplementedError -symlink_exception = (AttributeError, NotImplementedError) -try: - # WindowsError (1314) will be raised if the caller does not hold the - # SeCreateSymbolicLinkPrivilege privilege - symlink_exception += (WindowsError,) -except NameError: - pass - -# from tarfile import * -__all__ = ["TarFile", "TarInfo", "is_tarfile", "TarError"] - -if sys.version_info[0] < 3: - import __builtin__ as builtins -else: - import builtins - -_open = builtins.open # Since 'open' is TarFile.open - -#--------------------------------------------------------- -# tar constants -#--------------------------------------------------------- -NUL = b"\0" # the null character -BLOCKSIZE = 512 # length of processing blocks -RECORDSIZE = BLOCKSIZE * 20 # length of records -GNU_MAGIC = b"ustar \0" # magic gnu tar string -POSIX_MAGIC = b"ustar\x0000" # magic posix tar string - -LENGTH_NAME = 100 # maximum length of a filename -LENGTH_LINK = 100 # maximum length of a linkname -LENGTH_PREFIX = 155 # maximum length of the prefix field - -REGTYPE = b"0" # regular file -AREGTYPE = b"\0" # regular file -LNKTYPE = b"1" # link (inside tarfile) -SYMTYPE = b"2" # symbolic link -CHRTYPE = b"3" # character special device -BLKTYPE = b"4" # block special device -DIRTYPE = b"5" # directory -FIFOTYPE = b"6" # fifo special device -CONTTYPE = b"7" # contiguous file - -GNUTYPE_LONGNAME = b"L" # GNU tar longname -GNUTYPE_LONGLINK = b"K" # GNU tar longlink -GNUTYPE_SPARSE = b"S" # GNU tar sparse file - -XHDTYPE = b"x" # POSIX.1-2001 extended header -XGLTYPE = b"g" # POSIX.1-2001 global header -SOLARIS_XHDTYPE = b"X" # Solaris extended header - -USTAR_FORMAT = 0 # POSIX.1-1988 (ustar) format -GNU_FORMAT = 1 # GNU tar format -PAX_FORMAT = 2 # POSIX.1-2001 (pax) format -DEFAULT_FORMAT = GNU_FORMAT - -#--------------------------------------------------------- -# tarfile constants -#--------------------------------------------------------- -# File types that tarfile supports: -SUPPORTED_TYPES = (REGTYPE, AREGTYPE, LNKTYPE, - SYMTYPE, DIRTYPE, FIFOTYPE, - CONTTYPE, CHRTYPE, BLKTYPE, - GNUTYPE_LONGNAME, GNUTYPE_LONGLINK, - GNUTYPE_SPARSE) - -# File types that will be treated as a regular file. -REGULAR_TYPES = (REGTYPE, AREGTYPE, - CONTTYPE, GNUTYPE_SPARSE) - -# File types that are part of the GNU tar format. -GNU_TYPES = (GNUTYPE_LONGNAME, GNUTYPE_LONGLINK, - GNUTYPE_SPARSE) - -# Fields from a pax header that override a TarInfo attribute. -PAX_FIELDS = ("path", "linkpath", "size", "mtime", - "uid", "gid", "uname", "gname") - -# Fields from a pax header that are affected by hdrcharset. -PAX_NAME_FIELDS = set(("path", "linkpath", "uname", "gname")) - -# Fields in a pax header that are numbers, all other fields -# are treated as strings. -PAX_NUMBER_FIELDS = { - "atime": float, - "ctime": float, - "mtime": float, - "uid": int, - "gid": int, - "size": int -} - -#--------------------------------------------------------- -# Bits used in the mode field, values in octal. -#--------------------------------------------------------- -S_IFLNK = 0o120000 # symbolic link -S_IFREG = 0o100000 # regular file -S_IFBLK = 0o060000 # block device -S_IFDIR = 0o040000 # directory -S_IFCHR = 0o020000 # character device -S_IFIFO = 0o010000 # fifo - -TSUID = 0o4000 # set UID on execution -TSGID = 0o2000 # set GID on execution -TSVTX = 0o1000 # reserved - -TUREAD = 0o400 # read by owner -TUWRITE = 0o200 # write by owner -TUEXEC = 0o100 # execute/search by owner -TGREAD = 0o040 # read by group -TGWRITE = 0o020 # write by group -TGEXEC = 0o010 # execute/search by group -TOREAD = 0o004 # read by other -TOWRITE = 0o002 # write by other -TOEXEC = 0o001 # execute/search by other - -#--------------------------------------------------------- -# initialization -#--------------------------------------------------------- -if os.name in ("nt", "ce"): - ENCODING = "utf-8" -else: - ENCODING = sys.getfilesystemencoding() - -#--------------------------------------------------------- -# Some useful functions -#--------------------------------------------------------- - -def stn(s, length, encoding, errors): - """Convert a string to a null-terminated bytes object. - """ - s = s.encode(encoding, errors) - return s[:length] + (length - len(s)) * NUL - -def nts(s, encoding, errors): - """Convert a null-terminated bytes object to a string. - """ - p = s.find(b"\0") - if p != -1: - s = s[:p] - return s.decode(encoding, errors) - -def nti(s): - """Convert a number field to a python number. - """ - # There are two possible encodings for a number field, see - # itn() below. - if s[0] != chr(0o200): - try: - n = int(nts(s, "ascii", "strict") or "0", 8) - except ValueError: - raise InvalidHeaderError("invalid header") - else: - n = 0 - for i in range(len(s) - 1): - n <<= 8 - n += ord(s[i + 1]) - return n - -def itn(n, digits=8, format=DEFAULT_FORMAT): - """Convert a python number to a number field. - """ - # POSIX 1003.1-1988 requires numbers to be encoded as a string of - # octal digits followed by a null-byte, this allows values up to - # (8**(digits-1))-1. GNU tar allows storing numbers greater than - # that if necessary. A leading 0o200 byte indicates this particular - # encoding, the following digits-1 bytes are a big-endian - # representation. This allows values up to (256**(digits-1))-1. - if 0 <= n < 8 ** (digits - 1): - s = ("%0*o" % (digits - 1, n)).encode("ascii") + NUL - else: - if format != GNU_FORMAT or n >= 256 ** (digits - 1): - raise ValueError("overflow in number field") - - if n < 0: - # XXX We mimic GNU tar's behaviour with negative numbers, - # this could raise OverflowError. - n = struct.unpack("L", struct.pack("l", n))[0] - - s = bytearray() - for i in range(digits - 1): - s.insert(0, n & 0o377) - n >>= 8 - s.insert(0, 0o200) - return s - -def calc_chksums(buf): - """Calculate the checksum for a member's header by summing up all - characters except for the chksum field which is treated as if - it was filled with spaces. According to the GNU tar sources, - some tars (Sun and NeXT) calculate chksum with signed char, - which will be different if there are chars in the buffer with - the high bit set. So we calculate two checksums, unsigned and - signed. - """ - unsigned_chksum = 256 + sum(struct.unpack("148B", buf[:148]) + struct.unpack("356B", buf[156:512])) - signed_chksum = 256 + sum(struct.unpack("148b", buf[:148]) + struct.unpack("356b", buf[156:512])) - return unsigned_chksum, signed_chksum - -def copyfileobj(src, dst, length=None): - """Copy length bytes from fileobj src to fileobj dst. - If length is None, copy the entire content. - """ - if length == 0: - return - if length is None: - while True: - buf = src.read(16*1024) - if not buf: - break - dst.write(buf) - return - - BUFSIZE = 16 * 1024 - blocks, remainder = divmod(length, BUFSIZE) - for b in range(blocks): - buf = src.read(BUFSIZE) - if len(buf) < BUFSIZE: - raise IOError("end of file reached") - dst.write(buf) - - if remainder != 0: - buf = src.read(remainder) - if len(buf) < remainder: - raise IOError("end of file reached") - dst.write(buf) - return - -filemode_table = ( - ((S_IFLNK, "l"), - (S_IFREG, "-"), - (S_IFBLK, "b"), - (S_IFDIR, "d"), - (S_IFCHR, "c"), - (S_IFIFO, "p")), - - ((TUREAD, "r"),), - ((TUWRITE, "w"),), - ((TUEXEC|TSUID, "s"), - (TSUID, "S"), - (TUEXEC, "x")), - - ((TGREAD, "r"),), - ((TGWRITE, "w"),), - ((TGEXEC|TSGID, "s"), - (TSGID, "S"), - (TGEXEC, "x")), - - ((TOREAD, "r"),), - ((TOWRITE, "w"),), - ((TOEXEC|TSVTX, "t"), - (TSVTX, "T"), - (TOEXEC, "x")) -) - -def filemode(mode): - """Convert a file's mode to a string of the form - -rwxrwxrwx. - Used by TarFile.list() - """ - perm = [] - for table in filemode_table: - for bit, char in table: - if mode & bit == bit: - perm.append(char) - break - else: - perm.append("-") - return "".join(perm) - -class TarError(Exception): - """Base exception.""" - pass -class ExtractError(TarError): - """General exception for extract errors.""" - pass -class ReadError(TarError): - """Exception for unreadable tar archives.""" - pass -class CompressionError(TarError): - """Exception for unavailable compression methods.""" - pass -class StreamError(TarError): - """Exception for unsupported operations on stream-like TarFiles.""" - pass -class HeaderError(TarError): - """Base exception for header errors.""" - pass -class EmptyHeaderError(HeaderError): - """Exception for empty headers.""" - pass -class TruncatedHeaderError(HeaderError): - """Exception for truncated headers.""" - pass -class EOFHeaderError(HeaderError): - """Exception for end of file headers.""" - pass -class InvalidHeaderError(HeaderError): - """Exception for invalid headers.""" - pass -class SubsequentHeaderError(HeaderError): - """Exception for missing and invalid extended headers.""" - pass - -#--------------------------- -# internal stream interface -#--------------------------- -class _LowLevelFile(object): - """Low-level file object. Supports reading and writing. - It is used instead of a regular file object for streaming - access. - """ - - def __init__(self, name, mode): - mode = { - "r": os.O_RDONLY, - "w": os.O_WRONLY | os.O_CREAT | os.O_TRUNC, - }[mode] - if hasattr(os, "O_BINARY"): - mode |= os.O_BINARY - self.fd = os.open(name, mode, 0o666) - - def close(self): - os.close(self.fd) - - def read(self, size): - return os.read(self.fd, size) - - def write(self, s): - os.write(self.fd, s) - -class _Stream(object): - """Class that serves as an adapter between TarFile and - a stream-like object. The stream-like object only - needs to have a read() or write() method and is accessed - blockwise. Use of gzip or bzip2 compression is possible. - A stream-like object could be for example: sys.stdin, - sys.stdout, a socket, a tape device etc. - - _Stream is intended to be used only internally. - """ - - def __init__(self, name, mode, comptype, fileobj, bufsize): - """Construct a _Stream object. - """ - self._extfileobj = True - if fileobj is None: - fileobj = _LowLevelFile(name, mode) - self._extfileobj = False - - if comptype == '*': - # Enable transparent compression detection for the - # stream interface - fileobj = _StreamProxy(fileobj) - comptype = fileobj.getcomptype() - - self.name = name or "" - self.mode = mode - self.comptype = comptype - self.fileobj = fileobj - self.bufsize = bufsize - self.buf = b"" - self.pos = 0 - self.closed = False - - try: - if comptype == "gz": - try: - import zlib - except ImportError: - raise CompressionError("zlib module is not available") - self.zlib = zlib - self.crc = zlib.crc32(b"") - if mode == "r": - self._init_read_gz() - else: - self._init_write_gz() - - if comptype == "bz2": - try: - import bz2 - except ImportError: - raise CompressionError("bz2 module is not available") - if mode == "r": - self.dbuf = b"" - self.cmp = bz2.BZ2Decompressor() - else: - self.cmp = bz2.BZ2Compressor() - except: - if not self._extfileobj: - self.fileobj.close() - self.closed = True - raise - - def __del__(self): - if hasattr(self, "closed") and not self.closed: - self.close() - - def _init_write_gz(self): - """Initialize for writing with gzip compression. - """ - self.cmp = self.zlib.compressobj(9, self.zlib.DEFLATED, - -self.zlib.MAX_WBITS, - self.zlib.DEF_MEM_LEVEL, - 0) - timestamp = struct.pack(" self.bufsize: - self.fileobj.write(self.buf[:self.bufsize]) - self.buf = self.buf[self.bufsize:] - - def close(self): - """Close the _Stream object. No operation should be - done on it afterwards. - """ - if self.closed: - return - - if self.mode == "w" and self.comptype != "tar": - self.buf += self.cmp.flush() - - if self.mode == "w" and self.buf: - self.fileobj.write(self.buf) - self.buf = b"" - if self.comptype == "gz": - # The native zlib crc is an unsigned 32-bit integer, but - # the Python wrapper implicitly casts that to a signed C - # long. So, on a 32-bit box self.crc may "look negative", - # while the same crc on a 64-bit box may "look positive". - # To avoid irksome warnings from the `struct` module, force - # it to look positive on all boxes. - self.fileobj.write(struct.pack("= 0: - blocks, remainder = divmod(pos - self.pos, self.bufsize) - for i in range(blocks): - self.read(self.bufsize) - self.read(remainder) - else: - raise StreamError("seeking backwards is not allowed") - return self.pos - - def read(self, size=None): - """Return the next size number of bytes from the stream. - If size is not defined, return all bytes of the stream - up to EOF. - """ - if size is None: - t = [] - while True: - buf = self._read(self.bufsize) - if not buf: - break - t.append(buf) - buf = "".join(t) - else: - buf = self._read(size) - self.pos += len(buf) - return buf - - def _read(self, size): - """Return size bytes from the stream. - """ - if self.comptype == "tar": - return self.__read(size) - - c = len(self.dbuf) - while c < size: - buf = self.__read(self.bufsize) - if not buf: - break - try: - buf = self.cmp.decompress(buf) - except IOError: - raise ReadError("invalid compressed data") - self.dbuf += buf - c += len(buf) - buf = self.dbuf[:size] - self.dbuf = self.dbuf[size:] - return buf - - def __read(self, size): - """Return size bytes from stream. If internal buffer is empty, - read another block from the stream. - """ - c = len(self.buf) - while c < size: - buf = self.fileobj.read(self.bufsize) - if not buf: - break - self.buf += buf - c += len(buf) - buf = self.buf[:size] - self.buf = self.buf[size:] - return buf -# class _Stream - -class _StreamProxy(object): - """Small proxy class that enables transparent compression - detection for the Stream interface (mode 'r|*'). - """ - - def __init__(self, fileobj): - self.fileobj = fileobj - self.buf = self.fileobj.read(BLOCKSIZE) - - def read(self, size): - self.read = self.fileobj.read - return self.buf - - def getcomptype(self): - if self.buf.startswith(b"\037\213\010"): - return "gz" - if self.buf.startswith(b"BZh91"): - return "bz2" - return "tar" - - def close(self): - self.fileobj.close() -# class StreamProxy - -class _BZ2Proxy(object): - """Small proxy class that enables external file object - support for "r:bz2" and "w:bz2" modes. This is actually - a workaround for a limitation in bz2 module's BZ2File - class which (unlike gzip.GzipFile) has no support for - a file object argument. - """ - - blocksize = 16 * 1024 - - def __init__(self, fileobj, mode): - self.fileobj = fileobj - self.mode = mode - self.name = getattr(self.fileobj, "name", None) - self.init() - - def init(self): - import bz2 - self.pos = 0 - if self.mode == "r": - self.bz2obj = bz2.BZ2Decompressor() - self.fileobj.seek(0) - self.buf = b"" - else: - self.bz2obj = bz2.BZ2Compressor() - - def read(self, size): - x = len(self.buf) - while x < size: - raw = self.fileobj.read(self.blocksize) - if not raw: - break - data = self.bz2obj.decompress(raw) - self.buf += data - x += len(data) - - buf = self.buf[:size] - self.buf = self.buf[size:] - self.pos += len(buf) - return buf - - def seek(self, pos): - if pos < self.pos: - self.init() - self.read(pos - self.pos) - - def tell(self): - return self.pos - - def write(self, data): - self.pos += len(data) - raw = self.bz2obj.compress(data) - self.fileobj.write(raw) - - def close(self): - if self.mode == "w": - raw = self.bz2obj.flush() - self.fileobj.write(raw) -# class _BZ2Proxy - -#------------------------ -# Extraction file object -#------------------------ -class _FileInFile(object): - """A thin wrapper around an existing file object that - provides a part of its data as an individual file - object. - """ - - def __init__(self, fileobj, offset, size, blockinfo=None): - self.fileobj = fileobj - self.offset = offset - self.size = size - self.position = 0 - - if blockinfo is None: - blockinfo = [(0, size)] - - # Construct a map with data and zero blocks. - self.map_index = 0 - self.map = [] - lastpos = 0 - realpos = self.offset - for offset, size in blockinfo: - if offset > lastpos: - self.map.append((False, lastpos, offset, None)) - self.map.append((True, offset, offset + size, realpos)) - realpos += size - lastpos = offset + size - if lastpos < self.size: - self.map.append((False, lastpos, self.size, None)) - - def seekable(self): - if not hasattr(self.fileobj, "seekable"): - # XXX gzip.GzipFile and bz2.BZ2File - return True - return self.fileobj.seekable() - - def tell(self): - """Return the current file position. - """ - return self.position - - def seek(self, position): - """Seek to a position in the file. - """ - self.position = position - - def read(self, size=None): - """Read data from the file. - """ - if size is None: - size = self.size - self.position - else: - size = min(size, self.size - self.position) - - buf = b"" - while size > 0: - while True: - data, start, stop, offset = self.map[self.map_index] - if start <= self.position < stop: - break - else: - self.map_index += 1 - if self.map_index == len(self.map): - self.map_index = 0 - length = min(size, stop - self.position) - if data: - self.fileobj.seek(offset + (self.position - start)) - buf += self.fileobj.read(length) - else: - buf += NUL * length - size -= length - self.position += length - return buf -#class _FileInFile - - -class ExFileObject(object): - """File-like object for reading an archive member. - Is returned by TarFile.extractfile(). - """ - blocksize = 1024 - - def __init__(self, tarfile, tarinfo): - self.fileobj = _FileInFile(tarfile.fileobj, - tarinfo.offset_data, - tarinfo.size, - tarinfo.sparse) - self.name = tarinfo.name - self.mode = "r" - self.closed = False - self.size = tarinfo.size - - self.position = 0 - self.buffer = b"" - - def readable(self): - return True - - def writable(self): - return False - - def seekable(self): - return self.fileobj.seekable() - - def read(self, size=None): - """Read at most size bytes from the file. If size is not - present or None, read all data until EOF is reached. - """ - if self.closed: - raise ValueError("I/O operation on closed file") - - buf = b"" - if self.buffer: - if size is None: - buf = self.buffer - self.buffer = b"" - else: - buf = self.buffer[:size] - self.buffer = self.buffer[size:] - - if size is None: - buf += self.fileobj.read() - else: - buf += self.fileobj.read(size - len(buf)) - - self.position += len(buf) - return buf - - # XXX TextIOWrapper uses the read1() method. - read1 = read - - def readline(self, size=-1): - """Read one entire line from the file. If size is present - and non-negative, return a string with at most that - size, which may be an incomplete line. - """ - if self.closed: - raise ValueError("I/O operation on closed file") - - pos = self.buffer.find(b"\n") + 1 - if pos == 0: - # no newline found. - while True: - buf = self.fileobj.read(self.blocksize) - self.buffer += buf - if not buf or b"\n" in buf: - pos = self.buffer.find(b"\n") + 1 - if pos == 0: - # no newline found. - pos = len(self.buffer) - break - - if size != -1: - pos = min(size, pos) - - buf = self.buffer[:pos] - self.buffer = self.buffer[pos:] - self.position += len(buf) - return buf - - def readlines(self): - """Return a list with all remaining lines. - """ - result = [] - while True: - line = self.readline() - if not line: break - result.append(line) - return result - - def tell(self): - """Return the current file position. - """ - if self.closed: - raise ValueError("I/O operation on closed file") - - return self.position - - def seek(self, pos, whence=os.SEEK_SET): - """Seek to a position in the file. - """ - if self.closed: - raise ValueError("I/O operation on closed file") - - if whence == os.SEEK_SET: - self.position = min(max(pos, 0), self.size) - elif whence == os.SEEK_CUR: - if pos < 0: - self.position = max(self.position + pos, 0) - else: - self.position = min(self.position + pos, self.size) - elif whence == os.SEEK_END: - self.position = max(min(self.size + pos, self.size), 0) - else: - raise ValueError("Invalid argument") - - self.buffer = b"" - self.fileobj.seek(self.position) - - def close(self): - """Close the file object. - """ - self.closed = True - - def __iter__(self): - """Get an iterator over the file's lines. - """ - while True: - line = self.readline() - if not line: - break - yield line -#class ExFileObject - -#------------------ -# Exported Classes -#------------------ -class TarInfo(object): - """Informational class which holds the details about an - archive member given by a tar header block. - TarInfo objects are returned by TarFile.getmember(), - TarFile.getmembers() and TarFile.gettarinfo() and are - usually created internally. - """ - - __slots__ = ("name", "mode", "uid", "gid", "size", "mtime", - "chksum", "type", "linkname", "uname", "gname", - "devmajor", "devminor", - "offset", "offset_data", "pax_headers", "sparse", - "tarfile", "_sparse_structs", "_link_target") - - def __init__(self, name=""): - """Construct a TarInfo object. name is the optional name - of the member. - """ - self.name = name # member name - self.mode = 0o644 # file permissions - self.uid = 0 # user id - self.gid = 0 # group id - self.size = 0 # file size - self.mtime = 0 # modification time - self.chksum = 0 # header checksum - self.type = REGTYPE # member type - self.linkname = "" # link name - self.uname = "" # user name - self.gname = "" # group name - self.devmajor = 0 # device major number - self.devminor = 0 # device minor number - - self.offset = 0 # the tar header starts here - self.offset_data = 0 # the file's data starts here - - self.sparse = None # sparse member information - self.pax_headers = {} # pax header information - - # In pax headers the "name" and "linkname" field are called - # "path" and "linkpath". - def _getpath(self): - return self.name - def _setpath(self, name): - self.name = name - path = property(_getpath, _setpath) - - def _getlinkpath(self): - return self.linkname - def _setlinkpath(self, linkname): - self.linkname = linkname - linkpath = property(_getlinkpath, _setlinkpath) - - def __repr__(self): - return "<%s %r at %#x>" % (self.__class__.__name__,self.name,id(self)) - - def get_info(self): - """Return the TarInfo's attributes as a dictionary. - """ - info = { - "name": self.name, - "mode": self.mode & 0o7777, - "uid": self.uid, - "gid": self.gid, - "size": self.size, - "mtime": self.mtime, - "chksum": self.chksum, - "type": self.type, - "linkname": self.linkname, - "uname": self.uname, - "gname": self.gname, - "devmajor": self.devmajor, - "devminor": self.devminor - } - - if info["type"] == DIRTYPE and not info["name"].endswith("/"): - info["name"] += "/" - - return info - - def tobuf(self, format=DEFAULT_FORMAT, encoding=ENCODING, errors="surrogateescape"): - """Return a tar header as a string of 512 byte blocks. - """ - info = self.get_info() - - if format == USTAR_FORMAT: - return self.create_ustar_header(info, encoding, errors) - elif format == GNU_FORMAT: - return self.create_gnu_header(info, encoding, errors) - elif format == PAX_FORMAT: - return self.create_pax_header(info, encoding) - else: - raise ValueError("invalid format") - - def create_ustar_header(self, info, encoding, errors): - """Return the object as a ustar header block. - """ - info["magic"] = POSIX_MAGIC - - if len(info["linkname"]) > LENGTH_LINK: - raise ValueError("linkname is too long") - - if len(info["name"]) > LENGTH_NAME: - info["prefix"], info["name"] = self._posix_split_name(info["name"]) - - return self._create_header(info, USTAR_FORMAT, encoding, errors) - - def create_gnu_header(self, info, encoding, errors): - """Return the object as a GNU header block sequence. - """ - info["magic"] = GNU_MAGIC - - buf = b"" - if len(info["linkname"]) > LENGTH_LINK: - buf += self._create_gnu_long_header(info["linkname"], GNUTYPE_LONGLINK, encoding, errors) - - if len(info["name"]) > LENGTH_NAME: - buf += self._create_gnu_long_header(info["name"], GNUTYPE_LONGNAME, encoding, errors) - - return buf + self._create_header(info, GNU_FORMAT, encoding, errors) - - def create_pax_header(self, info, encoding): - """Return the object as a ustar header block. If it cannot be - represented this way, prepend a pax extended header sequence - with supplement information. - """ - info["magic"] = POSIX_MAGIC - pax_headers = self.pax_headers.copy() - - # Test string fields for values that exceed the field length or cannot - # be represented in ASCII encoding. - for name, hname, length in ( - ("name", "path", LENGTH_NAME), ("linkname", "linkpath", LENGTH_LINK), - ("uname", "uname", 32), ("gname", "gname", 32)): - - if hname in pax_headers: - # The pax header has priority. - continue - - # Try to encode the string as ASCII. - try: - info[name].encode("ascii", "strict") - except UnicodeEncodeError: - pax_headers[hname] = info[name] - continue - - if len(info[name]) > length: - pax_headers[hname] = info[name] - - # Test number fields for values that exceed the field limit or values - # that like to be stored as float. - for name, digits in (("uid", 8), ("gid", 8), ("size", 12), ("mtime", 12)): - if name in pax_headers: - # The pax header has priority. Avoid overflow. - info[name] = 0 - continue - - val = info[name] - if not 0 <= val < 8 ** (digits - 1) or isinstance(val, float): - pax_headers[name] = str(val) - info[name] = 0 - - # Create a pax extended header if necessary. - if pax_headers: - buf = self._create_pax_generic_header(pax_headers, XHDTYPE, encoding) - else: - buf = b"" - - return buf + self._create_header(info, USTAR_FORMAT, "ascii", "replace") - - @classmethod - def create_pax_global_header(cls, pax_headers): - """Return the object as a pax global header block sequence. - """ - return cls._create_pax_generic_header(pax_headers, XGLTYPE, "utf8") - - def _posix_split_name(self, name): - """Split a name longer than 100 chars into a prefix - and a name part. - """ - prefix = name[:LENGTH_PREFIX + 1] - while prefix and prefix[-1] != "/": - prefix = prefix[:-1] - - name = name[len(prefix):] - prefix = prefix[:-1] - - if not prefix or len(name) > LENGTH_NAME: - raise ValueError("name is too long") - return prefix, name - - @staticmethod - def _create_header(info, format, encoding, errors): - """Return a header block. info is a dictionary with file - information, format must be one of the *_FORMAT constants. - """ - parts = [ - stn(info.get("name", ""), 100, encoding, errors), - itn(info.get("mode", 0) & 0o7777, 8, format), - itn(info.get("uid", 0), 8, format), - itn(info.get("gid", 0), 8, format), - itn(info.get("size", 0), 12, format), - itn(info.get("mtime", 0), 12, format), - b" ", # checksum field - info.get("type", REGTYPE), - stn(info.get("linkname", ""), 100, encoding, errors), - info.get("magic", POSIX_MAGIC), - stn(info.get("uname", ""), 32, encoding, errors), - stn(info.get("gname", ""), 32, encoding, errors), - itn(info.get("devmajor", 0), 8, format), - itn(info.get("devminor", 0), 8, format), - stn(info.get("prefix", ""), 155, encoding, errors) - ] - - buf = struct.pack("%ds" % BLOCKSIZE, b"".join(parts)) - chksum = calc_chksums(buf[-BLOCKSIZE:])[0] - buf = buf[:-364] + ("%06o\0" % chksum).encode("ascii") + buf[-357:] - return buf - - @staticmethod - def _create_payload(payload): - """Return the string payload filled with zero bytes - up to the next 512 byte border. - """ - blocks, remainder = divmod(len(payload), BLOCKSIZE) - if remainder > 0: - payload += (BLOCKSIZE - remainder) * NUL - return payload - - @classmethod - def _create_gnu_long_header(cls, name, type, encoding, errors): - """Return a GNUTYPE_LONGNAME or GNUTYPE_LONGLINK sequence - for name. - """ - name = name.encode(encoding, errors) + NUL - - info = {} - info["name"] = "././@LongLink" - info["type"] = type - info["size"] = len(name) - info["magic"] = GNU_MAGIC - - # create extended header + name blocks. - return cls._create_header(info, USTAR_FORMAT, encoding, errors) + \ - cls._create_payload(name) - - @classmethod - def _create_pax_generic_header(cls, pax_headers, type, encoding): - """Return a POSIX.1-2008 extended or global header sequence - that contains a list of keyword, value pairs. The values - must be strings. - """ - # Check if one of the fields contains surrogate characters and thereby - # forces hdrcharset=BINARY, see _proc_pax() for more information. - binary = False - for keyword, value in pax_headers.items(): - try: - value.encode("utf8", "strict") - except UnicodeEncodeError: - binary = True - break - - records = b"" - if binary: - # Put the hdrcharset field at the beginning of the header. - records += b"21 hdrcharset=BINARY\n" - - for keyword, value in pax_headers.items(): - keyword = keyword.encode("utf8") - if binary: - # Try to restore the original byte representation of `value'. - # Needless to say, that the encoding must match the string. - value = value.encode(encoding, "surrogateescape") - else: - value = value.encode("utf8") - - l = len(keyword) + len(value) + 3 # ' ' + '=' + '\n' - n = p = 0 - while True: - n = l + len(str(p)) - if n == p: - break - p = n - records += bytes(str(p), "ascii") + b" " + keyword + b"=" + value + b"\n" - - # We use a hardcoded "././@PaxHeader" name like star does - # instead of the one that POSIX recommends. - info = {} - info["name"] = "././@PaxHeader" - info["type"] = type - info["size"] = len(records) - info["magic"] = POSIX_MAGIC - - # Create pax header + record blocks. - return cls._create_header(info, USTAR_FORMAT, "ascii", "replace") + \ - cls._create_payload(records) - - @classmethod - def frombuf(cls, buf, encoding, errors): - """Construct a TarInfo object from a 512 byte bytes object. - """ - if len(buf) == 0: - raise EmptyHeaderError("empty header") - if len(buf) != BLOCKSIZE: - raise TruncatedHeaderError("truncated header") - if buf.count(NUL) == BLOCKSIZE: - raise EOFHeaderError("end of file header") - - chksum = nti(buf[148:156]) - if chksum not in calc_chksums(buf): - raise InvalidHeaderError("bad checksum") - - obj = cls() - obj.name = nts(buf[0:100], encoding, errors) - obj.mode = nti(buf[100:108]) - obj.uid = nti(buf[108:116]) - obj.gid = nti(buf[116:124]) - obj.size = nti(buf[124:136]) - obj.mtime = nti(buf[136:148]) - obj.chksum = chksum - obj.type = buf[156:157] - obj.linkname = nts(buf[157:257], encoding, errors) - obj.uname = nts(buf[265:297], encoding, errors) - obj.gname = nts(buf[297:329], encoding, errors) - obj.devmajor = nti(buf[329:337]) - obj.devminor = nti(buf[337:345]) - prefix = nts(buf[345:500], encoding, errors) - - # Old V7 tar format represents a directory as a regular - # file with a trailing slash. - if obj.type == AREGTYPE and obj.name.endswith("/"): - obj.type = DIRTYPE - - # The old GNU sparse format occupies some of the unused - # space in the buffer for up to 4 sparse structures. - # Save the them for later processing in _proc_sparse(). - if obj.type == GNUTYPE_SPARSE: - pos = 386 - structs = [] - for i in range(4): - try: - offset = nti(buf[pos:pos + 12]) - numbytes = nti(buf[pos + 12:pos + 24]) - except ValueError: - break - structs.append((offset, numbytes)) - pos += 24 - isextended = bool(buf[482]) - origsize = nti(buf[483:495]) - obj._sparse_structs = (structs, isextended, origsize) - - # Remove redundant slashes from directories. - if obj.isdir(): - obj.name = obj.name.rstrip("/") - - # Reconstruct a ustar longname. - if prefix and obj.type not in GNU_TYPES: - obj.name = prefix + "/" + obj.name - return obj - - @classmethod - def fromtarfile(cls, tarfile): - """Return the next TarInfo object from TarFile object - tarfile. - """ - buf = tarfile.fileobj.read(BLOCKSIZE) - obj = cls.frombuf(buf, tarfile.encoding, tarfile.errors) - obj.offset = tarfile.fileobj.tell() - BLOCKSIZE - return obj._proc_member(tarfile) - - #-------------------------------------------------------------------------- - # The following are methods that are called depending on the type of a - # member. The entry point is _proc_member() which can be overridden in a - # subclass to add custom _proc_*() methods. A _proc_*() method MUST - # implement the following - # operations: - # 1. Set self.offset_data to the position where the data blocks begin, - # if there is data that follows. - # 2. Set tarfile.offset to the position where the next member's header will - # begin. - # 3. Return self or another valid TarInfo object. - def _proc_member(self, tarfile): - """Choose the right processing method depending on - the type and call it. - """ - if self.type in (GNUTYPE_LONGNAME, GNUTYPE_LONGLINK): - return self._proc_gnulong(tarfile) - elif self.type == GNUTYPE_SPARSE: - return self._proc_sparse(tarfile) - elif self.type in (XHDTYPE, XGLTYPE, SOLARIS_XHDTYPE): - return self._proc_pax(tarfile) - else: - return self._proc_builtin(tarfile) - - def _proc_builtin(self, tarfile): - """Process a builtin type or an unknown type which - will be treated as a regular file. - """ - self.offset_data = tarfile.fileobj.tell() - offset = self.offset_data - if self.isreg() or self.type not in SUPPORTED_TYPES: - # Skip the following data blocks. - offset += self._block(self.size) - tarfile.offset = offset - - # Patch the TarInfo object with saved global - # header information. - self._apply_pax_info(tarfile.pax_headers, tarfile.encoding, tarfile.errors) - - return self - - def _proc_gnulong(self, tarfile): - """Process the blocks that hold a GNU longname - or longlink member. - """ - buf = tarfile.fileobj.read(self._block(self.size)) - - # Fetch the next header and process it. - try: - next = self.fromtarfile(tarfile) - except HeaderError: - raise SubsequentHeaderError("missing or bad subsequent header") - - # Patch the TarInfo object from the next header with - # the longname information. - next.offset = self.offset - if self.type == GNUTYPE_LONGNAME: - next.name = nts(buf, tarfile.encoding, tarfile.errors) - elif self.type == GNUTYPE_LONGLINK: - next.linkname = nts(buf, tarfile.encoding, tarfile.errors) - - return next - - def _proc_sparse(self, tarfile): - """Process a GNU sparse header plus extra headers. - """ - # We already collected some sparse structures in frombuf(). - structs, isextended, origsize = self._sparse_structs - del self._sparse_structs - - # Collect sparse structures from extended header blocks. - while isextended: - buf = tarfile.fileobj.read(BLOCKSIZE) - pos = 0 - for i in range(21): - try: - offset = nti(buf[pos:pos + 12]) - numbytes = nti(buf[pos + 12:pos + 24]) - except ValueError: - break - if offset and numbytes: - structs.append((offset, numbytes)) - pos += 24 - isextended = bool(buf[504]) - self.sparse = structs - - self.offset_data = tarfile.fileobj.tell() - tarfile.offset = self.offset_data + self._block(self.size) - self.size = origsize - return self - - def _proc_pax(self, tarfile): - """Process an extended or global header as described in - POSIX.1-2008. - """ - # Read the header information. - buf = tarfile.fileobj.read(self._block(self.size)) - - # A pax header stores supplemental information for either - # the following file (extended) or all following files - # (global). - if self.type == XGLTYPE: - pax_headers = tarfile.pax_headers - else: - pax_headers = tarfile.pax_headers.copy() - - # Check if the pax header contains a hdrcharset field. This tells us - # the encoding of the path, linkpath, uname and gname fields. Normally, - # these fields are UTF-8 encoded but since POSIX.1-2008 tar - # implementations are allowed to store them as raw binary strings if - # the translation to UTF-8 fails. - match = re.search(br"\d+ hdrcharset=([^\n]+)\n", buf) - if match is not None: - pax_headers["hdrcharset"] = match.group(1).decode("utf8") - - # For the time being, we don't care about anything other than "BINARY". - # The only other value that is currently allowed by the standard is - # "ISO-IR 10646 2000 UTF-8" in other words UTF-8. - hdrcharset = pax_headers.get("hdrcharset") - if hdrcharset == "BINARY": - encoding = tarfile.encoding - else: - encoding = "utf8" - - # Parse pax header information. A record looks like that: - # "%d %s=%s\n" % (length, keyword, value). length is the size - # of the complete record including the length field itself and - # the newline. keyword and value are both UTF-8 encoded strings. - regex = re.compile(br"(\d+) ([^=]+)=") - pos = 0 - while True: - match = regex.match(buf, pos) - if not match: - break - - length, keyword = match.groups() - length = int(length) - value = buf[match.end(2) + 1:match.start(1) + length - 1] - - # Normally, we could just use "utf8" as the encoding and "strict" - # as the error handler, but we better not take the risk. For - # example, GNU tar <= 1.23 is known to store filenames it cannot - # translate to UTF-8 as raw strings (unfortunately without a - # hdrcharset=BINARY header). - # We first try the strict standard encoding, and if that fails we - # fall back on the user's encoding and error handler. - keyword = self._decode_pax_field(keyword, "utf8", "utf8", - tarfile.errors) - if keyword in PAX_NAME_FIELDS: - value = self._decode_pax_field(value, encoding, tarfile.encoding, - tarfile.errors) - else: - value = self._decode_pax_field(value, "utf8", "utf8", - tarfile.errors) - - pax_headers[keyword] = value - pos += length - - # Fetch the next header. - try: - next = self.fromtarfile(tarfile) - except HeaderError: - raise SubsequentHeaderError("missing or bad subsequent header") - - # Process GNU sparse information. - if "GNU.sparse.map" in pax_headers: - # GNU extended sparse format version 0.1. - self._proc_gnusparse_01(next, pax_headers) - - elif "GNU.sparse.size" in pax_headers: - # GNU extended sparse format version 0.0. - self._proc_gnusparse_00(next, pax_headers, buf) - - elif pax_headers.get("GNU.sparse.major") == "1" and pax_headers.get("GNU.sparse.minor") == "0": - # GNU extended sparse format version 1.0. - self._proc_gnusparse_10(next, pax_headers, tarfile) - - if self.type in (XHDTYPE, SOLARIS_XHDTYPE): - # Patch the TarInfo object with the extended header info. - next._apply_pax_info(pax_headers, tarfile.encoding, tarfile.errors) - next.offset = self.offset - - if "size" in pax_headers: - # If the extended header replaces the size field, - # we need to recalculate the offset where the next - # header starts. - offset = next.offset_data - if next.isreg() or next.type not in SUPPORTED_TYPES: - offset += next._block(next.size) - tarfile.offset = offset - - return next - - def _proc_gnusparse_00(self, next, pax_headers, buf): - """Process a GNU tar extended sparse header, version 0.0. - """ - offsets = [] - for match in re.finditer(br"\d+ GNU.sparse.offset=(\d+)\n", buf): - offsets.append(int(match.group(1))) - numbytes = [] - for match in re.finditer(br"\d+ GNU.sparse.numbytes=(\d+)\n", buf): - numbytes.append(int(match.group(1))) - next.sparse = list(zip(offsets, numbytes)) - - def _proc_gnusparse_01(self, next, pax_headers): - """Process a GNU tar extended sparse header, version 0.1. - """ - sparse = [int(x) for x in pax_headers["GNU.sparse.map"].split(",")] - next.sparse = list(zip(sparse[::2], sparse[1::2])) - - def _proc_gnusparse_10(self, next, pax_headers, tarfile): - """Process a GNU tar extended sparse header, version 1.0. - """ - fields = None - sparse = [] - buf = tarfile.fileobj.read(BLOCKSIZE) - fields, buf = buf.split(b"\n", 1) - fields = int(fields) - while len(sparse) < fields * 2: - if b"\n" not in buf: - buf += tarfile.fileobj.read(BLOCKSIZE) - number, buf = buf.split(b"\n", 1) - sparse.append(int(number)) - next.offset_data = tarfile.fileobj.tell() - next.sparse = list(zip(sparse[::2], sparse[1::2])) - - def _apply_pax_info(self, pax_headers, encoding, errors): - """Replace fields with supplemental information from a previous - pax extended or global header. - """ - for keyword, value in pax_headers.items(): - if keyword == "GNU.sparse.name": - setattr(self, "path", value) - elif keyword == "GNU.sparse.size": - setattr(self, "size", int(value)) - elif keyword == "GNU.sparse.realsize": - setattr(self, "size", int(value)) - elif keyword in PAX_FIELDS: - if keyword in PAX_NUMBER_FIELDS: - try: - value = PAX_NUMBER_FIELDS[keyword](value) - except ValueError: - value = 0 - if keyword == "path": - value = value.rstrip("/") - setattr(self, keyword, value) - - self.pax_headers = pax_headers.copy() - - def _decode_pax_field(self, value, encoding, fallback_encoding, fallback_errors): - """Decode a single field from a pax record. - """ - try: - return value.decode(encoding, "strict") - except UnicodeDecodeError: - return value.decode(fallback_encoding, fallback_errors) - - def _block(self, count): - """Round up a byte count by BLOCKSIZE and return it, - e.g. _block(834) => 1024. - """ - blocks, remainder = divmod(count, BLOCKSIZE) - if remainder: - blocks += 1 - return blocks * BLOCKSIZE - - def isreg(self): - return self.type in REGULAR_TYPES - def isfile(self): - return self.isreg() - def isdir(self): - return self.type == DIRTYPE - def issym(self): - return self.type == SYMTYPE - def islnk(self): - return self.type == LNKTYPE - def ischr(self): - return self.type == CHRTYPE - def isblk(self): - return self.type == BLKTYPE - def isfifo(self): - return self.type == FIFOTYPE - def issparse(self): - return self.sparse is not None - def isdev(self): - return self.type in (CHRTYPE, BLKTYPE, FIFOTYPE) -# class TarInfo - -class TarFile(object): - """The TarFile Class provides an interface to tar archives. - """ - - debug = 0 # May be set from 0 (no msgs) to 3 (all msgs) - - dereference = False # If true, add content of linked file to the - # tar file, else the link. - - ignore_zeros = False # If true, skips empty or invalid blocks and - # continues processing. - - errorlevel = 1 # If 0, fatal errors only appear in debug - # messages (if debug >= 0). If > 0, errors - # are passed to the caller as exceptions. - - format = DEFAULT_FORMAT # The format to use when creating an archive. - - encoding = ENCODING # Encoding for 8-bit character strings. - - errors = None # Error handler for unicode conversion. - - tarinfo = TarInfo # The default TarInfo class to use. - - fileobject = ExFileObject # The default ExFileObject class to use. - - def __init__(self, name=None, mode="r", fileobj=None, format=None, - tarinfo=None, dereference=None, ignore_zeros=None, encoding=None, - errors="surrogateescape", pax_headers=None, debug=None, errorlevel=None): - """Open an (uncompressed) tar archive `name'. `mode' is either 'r' to - read from an existing archive, 'a' to append data to an existing - file or 'w' to create a new file overwriting an existing one. `mode' - defaults to 'r'. - If `fileobj' is given, it is used for reading or writing data. If it - can be determined, `mode' is overridden by `fileobj's mode. - `fileobj' is not closed, when TarFile is closed. - """ - if len(mode) > 1 or mode not in "raw": - raise ValueError("mode must be 'r', 'a' or 'w'") - self.mode = mode - self._mode = {"r": "rb", "a": "r+b", "w": "wb"}[mode] - - if not fileobj: - if self.mode == "a" and not os.path.exists(name): - # Create nonexistent files in append mode. - self.mode = "w" - self._mode = "wb" - fileobj = bltn_open(name, self._mode) - self._extfileobj = False - else: - if name is None and hasattr(fileobj, "name"): - name = fileobj.name - if hasattr(fileobj, "mode"): - self._mode = fileobj.mode - self._extfileobj = True - self.name = os.path.abspath(name) if name else None - self.fileobj = fileobj - - # Init attributes. - if format is not None: - self.format = format - if tarinfo is not None: - self.tarinfo = tarinfo - if dereference is not None: - self.dereference = dereference - if ignore_zeros is not None: - self.ignore_zeros = ignore_zeros - if encoding is not None: - self.encoding = encoding - self.errors = errors - - if pax_headers is not None and self.format == PAX_FORMAT: - self.pax_headers = pax_headers - else: - self.pax_headers = {} - - if debug is not None: - self.debug = debug - if errorlevel is not None: - self.errorlevel = errorlevel - - # Init datastructures. - self.closed = False - self.members = [] # list of members as TarInfo objects - self._loaded = False # flag if all members have been read - self.offset = self.fileobj.tell() - # current position in the archive file - self.inodes = {} # dictionary caching the inodes of - # archive members already added - - try: - if self.mode == "r": - self.firstmember = None - self.firstmember = self.next() - - if self.mode == "a": - # Move to the end of the archive, - # before the first empty block. - while True: - self.fileobj.seek(self.offset) - try: - tarinfo = self.tarinfo.fromtarfile(self) - self.members.append(tarinfo) - except EOFHeaderError: - self.fileobj.seek(self.offset) - break - except HeaderError as e: - raise ReadError(str(e)) - - if self.mode in "aw": - self._loaded = True - - if self.pax_headers: - buf = self.tarinfo.create_pax_global_header(self.pax_headers.copy()) - self.fileobj.write(buf) - self.offset += len(buf) - except: - if not self._extfileobj: - self.fileobj.close() - self.closed = True - raise - - #-------------------------------------------------------------------------- - # Below are the classmethods which act as alternate constructors to the - # TarFile class. The open() method is the only one that is needed for - # public use; it is the "super"-constructor and is able to select an - # adequate "sub"-constructor for a particular compression using the mapping - # from OPEN_METH. - # - # This concept allows one to subclass TarFile without losing the comfort of - # the super-constructor. A sub-constructor is registered and made available - # by adding it to the mapping in OPEN_METH. - - @classmethod - def open(cls, name=None, mode="r", fileobj=None, bufsize=RECORDSIZE, **kwargs): - """Open a tar archive for reading, writing or appending. Return - an appropriate TarFile class. - - mode: - 'r' or 'r:*' open for reading with transparent compression - 'r:' open for reading exclusively uncompressed - 'r:gz' open for reading with gzip compression - 'r:bz2' open for reading with bzip2 compression - 'a' or 'a:' open for appending, creating the file if necessary - 'w' or 'w:' open for writing without compression - 'w:gz' open for writing with gzip compression - 'w:bz2' open for writing with bzip2 compression - - 'r|*' open a stream of tar blocks with transparent compression - 'r|' open an uncompressed stream of tar blocks for reading - 'r|gz' open a gzip compressed stream of tar blocks - 'r|bz2' open a bzip2 compressed stream of tar blocks - 'w|' open an uncompressed stream for writing - 'w|gz' open a gzip compressed stream for writing - 'w|bz2' open a bzip2 compressed stream for writing - """ - - if not name and not fileobj: - raise ValueError("nothing to open") - - if mode in ("r", "r:*"): - # Find out which *open() is appropriate for opening the file. - for comptype in cls.OPEN_METH: - func = getattr(cls, cls.OPEN_METH[comptype]) - if fileobj is not None: - saved_pos = fileobj.tell() - try: - return func(name, "r", fileobj, **kwargs) - except (ReadError, CompressionError) as e: - if fileobj is not None: - fileobj.seek(saved_pos) - continue - raise ReadError("file could not be opened successfully") - - elif ":" in mode: - filemode, comptype = mode.split(":", 1) - filemode = filemode or "r" - comptype = comptype or "tar" - - # Select the *open() function according to - # given compression. - if comptype in cls.OPEN_METH: - func = getattr(cls, cls.OPEN_METH[comptype]) - else: - raise CompressionError("unknown compression type %r" % comptype) - return func(name, filemode, fileobj, **kwargs) - - elif "|" in mode: - filemode, comptype = mode.split("|", 1) - filemode = filemode or "r" - comptype = comptype or "tar" - - if filemode not in "rw": - raise ValueError("mode must be 'r' or 'w'") - - stream = _Stream(name, filemode, comptype, fileobj, bufsize) - try: - t = cls(name, filemode, stream, **kwargs) - except: - stream.close() - raise - t._extfileobj = False - return t - - elif mode in "aw": - return cls.taropen(name, mode, fileobj, **kwargs) - - raise ValueError("undiscernible mode") - - @classmethod - def taropen(cls, name, mode="r", fileobj=None, **kwargs): - """Open uncompressed tar archive name for reading or writing. - """ - if len(mode) > 1 or mode not in "raw": - raise ValueError("mode must be 'r', 'a' or 'w'") - return cls(name, mode, fileobj, **kwargs) - - @classmethod - def gzopen(cls, name, mode="r", fileobj=None, compresslevel=9, **kwargs): - """Open gzip compressed tar archive name for reading or writing. - Appending is not allowed. - """ - if len(mode) > 1 or mode not in "rw": - raise ValueError("mode must be 'r' or 'w'") - - try: - import gzip - gzip.GzipFile - except (ImportError, AttributeError): - raise CompressionError("gzip module is not available") - - extfileobj = fileobj is not None - try: - fileobj = gzip.GzipFile(name, mode + "b", compresslevel, fileobj) - t = cls.taropen(name, mode, fileobj, **kwargs) - except IOError: - if not extfileobj and fileobj is not None: - fileobj.close() - if fileobj is None: - raise - raise ReadError("not a gzip file") - except: - if not extfileobj and fileobj is not None: - fileobj.close() - raise - t._extfileobj = extfileobj - return t - - @classmethod - def bz2open(cls, name, mode="r", fileobj=None, compresslevel=9, **kwargs): - """Open bzip2 compressed tar archive name for reading or writing. - Appending is not allowed. - """ - if len(mode) > 1 or mode not in "rw": - raise ValueError("mode must be 'r' or 'w'.") - - try: - import bz2 - except ImportError: - raise CompressionError("bz2 module is not available") - - if fileobj is not None: - fileobj = _BZ2Proxy(fileobj, mode) - else: - fileobj = bz2.BZ2File(name, mode, compresslevel=compresslevel) - - try: - t = cls.taropen(name, mode, fileobj, **kwargs) - except (IOError, EOFError): - fileobj.close() - raise ReadError("not a bzip2 file") - t._extfileobj = False - return t - - # All *open() methods are registered here. - OPEN_METH = { - "tar": "taropen", # uncompressed tar - "gz": "gzopen", # gzip compressed tar - "bz2": "bz2open" # bzip2 compressed tar - } - - #-------------------------------------------------------------------------- - # The public methods which TarFile provides: - - def close(self): - """Close the TarFile. In write-mode, two finishing zero blocks are - appended to the archive. - """ - if self.closed: - return - - if self.mode in "aw": - self.fileobj.write(NUL * (BLOCKSIZE * 2)) - self.offset += (BLOCKSIZE * 2) - # fill up the end with zero-blocks - # (like option -b20 for tar does) - blocks, remainder = divmod(self.offset, RECORDSIZE) - if remainder > 0: - self.fileobj.write(NUL * (RECORDSIZE - remainder)) - - if not self._extfileobj: - self.fileobj.close() - self.closed = True - - def getmember(self, name): - """Return a TarInfo object for member `name'. If `name' can not be - found in the archive, KeyError is raised. If a member occurs more - than once in the archive, its last occurrence is assumed to be the - most up-to-date version. - """ - tarinfo = self._getmember(name) - if tarinfo is None: - raise KeyError("filename %r not found" % name) - return tarinfo - - def getmembers(self): - """Return the members of the archive as a list of TarInfo objects. The - list has the same order as the members in the archive. - """ - self._check() - if not self._loaded: # if we want to obtain a list of - self._load() # all members, we first have to - # scan the whole archive. - return self.members - - def getnames(self): - """Return the members of the archive as a list of their names. It has - the same order as the list returned by getmembers(). - """ - return [tarinfo.name for tarinfo in self.getmembers()] - - def gettarinfo(self, name=None, arcname=None, fileobj=None): - """Create a TarInfo object for either the file `name' or the file - object `fileobj' (using os.fstat on its file descriptor). You can - modify some of the TarInfo's attributes before you add it using - addfile(). If given, `arcname' specifies an alternative name for the - file in the archive. - """ - self._check("aw") - - # When fileobj is given, replace name by - # fileobj's real name. - if fileobj is not None: - name = fileobj.name - - # Building the name of the member in the archive. - # Backward slashes are converted to forward slashes, - # Absolute paths are turned to relative paths. - if arcname is None: - arcname = name - drv, arcname = os.path.splitdrive(arcname) - arcname = arcname.replace(os.sep, "/") - arcname = arcname.lstrip("/") - - # Now, fill the TarInfo object with - # information specific for the file. - tarinfo = self.tarinfo() - tarinfo.tarfile = self - - # Use os.stat or os.lstat, depending on platform - # and if symlinks shall be resolved. - if fileobj is None: - if hasattr(os, "lstat") and not self.dereference: - statres = os.lstat(name) - else: - statres = os.stat(name) - else: - statres = os.fstat(fileobj.fileno()) - linkname = "" - - stmd = statres.st_mode - if stat.S_ISREG(stmd): - inode = (statres.st_ino, statres.st_dev) - if not self.dereference and statres.st_nlink > 1 and \ - inode in self.inodes and arcname != self.inodes[inode]: - # Is it a hardlink to an already - # archived file? - type = LNKTYPE - linkname = self.inodes[inode] - else: - # The inode is added only if its valid. - # For win32 it is always 0. - type = REGTYPE - if inode[0]: - self.inodes[inode] = arcname - elif stat.S_ISDIR(stmd): - type = DIRTYPE - elif stat.S_ISFIFO(stmd): - type = FIFOTYPE - elif stat.S_ISLNK(stmd): - type = SYMTYPE - linkname = os.readlink(name) - elif stat.S_ISCHR(stmd): - type = CHRTYPE - elif stat.S_ISBLK(stmd): - type = BLKTYPE - else: - return None - - # Fill the TarInfo object with all - # information we can get. - tarinfo.name = arcname - tarinfo.mode = stmd - tarinfo.uid = statres.st_uid - tarinfo.gid = statres.st_gid - if type == REGTYPE: - tarinfo.size = statres.st_size - else: - tarinfo.size = 0 - tarinfo.mtime = statres.st_mtime - tarinfo.type = type - tarinfo.linkname = linkname - if pwd: - try: - tarinfo.uname = pwd.getpwuid(tarinfo.uid)[0] - except KeyError: - pass - if grp: - try: - tarinfo.gname = grp.getgrgid(tarinfo.gid)[0] - except KeyError: - pass - - if type in (CHRTYPE, BLKTYPE): - if hasattr(os, "major") and hasattr(os, "minor"): - tarinfo.devmajor = os.major(statres.st_rdev) - tarinfo.devminor = os.minor(statres.st_rdev) - return tarinfo - - def list(self, verbose=True): - """Print a table of contents to sys.stdout. If `verbose' is False, only - the names of the members are printed. If it is True, an `ls -l'-like - output is produced. - """ - self._check() - - for tarinfo in self: - if verbose: - print(filemode(tarinfo.mode), end=' ') - print("%s/%s" % (tarinfo.uname or tarinfo.uid, - tarinfo.gname or tarinfo.gid), end=' ') - if tarinfo.ischr() or tarinfo.isblk(): - print("%10s" % ("%d,%d" \ - % (tarinfo.devmajor, tarinfo.devminor)), end=' ') - else: - print("%10d" % tarinfo.size, end=' ') - print("%d-%02d-%02d %02d:%02d:%02d" \ - % time.localtime(tarinfo.mtime)[:6], end=' ') - - print(tarinfo.name + ("/" if tarinfo.isdir() else ""), end=' ') - - if verbose: - if tarinfo.issym(): - print("->", tarinfo.linkname, end=' ') - if tarinfo.islnk(): - print("link to", tarinfo.linkname, end=' ') - print() - - def add(self, name, arcname=None, recursive=True, exclude=None, filter=None): - """Add the file `name' to the archive. `name' may be any type of file - (directory, fifo, symbolic link, etc.). If given, `arcname' - specifies an alternative name for the file in the archive. - Directories are added recursively by default. This can be avoided by - setting `recursive' to False. `exclude' is a function that should - return True for each filename to be excluded. `filter' is a function - that expects a TarInfo object argument and returns the changed - TarInfo object, if it returns None the TarInfo object will be - excluded from the archive. - """ - self._check("aw") - - if arcname is None: - arcname = name - - # Exclude pathnames. - if exclude is not None: - import warnings - warnings.warn("use the filter argument instead", - DeprecationWarning, 2) - if exclude(name): - self._dbg(2, "tarfile: Excluded %r" % name) - return - - # Skip if somebody tries to archive the archive... - if self.name is not None and os.path.abspath(name) == self.name: - self._dbg(2, "tarfile: Skipped %r" % name) - return - - self._dbg(1, name) - - # Create a TarInfo object from the file. - tarinfo = self.gettarinfo(name, arcname) - - if tarinfo is None: - self._dbg(1, "tarfile: Unsupported type %r" % name) - return - - # Change or exclude the TarInfo object. - if filter is not None: - tarinfo = filter(tarinfo) - if tarinfo is None: - self._dbg(2, "tarfile: Excluded %r" % name) - return - - # Append the tar header and data to the archive. - if tarinfo.isreg(): - f = bltn_open(name, "rb") - self.addfile(tarinfo, f) - f.close() - - elif tarinfo.isdir(): - self.addfile(tarinfo) - if recursive: - for f in os.listdir(name): - self.add(os.path.join(name, f), os.path.join(arcname, f), - recursive, exclude, filter=filter) - - else: - self.addfile(tarinfo) - - def addfile(self, tarinfo, fileobj=None): - """Add the TarInfo object `tarinfo' to the archive. If `fileobj' is - given, tarinfo.size bytes are read from it and added to the archive. - You can create TarInfo objects using gettarinfo(). - On Windows platforms, `fileobj' should always be opened with mode - 'rb' to avoid irritation about the file size. - """ - self._check("aw") - - tarinfo = copy.copy(tarinfo) - - buf = tarinfo.tobuf(self.format, self.encoding, self.errors) - self.fileobj.write(buf) - self.offset += len(buf) - - # If there's data to follow, append it. - if fileobj is not None: - copyfileobj(fileobj, self.fileobj, tarinfo.size) - blocks, remainder = divmod(tarinfo.size, BLOCKSIZE) - if remainder > 0: - self.fileobj.write(NUL * (BLOCKSIZE - remainder)) - blocks += 1 - self.offset += blocks * BLOCKSIZE - - self.members.append(tarinfo) - - def extractall(self, path=".", members=None): - """Extract all members from the archive to the current working - directory and set owner, modification time and permissions on - directories afterwards. `path' specifies a different directory - to extract to. `members' is optional and must be a subset of the - list returned by getmembers(). - """ - directories = [] - - if members is None: - members = self - - for tarinfo in members: - if tarinfo.isdir(): - # Extract directories with a safe mode. - directories.append(tarinfo) - tarinfo = copy.copy(tarinfo) - tarinfo.mode = 0o700 - # Do not set_attrs directories, as we will do that further down - self.extract(tarinfo, path, set_attrs=not tarinfo.isdir()) - - # Reverse sort directories. - directories.sort(key=lambda a: a.name) - directories.reverse() - - # Set correct owner, mtime and filemode on directories. - for tarinfo in directories: - dirpath = os.path.join(path, tarinfo.name) - try: - self.chown(tarinfo, dirpath) - self.utime(tarinfo, dirpath) - self.chmod(tarinfo, dirpath) - except ExtractError as e: - if self.errorlevel > 1: - raise - else: - self._dbg(1, "tarfile: %s" % e) - - def extract(self, member, path="", set_attrs=True): - """Extract a member from the archive to the current working directory, - using its full name. Its file information is extracted as accurately - as possible. `member' may be a filename or a TarInfo object. You can - specify a different directory using `path'. File attributes (owner, - mtime, mode) are set unless `set_attrs' is False. - """ - self._check("r") - - if isinstance(member, str): - tarinfo = self.getmember(member) - else: - tarinfo = member - - # Prepare the link target for makelink(). - if tarinfo.islnk(): - tarinfo._link_target = os.path.join(path, tarinfo.linkname) - - try: - self._extract_member(tarinfo, os.path.join(path, tarinfo.name), - set_attrs=set_attrs) - except EnvironmentError as e: - if self.errorlevel > 0: - raise - else: - if e.filename is None: - self._dbg(1, "tarfile: %s" % e.strerror) - else: - self._dbg(1, "tarfile: %s %r" % (e.strerror, e.filename)) - except ExtractError as e: - if self.errorlevel > 1: - raise - else: - self._dbg(1, "tarfile: %s" % e) - - def extractfile(self, member): - """Extract a member from the archive as a file object. `member' may be - a filename or a TarInfo object. If `member' is a regular file, a - file-like object is returned. If `member' is a link, a file-like - object is constructed from the link's target. If `member' is none of - the above, None is returned. - The file-like object is read-only and provides the following - methods: read(), readline(), readlines(), seek() and tell() - """ - self._check("r") - - if isinstance(member, str): - tarinfo = self.getmember(member) - else: - tarinfo = member - - if tarinfo.isreg(): - return self.fileobject(self, tarinfo) - - elif tarinfo.type not in SUPPORTED_TYPES: - # If a member's type is unknown, it is treated as a - # regular file. - return self.fileobject(self, tarinfo) - - elif tarinfo.islnk() or tarinfo.issym(): - if isinstance(self.fileobj, _Stream): - # A small but ugly workaround for the case that someone tries - # to extract a (sym)link as a file-object from a non-seekable - # stream of tar blocks. - raise StreamError("cannot extract (sym)link as file object") - else: - # A (sym)link's file object is its target's file object. - return self.extractfile(self._find_link_target(tarinfo)) - else: - # If there's no data associated with the member (directory, chrdev, - # blkdev, etc.), return None instead of a file object. - return None - - def _extract_member(self, tarinfo, targetpath, set_attrs=True): - """Extract the TarInfo object tarinfo to a physical - file called targetpath. - """ - # Fetch the TarInfo object for the given name - # and build the destination pathname, replacing - # forward slashes to platform specific separators. - targetpath = targetpath.rstrip("/") - targetpath = targetpath.replace("/", os.sep) - - # Create all upper directories. - upperdirs = os.path.dirname(targetpath) - if upperdirs and not os.path.exists(upperdirs): - # Create directories that are not part of the archive with - # default permissions. - os.makedirs(upperdirs) - - if tarinfo.islnk() or tarinfo.issym(): - self._dbg(1, "%s -> %s" % (tarinfo.name, tarinfo.linkname)) - else: - self._dbg(1, tarinfo.name) - - if tarinfo.isreg(): - self.makefile(tarinfo, targetpath) - elif tarinfo.isdir(): - self.makedir(tarinfo, targetpath) - elif tarinfo.isfifo(): - self.makefifo(tarinfo, targetpath) - elif tarinfo.ischr() or tarinfo.isblk(): - self.makedev(tarinfo, targetpath) - elif tarinfo.islnk() or tarinfo.issym(): - self.makelink(tarinfo, targetpath) - elif tarinfo.type not in SUPPORTED_TYPES: - self.makeunknown(tarinfo, targetpath) - else: - self.makefile(tarinfo, targetpath) - - if set_attrs: - self.chown(tarinfo, targetpath) - if not tarinfo.issym(): - self.chmod(tarinfo, targetpath) - self.utime(tarinfo, targetpath) - - #-------------------------------------------------------------------------- - # Below are the different file methods. They are called via - # _extract_member() when extract() is called. They can be replaced in a - # subclass to implement other functionality. - - def makedir(self, tarinfo, targetpath): - """Make a directory called targetpath. - """ - try: - # Use a safe mode for the directory, the real mode is set - # later in _extract_member(). - os.mkdir(targetpath, 0o700) - except EnvironmentError as e: - if e.errno != errno.EEXIST: - raise - - def makefile(self, tarinfo, targetpath): - """Make a file called targetpath. - """ - source = self.fileobj - source.seek(tarinfo.offset_data) - target = bltn_open(targetpath, "wb") - if tarinfo.sparse is not None: - for offset, size in tarinfo.sparse: - target.seek(offset) - copyfileobj(source, target, size) - else: - copyfileobj(source, target, tarinfo.size) - target.seek(tarinfo.size) - target.truncate() - target.close() - - def makeunknown(self, tarinfo, targetpath): - """Make a file from a TarInfo object with an unknown type - at targetpath. - """ - self.makefile(tarinfo, targetpath) - self._dbg(1, "tarfile: Unknown file type %r, " \ - "extracted as regular file." % tarinfo.type) - - def makefifo(self, tarinfo, targetpath): - """Make a fifo called targetpath. - """ - if hasattr(os, "mkfifo"): - os.mkfifo(targetpath) - else: - raise ExtractError("fifo not supported by system") - - def makedev(self, tarinfo, targetpath): - """Make a character or block device called targetpath. - """ - if not hasattr(os, "mknod") or not hasattr(os, "makedev"): - raise ExtractError("special devices not supported by system") - - mode = tarinfo.mode - if tarinfo.isblk(): - mode |= stat.S_IFBLK - else: - mode |= stat.S_IFCHR - - os.mknod(targetpath, mode, - os.makedev(tarinfo.devmajor, tarinfo.devminor)) - - def makelink(self, tarinfo, targetpath): - """Make a (symbolic) link called targetpath. If it cannot be created - (platform limitation), we try to make a copy of the referenced file - instead of a link. - """ - try: - # For systems that support symbolic and hard links. - if tarinfo.issym(): - os.symlink(tarinfo.linkname, targetpath) - else: - # See extract(). - if os.path.exists(tarinfo._link_target): - os.link(tarinfo._link_target, targetpath) - else: - self._extract_member(self._find_link_target(tarinfo), - targetpath) - except symlink_exception: - if tarinfo.issym(): - linkpath = os.path.join(os.path.dirname(tarinfo.name), - tarinfo.linkname) - else: - linkpath = tarinfo.linkname - else: - try: - self._extract_member(self._find_link_target(tarinfo), - targetpath) - except KeyError: - raise ExtractError("unable to resolve link inside archive") - - def chown(self, tarinfo, targetpath): - """Set owner of targetpath according to tarinfo. - """ - if pwd and hasattr(os, "geteuid") and os.geteuid() == 0: - # We have to be root to do so. - try: - g = grp.getgrnam(tarinfo.gname)[2] - except KeyError: - g = tarinfo.gid - try: - u = pwd.getpwnam(tarinfo.uname)[2] - except KeyError: - u = tarinfo.uid - try: - if tarinfo.issym() and hasattr(os, "lchown"): - os.lchown(targetpath, u, g) - else: - if sys.platform != "os2emx": - os.chown(targetpath, u, g) - except EnvironmentError as e: - raise ExtractError("could not change owner") - - def chmod(self, tarinfo, targetpath): - """Set file permissions of targetpath according to tarinfo. - """ - if hasattr(os, 'chmod'): - try: - os.chmod(targetpath, tarinfo.mode) - except EnvironmentError as e: - raise ExtractError("could not change mode") - - def utime(self, tarinfo, targetpath): - """Set modification time of targetpath according to tarinfo. - """ - if not hasattr(os, 'utime'): - return - try: - os.utime(targetpath, (tarinfo.mtime, tarinfo.mtime)) - except EnvironmentError as e: - raise ExtractError("could not change modification time") - - #-------------------------------------------------------------------------- - def next(self): - """Return the next member of the archive as a TarInfo object, when - TarFile is opened for reading. Return None if there is no more - available. - """ - self._check("ra") - if self.firstmember is not None: - m = self.firstmember - self.firstmember = None - return m - - # Read the next block. - self.fileobj.seek(self.offset) - tarinfo = None - while True: - try: - tarinfo = self.tarinfo.fromtarfile(self) - except EOFHeaderError as e: - if self.ignore_zeros: - self._dbg(2, "0x%X: %s" % (self.offset, e)) - self.offset += BLOCKSIZE - continue - except InvalidHeaderError as e: - if self.ignore_zeros: - self._dbg(2, "0x%X: %s" % (self.offset, e)) - self.offset += BLOCKSIZE - continue - elif self.offset == 0: - raise ReadError(str(e)) - except EmptyHeaderError: - if self.offset == 0: - raise ReadError("empty file") - except TruncatedHeaderError as e: - if self.offset == 0: - raise ReadError(str(e)) - except SubsequentHeaderError as e: - raise ReadError(str(e)) - break - - if tarinfo is not None: - self.members.append(tarinfo) - else: - self._loaded = True - - return tarinfo - - #-------------------------------------------------------------------------- - # Little helper methods: - - def _getmember(self, name, tarinfo=None, normalize=False): - """Find an archive member by name from bottom to top. - If tarinfo is given, it is used as the starting point. - """ - # Ensure that all members have been loaded. - members = self.getmembers() - - # Limit the member search list up to tarinfo. - if tarinfo is not None: - members = members[:members.index(tarinfo)] - - if normalize: - name = os.path.normpath(name) - - for member in reversed(members): - if normalize: - member_name = os.path.normpath(member.name) - else: - member_name = member.name - - if name == member_name: - return member - - def _load(self): - """Read through the entire archive file and look for readable - members. - """ - while True: - tarinfo = self.next() - if tarinfo is None: - break - self._loaded = True - - def _check(self, mode=None): - """Check if TarFile is still open, and if the operation's mode - corresponds to TarFile's mode. - """ - if self.closed: - raise IOError("%s is closed" % self.__class__.__name__) - if mode is not None and self.mode not in mode: - raise IOError("bad operation for mode %r" % self.mode) - - def _find_link_target(self, tarinfo): - """Find the target member of a symlink or hardlink member in the - archive. - """ - if tarinfo.issym(): - # Always search the entire archive. - linkname = os.path.dirname(tarinfo.name) + "/" + tarinfo.linkname - limit = None - else: - # Search the archive before the link, because a hard link is - # just a reference to an already archived file. - linkname = tarinfo.linkname - limit = tarinfo - - member = self._getmember(linkname, tarinfo=limit, normalize=True) - if member is None: - raise KeyError("linkname %r not found" % linkname) - return member - - def __iter__(self): - """Provide an iterator object. - """ - if self._loaded: - return iter(self.members) - else: - return TarIter(self) - - def _dbg(self, level, msg): - """Write debugging output to sys.stderr. - """ - if level <= self.debug: - print(msg, file=sys.stderr) - - def __enter__(self): - self._check() - return self - - def __exit__(self, type, value, traceback): - if type is None: - self.close() - else: - # An exception occurred. We must not call close() because - # it would try to write end-of-archive blocks and padding. - if not self._extfileobj: - self.fileobj.close() - self.closed = True -# class TarFile - -class TarIter(object): - """Iterator Class. - - for tarinfo in TarFile(...): - suite... - """ - - def __init__(self, tarfile): - """Construct a TarIter object. - """ - self.tarfile = tarfile - self.index = 0 - def __iter__(self): - """Return iterator object. - """ - return self - - def __next__(self): - """Return the next item using TarFile's next() method. - When all members have been read, set TarFile as _loaded. - """ - # Fix for SF #1100429: Under rare circumstances it can - # happen that getmembers() is called during iteration, - # which will cause TarIter to stop prematurely. - if not self.tarfile._loaded: - tarinfo = self.tarfile.next() - if not tarinfo: - self.tarfile._loaded = True - raise StopIteration - else: - try: - tarinfo = self.tarfile.members[self.index] - except IndexError: - raise StopIteration - self.index += 1 - return tarinfo - - next = __next__ # for Python 2.x - -#-------------------- -# exported functions -#-------------------- -def is_tarfile(name): - """Return True if name points to a tar archive that we - are able to handle, else return False. - """ - try: - t = open(name) - t.close() - return True - except TarError: - return False - -bltn_open = open -open = TarFile.open diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distlib/compat.py b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distlib/compat.py deleted file mode 100644 index 2b198dd..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distlib/compat.py +++ /dev/null @@ -1,1111 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (C) 2013-2016 Vinay Sajip. -# Licensed to the Python Software Foundation under a contributor agreement. -# See LICENSE.txt and CONTRIBUTORS.txt. -# -from __future__ import absolute_import - -import os -import re -import sys - -try: - import ssl -except ImportError: - ssl = None - -if sys.version_info[0] < 3: # pragma: no cover - from StringIO import StringIO - string_types = basestring, - text_type = unicode - from types import FileType as file_type - import __builtin__ as builtins - import ConfigParser as configparser - from ._backport import shutil - from urlparse import urlparse, urlunparse, urljoin, urlsplit, urlunsplit - from urllib import (urlretrieve, quote as _quote, unquote, url2pathname, - pathname2url, ContentTooShortError, splittype) - - def quote(s): - if isinstance(s, unicode): - s = s.encode('utf-8') - return _quote(s) - - import urllib2 - from urllib2 import (Request, urlopen, URLError, HTTPError, - HTTPBasicAuthHandler, HTTPPasswordMgr, - HTTPHandler, HTTPRedirectHandler, - build_opener) - if ssl: - from urllib2 import HTTPSHandler - import httplib - import xmlrpclib - import Queue as queue - from HTMLParser import HTMLParser - import htmlentitydefs - raw_input = raw_input - from itertools import ifilter as filter - from itertools import ifilterfalse as filterfalse - - _userprog = None - def splituser(host): - """splituser('user[:passwd]@host[:port]') --> 'user[:passwd]', 'host[:port]'.""" - global _userprog - if _userprog is None: - import re - _userprog = re.compile('^(.*)@(.*)$') - - match = _userprog.match(host) - if match: return match.group(1, 2) - return None, host - -else: # pragma: no cover - from io import StringIO - string_types = str, - text_type = str - from io import TextIOWrapper as file_type - import builtins - import configparser - import shutil - from urllib.parse import (urlparse, urlunparse, urljoin, splituser, quote, - unquote, urlsplit, urlunsplit, splittype) - from urllib.request import (urlopen, urlretrieve, Request, url2pathname, - pathname2url, - HTTPBasicAuthHandler, HTTPPasswordMgr, - HTTPHandler, HTTPRedirectHandler, - build_opener) - if ssl: - from urllib.request import HTTPSHandler - from urllib.error import HTTPError, URLError, ContentTooShortError - import http.client as httplib - import urllib.request as urllib2 - import xmlrpc.client as xmlrpclib - import queue - from html.parser import HTMLParser - import html.entities as htmlentitydefs - raw_input = input - from itertools import filterfalse - filter = filter - -try: - from ssl import match_hostname, CertificateError -except ImportError: # pragma: no cover - class CertificateError(ValueError): - pass - - - def _dnsname_match(dn, hostname, max_wildcards=1): - """Matching according to RFC 6125, section 6.4.3 - - http://tools.ietf.org/html/rfc6125#section-6.4.3 - """ - pats = [] - if not dn: - return False - - parts = dn.split('.') - leftmost, remainder = parts[0], parts[1:] - - wildcards = leftmost.count('*') - if wildcards > max_wildcards: - # Issue #17980: avoid denials of service by refusing more - # than one wildcard per fragment. A survey of established - # policy among SSL implementations showed it to be a - # reasonable choice. - raise CertificateError( - "too many wildcards in certificate DNS name: " + repr(dn)) - - # speed up common case w/o wildcards - if not wildcards: - return dn.lower() == hostname.lower() - - # RFC 6125, section 6.4.3, subitem 1. - # The client SHOULD NOT attempt to match a presented identifier in which - # the wildcard character comprises a label other than the left-most label. - if leftmost == '*': - # When '*' is a fragment by itself, it matches a non-empty dotless - # fragment. - pats.append('[^.]+') - elif leftmost.startswith('xn--') or hostname.startswith('xn--'): - # RFC 6125, section 6.4.3, subitem 3. - # The client SHOULD NOT attempt to match a presented identifier - # where the wildcard character is embedded within an A-label or - # U-label of an internationalized domain name. - pats.append(re.escape(leftmost)) - else: - # Otherwise, '*' matches any dotless string, e.g. www* - pats.append(re.escape(leftmost).replace(r'\*', '[^.]*')) - - # add the remaining fragments, ignore any wildcards - for frag in remainder: - pats.append(re.escape(frag)) - - pat = re.compile(r'\A' + r'\.'.join(pats) + r'\Z', re.IGNORECASE) - return pat.match(hostname) - - - def match_hostname(cert, hostname): - """Verify that *cert* (in decoded format as returned by - SSLSocket.getpeercert()) matches the *hostname*. RFC 2818 and RFC 6125 - rules are followed, but IP addresses are not accepted for *hostname*. - - CertificateError is raised on failure. On success, the function - returns nothing. - """ - if not cert: - raise ValueError("empty or no certificate, match_hostname needs a " - "SSL socket or SSL context with either " - "CERT_OPTIONAL or CERT_REQUIRED") - dnsnames = [] - san = cert.get('subjectAltName', ()) - for key, value in san: - if key == 'DNS': - if _dnsname_match(value, hostname): - return - dnsnames.append(value) - if not dnsnames: - # The subject is only checked when there is no dNSName entry - # in subjectAltName - for sub in cert.get('subject', ()): - for key, value in sub: - # XXX according to RFC 2818, the most specific Common Name - # must be used. - if key == 'commonName': - if _dnsname_match(value, hostname): - return - dnsnames.append(value) - if len(dnsnames) > 1: - raise CertificateError("hostname %r " - "doesn't match either of %s" - % (hostname, ', '.join(map(repr, dnsnames)))) - elif len(dnsnames) == 1: - raise CertificateError("hostname %r " - "doesn't match %r" - % (hostname, dnsnames[0])) - else: - raise CertificateError("no appropriate commonName or " - "subjectAltName fields were found") - - -try: - from types import SimpleNamespace as Container -except ImportError: # pragma: no cover - class Container(object): - """ - A generic container for when multiple values need to be returned - """ - def __init__(self, **kwargs): - self.__dict__.update(kwargs) - - -try: - from shutil import which -except ImportError: # pragma: no cover - # Implementation from Python 3.3 - def which(cmd, mode=os.F_OK | os.X_OK, path=None): - """Given a command, mode, and a PATH string, return the path which - conforms to the given mode on the PATH, or None if there is no such - file. - - `mode` defaults to os.F_OK | os.X_OK. `path` defaults to the result - of os.environ.get("PATH"), or can be overridden with a custom search - path. - - """ - # Check that a given file can be accessed with the correct mode. - # Additionally check that `file` is not a directory, as on Windows - # directories pass the os.access check. - def _access_check(fn, mode): - return (os.path.exists(fn) and os.access(fn, mode) - and not os.path.isdir(fn)) - - # If we're given a path with a directory part, look it up directly rather - # than referring to PATH directories. This includes checking relative to the - # current directory, e.g. ./script - if os.path.dirname(cmd): - if _access_check(cmd, mode): - return cmd - return None - - if path is None: - path = os.environ.get("PATH", os.defpath) - if not path: - return None - path = path.split(os.pathsep) - - if sys.platform == "win32": - # The current directory takes precedence on Windows. - if not os.curdir in path: - path.insert(0, os.curdir) - - # PATHEXT is necessary to check on Windows. - pathext = os.environ.get("PATHEXT", "").split(os.pathsep) - # See if the given file matches any of the expected path extensions. - # This will allow us to short circuit when given "python.exe". - # If it does match, only test that one, otherwise we have to try - # others. - if any(cmd.lower().endswith(ext.lower()) for ext in pathext): - files = [cmd] - else: - files = [cmd + ext for ext in pathext] - else: - # On other platforms you don't have things like PATHEXT to tell you - # what file suffixes are executable, so just pass on cmd as-is. - files = [cmd] - - seen = set() - for dir in path: - normdir = os.path.normcase(dir) - if not normdir in seen: - seen.add(normdir) - for thefile in files: - name = os.path.join(dir, thefile) - if _access_check(name, mode): - return name - return None - - -# ZipFile is a context manager in 2.7, but not in 2.6 - -from zipfile import ZipFile as BaseZipFile - -if hasattr(BaseZipFile, '__enter__'): # pragma: no cover - ZipFile = BaseZipFile -else: - from zipfile import ZipExtFile as BaseZipExtFile - - class ZipExtFile(BaseZipExtFile): - def __init__(self, base): - self.__dict__.update(base.__dict__) - - def __enter__(self): - return self - - def __exit__(self, *exc_info): - self.close() - # return None, so if an exception occurred, it will propagate - - class ZipFile(BaseZipFile): - def __enter__(self): - return self - - def __exit__(self, *exc_info): - self.close() - # return None, so if an exception occurred, it will propagate - - def open(self, *args, **kwargs): - base = BaseZipFile.open(self, *args, **kwargs) - return ZipExtFile(base) - -try: - from platform import python_implementation -except ImportError: # pragma: no cover - def python_implementation(): - """Return a string identifying the Python implementation.""" - if 'PyPy' in sys.version: - return 'PyPy' - if os.name == 'java': - return 'Jython' - if sys.version.startswith('IronPython'): - return 'IronPython' - return 'CPython' - -try: - import sysconfig -except ImportError: # pragma: no cover - from ._backport import sysconfig - -try: - callable = callable -except NameError: # pragma: no cover - from collections import Callable - - def callable(obj): - return isinstance(obj, Callable) - - -try: - fsencode = os.fsencode - fsdecode = os.fsdecode -except AttributeError: # pragma: no cover - _fsencoding = sys.getfilesystemencoding() - if _fsencoding == 'mbcs': - _fserrors = 'strict' - else: - _fserrors = 'surrogateescape' - - def fsencode(filename): - if isinstance(filename, bytes): - return filename - elif isinstance(filename, text_type): - return filename.encode(_fsencoding, _fserrors) - else: - raise TypeError("expect bytes or str, not %s" % - type(filename).__name__) - - def fsdecode(filename): - if isinstance(filename, text_type): - return filename - elif isinstance(filename, bytes): - return filename.decode(_fsencoding, _fserrors) - else: - raise TypeError("expect bytes or str, not %s" % - type(filename).__name__) - -try: - from tokenize import detect_encoding -except ImportError: # pragma: no cover - from codecs import BOM_UTF8, lookup - import re - - cookie_re = re.compile("coding[:=]\s*([-\w.]+)") - - def _get_normal_name(orig_enc): - """Imitates get_normal_name in tokenizer.c.""" - # Only care about the first 12 characters. - enc = orig_enc[:12].lower().replace("_", "-") - if enc == "utf-8" or enc.startswith("utf-8-"): - return "utf-8" - if enc in ("latin-1", "iso-8859-1", "iso-latin-1") or \ - enc.startswith(("latin-1-", "iso-8859-1-", "iso-latin-1-")): - return "iso-8859-1" - return orig_enc - - def detect_encoding(readline): - """ - The detect_encoding() function is used to detect the encoding that should - be used to decode a Python source file. It requires one argument, readline, - in the same way as the tokenize() generator. - - It will call readline a maximum of twice, and return the encoding used - (as a string) and a list of any lines (left as bytes) it has read in. - - It detects the encoding from the presence of a utf-8 bom or an encoding - cookie as specified in pep-0263. If both a bom and a cookie are present, - but disagree, a SyntaxError will be raised. If the encoding cookie is an - invalid charset, raise a SyntaxError. Note that if a utf-8 bom is found, - 'utf-8-sig' is returned. - - If no encoding is specified, then the default of 'utf-8' will be returned. - """ - try: - filename = readline.__self__.name - except AttributeError: - filename = None - bom_found = False - encoding = None - default = 'utf-8' - def read_or_stop(): - try: - return readline() - except StopIteration: - return b'' - - def find_cookie(line): - try: - # Decode as UTF-8. Either the line is an encoding declaration, - # in which case it should be pure ASCII, or it must be UTF-8 - # per default encoding. - line_string = line.decode('utf-8') - except UnicodeDecodeError: - msg = "invalid or missing encoding declaration" - if filename is not None: - msg = '{} for {!r}'.format(msg, filename) - raise SyntaxError(msg) - - matches = cookie_re.findall(line_string) - if not matches: - return None - encoding = _get_normal_name(matches[0]) - try: - codec = lookup(encoding) - except LookupError: - # This behaviour mimics the Python interpreter - if filename is None: - msg = "unknown encoding: " + encoding - else: - msg = "unknown encoding for {!r}: {}".format(filename, - encoding) - raise SyntaxError(msg) - - if bom_found: - if codec.name != 'utf-8': - # This behaviour mimics the Python interpreter - if filename is None: - msg = 'encoding problem: utf-8' - else: - msg = 'encoding problem for {!r}: utf-8'.format(filename) - raise SyntaxError(msg) - encoding += '-sig' - return encoding - - first = read_or_stop() - if first.startswith(BOM_UTF8): - bom_found = True - first = first[3:] - default = 'utf-8-sig' - if not first: - return default, [] - - encoding = find_cookie(first) - if encoding: - return encoding, [first] - - second = read_or_stop() - if not second: - return default, [first] - - encoding = find_cookie(second) - if encoding: - return encoding, [first, second] - - return default, [first, second] - -# For converting & <-> & etc. -try: - from html import escape -except ImportError: - from cgi import escape -if sys.version_info[:2] < (3, 4): - unescape = HTMLParser().unescape -else: - from html import unescape - -try: - from collections import ChainMap -except ImportError: # pragma: no cover - from collections import MutableMapping - - try: - from reprlib import recursive_repr as _recursive_repr - except ImportError: - def _recursive_repr(fillvalue='...'): - ''' - Decorator to make a repr function return fillvalue for a recursive - call - ''' - - def decorating_function(user_function): - repr_running = set() - - def wrapper(self): - key = id(self), get_ident() - if key in repr_running: - return fillvalue - repr_running.add(key) - try: - result = user_function(self) - finally: - repr_running.discard(key) - return result - - # Can't use functools.wraps() here because of bootstrap issues - wrapper.__module__ = getattr(user_function, '__module__') - wrapper.__doc__ = getattr(user_function, '__doc__') - wrapper.__name__ = getattr(user_function, '__name__') - wrapper.__annotations__ = getattr(user_function, '__annotations__', {}) - return wrapper - - return decorating_function - - class ChainMap(MutableMapping): - ''' A ChainMap groups multiple dicts (or other mappings) together - to create a single, updateable view. - - The underlying mappings are stored in a list. That list is public and can - accessed or updated using the *maps* attribute. There is no other state. - - Lookups search the underlying mappings successively until a key is found. - In contrast, writes, updates, and deletions only operate on the first - mapping. - - ''' - - def __init__(self, *maps): - '''Initialize a ChainMap by setting *maps* to the given mappings. - If no mappings are provided, a single empty dictionary is used. - - ''' - self.maps = list(maps) or [{}] # always at least one map - - def __missing__(self, key): - raise KeyError(key) - - def __getitem__(self, key): - for mapping in self.maps: - try: - return mapping[key] # can't use 'key in mapping' with defaultdict - except KeyError: - pass - return self.__missing__(key) # support subclasses that define __missing__ - - def get(self, key, default=None): - return self[key] if key in self else default - - def __len__(self): - return len(set().union(*self.maps)) # reuses stored hash values if possible - - def __iter__(self): - return iter(set().union(*self.maps)) - - def __contains__(self, key): - return any(key in m for m in self.maps) - - def __bool__(self): - return any(self.maps) - - @_recursive_repr() - def __repr__(self): - return '{0.__class__.__name__}({1})'.format( - self, ', '.join(map(repr, self.maps))) - - @classmethod - def fromkeys(cls, iterable, *args): - 'Create a ChainMap with a single dict created from the iterable.' - return cls(dict.fromkeys(iterable, *args)) - - def copy(self): - 'New ChainMap or subclass with a new copy of maps[0] and refs to maps[1:]' - return self.__class__(self.maps[0].copy(), *self.maps[1:]) - - __copy__ = copy - - def new_child(self): # like Django's Context.push() - 'New ChainMap with a new dict followed by all previous maps.' - return self.__class__({}, *self.maps) - - @property - def parents(self): # like Django's Context.pop() - 'New ChainMap from maps[1:].' - return self.__class__(*self.maps[1:]) - - def __setitem__(self, key, value): - self.maps[0][key] = value - - def __delitem__(self, key): - try: - del self.maps[0][key] - except KeyError: - raise KeyError('Key not found in the first mapping: {!r}'.format(key)) - - def popitem(self): - 'Remove and return an item pair from maps[0]. Raise KeyError is maps[0] is empty.' - try: - return self.maps[0].popitem() - except KeyError: - raise KeyError('No keys found in the first mapping.') - - def pop(self, key, *args): - 'Remove *key* from maps[0] and return its value. Raise KeyError if *key* not in maps[0].' - try: - return self.maps[0].pop(key, *args) - except KeyError: - raise KeyError('Key not found in the first mapping: {!r}'.format(key)) - - def clear(self): - 'Clear maps[0], leaving maps[1:] intact.' - self.maps[0].clear() - -try: - from imp import cache_from_source -except ImportError: # pragma: no cover - def cache_from_source(path, debug_override=None): - assert path.endswith('.py') - if debug_override is None: - debug_override = __debug__ - if debug_override: - suffix = 'c' - else: - suffix = 'o' - return path + suffix - -try: - from collections import OrderedDict -except ImportError: # pragma: no cover -## {{{ http://code.activestate.com/recipes/576693/ (r9) -# Backport of OrderedDict() class that runs on Python 2.4, 2.5, 2.6, 2.7 and pypy. -# Passes Python2.7's test suite and incorporates all the latest updates. - try: - from thread import get_ident as _get_ident - except ImportError: - from dummy_thread import get_ident as _get_ident - - try: - from _abcoll import KeysView, ValuesView, ItemsView - except ImportError: - pass - - - class OrderedDict(dict): - 'Dictionary that remembers insertion order' - # An inherited dict maps keys to values. - # The inherited dict provides __getitem__, __len__, __contains__, and get. - # The remaining methods are order-aware. - # Big-O running times for all methods are the same as for regular dictionaries. - - # The internal self.__map dictionary maps keys to links in a doubly linked list. - # The circular doubly linked list starts and ends with a sentinel element. - # The sentinel element never gets deleted (this simplifies the algorithm). - # Each link is stored as a list of length three: [PREV, NEXT, KEY]. - - def __init__(self, *args, **kwds): - '''Initialize an ordered dictionary. Signature is the same as for - regular dictionaries, but keyword arguments are not recommended - because their insertion order is arbitrary. - - ''' - if len(args) > 1: - raise TypeError('expected at most 1 arguments, got %d' % len(args)) - try: - self.__root - except AttributeError: - self.__root = root = [] # sentinel node - root[:] = [root, root, None] - self.__map = {} - self.__update(*args, **kwds) - - def __setitem__(self, key, value, dict_setitem=dict.__setitem__): - 'od.__setitem__(i, y) <==> od[i]=y' - # Setting a new item creates a new link which goes at the end of the linked - # list, and the inherited dictionary is updated with the new key/value pair. - if key not in self: - root = self.__root - last = root[0] - last[1] = root[0] = self.__map[key] = [last, root, key] - dict_setitem(self, key, value) - - def __delitem__(self, key, dict_delitem=dict.__delitem__): - 'od.__delitem__(y) <==> del od[y]' - # Deleting an existing item uses self.__map to find the link which is - # then removed by updating the links in the predecessor and successor nodes. - dict_delitem(self, key) - link_prev, link_next, key = self.__map.pop(key) - link_prev[1] = link_next - link_next[0] = link_prev - - def __iter__(self): - 'od.__iter__() <==> iter(od)' - root = self.__root - curr = root[1] - while curr is not root: - yield curr[2] - curr = curr[1] - - def __reversed__(self): - 'od.__reversed__() <==> reversed(od)' - root = self.__root - curr = root[0] - while curr is not root: - yield curr[2] - curr = curr[0] - - def clear(self): - 'od.clear() -> None. Remove all items from od.' - try: - for node in self.__map.itervalues(): - del node[:] - root = self.__root - root[:] = [root, root, None] - self.__map.clear() - except AttributeError: - pass - dict.clear(self) - - def popitem(self, last=True): - '''od.popitem() -> (k, v), return and remove a (key, value) pair. - Pairs are returned in LIFO order if last is true or FIFO order if false. - - ''' - if not self: - raise KeyError('dictionary is empty') - root = self.__root - if last: - link = root[0] - link_prev = link[0] - link_prev[1] = root - root[0] = link_prev - else: - link = root[1] - link_next = link[1] - root[1] = link_next - link_next[0] = root - key = link[2] - del self.__map[key] - value = dict.pop(self, key) - return key, value - - # -- the following methods do not depend on the internal structure -- - - def keys(self): - 'od.keys() -> list of keys in od' - return list(self) - - def values(self): - 'od.values() -> list of values in od' - return [self[key] for key in self] - - def items(self): - 'od.items() -> list of (key, value) pairs in od' - return [(key, self[key]) for key in self] - - def iterkeys(self): - 'od.iterkeys() -> an iterator over the keys in od' - return iter(self) - - def itervalues(self): - 'od.itervalues -> an iterator over the values in od' - for k in self: - yield self[k] - - def iteritems(self): - 'od.iteritems -> an iterator over the (key, value) items in od' - for k in self: - yield (k, self[k]) - - def update(*args, **kwds): - '''od.update(E, **F) -> None. Update od from dict/iterable E and F. - - If E is a dict instance, does: for k in E: od[k] = E[k] - If E has a .keys() method, does: for k in E.keys(): od[k] = E[k] - Or if E is an iterable of items, does: for k, v in E: od[k] = v - In either case, this is followed by: for k, v in F.items(): od[k] = v - - ''' - if len(args) > 2: - raise TypeError('update() takes at most 2 positional ' - 'arguments (%d given)' % (len(args),)) - elif not args: - raise TypeError('update() takes at least 1 argument (0 given)') - self = args[0] - # Make progressively weaker assumptions about "other" - other = () - if len(args) == 2: - other = args[1] - if isinstance(other, dict): - for key in other: - self[key] = other[key] - elif hasattr(other, 'keys'): - for key in other.keys(): - self[key] = other[key] - else: - for key, value in other: - self[key] = value - for key, value in kwds.items(): - self[key] = value - - __update = update # let subclasses override update without breaking __init__ - - __marker = object() - - def pop(self, key, default=__marker): - '''od.pop(k[,d]) -> v, remove specified key and return the corresponding value. - If key is not found, d is returned if given, otherwise KeyError is raised. - - ''' - if key in self: - result = self[key] - del self[key] - return result - if default is self.__marker: - raise KeyError(key) - return default - - def setdefault(self, key, default=None): - 'od.setdefault(k[,d]) -> od.get(k,d), also set od[k]=d if k not in od' - if key in self: - return self[key] - self[key] = default - return default - - def __repr__(self, _repr_running=None): - 'od.__repr__() <==> repr(od)' - if not _repr_running: _repr_running = {} - call_key = id(self), _get_ident() - if call_key in _repr_running: - return '...' - _repr_running[call_key] = 1 - try: - if not self: - return '%s()' % (self.__class__.__name__,) - return '%s(%r)' % (self.__class__.__name__, self.items()) - finally: - del _repr_running[call_key] - - def __reduce__(self): - 'Return state information for pickling' - items = [[k, self[k]] for k in self] - inst_dict = vars(self).copy() - for k in vars(OrderedDict()): - inst_dict.pop(k, None) - if inst_dict: - return (self.__class__, (items,), inst_dict) - return self.__class__, (items,) - - def copy(self): - 'od.copy() -> a shallow copy of od' - return self.__class__(self) - - @classmethod - def fromkeys(cls, iterable, value=None): - '''OD.fromkeys(S[, v]) -> New ordered dictionary with keys from S - and values equal to v (which defaults to None). - - ''' - d = cls() - for key in iterable: - d[key] = value - return d - - def __eq__(self, other): - '''od.__eq__(y) <==> od==y. Comparison to another OD is order-sensitive - while comparison to a regular mapping is order-insensitive. - - ''' - if isinstance(other, OrderedDict): - return len(self)==len(other) and self.items() == other.items() - return dict.__eq__(self, other) - - def __ne__(self, other): - return not self == other - - # -- the following methods are only used in Python 2.7 -- - - def viewkeys(self): - "od.viewkeys() -> a set-like object providing a view on od's keys" - return KeysView(self) - - def viewvalues(self): - "od.viewvalues() -> an object providing a view on od's values" - return ValuesView(self) - - def viewitems(self): - "od.viewitems() -> a set-like object providing a view on od's items" - return ItemsView(self) - -try: - from logging.config import BaseConfigurator, valid_ident -except ImportError: # pragma: no cover - IDENTIFIER = re.compile('^[a-z_][a-z0-9_]*$', re.I) - - - def valid_ident(s): - m = IDENTIFIER.match(s) - if not m: - raise ValueError('Not a valid Python identifier: %r' % s) - return True - - - # The ConvertingXXX classes are wrappers around standard Python containers, - # and they serve to convert any suitable values in the container. The - # conversion converts base dicts, lists and tuples to their wrapped - # equivalents, whereas strings which match a conversion format are converted - # appropriately. - # - # Each wrapper should have a configurator attribute holding the actual - # configurator to use for conversion. - - class ConvertingDict(dict): - """A converting dictionary wrapper.""" - - def __getitem__(self, key): - value = dict.__getitem__(self, key) - result = self.configurator.convert(value) - #If the converted value is different, save for next time - if value is not result: - self[key] = result - if type(result) in (ConvertingDict, ConvertingList, - ConvertingTuple): - result.parent = self - result.key = key - return result - - def get(self, key, default=None): - value = dict.get(self, key, default) - result = self.configurator.convert(value) - #If the converted value is different, save for next time - if value is not result: - self[key] = result - if type(result) in (ConvertingDict, ConvertingList, - ConvertingTuple): - result.parent = self - result.key = key - return result - - def pop(self, key, default=None): - value = dict.pop(self, key, default) - result = self.configurator.convert(value) - if value is not result: - if type(result) in (ConvertingDict, ConvertingList, - ConvertingTuple): - result.parent = self - result.key = key - return result - - class ConvertingList(list): - """A converting list wrapper.""" - def __getitem__(self, key): - value = list.__getitem__(self, key) - result = self.configurator.convert(value) - #If the converted value is different, save for next time - if value is not result: - self[key] = result - if type(result) in (ConvertingDict, ConvertingList, - ConvertingTuple): - result.parent = self - result.key = key - return result - - def pop(self, idx=-1): - value = list.pop(self, idx) - result = self.configurator.convert(value) - if value is not result: - if type(result) in (ConvertingDict, ConvertingList, - ConvertingTuple): - result.parent = self - return result - - class ConvertingTuple(tuple): - """A converting tuple wrapper.""" - def __getitem__(self, key): - value = tuple.__getitem__(self, key) - result = self.configurator.convert(value) - if value is not result: - if type(result) in (ConvertingDict, ConvertingList, - ConvertingTuple): - result.parent = self - result.key = key - return result - - class BaseConfigurator(object): - """ - The configurator base class which defines some useful defaults. - """ - - CONVERT_PATTERN = re.compile(r'^(?P[a-z]+)://(?P.*)$') - - WORD_PATTERN = re.compile(r'^\s*(\w+)\s*') - DOT_PATTERN = re.compile(r'^\.\s*(\w+)\s*') - INDEX_PATTERN = re.compile(r'^\[\s*(\w+)\s*\]\s*') - DIGIT_PATTERN = re.compile(r'^\d+$') - - value_converters = { - 'ext' : 'ext_convert', - 'cfg' : 'cfg_convert', - } - - # We might want to use a different one, e.g. importlib - importer = staticmethod(__import__) - - def __init__(self, config): - self.config = ConvertingDict(config) - self.config.configurator = self - - def resolve(self, s): - """ - Resolve strings to objects using standard import and attribute - syntax. - """ - name = s.split('.') - used = name.pop(0) - try: - found = self.importer(used) - for frag in name: - used += '.' + frag - try: - found = getattr(found, frag) - except AttributeError: - self.importer(used) - found = getattr(found, frag) - return found - except ImportError: - e, tb = sys.exc_info()[1:] - v = ValueError('Cannot resolve %r: %s' % (s, e)) - v.__cause__, v.__traceback__ = e, tb - raise v - - def ext_convert(self, value): - """Default converter for the ext:// protocol.""" - return self.resolve(value) - - def cfg_convert(self, value): - """Default converter for the cfg:// protocol.""" - rest = value - m = self.WORD_PATTERN.match(rest) - if m is None: - raise ValueError("Unable to convert %r" % value) - else: - rest = rest[m.end():] - d = self.config[m.groups()[0]] - #print d, rest - while rest: - m = self.DOT_PATTERN.match(rest) - if m: - d = d[m.groups()[0]] - else: - m = self.INDEX_PATTERN.match(rest) - if m: - idx = m.groups()[0] - if not self.DIGIT_PATTERN.match(idx): - d = d[idx] - else: - try: - n = int(idx) # try as number first (most likely) - d = d[n] - except TypeError: - d = d[idx] - if m: - rest = rest[m.end():] - else: - raise ValueError('Unable to convert ' - '%r at %r' % (value, rest)) - #rest should be empty - return d - - def convert(self, value): - """ - Convert values to an appropriate type. dicts, lists and tuples are - replaced by their converting alternatives. Strings are checked to - see if they have a conversion format and are converted if they do. - """ - if not isinstance(value, ConvertingDict) and isinstance(value, dict): - value = ConvertingDict(value) - value.configurator = self - elif not isinstance(value, ConvertingList) and isinstance(value, list): - value = ConvertingList(value) - value.configurator = self - elif not isinstance(value, ConvertingTuple) and\ - isinstance(value, tuple): - value = ConvertingTuple(value) - value.configurator = self - elif isinstance(value, string_types): - m = self.CONVERT_PATTERN.match(value) - if m: - d = m.groupdict() - prefix = d['prefix'] - converter = self.value_converters.get(prefix, None) - if converter: - suffix = d['suffix'] - converter = getattr(self, converter) - value = converter(suffix) - return value - - def configure_custom(self, config): - """Configure an object with a user-supplied factory.""" - c = config.pop('()') - if not callable(c): - c = self.resolve(c) - props = config.pop('.', None) - # Check for valid identifiers - kwargs = dict([(k, config[k]) for k in config if valid_ident(k)]) - result = c(**kwargs) - if props: - for name, value in props.items(): - setattr(result, name, value) - return result - - def as_tuple(self, value): - """Utility function which converts lists to tuples.""" - if isinstance(value, list): - value = tuple(value) - return value diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distlib/database.py b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distlib/database.py deleted file mode 100644 index c314426..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distlib/database.py +++ /dev/null @@ -1,1312 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (C) 2012-2016 The Python Software Foundation. -# See LICENSE.txt and CONTRIBUTORS.txt. -# -"""PEP 376 implementation.""" - -from __future__ import unicode_literals - -import base64 -import codecs -import contextlib -import hashlib -import logging -import os -import posixpath -import sys -import zipimport - -from . import DistlibException, resources -from .compat import StringIO -from .version import get_scheme, UnsupportedVersionError -from .metadata import Metadata, METADATA_FILENAME, WHEEL_METADATA_FILENAME -from .util import (parse_requirement, cached_property, parse_name_and_version, - read_exports, write_exports, CSVReader, CSVWriter) - - -__all__ = ['Distribution', 'BaseInstalledDistribution', - 'InstalledDistribution', 'EggInfoDistribution', - 'DistributionPath'] - - -logger = logging.getLogger(__name__) - -EXPORTS_FILENAME = 'pydist-exports.json' -COMMANDS_FILENAME = 'pydist-commands.json' - -DIST_FILES = ('INSTALLER', METADATA_FILENAME, 'RECORD', 'REQUESTED', - 'RESOURCES', EXPORTS_FILENAME, 'SHARED') - -DISTINFO_EXT = '.dist-info' - - -class _Cache(object): - """ - A simple cache mapping names and .dist-info paths to distributions - """ - def __init__(self): - """ - Initialise an instance. There is normally one for each DistributionPath. - """ - self.name = {} - self.path = {} - self.generated = False - - def clear(self): - """ - Clear the cache, setting it to its initial state. - """ - self.name.clear() - self.path.clear() - self.generated = False - - def add(self, dist): - """ - Add a distribution to the cache. - :param dist: The distribution to add. - """ - if dist.path not in self.path: - self.path[dist.path] = dist - self.name.setdefault(dist.key, []).append(dist) - - -class DistributionPath(object): - """ - Represents a set of distributions installed on a path (typically sys.path). - """ - def __init__(self, path=None, include_egg=False): - """ - Create an instance from a path, optionally including legacy (distutils/ - setuptools/distribute) distributions. - :param path: The path to use, as a list of directories. If not specified, - sys.path is used. - :param include_egg: If True, this instance will look for and return legacy - distributions as well as those based on PEP 376. - """ - if path is None: - path = sys.path - self.path = path - self._include_dist = True - self._include_egg = include_egg - - self._cache = _Cache() - self._cache_egg = _Cache() - self._cache_enabled = True - self._scheme = get_scheme('default') - - def _get_cache_enabled(self): - return self._cache_enabled - - def _set_cache_enabled(self, value): - self._cache_enabled = value - - cache_enabled = property(_get_cache_enabled, _set_cache_enabled) - - def clear_cache(self): - """ - Clears the internal cache. - """ - self._cache.clear() - self._cache_egg.clear() - - - def _yield_distributions(self): - """ - Yield .dist-info and/or .egg(-info) distributions. - """ - # We need to check if we've seen some resources already, because on - # some Linux systems (e.g. some Debian/Ubuntu variants) there are - # symlinks which alias other files in the environment. - seen = set() - for path in self.path: - finder = resources.finder_for_path(path) - if finder is None: - continue - r = finder.find('') - if not r or not r.is_container: - continue - rset = sorted(r.resources) - for entry in rset: - r = finder.find(entry) - if not r or r.path in seen: - continue - if self._include_dist and entry.endswith(DISTINFO_EXT): - possible_filenames = [METADATA_FILENAME, WHEEL_METADATA_FILENAME] - for metadata_filename in possible_filenames: - metadata_path = posixpath.join(entry, metadata_filename) - pydist = finder.find(metadata_path) - if pydist: - break - else: - continue - - with contextlib.closing(pydist.as_stream()) as stream: - metadata = Metadata(fileobj=stream, scheme='legacy') - logger.debug('Found %s', r.path) - seen.add(r.path) - yield new_dist_class(r.path, metadata=metadata, - env=self) - elif self._include_egg and entry.endswith(('.egg-info', - '.egg')): - logger.debug('Found %s', r.path) - seen.add(r.path) - yield old_dist_class(r.path, self) - - def _generate_cache(self): - """ - Scan the path for distributions and populate the cache with - those that are found. - """ - gen_dist = not self._cache.generated - gen_egg = self._include_egg and not self._cache_egg.generated - if gen_dist or gen_egg: - for dist in self._yield_distributions(): - if isinstance(dist, InstalledDistribution): - self._cache.add(dist) - else: - self._cache_egg.add(dist) - - if gen_dist: - self._cache.generated = True - if gen_egg: - self._cache_egg.generated = True - - @classmethod - def distinfo_dirname(cls, name, version): - """ - The *name* and *version* parameters are converted into their - filename-escaped form, i.e. any ``'-'`` characters are replaced - with ``'_'`` other than the one in ``'dist-info'`` and the one - separating the name from the version number. - - :parameter name: is converted to a standard distribution name by replacing - any runs of non- alphanumeric characters with a single - ``'-'``. - :type name: string - :parameter version: is converted to a standard version string. Spaces - become dots, and all other non-alphanumeric characters - (except dots) become dashes, with runs of multiple - dashes condensed to a single dash. - :type version: string - :returns: directory name - :rtype: string""" - name = name.replace('-', '_') - return '-'.join([name, version]) + DISTINFO_EXT - - def get_distributions(self): - """ - Provides an iterator that looks for distributions and returns - :class:`InstalledDistribution` or - :class:`EggInfoDistribution` instances for each one of them. - - :rtype: iterator of :class:`InstalledDistribution` and - :class:`EggInfoDistribution` instances - """ - if not self._cache_enabled: - for dist in self._yield_distributions(): - yield dist - else: - self._generate_cache() - - for dist in self._cache.path.values(): - yield dist - - if self._include_egg: - for dist in self._cache_egg.path.values(): - yield dist - - def get_distribution(self, name): - """ - Looks for a named distribution on the path. - - This function only returns the first result found, as no more than one - value is expected. If nothing is found, ``None`` is returned. - - :rtype: :class:`InstalledDistribution`, :class:`EggInfoDistribution` - or ``None`` - """ - result = None - name = name.lower() - if not self._cache_enabled: - for dist in self._yield_distributions(): - if dist.key == name: - result = dist - break - else: - self._generate_cache() - - if name in self._cache.name: - result = self._cache.name[name][0] - elif self._include_egg and name in self._cache_egg.name: - result = self._cache_egg.name[name][0] - return result - - def provides_distribution(self, name, version=None): - """ - Iterates over all distributions to find which distributions provide *name*. - If a *version* is provided, it will be used to filter the results. - - This function only returns the first result found, since no more than - one values are expected. If the directory is not found, returns ``None``. - - :parameter version: a version specifier that indicates the version - required, conforming to the format in ``PEP-345`` - - :type name: string - :type version: string - """ - matcher = None - if not version is None: - try: - matcher = self._scheme.matcher('%s (%s)' % (name, version)) - except ValueError: - raise DistlibException('invalid name or version: %r, %r' % - (name, version)) - - for dist in self.get_distributions(): - provided = dist.provides - - for p in provided: - p_name, p_ver = parse_name_and_version(p) - if matcher is None: - if p_name == name: - yield dist - break - else: - if p_name == name and matcher.match(p_ver): - yield dist - break - - def get_file_path(self, name, relative_path): - """ - Return the path to a resource file. - """ - dist = self.get_distribution(name) - if dist is None: - raise LookupError('no distribution named %r found' % name) - return dist.get_resource_path(relative_path) - - def get_exported_entries(self, category, name=None): - """ - Return all of the exported entries in a particular category. - - :param category: The category to search for entries. - :param name: If specified, only entries with that name are returned. - """ - for dist in self.get_distributions(): - r = dist.exports - if category in r: - d = r[category] - if name is not None: - if name in d: - yield d[name] - else: - for v in d.values(): - yield v - - -class Distribution(object): - """ - A base class for distributions, whether installed or from indexes. - Either way, it must have some metadata, so that's all that's needed - for construction. - """ - - build_time_dependency = False - """ - Set to True if it's known to be only a build-time dependency (i.e. - not needed after installation). - """ - - requested = False - """A boolean that indicates whether the ``REQUESTED`` metadata file is - present (in other words, whether the package was installed by user - request or it was installed as a dependency).""" - - def __init__(self, metadata): - """ - Initialise an instance. - :param metadata: The instance of :class:`Metadata` describing this - distribution. - """ - self.metadata = metadata - self.name = metadata.name - self.key = self.name.lower() # for case-insensitive comparisons - self.version = metadata.version - self.locator = None - self.digest = None - self.extras = None # additional features requested - self.context = None # environment marker overrides - self.download_urls = set() - self.digests = {} - - @property - def source_url(self): - """ - The source archive download URL for this distribution. - """ - return self.metadata.source_url - - download_url = source_url # Backward compatibility - - @property - def name_and_version(self): - """ - A utility property which displays the name and version in parentheses. - """ - return '%s (%s)' % (self.name, self.version) - - @property - def provides(self): - """ - A set of distribution names and versions provided by this distribution. - :return: A set of "name (version)" strings. - """ - plist = self.metadata.provides - s = '%s (%s)' % (self.name, self.version) - if s not in plist: - plist.append(s) - return plist - - def _get_requirements(self, req_attr): - md = self.metadata - logger.debug('Getting requirements from metadata %r', md.todict()) - reqts = getattr(md, req_attr) - return set(md.get_requirements(reqts, extras=self.extras, - env=self.context)) - - @property - def run_requires(self): - return self._get_requirements('run_requires') - - @property - def meta_requires(self): - return self._get_requirements('meta_requires') - - @property - def build_requires(self): - return self._get_requirements('build_requires') - - @property - def test_requires(self): - return self._get_requirements('test_requires') - - @property - def dev_requires(self): - return self._get_requirements('dev_requires') - - def matches_requirement(self, req): - """ - Say if this instance matches (fulfills) a requirement. - :param req: The requirement to match. - :rtype req: str - :return: True if it matches, else False. - """ - # Requirement may contain extras - parse to lose those - # from what's passed to the matcher - r = parse_requirement(req) - scheme = get_scheme(self.metadata.scheme) - try: - matcher = scheme.matcher(r.requirement) - except UnsupportedVersionError: - # XXX compat-mode if cannot read the version - logger.warning('could not read version %r - using name only', - req) - name = req.split()[0] - matcher = scheme.matcher(name) - - name = matcher.key # case-insensitive - - result = False - for p in self.provides: - p_name, p_ver = parse_name_and_version(p) - if p_name != name: - continue - try: - result = matcher.match(p_ver) - break - except UnsupportedVersionError: - pass - return result - - def __repr__(self): - """ - Return a textual representation of this instance, - """ - if self.source_url: - suffix = ' [%s]' % self.source_url - else: - suffix = '' - return '' % (self.name, self.version, suffix) - - def __eq__(self, other): - """ - See if this distribution is the same as another. - :param other: The distribution to compare with. To be equal to one - another. distributions must have the same type, name, - version and source_url. - :return: True if it is the same, else False. - """ - if type(other) is not type(self): - result = False - else: - result = (self.name == other.name and - self.version == other.version and - self.source_url == other.source_url) - return result - - def __hash__(self): - """ - Compute hash in a way which matches the equality test. - """ - return hash(self.name) + hash(self.version) + hash(self.source_url) - - -class BaseInstalledDistribution(Distribution): - """ - This is the base class for installed distributions (whether PEP 376 or - legacy). - """ - - hasher = None - - def __init__(self, metadata, path, env=None): - """ - Initialise an instance. - :param metadata: An instance of :class:`Metadata` which describes the - distribution. This will normally have been initialised - from a metadata file in the ``path``. - :param path: The path of the ``.dist-info`` or ``.egg-info`` - directory for the distribution. - :param env: This is normally the :class:`DistributionPath` - instance where this distribution was found. - """ - super(BaseInstalledDistribution, self).__init__(metadata) - self.path = path - self.dist_path = env - - def get_hash(self, data, hasher=None): - """ - Get the hash of some data, using a particular hash algorithm, if - specified. - - :param data: The data to be hashed. - :type data: bytes - :param hasher: The name of a hash implementation, supported by hashlib, - or ``None``. Examples of valid values are ``'sha1'``, - ``'sha224'``, ``'sha384'``, '``sha256'``, ``'md5'`` and - ``'sha512'``. If no hasher is specified, the ``hasher`` - attribute of the :class:`InstalledDistribution` instance - is used. If the hasher is determined to be ``None``, MD5 - is used as the hashing algorithm. - :returns: The hash of the data. If a hasher was explicitly specified, - the returned hash will be prefixed with the specified hasher - followed by '='. - :rtype: str - """ - if hasher is None: - hasher = self.hasher - if hasher is None: - hasher = hashlib.md5 - prefix = '' - else: - hasher = getattr(hashlib, hasher) - prefix = '%s=' % self.hasher - digest = hasher(data).digest() - digest = base64.urlsafe_b64encode(digest).rstrip(b'=').decode('ascii') - return '%s%s' % (prefix, digest) - - -class InstalledDistribution(BaseInstalledDistribution): - """ - Created with the *path* of the ``.dist-info`` directory provided to the - constructor. It reads the metadata contained in ``pydist.json`` when it is - instantiated., or uses a passed in Metadata instance (useful for when - dry-run mode is being used). - """ - - hasher = 'sha256' - - def __init__(self, path, metadata=None, env=None): - self.finder = finder = resources.finder_for_path(path) - if finder is None: - import pdb; pdb.set_trace () - if env and env._cache_enabled and path in env._cache.path: - metadata = env._cache.path[path].metadata - elif metadata is None: - r = finder.find(METADATA_FILENAME) - # Temporary - for Wheel 0.23 support - if r is None: - r = finder.find(WHEEL_METADATA_FILENAME) - # Temporary - for legacy support - if r is None: - r = finder.find('METADATA') - if r is None: - raise ValueError('no %s found in %s' % (METADATA_FILENAME, - path)) - with contextlib.closing(r.as_stream()) as stream: - metadata = Metadata(fileobj=stream, scheme='legacy') - - super(InstalledDistribution, self).__init__(metadata, path, env) - - if env and env._cache_enabled: - env._cache.add(self) - - try: - r = finder.find('REQUESTED') - except AttributeError: - import pdb; pdb.set_trace () - self.requested = r is not None - - def __repr__(self): - return '' % ( - self.name, self.version, self.path) - - def __str__(self): - return "%s %s" % (self.name, self.version) - - def _get_records(self): - """ - Get the list of installed files for the distribution - :return: A list of tuples of path, hash and size. Note that hash and - size might be ``None`` for some entries. The path is exactly - as stored in the file (which is as in PEP 376). - """ - results = [] - r = self.get_distinfo_resource('RECORD') - with contextlib.closing(r.as_stream()) as stream: - with CSVReader(stream=stream) as record_reader: - # Base location is parent dir of .dist-info dir - #base_location = os.path.dirname(self.path) - #base_location = os.path.abspath(base_location) - for row in record_reader: - missing = [None for i in range(len(row), 3)] - path, checksum, size = row + missing - #if not os.path.isabs(path): - # path = path.replace('/', os.sep) - # path = os.path.join(base_location, path) - results.append((path, checksum, size)) - return results - - @cached_property - def exports(self): - """ - Return the information exported by this distribution. - :return: A dictionary of exports, mapping an export category to a dict - of :class:`ExportEntry` instances describing the individual - export entries, and keyed by name. - """ - result = {} - r = self.get_distinfo_resource(EXPORTS_FILENAME) - if r: - result = self.read_exports() - return result - - def read_exports(self): - """ - Read exports data from a file in .ini format. - - :return: A dictionary of exports, mapping an export category to a list - of :class:`ExportEntry` instances describing the individual - export entries. - """ - result = {} - r = self.get_distinfo_resource(EXPORTS_FILENAME) - if r: - with contextlib.closing(r.as_stream()) as stream: - result = read_exports(stream) - return result - - def write_exports(self, exports): - """ - Write a dictionary of exports to a file in .ini format. - :param exports: A dictionary of exports, mapping an export category to - a list of :class:`ExportEntry` instances describing the - individual export entries. - """ - rf = self.get_distinfo_file(EXPORTS_FILENAME) - with open(rf, 'w') as f: - write_exports(exports, f) - - def get_resource_path(self, relative_path): - """ - NOTE: This API may change in the future. - - Return the absolute path to a resource file with the given relative - path. - - :param relative_path: The path, relative to .dist-info, of the resource - of interest. - :return: The absolute path where the resource is to be found. - """ - r = self.get_distinfo_resource('RESOURCES') - with contextlib.closing(r.as_stream()) as stream: - with CSVReader(stream=stream) as resources_reader: - for relative, destination in resources_reader: - if relative == relative_path: - return destination - raise KeyError('no resource file with relative path %r ' - 'is installed' % relative_path) - - def list_installed_files(self): - """ - Iterates over the ``RECORD`` entries and returns a tuple - ``(path, hash, size)`` for each line. - - :returns: iterator of (path, hash, size) - """ - for result in self._get_records(): - yield result - - def write_installed_files(self, paths, prefix, dry_run=False): - """ - Writes the ``RECORD`` file, using the ``paths`` iterable passed in. Any - existing ``RECORD`` file is silently overwritten. - - prefix is used to determine when to write absolute paths. - """ - prefix = os.path.join(prefix, '') - base = os.path.dirname(self.path) - base_under_prefix = base.startswith(prefix) - base = os.path.join(base, '') - record_path = self.get_distinfo_file('RECORD') - logger.info('creating %s', record_path) - if dry_run: - return None - with CSVWriter(record_path) as writer: - for path in paths: - if os.path.isdir(path) or path.endswith(('.pyc', '.pyo')): - # do not put size and hash, as in PEP-376 - hash_value = size = '' - else: - size = '%d' % os.path.getsize(path) - with open(path, 'rb') as fp: - hash_value = self.get_hash(fp.read()) - if path.startswith(base) or (base_under_prefix and - path.startswith(prefix)): - path = os.path.relpath(path, base) - writer.writerow((path, hash_value, size)) - - # add the RECORD file itself - if record_path.startswith(base): - record_path = os.path.relpath(record_path, base) - writer.writerow((record_path, '', '')) - return record_path - - def check_installed_files(self): - """ - Checks that the hashes and sizes of the files in ``RECORD`` are - matched by the files themselves. Returns a (possibly empty) list of - mismatches. Each entry in the mismatch list will be a tuple consisting - of the path, 'exists', 'size' or 'hash' according to what didn't match - (existence is checked first, then size, then hash), the expected - value and the actual value. - """ - mismatches = [] - base = os.path.dirname(self.path) - record_path = self.get_distinfo_file('RECORD') - for path, hash_value, size in self.list_installed_files(): - if not os.path.isabs(path): - path = os.path.join(base, path) - if path == record_path: - continue - if not os.path.exists(path): - mismatches.append((path, 'exists', True, False)) - elif os.path.isfile(path): - actual_size = str(os.path.getsize(path)) - if size and actual_size != size: - mismatches.append((path, 'size', size, actual_size)) - elif hash_value: - if '=' in hash_value: - hasher = hash_value.split('=', 1)[0] - else: - hasher = None - - with open(path, 'rb') as f: - actual_hash = self.get_hash(f.read(), hasher) - if actual_hash != hash_value: - mismatches.append((path, 'hash', hash_value, actual_hash)) - return mismatches - - @cached_property - def shared_locations(self): - """ - A dictionary of shared locations whose keys are in the set 'prefix', - 'purelib', 'platlib', 'scripts', 'headers', 'data' and 'namespace'. - The corresponding value is the absolute path of that category for - this distribution, and takes into account any paths selected by the - user at installation time (e.g. via command-line arguments). In the - case of the 'namespace' key, this would be a list of absolute paths - for the roots of namespace packages in this distribution. - - The first time this property is accessed, the relevant information is - read from the SHARED file in the .dist-info directory. - """ - result = {} - shared_path = os.path.join(self.path, 'SHARED') - if os.path.isfile(shared_path): - with codecs.open(shared_path, 'r', encoding='utf-8') as f: - lines = f.read().splitlines() - for line in lines: - key, value = line.split('=', 1) - if key == 'namespace': - result.setdefault(key, []).append(value) - else: - result[key] = value - return result - - def write_shared_locations(self, paths, dry_run=False): - """ - Write shared location information to the SHARED file in .dist-info. - :param paths: A dictionary as described in the documentation for - :meth:`shared_locations`. - :param dry_run: If True, the action is logged but no file is actually - written. - :return: The path of the file written to. - """ - shared_path = os.path.join(self.path, 'SHARED') - logger.info('creating %s', shared_path) - if dry_run: - return None - lines = [] - for key in ('prefix', 'lib', 'headers', 'scripts', 'data'): - path = paths[key] - if os.path.isdir(paths[key]): - lines.append('%s=%s' % (key, path)) - for ns in paths.get('namespace', ()): - lines.append('namespace=%s' % ns) - - with codecs.open(shared_path, 'w', encoding='utf-8') as f: - f.write('\n'.join(lines)) - return shared_path - - def get_distinfo_resource(self, path): - if path not in DIST_FILES: - raise DistlibException('invalid path for a dist-info file: ' - '%r at %r' % (path, self.path)) - finder = resources.finder_for_path(self.path) - if finder is None: - raise DistlibException('Unable to get a finder for %s' % self.path) - return finder.find(path) - - def get_distinfo_file(self, path): - """ - Returns a path located under the ``.dist-info`` directory. Returns a - string representing the path. - - :parameter path: a ``'/'``-separated path relative to the - ``.dist-info`` directory or an absolute path; - If *path* is an absolute path and doesn't start - with the ``.dist-info`` directory path, - a :class:`DistlibException` is raised - :type path: str - :rtype: str - """ - # Check if it is an absolute path # XXX use relpath, add tests - if path.find(os.sep) >= 0: - # it's an absolute path? - distinfo_dirname, path = path.split(os.sep)[-2:] - if distinfo_dirname != self.path.split(os.sep)[-1]: - raise DistlibException( - 'dist-info file %r does not belong to the %r %s ' - 'distribution' % (path, self.name, self.version)) - - # The file must be relative - if path not in DIST_FILES: - raise DistlibException('invalid path for a dist-info file: ' - '%r at %r' % (path, self.path)) - - return os.path.join(self.path, path) - - def list_distinfo_files(self): - """ - Iterates over the ``RECORD`` entries and returns paths for each line if - the path is pointing to a file located in the ``.dist-info`` directory - or one of its subdirectories. - - :returns: iterator of paths - """ - base = os.path.dirname(self.path) - for path, checksum, size in self._get_records(): - # XXX add separator or use real relpath algo - if not os.path.isabs(path): - path = os.path.join(base, path) - if path.startswith(self.path): - yield path - - def __eq__(self, other): - return (isinstance(other, InstalledDistribution) and - self.path == other.path) - - # See http://docs.python.org/reference/datamodel#object.__hash__ - __hash__ = object.__hash__ - - -class EggInfoDistribution(BaseInstalledDistribution): - """Created with the *path* of the ``.egg-info`` directory or file provided - to the constructor. It reads the metadata contained in the file itself, or - if the given path happens to be a directory, the metadata is read from the - file ``PKG-INFO`` under that directory.""" - - requested = True # as we have no way of knowing, assume it was - shared_locations = {} - - def __init__(self, path, env=None): - def set_name_and_version(s, n, v): - s.name = n - s.key = n.lower() # for case-insensitive comparisons - s.version = v - - self.path = path - self.dist_path = env - if env and env._cache_enabled and path in env._cache_egg.path: - metadata = env._cache_egg.path[path].metadata - set_name_and_version(self, metadata.name, metadata.version) - else: - metadata = self._get_metadata(path) - - # Need to be set before caching - set_name_and_version(self, metadata.name, metadata.version) - - if env and env._cache_enabled: - env._cache_egg.add(self) - super(EggInfoDistribution, self).__init__(metadata, path, env) - - def _get_metadata(self, path): - requires = None - - def parse_requires_data(data): - """Create a list of dependencies from a requires.txt file. - - *data*: the contents of a setuptools-produced requires.txt file. - """ - reqs = [] - lines = data.splitlines() - for line in lines: - line = line.strip() - if line.startswith('['): - logger.warning('Unexpected line: quitting requirement scan: %r', - line) - break - r = parse_requirement(line) - if not r: - logger.warning('Not recognised as a requirement: %r', line) - continue - if r.extras: - logger.warning('extra requirements in requires.txt are ' - 'not supported') - if not r.constraints: - reqs.append(r.name) - else: - cons = ', '.join('%s%s' % c for c in r.constraints) - reqs.append('%s (%s)' % (r.name, cons)) - return reqs - - def parse_requires_path(req_path): - """Create a list of dependencies from a requires.txt file. - - *req_path*: the path to a setuptools-produced requires.txt file. - """ - - reqs = [] - try: - with codecs.open(req_path, 'r', 'utf-8') as fp: - reqs = parse_requires_data(fp.read()) - except IOError: - pass - return reqs - - if path.endswith('.egg'): - if os.path.isdir(path): - meta_path = os.path.join(path, 'EGG-INFO', 'PKG-INFO') - metadata = Metadata(path=meta_path, scheme='legacy') - req_path = os.path.join(path, 'EGG-INFO', 'requires.txt') - requires = parse_requires_path(req_path) - else: - # FIXME handle the case where zipfile is not available - zipf = zipimport.zipimporter(path) - fileobj = StringIO( - zipf.get_data('EGG-INFO/PKG-INFO').decode('utf8')) - metadata = Metadata(fileobj=fileobj, scheme='legacy') - try: - data = zipf.get_data('EGG-INFO/requires.txt') - requires = parse_requires_data(data.decode('utf-8')) - except IOError: - requires = None - elif path.endswith('.egg-info'): - if os.path.isdir(path): - req_path = os.path.join(path, 'requires.txt') - requires = parse_requires_path(req_path) - path = os.path.join(path, 'PKG-INFO') - metadata = Metadata(path=path, scheme='legacy') - else: - raise DistlibException('path must end with .egg-info or .egg, ' - 'got %r' % path) - - if requires: - metadata.add_requirements(requires) - return metadata - - def __repr__(self): - return '' % ( - self.name, self.version, self.path) - - def __str__(self): - return "%s %s" % (self.name, self.version) - - def check_installed_files(self): - """ - Checks that the hashes and sizes of the files in ``RECORD`` are - matched by the files themselves. Returns a (possibly empty) list of - mismatches. Each entry in the mismatch list will be a tuple consisting - of the path, 'exists', 'size' or 'hash' according to what didn't match - (existence is checked first, then size, then hash), the expected - value and the actual value. - """ - mismatches = [] - record_path = os.path.join(self.path, 'installed-files.txt') - if os.path.exists(record_path): - for path, _, _ in self.list_installed_files(): - if path == record_path: - continue - if not os.path.exists(path): - mismatches.append((path, 'exists', True, False)) - return mismatches - - def list_installed_files(self): - """ - Iterates over the ``installed-files.txt`` entries and returns a tuple - ``(path, hash, size)`` for each line. - - :returns: a list of (path, hash, size) - """ - - def _md5(path): - f = open(path, 'rb') - try: - content = f.read() - finally: - f.close() - return hashlib.md5(content).hexdigest() - - def _size(path): - return os.stat(path).st_size - - record_path = os.path.join(self.path, 'installed-files.txt') - result = [] - if os.path.exists(record_path): - with codecs.open(record_path, 'r', encoding='utf-8') as f: - for line in f: - line = line.strip() - p = os.path.normpath(os.path.join(self.path, line)) - # "./" is present as a marker between installed files - # and installation metadata files - if not os.path.exists(p): - logger.warning('Non-existent file: %s', p) - if p.endswith(('.pyc', '.pyo')): - continue - #otherwise fall through and fail - if not os.path.isdir(p): - result.append((p, _md5(p), _size(p))) - result.append((record_path, None, None)) - return result - - def list_distinfo_files(self, absolute=False): - """ - Iterates over the ``installed-files.txt`` entries and returns paths for - each line if the path is pointing to a file located in the - ``.egg-info`` directory or one of its subdirectories. - - :parameter absolute: If *absolute* is ``True``, each returned path is - transformed into a local absolute path. Otherwise the - raw value from ``installed-files.txt`` is returned. - :type absolute: boolean - :returns: iterator of paths - """ - record_path = os.path.join(self.path, 'installed-files.txt') - skip = True - with codecs.open(record_path, 'r', encoding='utf-8') as f: - for line in f: - line = line.strip() - if line == './': - skip = False - continue - if not skip: - p = os.path.normpath(os.path.join(self.path, line)) - if p.startswith(self.path): - if absolute: - yield p - else: - yield line - - def __eq__(self, other): - return (isinstance(other, EggInfoDistribution) and - self.path == other.path) - - # See http://docs.python.org/reference/datamodel#object.__hash__ - __hash__ = object.__hash__ - -new_dist_class = InstalledDistribution -old_dist_class = EggInfoDistribution - - -class DependencyGraph(object): - """ - Represents a dependency graph between distributions. - - The dependency relationships are stored in an ``adjacency_list`` that maps - distributions to a list of ``(other, label)`` tuples where ``other`` - is a distribution and the edge is labeled with ``label`` (i.e. the version - specifier, if such was provided). Also, for more efficient traversal, for - every distribution ``x``, a list of predecessors is kept in - ``reverse_list[x]``. An edge from distribution ``a`` to - distribution ``b`` means that ``a`` depends on ``b``. If any missing - dependencies are found, they are stored in ``missing``, which is a - dictionary that maps distributions to a list of requirements that were not - provided by any other distributions. - """ - - def __init__(self): - self.adjacency_list = {} - self.reverse_list = {} - self.missing = {} - - def add_distribution(self, distribution): - """Add the *distribution* to the graph. - - :type distribution: :class:`distutils2.database.InstalledDistribution` - or :class:`distutils2.database.EggInfoDistribution` - """ - self.adjacency_list[distribution] = [] - self.reverse_list[distribution] = [] - #self.missing[distribution] = [] - - def add_edge(self, x, y, label=None): - """Add an edge from distribution *x* to distribution *y* with the given - *label*. - - :type x: :class:`distutils2.database.InstalledDistribution` or - :class:`distutils2.database.EggInfoDistribution` - :type y: :class:`distutils2.database.InstalledDistribution` or - :class:`distutils2.database.EggInfoDistribution` - :type label: ``str`` or ``None`` - """ - self.adjacency_list[x].append((y, label)) - # multiple edges are allowed, so be careful - if x not in self.reverse_list[y]: - self.reverse_list[y].append(x) - - def add_missing(self, distribution, requirement): - """ - Add a missing *requirement* for the given *distribution*. - - :type distribution: :class:`distutils2.database.InstalledDistribution` - or :class:`distutils2.database.EggInfoDistribution` - :type requirement: ``str`` - """ - logger.debug('%s missing %r', distribution, requirement) - self.missing.setdefault(distribution, []).append(requirement) - - def _repr_dist(self, dist): - return '%s %s' % (dist.name, dist.version) - - def repr_node(self, dist, level=1): - """Prints only a subgraph""" - output = [self._repr_dist(dist)] - for other, label in self.adjacency_list[dist]: - dist = self._repr_dist(other) - if label is not None: - dist = '%s [%s]' % (dist, label) - output.append(' ' * level + str(dist)) - suboutput = self.repr_node(other, level + 1) - subs = suboutput.split('\n') - output.extend(subs[1:]) - return '\n'.join(output) - - def to_dot(self, f, skip_disconnected=True): - """Writes a DOT output for the graph to the provided file *f*. - - If *skip_disconnected* is set to ``True``, then all distributions - that are not dependent on any other distribution are skipped. - - :type f: has to support ``file``-like operations - :type skip_disconnected: ``bool`` - """ - disconnected = [] - - f.write("digraph dependencies {\n") - for dist, adjs in self.adjacency_list.items(): - if len(adjs) == 0 and not skip_disconnected: - disconnected.append(dist) - for other, label in adjs: - if not label is None: - f.write('"%s" -> "%s" [label="%s"]\n' % - (dist.name, other.name, label)) - else: - f.write('"%s" -> "%s"\n' % (dist.name, other.name)) - if not skip_disconnected and len(disconnected) > 0: - f.write('subgraph disconnected {\n') - f.write('label = "Disconnected"\n') - f.write('bgcolor = red\n') - - for dist in disconnected: - f.write('"%s"' % dist.name) - f.write('\n') - f.write('}\n') - f.write('}\n') - - def topological_sort(self): - """ - Perform a topological sort of the graph. - :return: A tuple, the first element of which is a topologically sorted - list of distributions, and the second element of which is a - list of distributions that cannot be sorted because they have - circular dependencies and so form a cycle. - """ - result = [] - # Make a shallow copy of the adjacency list - alist = {} - for k, v in self.adjacency_list.items(): - alist[k] = v[:] - while True: - # See what we can remove in this run - to_remove = [] - for k, v in list(alist.items())[:]: - if not v: - to_remove.append(k) - del alist[k] - if not to_remove: - # What's left in alist (if anything) is a cycle. - break - # Remove from the adjacency list of others - for k, v in alist.items(): - alist[k] = [(d, r) for d, r in v if d not in to_remove] - logger.debug('Moving to result: %s', - ['%s (%s)' % (d.name, d.version) for d in to_remove]) - result.extend(to_remove) - return result, list(alist.keys()) - - def __repr__(self): - """Representation of the graph""" - output = [] - for dist, adjs in self.adjacency_list.items(): - output.append(self.repr_node(dist)) - return '\n'.join(output) - - -def make_graph(dists, scheme='default'): - """Makes a dependency graph from the given distributions. - - :parameter dists: a list of distributions - :type dists: list of :class:`distutils2.database.InstalledDistribution` and - :class:`distutils2.database.EggInfoDistribution` instances - :rtype: a :class:`DependencyGraph` instance - """ - scheme = get_scheme(scheme) - graph = DependencyGraph() - provided = {} # maps names to lists of (version, dist) tuples - - # first, build the graph and find out what's provided - for dist in dists: - graph.add_distribution(dist) - - for p in dist.provides: - name, version = parse_name_and_version(p) - logger.debug('Add to provided: %s, %s, %s', name, version, dist) - provided.setdefault(name, []).append((version, dist)) - - # now make the edges - for dist in dists: - requires = (dist.run_requires | dist.meta_requires | - dist.build_requires | dist.dev_requires) - for req in requires: - try: - matcher = scheme.matcher(req) - except UnsupportedVersionError: - # XXX compat-mode if cannot read the version - logger.warning('could not read version %r - using name only', - req) - name = req.split()[0] - matcher = scheme.matcher(name) - - name = matcher.key # case-insensitive - - matched = False - if name in provided: - for version, provider in provided[name]: - try: - match = matcher.match(version) - except UnsupportedVersionError: - match = False - - if match: - graph.add_edge(dist, provider, req) - matched = True - break - if not matched: - graph.add_missing(dist, req) - return graph - - -def get_dependent_dists(dists, dist): - """Recursively generate a list of distributions from *dists* that are - dependent on *dist*. - - :param dists: a list of distributions - :param dist: a distribution, member of *dists* for which we are interested - """ - if dist not in dists: - raise DistlibException('given distribution %r is not a member ' - 'of the list' % dist.name) - graph = make_graph(dists) - - dep = [dist] # dependent distributions - todo = graph.reverse_list[dist] # list of nodes we should inspect - - while todo: - d = todo.pop() - dep.append(d) - for succ in graph.reverse_list[d]: - if succ not in dep: - todo.append(succ) - - dep.pop(0) # remove dist from dep, was there to prevent infinite loops - return dep - - -def get_required_dists(dists, dist): - """Recursively generate a list of distributions from *dists* that are - required by *dist*. - - :param dists: a list of distributions - :param dist: a distribution, member of *dists* for which we are interested - """ - if dist not in dists: - raise DistlibException('given distribution %r is not a member ' - 'of the list' % dist.name) - graph = make_graph(dists) - - req = [] # required distributions - todo = graph.adjacency_list[dist] # list of nodes we should inspect - - while todo: - d = todo.pop()[0] - req.append(d) - for pred in graph.adjacency_list[d]: - if pred not in req: - todo.append(pred) - - return req - - -def make_dist(name, version, **kwargs): - """ - A convenience method for making a dist given just a name and version. - """ - summary = kwargs.pop('summary', 'Placeholder for summary') - md = Metadata(**kwargs) - md.name = name - md.version = version - md.summary = summary or 'Placeholder for summary' - return Distribution(md) diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distlib/index.py b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distlib/index.py deleted file mode 100644 index 6803dd2..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distlib/index.py +++ /dev/null @@ -1,515 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (C) 2013 Vinay Sajip. -# Licensed to the Python Software Foundation under a contributor agreement. -# See LICENSE.txt and CONTRIBUTORS.txt. -# -import hashlib -import logging -import os -import shutil -import subprocess -import tempfile -try: - from threading import Thread -except ImportError: - from dummy_threading import Thread - -from . import DistlibException -from .compat import (HTTPBasicAuthHandler, Request, HTTPPasswordMgr, - urlparse, build_opener, string_types) -from .util import cached_property, zip_dir, ServerProxy - -logger = logging.getLogger(__name__) - -DEFAULT_INDEX = 'https://pypi.python.org/pypi' -DEFAULT_REALM = 'pypi' - -class PackageIndex(object): - """ - This class represents a package index compatible with PyPI, the Python - Package Index. - """ - - boundary = b'----------ThIs_Is_tHe_distlib_index_bouNdaRY_$' - - def __init__(self, url=None): - """ - Initialise an instance. - - :param url: The URL of the index. If not specified, the URL for PyPI is - used. - """ - self.url = url or DEFAULT_INDEX - self.read_configuration() - scheme, netloc, path, params, query, frag = urlparse(self.url) - if params or query or frag or scheme not in ('http', 'https'): - raise DistlibException('invalid repository: %s' % self.url) - self.password_handler = None - self.ssl_verifier = None - self.gpg = None - self.gpg_home = None - self.rpc_proxy = None - with open(os.devnull, 'w') as sink: - # Use gpg by default rather than gpg2, as gpg2 insists on - # prompting for passwords - for s in ('gpg', 'gpg2'): - try: - rc = subprocess.check_call([s, '--version'], stdout=sink, - stderr=sink) - if rc == 0: - self.gpg = s - break - except OSError: - pass - - def _get_pypirc_command(self): - """ - Get the distutils command for interacting with PyPI configurations. - :return: the command. - """ - from distutils.core import Distribution - from distutils.config import PyPIRCCommand - d = Distribution() - return PyPIRCCommand(d) - - def read_configuration(self): - """ - Read the PyPI access configuration as supported by distutils, getting - PyPI to do the actual work. This populates ``username``, ``password``, - ``realm`` and ``url`` attributes from the configuration. - """ - # get distutils to do the work - c = self._get_pypirc_command() - c.repository = self.url - cfg = c._read_pypirc() - self.username = cfg.get('username') - self.password = cfg.get('password') - self.realm = cfg.get('realm', 'pypi') - self.url = cfg.get('repository', self.url) - - def save_configuration(self): - """ - Save the PyPI access configuration. You must have set ``username`` and - ``password`` attributes before calling this method. - - Again, distutils is used to do the actual work. - """ - self.check_credentials() - # get distutils to do the work - c = self._get_pypirc_command() - c._store_pypirc(self.username, self.password) - - def check_credentials(self): - """ - Check that ``username`` and ``password`` have been set, and raise an - exception if not. - """ - if self.username is None or self.password is None: - raise DistlibException('username and password must be set') - pm = HTTPPasswordMgr() - _, netloc, _, _, _, _ = urlparse(self.url) - pm.add_password(self.realm, netloc, self.username, self.password) - self.password_handler = HTTPBasicAuthHandler(pm) - - def register(self, metadata): - """ - Register a distribution on PyPI, using the provided metadata. - - :param metadata: A :class:`Metadata` instance defining at least a name - and version number for the distribution to be - registered. - :return: The HTTP response received from PyPI upon submission of the - request. - """ - self.check_credentials() - metadata.validate() - d = metadata.todict() - d[':action'] = 'verify' - request = self.encode_request(d.items(), []) - response = self.send_request(request) - d[':action'] = 'submit' - request = self.encode_request(d.items(), []) - return self.send_request(request) - - def _reader(self, name, stream, outbuf): - """ - Thread runner for reading lines of from a subprocess into a buffer. - - :param name: The logical name of the stream (used for logging only). - :param stream: The stream to read from. This will typically a pipe - connected to the output stream of a subprocess. - :param outbuf: The list to append the read lines to. - """ - while True: - s = stream.readline() - if not s: - break - s = s.decode('utf-8').rstrip() - outbuf.append(s) - logger.debug('%s: %s' % (name, s)) - stream.close() - - def get_sign_command(self, filename, signer, sign_password, - keystore=None): - """ - Return a suitable command for signing a file. - - :param filename: The pathname to the file to be signed. - :param signer: The identifier of the signer of the file. - :param sign_password: The passphrase for the signer's - private key used for signing. - :param keystore: The path to a directory which contains the keys - used in verification. If not specified, the - instance's ``gpg_home`` attribute is used instead. - :return: The signing command as a list suitable to be - passed to :class:`subprocess.Popen`. - """ - cmd = [self.gpg, '--status-fd', '2', '--no-tty'] - if keystore is None: - keystore = self.gpg_home - if keystore: - cmd.extend(['--homedir', keystore]) - if sign_password is not None: - cmd.extend(['--batch', '--passphrase-fd', '0']) - td = tempfile.mkdtemp() - sf = os.path.join(td, os.path.basename(filename) + '.asc') - cmd.extend(['--detach-sign', '--armor', '--local-user', - signer, '--output', sf, filename]) - logger.debug('invoking: %s', ' '.join(cmd)) - return cmd, sf - - def run_command(self, cmd, input_data=None): - """ - Run a command in a child process , passing it any input data specified. - - :param cmd: The command to run. - :param input_data: If specified, this must be a byte string containing - data to be sent to the child process. - :return: A tuple consisting of the subprocess' exit code, a list of - lines read from the subprocess' ``stdout``, and a list of - lines read from the subprocess' ``stderr``. - """ - kwargs = { - 'stdout': subprocess.PIPE, - 'stderr': subprocess.PIPE, - } - if input_data is not None: - kwargs['stdin'] = subprocess.PIPE - stdout = [] - stderr = [] - p = subprocess.Popen(cmd, **kwargs) - # We don't use communicate() here because we may need to - # get clever with interacting with the command - t1 = Thread(target=self._reader, args=('stdout', p.stdout, stdout)) - t1.start() - t2 = Thread(target=self._reader, args=('stderr', p.stderr, stderr)) - t2.start() - if input_data is not None: - p.stdin.write(input_data) - p.stdin.close() - - p.wait() - t1.join() - t2.join() - return p.returncode, stdout, stderr - - def sign_file(self, filename, signer, sign_password, keystore=None): - """ - Sign a file. - - :param filename: The pathname to the file to be signed. - :param signer: The identifier of the signer of the file. - :param sign_password: The passphrase for the signer's - private key used for signing. - :param keystore: The path to a directory which contains the keys - used in signing. If not specified, the instance's - ``gpg_home`` attribute is used instead. - :return: The absolute pathname of the file where the signature is - stored. - """ - cmd, sig_file = self.get_sign_command(filename, signer, sign_password, - keystore) - rc, stdout, stderr = self.run_command(cmd, - sign_password.encode('utf-8')) - if rc != 0: - raise DistlibException('sign command failed with error ' - 'code %s' % rc) - return sig_file - - def upload_file(self, metadata, filename, signer=None, sign_password=None, - filetype='sdist', pyversion='source', keystore=None): - """ - Upload a release file to the index. - - :param metadata: A :class:`Metadata` instance defining at least a name - and version number for the file to be uploaded. - :param filename: The pathname of the file to be uploaded. - :param signer: The identifier of the signer of the file. - :param sign_password: The passphrase for the signer's - private key used for signing. - :param filetype: The type of the file being uploaded. This is the - distutils command which produced that file, e.g. - ``sdist`` or ``bdist_wheel``. - :param pyversion: The version of Python which the release relates - to. For code compatible with any Python, this would - be ``source``, otherwise it would be e.g. ``3.2``. - :param keystore: The path to a directory which contains the keys - used in signing. If not specified, the instance's - ``gpg_home`` attribute is used instead. - :return: The HTTP response received from PyPI upon submission of the - request. - """ - self.check_credentials() - if not os.path.exists(filename): - raise DistlibException('not found: %s' % filename) - metadata.validate() - d = metadata.todict() - sig_file = None - if signer: - if not self.gpg: - logger.warning('no signing program available - not signed') - else: - sig_file = self.sign_file(filename, signer, sign_password, - keystore) - with open(filename, 'rb') as f: - file_data = f.read() - md5_digest = hashlib.md5(file_data).hexdigest() - sha256_digest = hashlib.sha256(file_data).hexdigest() - d.update({ - ':action': 'file_upload', - 'protocol_version': '1', - 'filetype': filetype, - 'pyversion': pyversion, - 'md5_digest': md5_digest, - 'sha256_digest': sha256_digest, - }) - files = [('content', os.path.basename(filename), file_data)] - if sig_file: - with open(sig_file, 'rb') as f: - sig_data = f.read() - files.append(('gpg_signature', os.path.basename(sig_file), - sig_data)) - shutil.rmtree(os.path.dirname(sig_file)) - request = self.encode_request(d.items(), files) - return self.send_request(request) - - def upload_documentation(self, metadata, doc_dir): - """ - Upload documentation to the index. - - :param metadata: A :class:`Metadata` instance defining at least a name - and version number for the documentation to be - uploaded. - :param doc_dir: The pathname of the directory which contains the - documentation. This should be the directory that - contains the ``index.html`` for the documentation. - :return: The HTTP response received from PyPI upon submission of the - request. - """ - self.check_credentials() - if not os.path.isdir(doc_dir): - raise DistlibException('not a directory: %r' % doc_dir) - fn = os.path.join(doc_dir, 'index.html') - if not os.path.exists(fn): - raise DistlibException('not found: %r' % fn) - metadata.validate() - name, version = metadata.name, metadata.version - zip_data = zip_dir(doc_dir).getvalue() - fields = [(':action', 'doc_upload'), - ('name', name), ('version', version)] - files = [('content', name, zip_data)] - request = self.encode_request(fields, files) - return self.send_request(request) - - def get_verify_command(self, signature_filename, data_filename, - keystore=None): - """ - Return a suitable command for verifying a file. - - :param signature_filename: The pathname to the file containing the - signature. - :param data_filename: The pathname to the file containing the - signed data. - :param keystore: The path to a directory which contains the keys - used in verification. If not specified, the - instance's ``gpg_home`` attribute is used instead. - :return: The verifying command as a list suitable to be - passed to :class:`subprocess.Popen`. - """ - cmd = [self.gpg, '--status-fd', '2', '--no-tty'] - if keystore is None: - keystore = self.gpg_home - if keystore: - cmd.extend(['--homedir', keystore]) - cmd.extend(['--verify', signature_filename, data_filename]) - logger.debug('invoking: %s', ' '.join(cmd)) - return cmd - - def verify_signature(self, signature_filename, data_filename, - keystore=None): - """ - Verify a signature for a file. - - :param signature_filename: The pathname to the file containing the - signature. - :param data_filename: The pathname to the file containing the - signed data. - :param keystore: The path to a directory which contains the keys - used in verification. If not specified, the - instance's ``gpg_home`` attribute is used instead. - :return: True if the signature was verified, else False. - """ - if not self.gpg: - raise DistlibException('verification unavailable because gpg ' - 'unavailable') - cmd = self.get_verify_command(signature_filename, data_filename, - keystore) - rc, stdout, stderr = self.run_command(cmd) - if rc not in (0, 1): - raise DistlibException('verify command failed with error ' - 'code %s' % rc) - return rc == 0 - - def download_file(self, url, destfile, digest=None, reporthook=None): - """ - This is a convenience method for downloading a file from an URL. - Normally, this will be a file from the index, though currently - no check is made for this (i.e. a file can be downloaded from - anywhere). - - The method is just like the :func:`urlretrieve` function in the - standard library, except that it allows digest computation to be - done during download and checking that the downloaded data - matched any expected value. - - :param url: The URL of the file to be downloaded (assumed to be - available via an HTTP GET request). - :param destfile: The pathname where the downloaded file is to be - saved. - :param digest: If specified, this must be a (hasher, value) - tuple, where hasher is the algorithm used (e.g. - ``'md5'``) and ``value`` is the expected value. - :param reporthook: The same as for :func:`urlretrieve` in the - standard library. - """ - if digest is None: - digester = None - logger.debug('No digest specified') - else: - if isinstance(digest, (list, tuple)): - hasher, digest = digest - else: - hasher = 'md5' - digester = getattr(hashlib, hasher)() - logger.debug('Digest specified: %s' % digest) - # The following code is equivalent to urlretrieve. - # We need to do it this way so that we can compute the - # digest of the file as we go. - with open(destfile, 'wb') as dfp: - # addinfourl is not a context manager on 2.x - # so we have to use try/finally - sfp = self.send_request(Request(url)) - try: - headers = sfp.info() - blocksize = 8192 - size = -1 - read = 0 - blocknum = 0 - if "content-length" in headers: - size = int(headers["Content-Length"]) - if reporthook: - reporthook(blocknum, blocksize, size) - while True: - block = sfp.read(blocksize) - if not block: - break - read += len(block) - dfp.write(block) - if digester: - digester.update(block) - blocknum += 1 - if reporthook: - reporthook(blocknum, blocksize, size) - finally: - sfp.close() - - # check that we got the whole file, if we can - if size >= 0 and read < size: - raise DistlibException( - 'retrieval incomplete: got only %d out of %d bytes' - % (read, size)) - # if we have a digest, it must match. - if digester: - actual = digester.hexdigest() - if digest != actual: - raise DistlibException('%s digest mismatch for %s: expected ' - '%s, got %s' % (hasher, destfile, - digest, actual)) - logger.debug('Digest verified: %s', digest) - - def send_request(self, req): - """ - Send a standard library :class:`Request` to PyPI and return its - response. - - :param req: The request to send. - :return: The HTTP response from PyPI (a standard library HTTPResponse). - """ - handlers = [] - if self.password_handler: - handlers.append(self.password_handler) - if self.ssl_verifier: - handlers.append(self.ssl_verifier) - opener = build_opener(*handlers) - return opener.open(req) - - def encode_request(self, fields, files): - """ - Encode fields and files for posting to an HTTP server. - - :param fields: The fields to send as a list of (fieldname, value) - tuples. - :param files: The files to send as a list of (fieldname, filename, - file_bytes) tuple. - """ - # Adapted from packaging, which in turn was adapted from - # http://code.activestate.com/recipes/146306 - - parts = [] - boundary = self.boundary - for k, values in fields: - if not isinstance(values, (list, tuple)): - values = [values] - - for v in values: - parts.extend(( - b'--' + boundary, - ('Content-Disposition: form-data; name="%s"' % - k).encode('utf-8'), - b'', - v.encode('utf-8'))) - for key, filename, value in files: - parts.extend(( - b'--' + boundary, - ('Content-Disposition: form-data; name="%s"; filename="%s"' % - (key, filename)).encode('utf-8'), - b'', - value)) - - parts.extend((b'--' + boundary + b'--', b'')) - - body = b'\r\n'.join(parts) - ct = b'multipart/form-data; boundary=' + boundary - headers = { - 'Content-type': ct, - 'Content-length': str(len(body)) - } - return Request(self.url, body, headers) - - def search(self, terms, operator=None): - if isinstance(terms, string_types): - terms = {'name': terms} - if self.rpc_proxy is None: - self.rpc_proxy = ServerProxy(self.url, timeout=3.0) - return self.rpc_proxy.search(terms, operator or 'and') diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distlib/locators.py b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distlib/locators.py deleted file mode 100644 index 14789ef..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distlib/locators.py +++ /dev/null @@ -1,1283 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (C) 2012-2015 Vinay Sajip. -# Licensed to the Python Software Foundation under a contributor agreement. -# See LICENSE.txt and CONTRIBUTORS.txt. -# - -import gzip -from io import BytesIO -import json -import logging -import os -import posixpath -import re -try: - import threading -except ImportError: # pragma: no cover - import dummy_threading as threading -import zlib - -from . import DistlibException -from .compat import (urljoin, urlparse, urlunparse, url2pathname, pathname2url, - queue, quote, unescape, string_types, build_opener, - HTTPRedirectHandler as BaseRedirectHandler, text_type, - Request, HTTPError, URLError) -from .database import Distribution, DistributionPath, make_dist -from .metadata import Metadata -from .util import (cached_property, parse_credentials, ensure_slash, - split_filename, get_project_data, parse_requirement, - parse_name_and_version, ServerProxy, normalize_name) -from .version import get_scheme, UnsupportedVersionError -from .wheel import Wheel, is_compatible - -logger = logging.getLogger(__name__) - -HASHER_HASH = re.compile('^(\w+)=([a-f0-9]+)') -CHARSET = re.compile(r';\s*charset\s*=\s*(.*)\s*$', re.I) -HTML_CONTENT_TYPE = re.compile('text/html|application/x(ht)?ml') -DEFAULT_INDEX = 'https://pypi.python.org/pypi' - -def get_all_distribution_names(url=None): - """ - Return all distribution names known by an index. - :param url: The URL of the index. - :return: A list of all known distribution names. - """ - if url is None: - url = DEFAULT_INDEX - client = ServerProxy(url, timeout=3.0) - return client.list_packages() - -class RedirectHandler(BaseRedirectHandler): - """ - A class to work around a bug in some Python 3.2.x releases. - """ - # There's a bug in the base version for some 3.2.x - # (e.g. 3.2.2 on Ubuntu Oneiric). If a Location header - # returns e.g. /abc, it bails because it says the scheme '' - # is bogus, when actually it should use the request's - # URL for the scheme. See Python issue #13696. - def http_error_302(self, req, fp, code, msg, headers): - # Some servers (incorrectly) return multiple Location headers - # (so probably same goes for URI). Use first header. - newurl = None - for key in ('location', 'uri'): - if key in headers: - newurl = headers[key] - break - if newurl is None: - return - urlparts = urlparse(newurl) - if urlparts.scheme == '': - newurl = urljoin(req.get_full_url(), newurl) - if hasattr(headers, 'replace_header'): - headers.replace_header(key, newurl) - else: - headers[key] = newurl - return BaseRedirectHandler.http_error_302(self, req, fp, code, msg, - headers) - - http_error_301 = http_error_303 = http_error_307 = http_error_302 - -class Locator(object): - """ - A base class for locators - things that locate distributions. - """ - source_extensions = ('.tar.gz', '.tar.bz2', '.tar', '.zip', '.tgz', '.tbz') - binary_extensions = ('.egg', '.exe', '.whl') - excluded_extensions = ('.pdf',) - - # A list of tags indicating which wheels you want to match. The default - # value of None matches against the tags compatible with the running - # Python. If you want to match other values, set wheel_tags on a locator - # instance to a list of tuples (pyver, abi, arch) which you want to match. - wheel_tags = None - - downloadable_extensions = source_extensions + ('.whl',) - - def __init__(self, scheme='default'): - """ - Initialise an instance. - :param scheme: Because locators look for most recent versions, they - need to know the version scheme to use. This specifies - the current PEP-recommended scheme - use ``'legacy'`` - if you need to support existing distributions on PyPI. - """ - self._cache = {} - self.scheme = scheme - # Because of bugs in some of the handlers on some of the platforms, - # we use our own opener rather than just using urlopen. - self.opener = build_opener(RedirectHandler()) - # If get_project() is called from locate(), the matcher instance - # is set from the requirement passed to locate(). See issue #18 for - # why this can be useful to know. - self.matcher = None - self.errors = queue.Queue() - - def get_errors(self): - """ - Return any errors which have occurred. - """ - result = [] - while not self.errors.empty(): # pragma: no cover - try: - e = self.errors.get(False) - result.append(e) - except self.errors.Empty: - continue - self.errors.task_done() - return result - - def clear_errors(self): - """ - Clear any errors which may have been logged. - """ - # Just get the errors and throw them away - self.get_errors() - - def clear_cache(self): - self._cache.clear() - - def _get_scheme(self): - return self._scheme - - def _set_scheme(self, value): - self._scheme = value - - scheme = property(_get_scheme, _set_scheme) - - def _get_project(self, name): - """ - For a given project, get a dictionary mapping available versions to Distribution - instances. - - This should be implemented in subclasses. - - If called from a locate() request, self.matcher will be set to a - matcher for the requirement to satisfy, otherwise it will be None. - """ - raise NotImplementedError('Please implement in the subclass') - - def get_distribution_names(self): - """ - Return all the distribution names known to this locator. - """ - raise NotImplementedError('Please implement in the subclass') - - def get_project(self, name): - """ - For a given project, get a dictionary mapping available versions to Distribution - instances. - - This calls _get_project to do all the work, and just implements a caching layer on top. - """ - if self._cache is None: - result = self._get_project(name) - elif name in self._cache: - result = self._cache[name] - else: - self.clear_errors() - result = self._get_project(name) - self._cache[name] = result - return result - - def score_url(self, url): - """ - Give an url a score which can be used to choose preferred URLs - for a given project release. - """ - t = urlparse(url) - basename = posixpath.basename(t.path) - compatible = True - is_wheel = basename.endswith('.whl') - if is_wheel: - compatible = is_compatible(Wheel(basename), self.wheel_tags) - return (t.scheme != 'https', 'pypi.python.org' in t.netloc, - is_wheel, compatible, basename) - - def prefer_url(self, url1, url2): - """ - Choose one of two URLs where both are candidates for distribution - archives for the same version of a distribution (for example, - .tar.gz vs. zip). - - The current implementation favours https:// URLs over http://, archives - from PyPI over those from other locations, wheel compatibility (if a - wheel) and then the archive name. - """ - result = url2 - if url1: - s1 = self.score_url(url1) - s2 = self.score_url(url2) - if s1 > s2: - result = url1 - if result != url2: - logger.debug('Not replacing %r with %r', url1, url2) - else: - logger.debug('Replacing %r with %r', url1, url2) - return result - - def split_filename(self, filename, project_name): - """ - Attempt to split a filename in project name, version and Python version. - """ - return split_filename(filename, project_name) - - def convert_url_to_download_info(self, url, project_name): - """ - See if a URL is a candidate for a download URL for a project (the URL - has typically been scraped from an HTML page). - - If it is, a dictionary is returned with keys "name", "version", - "filename" and "url"; otherwise, None is returned. - """ - def same_project(name1, name2): - return normalize_name(name1) == normalize_name(name2) - - result = None - scheme, netloc, path, params, query, frag = urlparse(url) - if frag.lower().startswith('egg='): - logger.debug('%s: version hint in fragment: %r', - project_name, frag) - m = HASHER_HASH.match(frag) - if m: - algo, digest = m.groups() - else: - algo, digest = None, None - origpath = path - if path and path[-1] == '/': - path = path[:-1] - if path.endswith('.whl'): - try: - wheel = Wheel(path) - if is_compatible(wheel, self.wheel_tags): - if project_name is None: - include = True - else: - include = same_project(wheel.name, project_name) - if include: - result = { - 'name': wheel.name, - 'version': wheel.version, - 'filename': wheel.filename, - 'url': urlunparse((scheme, netloc, origpath, - params, query, '')), - 'python-version': ', '.join( - ['.'.join(list(v[2:])) for v in wheel.pyver]), - } - except Exception as e: # pragma: no cover - logger.warning('invalid path for wheel: %s', path) - elif path.endswith(self.downloadable_extensions): - path = filename = posixpath.basename(path) - for ext in self.downloadable_extensions: - if path.endswith(ext): - path = path[:-len(ext)] - t = self.split_filename(path, project_name) - if not t: - logger.debug('No match for project/version: %s', path) - else: - name, version, pyver = t - if not project_name or same_project(project_name, name): - result = { - 'name': name, - 'version': version, - 'filename': filename, - 'url': urlunparse((scheme, netloc, origpath, - params, query, '')), - #'packagetype': 'sdist', - } - if pyver: - result['python-version'] = pyver - break - if result and algo: - result['%s_digest' % algo] = digest - return result - - def _get_digest(self, info): - """ - Get a digest from a dictionary by looking at keys of the form - 'algo_digest'. - - Returns a 2-tuple (algo, digest) if found, else None. Currently - looks only for SHA256, then MD5. - """ - result = None - for algo in ('sha256', 'md5'): - key = '%s_digest' % algo - if key in info: - result = (algo, info[key]) - break - return result - - def _update_version_data(self, result, info): - """ - Update a result dictionary (the final result from _get_project) with a - dictionary for a specific version, which typically holds information - gleaned from a filename or URL for an archive for the distribution. - """ - name = info.pop('name') - version = info.pop('version') - if version in result: - dist = result[version] - md = dist.metadata - else: - dist = make_dist(name, version, scheme=self.scheme) - md = dist.metadata - dist.digest = digest = self._get_digest(info) - url = info['url'] - result['digests'][url] = digest - if md.source_url != info['url']: - md.source_url = self.prefer_url(md.source_url, url) - result['urls'].setdefault(version, set()).add(url) - dist.locator = self - result[version] = dist - - def locate(self, requirement, prereleases=False): - """ - Find the most recent distribution which matches the given - requirement. - - :param requirement: A requirement of the form 'foo (1.0)' or perhaps - 'foo (>= 1.0, < 2.0, != 1.3)' - :param prereleases: If ``True``, allow pre-release versions - to be located. Otherwise, pre-release versions - are not returned. - :return: A :class:`Distribution` instance, or ``None`` if no such - distribution could be located. - """ - result = None - r = parse_requirement(requirement) - if r is None: - raise DistlibException('Not a valid requirement: %r' % requirement) - scheme = get_scheme(self.scheme) - self.matcher = matcher = scheme.matcher(r.requirement) - logger.debug('matcher: %s (%s)', matcher, type(matcher).__name__) - versions = self.get_project(r.name) - if len(versions) > 2: # urls and digests keys are present - # sometimes, versions are invalid - slist = [] - vcls = matcher.version_class - for k in versions: - if k in ('urls', 'digests'): - continue - try: - if not matcher.match(k): - logger.debug('%s did not match %r', matcher, k) - else: - if prereleases or not vcls(k).is_prerelease: - slist.append(k) - else: - logger.debug('skipping pre-release ' - 'version %s of %s', k, matcher.name) - except Exception: # pragma: no cover - logger.warning('error matching %s with %r', matcher, k) - pass # slist.append(k) - if len(slist) > 1: - slist = sorted(slist, key=scheme.key) - if slist: - logger.debug('sorted list: %s', slist) - version = slist[-1] - result = versions[version] - if result: - if r.extras: - result.extras = r.extras - result.download_urls = versions.get('urls', {}).get(version, set()) - d = {} - sd = versions.get('digests', {}) - for url in result.download_urls: - if url in sd: - d[url] = sd[url] - result.digests = d - self.matcher = None - return result - - -class PyPIRPCLocator(Locator): - """ - This locator uses XML-RPC to locate distributions. It therefore - cannot be used with simple mirrors (that only mirror file content). - """ - def __init__(self, url, **kwargs): - """ - Initialise an instance. - - :param url: The URL to use for XML-RPC. - :param kwargs: Passed to the superclass constructor. - """ - super(PyPIRPCLocator, self).__init__(**kwargs) - self.base_url = url - self.client = ServerProxy(url, timeout=3.0) - - def get_distribution_names(self): - """ - Return all the distribution names known to this locator. - """ - return set(self.client.list_packages()) - - def _get_project(self, name): - result = {'urls': {}, 'digests': {}} - versions = self.client.package_releases(name, True) - for v in versions: - urls = self.client.release_urls(name, v) - data = self.client.release_data(name, v) - metadata = Metadata(scheme=self.scheme) - metadata.name = data['name'] - metadata.version = data['version'] - metadata.license = data.get('license') - metadata.keywords = data.get('keywords', []) - metadata.summary = data.get('summary') - dist = Distribution(metadata) - if urls: - info = urls[0] - metadata.source_url = info['url'] - dist.digest = self._get_digest(info) - dist.locator = self - result[v] = dist - for info in urls: - url = info['url'] - digest = self._get_digest(info) - result['urls'].setdefault(v, set()).add(url) - result['digests'][url] = digest - return result - -class PyPIJSONLocator(Locator): - """ - This locator uses PyPI's JSON interface. It's very limited in functionality - and probably not worth using. - """ - def __init__(self, url, **kwargs): - super(PyPIJSONLocator, self).__init__(**kwargs) - self.base_url = ensure_slash(url) - - def get_distribution_names(self): - """ - Return all the distribution names known to this locator. - """ - raise NotImplementedError('Not available from this locator') - - def _get_project(self, name): - result = {'urls': {}, 'digests': {}} - url = urljoin(self.base_url, '%s/json' % quote(name)) - try: - resp = self.opener.open(url) - data = resp.read().decode() # for now - d = json.loads(data) - md = Metadata(scheme=self.scheme) - data = d['info'] - md.name = data['name'] - md.version = data['version'] - md.license = data.get('license') - md.keywords = data.get('keywords', []) - md.summary = data.get('summary') - dist = Distribution(md) - dist.locator = self - urls = d['urls'] - result[md.version] = dist - for info in d['urls']: - url = info['url'] - dist.download_urls.add(url) - dist.digests[url] = self._get_digest(info) - result['urls'].setdefault(md.version, set()).add(url) - result['digests'][url] = self._get_digest(info) - # Now get other releases - for version, infos in d['releases'].items(): - if version == md.version: - continue # already done - omd = Metadata(scheme=self.scheme) - omd.name = md.name - omd.version = version - odist = Distribution(omd) - odist.locator = self - result[version] = odist - for info in infos: - url = info['url'] - odist.download_urls.add(url) - odist.digests[url] = self._get_digest(info) - result['urls'].setdefault(version, set()).add(url) - result['digests'][url] = self._get_digest(info) -# for info in urls: -# md.source_url = info['url'] -# dist.digest = self._get_digest(info) -# dist.locator = self -# for info in urls: -# url = info['url'] -# result['urls'].setdefault(md.version, set()).add(url) -# result['digests'][url] = self._get_digest(info) - except Exception as e: - self.errors.put(text_type(e)) - logger.exception('JSON fetch failed: %s', e) - return result - - -class Page(object): - """ - This class represents a scraped HTML page. - """ - # The following slightly hairy-looking regex just looks for the contents of - # an anchor link, which has an attribute "href" either immediately preceded - # or immediately followed by a "rel" attribute. The attribute values can be - # declared with double quotes, single quotes or no quotes - which leads to - # the length of the expression. - _href = re.compile(""" -(rel\s*=\s*(?:"(?P[^"]*)"|'(?P[^']*)'|(?P[^>\s\n]*))\s+)? -href\s*=\s*(?:"(?P[^"]*)"|'(?P[^']*)'|(?P[^>\s\n]*)) -(\s+rel\s*=\s*(?:"(?P[^"]*)"|'(?P[^']*)'|(?P[^>\s\n]*)))? -""", re.I | re.S | re.X) - _base = re.compile(r"""]+)""", re.I | re.S) - - def __init__(self, data, url): - """ - Initialise an instance with the Unicode page contents and the URL they - came from. - """ - self.data = data - self.base_url = self.url = url - m = self._base.search(self.data) - if m: - self.base_url = m.group(1) - - _clean_re = re.compile(r'[^a-z0-9$&+,/:;=?@.#%_\\|-]', re.I) - - @cached_property - def links(self): - """ - Return the URLs of all the links on a page together with information - about their "rel" attribute, for determining which ones to treat as - downloads and which ones to queue for further scraping. - """ - def clean(url): - "Tidy up an URL." - scheme, netloc, path, params, query, frag = urlparse(url) - return urlunparse((scheme, netloc, quote(path), - params, query, frag)) - - result = set() - for match in self._href.finditer(self.data): - d = match.groupdict('') - rel = (d['rel1'] or d['rel2'] or d['rel3'] or - d['rel4'] or d['rel5'] or d['rel6']) - url = d['url1'] or d['url2'] or d['url3'] - url = urljoin(self.base_url, url) - url = unescape(url) - url = self._clean_re.sub(lambda m: '%%%2x' % ord(m.group(0)), url) - result.add((url, rel)) - # We sort the result, hoping to bring the most recent versions - # to the front - result = sorted(result, key=lambda t: t[0], reverse=True) - return result - - -class SimpleScrapingLocator(Locator): - """ - A locator which scrapes HTML pages to locate downloads for a distribution. - This runs multiple threads to do the I/O; performance is at least as good - as pip's PackageFinder, which works in an analogous fashion. - """ - - # These are used to deal with various Content-Encoding schemes. - decoders = { - 'deflate': zlib.decompress, - 'gzip': lambda b: gzip.GzipFile(fileobj=BytesIO(d)).read(), - 'none': lambda b: b, - } - - def __init__(self, url, timeout=None, num_workers=10, **kwargs): - """ - Initialise an instance. - :param url: The root URL to use for scraping. - :param timeout: The timeout, in seconds, to be applied to requests. - This defaults to ``None`` (no timeout specified). - :param num_workers: The number of worker threads you want to do I/O, - This defaults to 10. - :param kwargs: Passed to the superclass. - """ - super(SimpleScrapingLocator, self).__init__(**kwargs) - self.base_url = ensure_slash(url) - self.timeout = timeout - self._page_cache = {} - self._seen = set() - self._to_fetch = queue.Queue() - self._bad_hosts = set() - self.skip_externals = False - self.num_workers = num_workers - self._lock = threading.RLock() - # See issue #45: we need to be resilient when the locator is used - # in a thread, e.g. with concurrent.futures. We can't use self._lock - # as it is for coordinating our internal threads - the ones created - # in _prepare_threads. - self._gplock = threading.RLock() - - def _prepare_threads(self): - """ - Threads are created only when get_project is called, and terminate - before it returns. They are there primarily to parallelise I/O (i.e. - fetching web pages). - """ - self._threads = [] - for i in range(self.num_workers): - t = threading.Thread(target=self._fetch) - t.setDaemon(True) - t.start() - self._threads.append(t) - - def _wait_threads(self): - """ - Tell all the threads to terminate (by sending a sentinel value) and - wait for them to do so. - """ - # Note that you need two loops, since you can't say which - # thread will get each sentinel - for t in self._threads: - self._to_fetch.put(None) # sentinel - for t in self._threads: - t.join() - self._threads = [] - - def _get_project(self, name): - result = {'urls': {}, 'digests': {}} - with self._gplock: - self.result = result - self.project_name = name - url = urljoin(self.base_url, '%s/' % quote(name)) - self._seen.clear() - self._page_cache.clear() - self._prepare_threads() - try: - logger.debug('Queueing %s', url) - self._to_fetch.put(url) - self._to_fetch.join() - finally: - self._wait_threads() - del self.result - return result - - platform_dependent = re.compile(r'\b(linux-(i\d86|x86_64|arm\w+)|' - r'win(32|-amd64)|macosx-?\d+)\b', re.I) - - def _is_platform_dependent(self, url): - """ - Does an URL refer to a platform-specific download? - """ - return self.platform_dependent.search(url) - - def _process_download(self, url): - """ - See if an URL is a suitable download for a project. - - If it is, register information in the result dictionary (for - _get_project) about the specific version it's for. - - Note that the return value isn't actually used other than as a boolean - value. - """ - if self._is_platform_dependent(url): - info = None - else: - info = self.convert_url_to_download_info(url, self.project_name) - logger.debug('process_download: %s -> %s', url, info) - if info: - with self._lock: # needed because self.result is shared - self._update_version_data(self.result, info) - return info - - def _should_queue(self, link, referrer, rel): - """ - Determine whether a link URL from a referring page and with a - particular "rel" attribute should be queued for scraping. - """ - scheme, netloc, path, _, _, _ = urlparse(link) - if path.endswith(self.source_extensions + self.binary_extensions + - self.excluded_extensions): - result = False - elif self.skip_externals and not link.startswith(self.base_url): - result = False - elif not referrer.startswith(self.base_url): - result = False - elif rel not in ('homepage', 'download'): - result = False - elif scheme not in ('http', 'https', 'ftp'): - result = False - elif self._is_platform_dependent(link): - result = False - else: - host = netloc.split(':', 1)[0] - if host.lower() == 'localhost': - result = False - else: - result = True - logger.debug('should_queue: %s (%s) from %s -> %s', link, rel, - referrer, result) - return result - - def _fetch(self): - """ - Get a URL to fetch from the work queue, get the HTML page, examine its - links for download candidates and candidates for further scraping. - - This is a handy method to run in a thread. - """ - while True: - url = self._to_fetch.get() - try: - if url: - page = self.get_page(url) - if page is None: # e.g. after an error - continue - for link, rel in page.links: - if link not in self._seen: - self._seen.add(link) - if (not self._process_download(link) and - self._should_queue(link, url, rel)): - logger.debug('Queueing %s from %s', link, url) - self._to_fetch.put(link) - except Exception as e: # pragma: no cover - self.errors.put(text_type(e)) - finally: - # always do this, to avoid hangs :-) - self._to_fetch.task_done() - if not url: - #logger.debug('Sentinel seen, quitting.') - break - - def get_page(self, url): - """ - Get the HTML for an URL, possibly from an in-memory cache. - - XXX TODO Note: this cache is never actually cleared. It's assumed that - the data won't get stale over the lifetime of a locator instance (not - necessarily true for the default_locator). - """ - # http://peak.telecommunity.com/DevCenter/EasyInstall#package-index-api - scheme, netloc, path, _, _, _ = urlparse(url) - if scheme == 'file' and os.path.isdir(url2pathname(path)): - url = urljoin(ensure_slash(url), 'index.html') - - if url in self._page_cache: - result = self._page_cache[url] - logger.debug('Returning %s from cache: %s', url, result) - else: - host = netloc.split(':', 1)[0] - result = None - if host in self._bad_hosts: - logger.debug('Skipping %s due to bad host %s', url, host) - else: - req = Request(url, headers={'Accept-encoding': 'identity'}) - try: - logger.debug('Fetching %s', url) - resp = self.opener.open(req, timeout=self.timeout) - logger.debug('Fetched %s', url) - headers = resp.info() - content_type = headers.get('Content-Type', '') - if HTML_CONTENT_TYPE.match(content_type): - final_url = resp.geturl() - data = resp.read() - encoding = headers.get('Content-Encoding') - if encoding: - decoder = self.decoders[encoding] # fail if not found - data = decoder(data) - encoding = 'utf-8' - m = CHARSET.search(content_type) - if m: - encoding = m.group(1) - try: - data = data.decode(encoding) - except UnicodeError: # pragma: no cover - data = data.decode('latin-1') # fallback - result = Page(data, final_url) - self._page_cache[final_url] = result - except HTTPError as e: - if e.code != 404: - logger.exception('Fetch failed: %s: %s', url, e) - except URLError as e: # pragma: no cover - logger.exception('Fetch failed: %s: %s', url, e) - with self._lock: - self._bad_hosts.add(host) - except Exception as e: # pragma: no cover - logger.exception('Fetch failed: %s: %s', url, e) - finally: - self._page_cache[url] = result # even if None (failure) - return result - - _distname_re = re.compile(']*>([^<]+)<') - - def get_distribution_names(self): - """ - Return all the distribution names known to this locator. - """ - result = set() - page = self.get_page(self.base_url) - if not page: - raise DistlibException('Unable to get %s' % self.base_url) - for match in self._distname_re.finditer(page.data): - result.add(match.group(1)) - return result - -class DirectoryLocator(Locator): - """ - This class locates distributions in a directory tree. - """ - - def __init__(self, path, **kwargs): - """ - Initialise an instance. - :param path: The root of the directory tree to search. - :param kwargs: Passed to the superclass constructor, - except for: - * recursive - if True (the default), subdirectories are - recursed into. If False, only the top-level directory - is searched, - """ - self.recursive = kwargs.pop('recursive', True) - super(DirectoryLocator, self).__init__(**kwargs) - path = os.path.abspath(path) - if not os.path.isdir(path): # pragma: no cover - raise DistlibException('Not a directory: %r' % path) - self.base_dir = path - - def should_include(self, filename, parent): - """ - Should a filename be considered as a candidate for a distribution - archive? As well as the filename, the directory which contains it - is provided, though not used by the current implementation. - """ - return filename.endswith(self.downloadable_extensions) - - def _get_project(self, name): - result = {'urls': {}, 'digests': {}} - for root, dirs, files in os.walk(self.base_dir): - for fn in files: - if self.should_include(fn, root): - fn = os.path.join(root, fn) - url = urlunparse(('file', '', - pathname2url(os.path.abspath(fn)), - '', '', '')) - info = self.convert_url_to_download_info(url, name) - if info: - self._update_version_data(result, info) - if not self.recursive: - break - return result - - def get_distribution_names(self): - """ - Return all the distribution names known to this locator. - """ - result = set() - for root, dirs, files in os.walk(self.base_dir): - for fn in files: - if self.should_include(fn, root): - fn = os.path.join(root, fn) - url = urlunparse(('file', '', - pathname2url(os.path.abspath(fn)), - '', '', '')) - info = self.convert_url_to_download_info(url, None) - if info: - result.add(info['name']) - if not self.recursive: - break - return result - -class JSONLocator(Locator): - """ - This locator uses special extended metadata (not available on PyPI) and is - the basis of performant dependency resolution in distlib. Other locators - require archive downloads before dependencies can be determined! As you - might imagine, that can be slow. - """ - def get_distribution_names(self): - """ - Return all the distribution names known to this locator. - """ - raise NotImplementedError('Not available from this locator') - - def _get_project(self, name): - result = {'urls': {}, 'digests': {}} - data = get_project_data(name) - if data: - for info in data.get('files', []): - if info['ptype'] != 'sdist' or info['pyversion'] != 'source': - continue - # We don't store summary in project metadata as it makes - # the data bigger for no benefit during dependency - # resolution - dist = make_dist(data['name'], info['version'], - summary=data.get('summary', - 'Placeholder for summary'), - scheme=self.scheme) - md = dist.metadata - md.source_url = info['url'] - # TODO SHA256 digest - if 'digest' in info and info['digest']: - dist.digest = ('md5', info['digest']) - md.dependencies = info.get('requirements', {}) - dist.exports = info.get('exports', {}) - result[dist.version] = dist - result['urls'].setdefault(dist.version, set()).add(info['url']) - return result - -class DistPathLocator(Locator): - """ - This locator finds installed distributions in a path. It can be useful for - adding to an :class:`AggregatingLocator`. - """ - def __init__(self, distpath, **kwargs): - """ - Initialise an instance. - - :param distpath: A :class:`DistributionPath` instance to search. - """ - super(DistPathLocator, self).__init__(**kwargs) - assert isinstance(distpath, DistributionPath) - self.distpath = distpath - - def _get_project(self, name): - dist = self.distpath.get_distribution(name) - if dist is None: - result = {'urls': {}, 'digests': {}} - else: - result = { - dist.version: dist, - 'urls': {dist.version: set([dist.source_url])}, - 'digests': {dist.version: set([None])} - } - return result - - -class AggregatingLocator(Locator): - """ - This class allows you to chain and/or merge a list of locators. - """ - def __init__(self, *locators, **kwargs): - """ - Initialise an instance. - - :param locators: The list of locators to search. - :param kwargs: Passed to the superclass constructor, - except for: - * merge - if False (the default), the first successful - search from any of the locators is returned. If True, - the results from all locators are merged (this can be - slow). - """ - self.merge = kwargs.pop('merge', False) - self.locators = locators - super(AggregatingLocator, self).__init__(**kwargs) - - def clear_cache(self): - super(AggregatingLocator, self).clear_cache() - for locator in self.locators: - locator.clear_cache() - - def _set_scheme(self, value): - self._scheme = value - for locator in self.locators: - locator.scheme = value - - scheme = property(Locator.scheme.fget, _set_scheme) - - def _get_project(self, name): - result = {} - for locator in self.locators: - d = locator.get_project(name) - if d: - if self.merge: - files = result.get('urls', {}) - digests = result.get('digests', {}) - # next line could overwrite result['urls'], result['digests'] - result.update(d) - df = result.get('urls') - if files and df: - for k, v in files.items(): - if k in df: - df[k] |= v - else: - df[k] = v - dd = result.get('digests') - if digests and dd: - dd.update(digests) - else: - # See issue #18. If any dists are found and we're looking - # for specific constraints, we only return something if - # a match is found. For example, if a DirectoryLocator - # returns just foo (1.0) while we're looking for - # foo (>= 2.0), we'll pretend there was nothing there so - # that subsequent locators can be queried. Otherwise we - # would just return foo (1.0) which would then lead to a - # failure to find foo (>= 2.0), because other locators - # weren't searched. Note that this only matters when - # merge=False. - if self.matcher is None: - found = True - else: - found = False - for k in d: - if self.matcher.match(k): - found = True - break - if found: - result = d - break - return result - - def get_distribution_names(self): - """ - Return all the distribution names known to this locator. - """ - result = set() - for locator in self.locators: - try: - result |= locator.get_distribution_names() - except NotImplementedError: - pass - return result - - -# We use a legacy scheme simply because most of the dists on PyPI use legacy -# versions which don't conform to PEP 426 / PEP 440. -default_locator = AggregatingLocator( - JSONLocator(), - SimpleScrapingLocator('https://pypi.python.org/simple/', - timeout=3.0), - scheme='legacy') - -locate = default_locator.locate - -NAME_VERSION_RE = re.compile(r'(?P[\w-]+)\s*' - r'\(\s*(==\s*)?(?P[^)]+)\)$') - -class DependencyFinder(object): - """ - Locate dependencies for distributions. - """ - - def __init__(self, locator=None): - """ - Initialise an instance, using the specified locator - to locate distributions. - """ - self.locator = locator or default_locator - self.scheme = get_scheme(self.locator.scheme) - - def add_distribution(self, dist): - """ - Add a distribution to the finder. This will update internal information - about who provides what. - :param dist: The distribution to add. - """ - logger.debug('adding distribution %s', dist) - name = dist.key - self.dists_by_name[name] = dist - self.dists[(name, dist.version)] = dist - for p in dist.provides: - name, version = parse_name_and_version(p) - logger.debug('Add to provided: %s, %s, %s', name, version, dist) - self.provided.setdefault(name, set()).add((version, dist)) - - def remove_distribution(self, dist): - """ - Remove a distribution from the finder. This will update internal - information about who provides what. - :param dist: The distribution to remove. - """ - logger.debug('removing distribution %s', dist) - name = dist.key - del self.dists_by_name[name] - del self.dists[(name, dist.version)] - for p in dist.provides: - name, version = parse_name_and_version(p) - logger.debug('Remove from provided: %s, %s, %s', name, version, dist) - s = self.provided[name] - s.remove((version, dist)) - if not s: - del self.provided[name] - - def get_matcher(self, reqt): - """ - Get a version matcher for a requirement. - :param reqt: The requirement - :type reqt: str - :return: A version matcher (an instance of - :class:`distlib.version.Matcher`). - """ - try: - matcher = self.scheme.matcher(reqt) - except UnsupportedVersionError: # pragma: no cover - # XXX compat-mode if cannot read the version - name = reqt.split()[0] - matcher = self.scheme.matcher(name) - return matcher - - def find_providers(self, reqt): - """ - Find the distributions which can fulfill a requirement. - - :param reqt: The requirement. - :type reqt: str - :return: A set of distribution which can fulfill the requirement. - """ - matcher = self.get_matcher(reqt) - name = matcher.key # case-insensitive - result = set() - provided = self.provided - if name in provided: - for version, provider in provided[name]: - try: - match = matcher.match(version) - except UnsupportedVersionError: - match = False - - if match: - result.add(provider) - break - return result - - def try_to_replace(self, provider, other, problems): - """ - Attempt to replace one provider with another. This is typically used - when resolving dependencies from multiple sources, e.g. A requires - (B >= 1.0) while C requires (B >= 1.1). - - For successful replacement, ``provider`` must meet all the requirements - which ``other`` fulfills. - - :param provider: The provider we are trying to replace with. - :param other: The provider we're trying to replace. - :param problems: If False is returned, this will contain what - problems prevented replacement. This is currently - a tuple of the literal string 'cantreplace', - ``provider``, ``other`` and the set of requirements - that ``provider`` couldn't fulfill. - :return: True if we can replace ``other`` with ``provider``, else - False. - """ - rlist = self.reqts[other] - unmatched = set() - for s in rlist: - matcher = self.get_matcher(s) - if not matcher.match(provider.version): - unmatched.add(s) - if unmatched: - # can't replace other with provider - problems.add(('cantreplace', provider, other, - frozenset(unmatched))) - result = False - else: - # can replace other with provider - self.remove_distribution(other) - del self.reqts[other] - for s in rlist: - self.reqts.setdefault(provider, set()).add(s) - self.add_distribution(provider) - result = True - return result - - def find(self, requirement, meta_extras=None, prereleases=False): - """ - Find a distribution and all distributions it depends on. - - :param requirement: The requirement specifying the distribution to - find, or a Distribution instance. - :param meta_extras: A list of meta extras such as :test:, :build: and - so on. - :param prereleases: If ``True``, allow pre-release versions to be - returned - otherwise, don't return prereleases - unless they're all that's available. - - Return a set of :class:`Distribution` instances and a set of - problems. - - The distributions returned should be such that they have the - :attr:`required` attribute set to ``True`` if they were - from the ``requirement`` passed to ``find()``, and they have the - :attr:`build_time_dependency` attribute set to ``True`` unless they - are post-installation dependencies of the ``requirement``. - - The problems should be a tuple consisting of the string - ``'unsatisfied'`` and the requirement which couldn't be satisfied - by any distribution known to the locator. - """ - - self.provided = {} - self.dists = {} - self.dists_by_name = {} - self.reqts = {} - - meta_extras = set(meta_extras or []) - if ':*:' in meta_extras: - meta_extras.remove(':*:') - # :meta: and :run: are implicitly included - meta_extras |= set([':test:', ':build:', ':dev:']) - - if isinstance(requirement, Distribution): - dist = odist = requirement - logger.debug('passed %s as requirement', odist) - else: - dist = odist = self.locator.locate(requirement, - prereleases=prereleases) - if dist is None: - raise DistlibException('Unable to locate %r' % requirement) - logger.debug('located %s', odist) - dist.requested = True - problems = set() - todo = set([dist]) - install_dists = set([odist]) - while todo: - dist = todo.pop() - name = dist.key # case-insensitive - if name not in self.dists_by_name: - self.add_distribution(dist) - else: - #import pdb; pdb.set_trace() - other = self.dists_by_name[name] - if other != dist: - self.try_to_replace(dist, other, problems) - - ireqts = dist.run_requires | dist.meta_requires - sreqts = dist.build_requires - ereqts = set() - if dist in install_dists: - for key in ('test', 'build', 'dev'): - e = ':%s:' % key - if e in meta_extras: - ereqts |= getattr(dist, '%s_requires' % key) - all_reqts = ireqts | sreqts | ereqts - for r in all_reqts: - providers = self.find_providers(r) - if not providers: - logger.debug('No providers found for %r', r) - provider = self.locator.locate(r, prereleases=prereleases) - # If no provider is found and we didn't consider - # prereleases, consider them now. - if provider is None and not prereleases: - provider = self.locator.locate(r, prereleases=True) - if provider is None: - logger.debug('Cannot satisfy %r', r) - problems.add(('unsatisfied', r)) - else: - n, v = provider.key, provider.version - if (n, v) not in self.dists: - todo.add(provider) - providers.add(provider) - if r in ireqts and dist in install_dists: - install_dists.add(provider) - logger.debug('Adding %s to install_dists', - provider.name_and_version) - for p in providers: - name = p.key - if name not in self.dists_by_name: - self.reqts.setdefault(p, set()).add(r) - else: - other = self.dists_by_name[name] - if other != p: - # see if other can be replaced by p - self.try_to_replace(p, other, problems) - - dists = set(self.dists.values()) - for dist in dists: - dist.build_time_dependency = dist not in install_dists - if dist.build_time_dependency: - logger.debug('%s is a build-time dependency only.', - dist.name_and_version) - logger.debug('find done for %s', odist) - return dists, problems diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distlib/manifest.py b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distlib/manifest.py deleted file mode 100644 index 9f03364..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distlib/manifest.py +++ /dev/null @@ -1,393 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (C) 2012-2013 Python Software Foundation. -# See LICENSE.txt and CONTRIBUTORS.txt. -# -""" -Class representing the list of files in a distribution. - -Equivalent to distutils.filelist, but fixes some problems. -""" -import fnmatch -import logging -import os -import re -import sys - -from . import DistlibException -from .compat import fsdecode -from .util import convert_path - - -__all__ = ['Manifest'] - -logger = logging.getLogger(__name__) - -# a \ followed by some spaces + EOL -_COLLAPSE_PATTERN = re.compile('\\\w*\n', re.M) -_COMMENTED_LINE = re.compile('#.*?(?=\n)|\n(?=$)', re.M | re.S) - -# -# Due to the different results returned by fnmatch.translate, we need -# to do slightly different processing for Python 2.7 and 3.2 ... this needed -# to be brought in for Python 3.6 onwards. -# -_PYTHON_VERSION = sys.version_info[:2] - -class Manifest(object): - """A list of files built by on exploring the filesystem and filtered by - applying various patterns to what we find there. - """ - - def __init__(self, base=None): - """ - Initialise an instance. - - :param base: The base directory to explore under. - """ - self.base = os.path.abspath(os.path.normpath(base or os.getcwd())) - self.prefix = self.base + os.sep - self.allfiles = None - self.files = set() - - # - # Public API - # - - def findall(self): - """Find all files under the base and set ``allfiles`` to the absolute - pathnames of files found. - """ - from stat import S_ISREG, S_ISDIR, S_ISLNK - - self.allfiles = allfiles = [] - root = self.base - stack = [root] - pop = stack.pop - push = stack.append - - while stack: - root = pop() - names = os.listdir(root) - - for name in names: - fullname = os.path.join(root, name) - - # Avoid excess stat calls -- just one will do, thank you! - stat = os.stat(fullname) - mode = stat.st_mode - if S_ISREG(mode): - allfiles.append(fsdecode(fullname)) - elif S_ISDIR(mode) and not S_ISLNK(mode): - push(fullname) - - def add(self, item): - """ - Add a file to the manifest. - - :param item: The pathname to add. This can be relative to the base. - """ - if not item.startswith(self.prefix): - item = os.path.join(self.base, item) - self.files.add(os.path.normpath(item)) - - def add_many(self, items): - """ - Add a list of files to the manifest. - - :param items: The pathnames to add. These can be relative to the base. - """ - for item in items: - self.add(item) - - def sorted(self, wantdirs=False): - """ - Return sorted files in directory order - """ - - def add_dir(dirs, d): - dirs.add(d) - logger.debug('add_dir added %s', d) - if d != self.base: - parent, _ = os.path.split(d) - assert parent not in ('', '/') - add_dir(dirs, parent) - - result = set(self.files) # make a copy! - if wantdirs: - dirs = set() - for f in result: - add_dir(dirs, os.path.dirname(f)) - result |= dirs - return [os.path.join(*path_tuple) for path_tuple in - sorted(os.path.split(path) for path in result)] - - def clear(self): - """Clear all collected files.""" - self.files = set() - self.allfiles = [] - - def process_directive(self, directive): - """ - Process a directive which either adds some files from ``allfiles`` to - ``files``, or removes some files from ``files``. - - :param directive: The directive to process. This should be in a format - compatible with distutils ``MANIFEST.in`` files: - - http://docs.python.org/distutils/sourcedist.html#commands - """ - # Parse the line: split it up, make sure the right number of words - # is there, and return the relevant words. 'action' is always - # defined: it's the first word of the line. Which of the other - # three are defined depends on the action; it'll be either - # patterns, (dir and patterns), or (dirpattern). - action, patterns, thedir, dirpattern = self._parse_directive(directive) - - # OK, now we know that the action is valid and we have the - # right number of words on the line for that action -- so we - # can proceed with minimal error-checking. - if action == 'include': - for pattern in patterns: - if not self._include_pattern(pattern, anchor=True): - logger.warning('no files found matching %r', pattern) - - elif action == 'exclude': - for pattern in patterns: - found = self._exclude_pattern(pattern, anchor=True) - #if not found: - # logger.warning('no previously-included files ' - # 'found matching %r', pattern) - - elif action == 'global-include': - for pattern in patterns: - if not self._include_pattern(pattern, anchor=False): - logger.warning('no files found matching %r ' - 'anywhere in distribution', pattern) - - elif action == 'global-exclude': - for pattern in patterns: - found = self._exclude_pattern(pattern, anchor=False) - #if not found: - # logger.warning('no previously-included files ' - # 'matching %r found anywhere in ' - # 'distribution', pattern) - - elif action == 'recursive-include': - for pattern in patterns: - if not self._include_pattern(pattern, prefix=thedir): - logger.warning('no files found matching %r ' - 'under directory %r', pattern, thedir) - - elif action == 'recursive-exclude': - for pattern in patterns: - found = self._exclude_pattern(pattern, prefix=thedir) - #if not found: - # logger.warning('no previously-included files ' - # 'matching %r found under directory %r', - # pattern, thedir) - - elif action == 'graft': - if not self._include_pattern(None, prefix=dirpattern): - logger.warning('no directories found matching %r', - dirpattern) - - elif action == 'prune': - if not self._exclude_pattern(None, prefix=dirpattern): - logger.warning('no previously-included directories found ' - 'matching %r', dirpattern) - else: # pragma: no cover - # This should never happen, as it should be caught in - # _parse_template_line - raise DistlibException( - 'invalid action %r' % action) - - # - # Private API - # - - def _parse_directive(self, directive): - """ - Validate a directive. - :param directive: The directive to validate. - :return: A tuple of action, patterns, thedir, dir_patterns - """ - words = directive.split() - if len(words) == 1 and words[0] not in ('include', 'exclude', - 'global-include', - 'global-exclude', - 'recursive-include', - 'recursive-exclude', - 'graft', 'prune'): - # no action given, let's use the default 'include' - words.insert(0, 'include') - - action = words[0] - patterns = thedir = dir_pattern = None - - if action in ('include', 'exclude', - 'global-include', 'global-exclude'): - if len(words) < 2: - raise DistlibException( - '%r expects ...' % action) - - patterns = [convert_path(word) for word in words[1:]] - - elif action in ('recursive-include', 'recursive-exclude'): - if len(words) < 3: - raise DistlibException( - '%r expects ...' % action) - - thedir = convert_path(words[1]) - patterns = [convert_path(word) for word in words[2:]] - - elif action in ('graft', 'prune'): - if len(words) != 2: - raise DistlibException( - '%r expects a single ' % action) - - dir_pattern = convert_path(words[1]) - - else: - raise DistlibException('unknown action %r' % action) - - return action, patterns, thedir, dir_pattern - - def _include_pattern(self, pattern, anchor=True, prefix=None, - is_regex=False): - """Select strings (presumably filenames) from 'self.files' that - match 'pattern', a Unix-style wildcard (glob) pattern. - - Patterns are not quite the same as implemented by the 'fnmatch' - module: '*' and '?' match non-special characters, where "special" - is platform-dependent: slash on Unix; colon, slash, and backslash on - DOS/Windows; and colon on Mac OS. - - If 'anchor' is true (the default), then the pattern match is more - stringent: "*.py" will match "foo.py" but not "foo/bar.py". If - 'anchor' is false, both of these will match. - - If 'prefix' is supplied, then only filenames starting with 'prefix' - (itself a pattern) and ending with 'pattern', with anything in between - them, will match. 'anchor' is ignored in this case. - - If 'is_regex' is true, 'anchor' and 'prefix' are ignored, and - 'pattern' is assumed to be either a string containing a regex or a - regex object -- no translation is done, the regex is just compiled - and used as-is. - - Selected strings will be added to self.files. - - Return True if files are found. - """ - # XXX docstring lying about what the special chars are? - found = False - pattern_re = self._translate_pattern(pattern, anchor, prefix, is_regex) - - # delayed loading of allfiles list - if self.allfiles is None: - self.findall() - - for name in self.allfiles: - if pattern_re.search(name): - self.files.add(name) - found = True - return found - - def _exclude_pattern(self, pattern, anchor=True, prefix=None, - is_regex=False): - """Remove strings (presumably filenames) from 'files' that match - 'pattern'. - - Other parameters are the same as for 'include_pattern()', above. - The list 'self.files' is modified in place. Return True if files are - found. - - This API is public to allow e.g. exclusion of SCM subdirs, e.g. when - packaging source distributions - """ - found = False - pattern_re = self._translate_pattern(pattern, anchor, prefix, is_regex) - for f in list(self.files): - if pattern_re.search(f): - self.files.remove(f) - found = True - return found - - def _translate_pattern(self, pattern, anchor=True, prefix=None, - is_regex=False): - """Translate a shell-like wildcard pattern to a compiled regular - expression. - - Return the compiled regex. If 'is_regex' true, - then 'pattern' is directly compiled to a regex (if it's a string) - or just returned as-is (assumes it's a regex object). - """ - if is_regex: - if isinstance(pattern, str): - return re.compile(pattern) - else: - return pattern - - if _PYTHON_VERSION > (3, 2): - # ditch start and end characters - start, _, end = self._glob_to_re('_').partition('_') - - if pattern: - pattern_re = self._glob_to_re(pattern) - if _PYTHON_VERSION > (3, 2): - assert pattern_re.startswith(start) and pattern_re.endswith(end) - else: - pattern_re = '' - - base = re.escape(os.path.join(self.base, '')) - if prefix is not None: - # ditch end of pattern character - if _PYTHON_VERSION <= (3, 2): - empty_pattern = self._glob_to_re('') - prefix_re = self._glob_to_re(prefix)[:-len(empty_pattern)] - else: - prefix_re = self._glob_to_re(prefix) - assert prefix_re.startswith(start) and prefix_re.endswith(end) - prefix_re = prefix_re[len(start): len(prefix_re) - len(end)] - sep = os.sep - if os.sep == '\\': - sep = r'\\' - if _PYTHON_VERSION <= (3, 2): - pattern_re = '^' + base + sep.join((prefix_re, - '.*' + pattern_re)) - else: - pattern_re = pattern_re[len(start): len(pattern_re) - len(end)] - pattern_re = r'%s%s%s%s.*%s%s' % (start, base, prefix_re, sep, - pattern_re, end) - else: # no prefix -- respect anchor flag - if anchor: - if _PYTHON_VERSION <= (3, 2): - pattern_re = '^' + base + pattern_re - else: - pattern_re = r'%s%s%s' % (start, base, pattern_re[len(start):]) - - return re.compile(pattern_re) - - def _glob_to_re(self, pattern): - """Translate a shell-like glob pattern to a regular expression. - - Return a string containing the regex. Differs from - 'fnmatch.translate()' in that '*' does not match "special characters" - (which are platform-specific). - """ - pattern_re = fnmatch.translate(pattern) - - # '?' and '*' in the glob pattern become '.' and '.*' in the RE, which - # IMHO is wrong -- '?' and '*' aren't supposed to match slash in Unix, - # and by extension they shouldn't match such "special characters" under - # any OS. So change all non-escaped dots in the RE to match any - # character except the special characters (currently: just os.sep). - sep = os.sep - if os.sep == '\\': - # we're using a regex to manipulate a regex, so we need - # to escape the backslash twice - sep = r'\\\\' - escaped = r'\1[^%s]' % sep - pattern_re = re.sub(r'((? y, - 'gte': lambda x, y: x >= y, - 'in': lambda x, y: x in y, - 'lt': lambda x, y: x < y, - 'lte': lambda x, y: x <= y, - 'not': lambda x: not x, - 'noteq': lambda x, y: x != y, - 'notin': lambda x, y: x not in y, - } - - allowed_values = { - 'sys_platform': sys.platform, - 'python_version': '%s.%s' % sys.version_info[:2], - # parsing sys.platform is not reliable, but there is no other - # way to get e.g. 2.7.2+, and the PEP is defined with sys.version - 'python_full_version': sys.version.split(' ', 1)[0], - 'os_name': os.name, - 'platform_in_venv': str(in_venv()), - 'platform_release': platform.release(), - 'platform_version': platform.version(), - 'platform_machine': platform.machine(), - 'platform_python_implementation': python_implementation(), - } - - def __init__(self, context=None): - """ - Initialise an instance. - - :param context: If specified, names are looked up in this mapping. - """ - self.context = context or {} - self.source = None - - def get_fragment(self, offset): - """ - Get the part of the source which is causing a problem. - """ - fragment_len = 10 - s = '%r' % (self.source[offset:offset + fragment_len]) - if offset + fragment_len < len(self.source): - s += '...' - return s - - def get_handler(self, node_type): - """ - Get a handler for the specified AST node type. - """ - return getattr(self, 'do_%s' % node_type, None) - - def evaluate(self, node, filename=None): - """ - Evaluate a source string or node, using ``filename`` when - displaying errors. - """ - if isinstance(node, string_types): - self.source = node - kwargs = {'mode': 'eval'} - if filename: - kwargs['filename'] = filename - try: - node = ast.parse(node, **kwargs) - except SyntaxError as e: - s = self.get_fragment(e.offset) - raise SyntaxError('syntax error %s' % s) - node_type = node.__class__.__name__.lower() - handler = self.get_handler(node_type) - if handler is None: - if self.source is None: - s = '(source not available)' - else: - s = self.get_fragment(node.col_offset) - raise SyntaxError("don't know how to evaluate %r %s" % ( - node_type, s)) - return handler(node) - - def get_attr_key(self, node): - assert isinstance(node, ast.Attribute), 'attribute node expected' - return '%s.%s' % (node.value.id, node.attr) - - def do_attribute(self, node): - if not isinstance(node.value, ast.Name): - valid = False - else: - key = self.get_attr_key(node) - valid = key in self.context or key in self.allowed_values - if not valid: - raise SyntaxError('invalid expression: %s' % key) - if key in self.context: - result = self.context[key] - else: - result = self.allowed_values[key] - return result - - def do_boolop(self, node): - result = self.evaluate(node.values[0]) - is_or = node.op.__class__ is ast.Or - is_and = node.op.__class__ is ast.And - assert is_or or is_and - if (is_and and result) or (is_or and not result): - for n in node.values[1:]: - result = self.evaluate(n) - if (is_or and result) or (is_and and not result): - break - return result - - def do_compare(self, node): - def sanity_check(lhsnode, rhsnode): - valid = True - if isinstance(lhsnode, ast.Str) and isinstance(rhsnode, ast.Str): - valid = False - #elif (isinstance(lhsnode, ast.Attribute) - # and isinstance(rhsnode, ast.Attribute)): - # klhs = self.get_attr_key(lhsnode) - # krhs = self.get_attr_key(rhsnode) - # valid = klhs != krhs - if not valid: - s = self.get_fragment(node.col_offset) - raise SyntaxError('Invalid comparison: %s' % s) - - lhsnode = node.left - lhs = self.evaluate(lhsnode) - result = True - for op, rhsnode in zip(node.ops, node.comparators): - sanity_check(lhsnode, rhsnode) - op = op.__class__.__name__.lower() - if op not in self.operators: - raise SyntaxError('unsupported operation: %r' % op) - rhs = self.evaluate(rhsnode) - result = self.operators[op](lhs, rhs) - if not result: - break - lhs = rhs - lhsnode = rhsnode - return result - - def do_expression(self, node): - return self.evaluate(node.body) - - def do_name(self, node): - valid = False - if node.id in self.context: - valid = True - result = self.context[node.id] - elif node.id in self.allowed_values: - valid = True - result = self.allowed_values[node.id] - if not valid: - raise SyntaxError('invalid expression: %s' % node.id) - return result - - def do_str(self, node): - return node.s - - -def interpret(marker, execution_context=None): - """ - Interpret a marker and return a result depending on environment. - - :param marker: The marker to interpret. - :type marker: str - :param execution_context: The context used for name lookup. - :type execution_context: mapping - """ - return Evaluator(execution_context).evaluate(marker.strip()) diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distlib/metadata.py b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distlib/metadata.py deleted file mode 100644 index 75bfd68..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distlib/metadata.py +++ /dev/null @@ -1,1068 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (C) 2012 The Python Software Foundation. -# See LICENSE.txt and CONTRIBUTORS.txt. -# -"""Implementation of the Metadata for Python packages PEPs. - -Supports all metadata formats (1.0, 1.1, 1.2, and 2.0 experimental). -""" -from __future__ import unicode_literals - -import codecs -from email import message_from_file -import json -import logging -import re - - -from . import DistlibException, __version__ -from .compat import StringIO, string_types, text_type -from .markers import interpret -from .util import extract_by_key, get_extras -from .version import get_scheme, PEP440_VERSION_RE - -logger = logging.getLogger(__name__) - - -class MetadataMissingError(DistlibException): - """A required metadata is missing""" - - -class MetadataConflictError(DistlibException): - """Attempt to read or write metadata fields that are conflictual.""" - - -class MetadataUnrecognizedVersionError(DistlibException): - """Unknown metadata version number.""" - - -class MetadataInvalidError(DistlibException): - """A metadata value is invalid""" - -# public API of this module -__all__ = ['Metadata', 'PKG_INFO_ENCODING', 'PKG_INFO_PREFERRED_VERSION'] - -# Encoding used for the PKG-INFO files -PKG_INFO_ENCODING = 'utf-8' - -# preferred version. Hopefully will be changed -# to 1.2 once PEP 345 is supported everywhere -PKG_INFO_PREFERRED_VERSION = '1.1' - -_LINE_PREFIX_1_2 = re.compile('\n \|') -_LINE_PREFIX_PRE_1_2 = re.compile('\n ') -_241_FIELDS = ('Metadata-Version', 'Name', 'Version', 'Platform', - 'Summary', 'Description', - 'Keywords', 'Home-page', 'Author', 'Author-email', - 'License') - -_314_FIELDS = ('Metadata-Version', 'Name', 'Version', 'Platform', - 'Supported-Platform', 'Summary', 'Description', - 'Keywords', 'Home-page', 'Author', 'Author-email', - 'License', 'Classifier', 'Download-URL', 'Obsoletes', - 'Provides', 'Requires') - -_314_MARKERS = ('Obsoletes', 'Provides', 'Requires', 'Classifier', - 'Download-URL') - -_345_FIELDS = ('Metadata-Version', 'Name', 'Version', 'Platform', - 'Supported-Platform', 'Summary', 'Description', - 'Keywords', 'Home-page', 'Author', 'Author-email', - 'Maintainer', 'Maintainer-email', 'License', - 'Classifier', 'Download-URL', 'Obsoletes-Dist', - 'Project-URL', 'Provides-Dist', 'Requires-Dist', - 'Requires-Python', 'Requires-External') - -_345_MARKERS = ('Provides-Dist', 'Requires-Dist', 'Requires-Python', - 'Obsoletes-Dist', 'Requires-External', 'Maintainer', - 'Maintainer-email', 'Project-URL') - -_426_FIELDS = ('Metadata-Version', 'Name', 'Version', 'Platform', - 'Supported-Platform', 'Summary', 'Description', - 'Keywords', 'Home-page', 'Author', 'Author-email', - 'Maintainer', 'Maintainer-email', 'License', - 'Classifier', 'Download-URL', 'Obsoletes-Dist', - 'Project-URL', 'Provides-Dist', 'Requires-Dist', - 'Requires-Python', 'Requires-External', 'Private-Version', - 'Obsoleted-By', 'Setup-Requires-Dist', 'Extension', - 'Provides-Extra') - -_426_MARKERS = ('Private-Version', 'Provides-Extra', 'Obsoleted-By', - 'Setup-Requires-Dist', 'Extension') - -_ALL_FIELDS = set() -_ALL_FIELDS.update(_241_FIELDS) -_ALL_FIELDS.update(_314_FIELDS) -_ALL_FIELDS.update(_345_FIELDS) -_ALL_FIELDS.update(_426_FIELDS) - -EXTRA_RE = re.compile(r'''extra\s*==\s*("([^"]+)"|'([^']+)')''') - - -def _version2fieldlist(version): - if version == '1.0': - return _241_FIELDS - elif version == '1.1': - return _314_FIELDS - elif version == '1.2': - return _345_FIELDS - elif version == '2.0': - return _426_FIELDS - raise MetadataUnrecognizedVersionError(version) - - -def _best_version(fields): - """Detect the best version depending on the fields used.""" - def _has_marker(keys, markers): - for marker in markers: - if marker in keys: - return True - return False - - keys = [] - for key, value in fields.items(): - if value in ([], 'UNKNOWN', None): - continue - keys.append(key) - - possible_versions = ['1.0', '1.1', '1.2', '2.0'] - - # first let's try to see if a field is not part of one of the version - for key in keys: - if key not in _241_FIELDS and '1.0' in possible_versions: - possible_versions.remove('1.0') - if key not in _314_FIELDS and '1.1' in possible_versions: - possible_versions.remove('1.1') - if key not in _345_FIELDS and '1.2' in possible_versions: - possible_versions.remove('1.2') - if key not in _426_FIELDS and '2.0' in possible_versions: - possible_versions.remove('2.0') - - # possible_version contains qualified versions - if len(possible_versions) == 1: - return possible_versions[0] # found ! - elif len(possible_versions) == 0: - raise MetadataConflictError('Unknown metadata set') - - # let's see if one unique marker is found - is_1_1 = '1.1' in possible_versions and _has_marker(keys, _314_MARKERS) - is_1_2 = '1.2' in possible_versions and _has_marker(keys, _345_MARKERS) - is_2_0 = '2.0' in possible_versions and _has_marker(keys, _426_MARKERS) - if int(is_1_1) + int(is_1_2) + int(is_2_0) > 1: - raise MetadataConflictError('You used incompatible 1.1/1.2/2.0 fields') - - # we have the choice, 1.0, or 1.2, or 2.0 - # - 1.0 has a broken Summary field but works with all tools - # - 1.1 is to avoid - # - 1.2 fixes Summary but has little adoption - # - 2.0 adds more features and is very new - if not is_1_1 and not is_1_2 and not is_2_0: - # we couldn't find any specific marker - if PKG_INFO_PREFERRED_VERSION in possible_versions: - return PKG_INFO_PREFERRED_VERSION - if is_1_1: - return '1.1' - if is_1_2: - return '1.2' - - return '2.0' - -_ATTR2FIELD = { - 'metadata_version': 'Metadata-Version', - 'name': 'Name', - 'version': 'Version', - 'platform': 'Platform', - 'supported_platform': 'Supported-Platform', - 'summary': 'Summary', - 'description': 'Description', - 'keywords': 'Keywords', - 'home_page': 'Home-page', - 'author': 'Author', - 'author_email': 'Author-email', - 'maintainer': 'Maintainer', - 'maintainer_email': 'Maintainer-email', - 'license': 'License', - 'classifier': 'Classifier', - 'download_url': 'Download-URL', - 'obsoletes_dist': 'Obsoletes-Dist', - 'provides_dist': 'Provides-Dist', - 'requires_dist': 'Requires-Dist', - 'setup_requires_dist': 'Setup-Requires-Dist', - 'requires_python': 'Requires-Python', - 'requires_external': 'Requires-External', - 'requires': 'Requires', - 'provides': 'Provides', - 'obsoletes': 'Obsoletes', - 'project_url': 'Project-URL', - 'private_version': 'Private-Version', - 'obsoleted_by': 'Obsoleted-By', - 'extension': 'Extension', - 'provides_extra': 'Provides-Extra', -} - -_PREDICATE_FIELDS = ('Requires-Dist', 'Obsoletes-Dist', 'Provides-Dist') -_VERSIONS_FIELDS = ('Requires-Python',) -_VERSION_FIELDS = ('Version',) -_LISTFIELDS = ('Platform', 'Classifier', 'Obsoletes', - 'Requires', 'Provides', 'Obsoletes-Dist', - 'Provides-Dist', 'Requires-Dist', 'Requires-External', - 'Project-URL', 'Supported-Platform', 'Setup-Requires-Dist', - 'Provides-Extra', 'Extension') -_LISTTUPLEFIELDS = ('Project-URL',) - -_ELEMENTSFIELD = ('Keywords',) - -_UNICODEFIELDS = ('Author', 'Maintainer', 'Summary', 'Description') - -_MISSING = object() - -_FILESAFE = re.compile('[^A-Za-z0-9.]+') - - -def _get_name_and_version(name, version, for_filename=False): - """Return the distribution name with version. - - If for_filename is true, return a filename-escaped form.""" - if for_filename: - # For both name and version any runs of non-alphanumeric or '.' - # characters are replaced with a single '-'. Additionally any - # spaces in the version string become '.' - name = _FILESAFE.sub('-', name) - version = _FILESAFE.sub('-', version.replace(' ', '.')) - return '%s-%s' % (name, version) - - -class LegacyMetadata(object): - """The legacy metadata of a release. - - Supports versions 1.0, 1.1 and 1.2 (auto-detected). You can - instantiate the class with one of these arguments (or none): - - *path*, the path to a metadata file - - *fileobj* give a file-like object with metadata as content - - *mapping* is a dict-like object - - *scheme* is a version scheme name - """ - # TODO document the mapping API and UNKNOWN default key - - def __init__(self, path=None, fileobj=None, mapping=None, - scheme='default'): - if [path, fileobj, mapping].count(None) < 2: - raise TypeError('path, fileobj and mapping are exclusive') - self._fields = {} - self.requires_files = [] - self._dependencies = None - self.scheme = scheme - if path is not None: - self.read(path) - elif fileobj is not None: - self.read_file(fileobj) - elif mapping is not None: - self.update(mapping) - self.set_metadata_version() - - def set_metadata_version(self): - self._fields['Metadata-Version'] = _best_version(self._fields) - - def _write_field(self, fileobj, name, value): - fileobj.write('%s: %s\n' % (name, value)) - - def __getitem__(self, name): - return self.get(name) - - def __setitem__(self, name, value): - return self.set(name, value) - - def __delitem__(self, name): - field_name = self._convert_name(name) - try: - del self._fields[field_name] - except KeyError: - raise KeyError(name) - - def __contains__(self, name): - return (name in self._fields or - self._convert_name(name) in self._fields) - - def _convert_name(self, name): - if name in _ALL_FIELDS: - return name - name = name.replace('-', '_').lower() - return _ATTR2FIELD.get(name, name) - - def _default_value(self, name): - if name in _LISTFIELDS or name in _ELEMENTSFIELD: - return [] - return 'UNKNOWN' - - def _remove_line_prefix(self, value): - if self.metadata_version in ('1.0', '1.1'): - return _LINE_PREFIX_PRE_1_2.sub('\n', value) - else: - return _LINE_PREFIX_1_2.sub('\n', value) - - def __getattr__(self, name): - if name in _ATTR2FIELD: - return self[name] - raise AttributeError(name) - - # - # Public API - # - -# dependencies = property(_get_dependencies, _set_dependencies) - - def get_fullname(self, filesafe=False): - """Return the distribution name with version. - - If filesafe is true, return a filename-escaped form.""" - return _get_name_and_version(self['Name'], self['Version'], filesafe) - - def is_field(self, name): - """return True if name is a valid metadata key""" - name = self._convert_name(name) - return name in _ALL_FIELDS - - def is_multi_field(self, name): - name = self._convert_name(name) - return name in _LISTFIELDS - - def read(self, filepath): - """Read the metadata values from a file path.""" - fp = codecs.open(filepath, 'r', encoding='utf-8') - try: - self.read_file(fp) - finally: - fp.close() - - def read_file(self, fileob): - """Read the metadata values from a file object.""" - msg = message_from_file(fileob) - self._fields['Metadata-Version'] = msg['metadata-version'] - - # When reading, get all the fields we can - for field in _ALL_FIELDS: - if field not in msg: - continue - if field in _LISTFIELDS: - # we can have multiple lines - values = msg.get_all(field) - if field in _LISTTUPLEFIELDS and values is not None: - values = [tuple(value.split(',')) for value in values] - self.set(field, values) - else: - # single line - value = msg[field] - if value is not None and value != 'UNKNOWN': - self.set(field, value) - self.set_metadata_version() - - def write(self, filepath, skip_unknown=False): - """Write the metadata fields to filepath.""" - fp = codecs.open(filepath, 'w', encoding='utf-8') - try: - self.write_file(fp, skip_unknown) - finally: - fp.close() - - def write_file(self, fileobject, skip_unknown=False): - """Write the PKG-INFO format data to a file object.""" - self.set_metadata_version() - - for field in _version2fieldlist(self['Metadata-Version']): - values = self.get(field) - if skip_unknown and values in ('UNKNOWN', [], ['UNKNOWN']): - continue - if field in _ELEMENTSFIELD: - self._write_field(fileobject, field, ','.join(values)) - continue - if field not in _LISTFIELDS: - if field == 'Description': - if self.metadata_version in ('1.0', '1.1'): - values = values.replace('\n', '\n ') - else: - values = values.replace('\n', '\n |') - values = [values] - - if field in _LISTTUPLEFIELDS: - values = [','.join(value) for value in values] - - for value in values: - self._write_field(fileobject, field, value) - - def update(self, other=None, **kwargs): - """Set metadata values from the given iterable `other` and kwargs. - - Behavior is like `dict.update`: If `other` has a ``keys`` method, - they are looped over and ``self[key]`` is assigned ``other[key]``. - Else, ``other`` is an iterable of ``(key, value)`` iterables. - - Keys that don't match a metadata field or that have an empty value are - dropped. - """ - def _set(key, value): - if key in _ATTR2FIELD and value: - self.set(self._convert_name(key), value) - - if not other: - # other is None or empty container - pass - elif hasattr(other, 'keys'): - for k in other.keys(): - _set(k, other[k]) - else: - for k, v in other: - _set(k, v) - - if kwargs: - for k, v in kwargs.items(): - _set(k, v) - - def set(self, name, value): - """Control then set a metadata field.""" - name = self._convert_name(name) - - if ((name in _ELEMENTSFIELD or name == 'Platform') and - not isinstance(value, (list, tuple))): - if isinstance(value, string_types): - value = [v.strip() for v in value.split(',')] - else: - value = [] - elif (name in _LISTFIELDS and - not isinstance(value, (list, tuple))): - if isinstance(value, string_types): - value = [value] - else: - value = [] - - if logger.isEnabledFor(logging.WARNING): - project_name = self['Name'] - - scheme = get_scheme(self.scheme) - if name in _PREDICATE_FIELDS and value is not None: - for v in value: - # check that the values are valid - if not scheme.is_valid_matcher(v.split(';')[0]): - logger.warning( - "'%s': '%s' is not valid (field '%s')", - project_name, v, name) - # FIXME this rejects UNKNOWN, is that right? - elif name in _VERSIONS_FIELDS and value is not None: - if not scheme.is_valid_constraint_list(value): - logger.warning("'%s': '%s' is not a valid version (field '%s')", - project_name, value, name) - elif name in _VERSION_FIELDS and value is not None: - if not scheme.is_valid_version(value): - logger.warning("'%s': '%s' is not a valid version (field '%s')", - project_name, value, name) - - if name in _UNICODEFIELDS: - if name == 'Description': - value = self._remove_line_prefix(value) - - self._fields[name] = value - - def get(self, name, default=_MISSING): - """Get a metadata field.""" - name = self._convert_name(name) - if name not in self._fields: - if default is _MISSING: - default = self._default_value(name) - return default - if name in _UNICODEFIELDS: - value = self._fields[name] - return value - elif name in _LISTFIELDS: - value = self._fields[name] - if value is None: - return [] - res = [] - for val in value: - if name not in _LISTTUPLEFIELDS: - res.append(val) - else: - # That's for Project-URL - res.append((val[0], val[1])) - return res - - elif name in _ELEMENTSFIELD: - value = self._fields[name] - if isinstance(value, string_types): - return value.split(',') - return self._fields[name] - - def check(self, strict=False): - """Check if the metadata is compliant. If strict is True then raise if - no Name or Version are provided""" - self.set_metadata_version() - - # XXX should check the versions (if the file was loaded) - missing, warnings = [], [] - - for attr in ('Name', 'Version'): # required by PEP 345 - if attr not in self: - missing.append(attr) - - if strict and missing != []: - msg = 'missing required metadata: %s' % ', '.join(missing) - raise MetadataMissingError(msg) - - for attr in ('Home-page', 'Author'): - if attr not in self: - missing.append(attr) - - # checking metadata 1.2 (XXX needs to check 1.1, 1.0) - if self['Metadata-Version'] != '1.2': - return missing, warnings - - scheme = get_scheme(self.scheme) - - def are_valid_constraints(value): - for v in value: - if not scheme.is_valid_matcher(v.split(';')[0]): - return False - return True - - for fields, controller in ((_PREDICATE_FIELDS, are_valid_constraints), - (_VERSIONS_FIELDS, - scheme.is_valid_constraint_list), - (_VERSION_FIELDS, - scheme.is_valid_version)): - for field in fields: - value = self.get(field, None) - if value is not None and not controller(value): - warnings.append("Wrong value for '%s': %s" % (field, value)) - - return missing, warnings - - def todict(self, skip_missing=False): - """Return fields as a dict. - - Field names will be converted to use the underscore-lowercase style - instead of hyphen-mixed case (i.e. home_page instead of Home-page). - """ - self.set_metadata_version() - - mapping_1_0 = ( - ('metadata_version', 'Metadata-Version'), - ('name', 'Name'), - ('version', 'Version'), - ('summary', 'Summary'), - ('home_page', 'Home-page'), - ('author', 'Author'), - ('author_email', 'Author-email'), - ('license', 'License'), - ('description', 'Description'), - ('keywords', 'Keywords'), - ('platform', 'Platform'), - ('classifiers', 'Classifier'), - ('download_url', 'Download-URL'), - ) - - data = {} - for key, field_name in mapping_1_0: - if not skip_missing or field_name in self._fields: - data[key] = self[field_name] - - if self['Metadata-Version'] == '1.2': - mapping_1_2 = ( - ('requires_dist', 'Requires-Dist'), - ('requires_python', 'Requires-Python'), - ('requires_external', 'Requires-External'), - ('provides_dist', 'Provides-Dist'), - ('obsoletes_dist', 'Obsoletes-Dist'), - ('project_url', 'Project-URL'), - ('maintainer', 'Maintainer'), - ('maintainer_email', 'Maintainer-email'), - ) - for key, field_name in mapping_1_2: - if not skip_missing or field_name in self._fields: - if key != 'project_url': - data[key] = self[field_name] - else: - data[key] = [','.join(u) for u in self[field_name]] - - elif self['Metadata-Version'] == '1.1': - mapping_1_1 = ( - ('provides', 'Provides'), - ('requires', 'Requires'), - ('obsoletes', 'Obsoletes'), - ) - for key, field_name in mapping_1_1: - if not skip_missing or field_name in self._fields: - data[key] = self[field_name] - - return data - - def add_requirements(self, requirements): - if self['Metadata-Version'] == '1.1': - # we can't have 1.1 metadata *and* Setuptools requires - for field in ('Obsoletes', 'Requires', 'Provides'): - if field in self: - del self[field] - self['Requires-Dist'] += requirements - - # Mapping API - # TODO could add iter* variants - - def keys(self): - return list(_version2fieldlist(self['Metadata-Version'])) - - def __iter__(self): - for key in self.keys(): - yield key - - def values(self): - return [self[key] for key in self.keys()] - - def items(self): - return [(key, self[key]) for key in self.keys()] - - def __repr__(self): - return '<%s %s %s>' % (self.__class__.__name__, self.name, - self.version) - - -METADATA_FILENAME = 'pydist.json' -WHEEL_METADATA_FILENAME = 'metadata.json' - - -class Metadata(object): - """ - The metadata of a release. This implementation uses 2.0 (JSON) - metadata where possible. If not possible, it wraps a LegacyMetadata - instance which handles the key-value metadata format. - """ - - METADATA_VERSION_MATCHER = re.compile('^\d+(\.\d+)*$') - - NAME_MATCHER = re.compile('^[0-9A-Z]([0-9A-Z_.-]*[0-9A-Z])?$', re.I) - - VERSION_MATCHER = PEP440_VERSION_RE - - SUMMARY_MATCHER = re.compile('.{1,2047}') - - METADATA_VERSION = '2.0' - - GENERATOR = 'distlib (%s)' % __version__ - - MANDATORY_KEYS = { - 'name': (), - 'version': (), - 'summary': ('legacy',), - } - - INDEX_KEYS = ('name version license summary description author ' - 'author_email keywords platform home_page classifiers ' - 'download_url') - - DEPENDENCY_KEYS = ('extras run_requires test_requires build_requires ' - 'dev_requires provides meta_requires obsoleted_by ' - 'supports_environments') - - SYNTAX_VALIDATORS = { - 'metadata_version': (METADATA_VERSION_MATCHER, ()), - 'name': (NAME_MATCHER, ('legacy',)), - 'version': (VERSION_MATCHER, ('legacy',)), - 'summary': (SUMMARY_MATCHER, ('legacy',)), - } - - __slots__ = ('_legacy', '_data', 'scheme') - - def __init__(self, path=None, fileobj=None, mapping=None, - scheme='default'): - if [path, fileobj, mapping].count(None) < 2: - raise TypeError('path, fileobj and mapping are exclusive') - self._legacy = None - self._data = None - self.scheme = scheme - #import pdb; pdb.set_trace() - if mapping is not None: - try: - self._validate_mapping(mapping, scheme) - self._data = mapping - except MetadataUnrecognizedVersionError: - self._legacy = LegacyMetadata(mapping=mapping, scheme=scheme) - self.validate() - else: - data = None - if path: - with open(path, 'rb') as f: - data = f.read() - elif fileobj: - data = fileobj.read() - if data is None: - # Initialised with no args - to be added - self._data = { - 'metadata_version': self.METADATA_VERSION, - 'generator': self.GENERATOR, - } - else: - if not isinstance(data, text_type): - data = data.decode('utf-8') - try: - self._data = json.loads(data) - self._validate_mapping(self._data, scheme) - except ValueError: - # Note: MetadataUnrecognizedVersionError does not - # inherit from ValueError (it's a DistlibException, - # which should not inherit from ValueError). - # The ValueError comes from the json.load - if that - # succeeds and we get a validation error, we want - # that to propagate - self._legacy = LegacyMetadata(fileobj=StringIO(data), - scheme=scheme) - self.validate() - - common_keys = set(('name', 'version', 'license', 'keywords', 'summary')) - - none_list = (None, list) - none_dict = (None, dict) - - mapped_keys = { - 'run_requires': ('Requires-Dist', list), - 'build_requires': ('Setup-Requires-Dist', list), - 'dev_requires': none_list, - 'test_requires': none_list, - 'meta_requires': none_list, - 'extras': ('Provides-Extra', list), - 'modules': none_list, - 'namespaces': none_list, - 'exports': none_dict, - 'commands': none_dict, - 'classifiers': ('Classifier', list), - 'source_url': ('Download-URL', None), - 'metadata_version': ('Metadata-Version', None), - } - - del none_list, none_dict - - def __getattribute__(self, key): - common = object.__getattribute__(self, 'common_keys') - mapped = object.__getattribute__(self, 'mapped_keys') - if key in mapped: - lk, maker = mapped[key] - if self._legacy: - if lk is None: - result = None if maker is None else maker() - else: - result = self._legacy.get(lk) - else: - value = None if maker is None else maker() - if key not in ('commands', 'exports', 'modules', 'namespaces', - 'classifiers'): - result = self._data.get(key, value) - else: - # special cases for PEP 459 - sentinel = object() - result = sentinel - d = self._data.get('extensions') - if d: - if key == 'commands': - result = d.get('python.commands', value) - elif key == 'classifiers': - d = d.get('python.details') - if d: - result = d.get(key, value) - else: - d = d.get('python.exports') - if not d: - d = self._data.get('python.exports') - if d: - result = d.get(key, value) - if result is sentinel: - result = value - elif key not in common: - result = object.__getattribute__(self, key) - elif self._legacy: - result = self._legacy.get(key) - else: - result = self._data.get(key) - return result - - def _validate_value(self, key, value, scheme=None): - if key in self.SYNTAX_VALIDATORS: - pattern, exclusions = self.SYNTAX_VALIDATORS[key] - if (scheme or self.scheme) not in exclusions: - m = pattern.match(value) - if not m: - raise MetadataInvalidError("'%s' is an invalid value for " - "the '%s' property" % (value, - key)) - - def __setattr__(self, key, value): - self._validate_value(key, value) - common = object.__getattribute__(self, 'common_keys') - mapped = object.__getattribute__(self, 'mapped_keys') - if key in mapped: - lk, _ = mapped[key] - if self._legacy: - if lk is None: - raise NotImplementedError - self._legacy[lk] = value - elif key not in ('commands', 'exports', 'modules', 'namespaces', - 'classifiers'): - self._data[key] = value - else: - # special cases for PEP 459 - d = self._data.setdefault('extensions', {}) - if key == 'commands': - d['python.commands'] = value - elif key == 'classifiers': - d = d.setdefault('python.details', {}) - d[key] = value - else: - d = d.setdefault('python.exports', {}) - d[key] = value - elif key not in common: - object.__setattr__(self, key, value) - else: - if key == 'keywords': - if isinstance(value, string_types): - value = value.strip() - if value: - value = value.split() - else: - value = [] - if self._legacy: - self._legacy[key] = value - else: - self._data[key] = value - - @property - def name_and_version(self): - return _get_name_and_version(self.name, self.version, True) - - @property - def provides(self): - if self._legacy: - result = self._legacy['Provides-Dist'] - else: - result = self._data.setdefault('provides', []) - s = '%s (%s)' % (self.name, self.version) - if s not in result: - result.append(s) - return result - - @provides.setter - def provides(self, value): - if self._legacy: - self._legacy['Provides-Dist'] = value - else: - self._data['provides'] = value - - def get_requirements(self, reqts, extras=None, env=None): - """ - Base method to get dependencies, given a set of extras - to satisfy and an optional environment context. - :param reqts: A list of sometimes-wanted dependencies, - perhaps dependent on extras and environment. - :param extras: A list of optional components being requested. - :param env: An optional environment for marker evaluation. - """ - if self._legacy: - result = reqts - else: - result = [] - extras = get_extras(extras or [], self.extras) - for d in reqts: - if 'extra' not in d and 'environment' not in d: - # unconditional - include = True - else: - if 'extra' not in d: - # Not extra-dependent - only environment-dependent - include = True - else: - include = d.get('extra') in extras - if include: - # Not excluded because of extras, check environment - marker = d.get('environment') - if marker: - include = interpret(marker, env) - if include: - result.extend(d['requires']) - for key in ('build', 'dev', 'test'): - e = ':%s:' % key - if e in extras: - extras.remove(e) - # A recursive call, but it should terminate since 'test' - # has been removed from the extras - reqts = self._data.get('%s_requires' % key, []) - result.extend(self.get_requirements(reqts, extras=extras, - env=env)) - return result - - @property - def dictionary(self): - if self._legacy: - return self._from_legacy() - return self._data - - @property - def dependencies(self): - if self._legacy: - raise NotImplementedError - else: - return extract_by_key(self._data, self.DEPENDENCY_KEYS) - - @dependencies.setter - def dependencies(self, value): - if self._legacy: - raise NotImplementedError - else: - self._data.update(value) - - def _validate_mapping(self, mapping, scheme): - if mapping.get('metadata_version') != self.METADATA_VERSION: - raise MetadataUnrecognizedVersionError() - missing = [] - for key, exclusions in self.MANDATORY_KEYS.items(): - if key not in mapping: - if scheme not in exclusions: - missing.append(key) - if missing: - msg = 'Missing metadata items: %s' % ', '.join(missing) - raise MetadataMissingError(msg) - for k, v in mapping.items(): - self._validate_value(k, v, scheme) - - def validate(self): - if self._legacy: - missing, warnings = self._legacy.check(True) - if missing or warnings: - logger.warning('Metadata: missing: %s, warnings: %s', - missing, warnings) - else: - self._validate_mapping(self._data, self.scheme) - - def todict(self): - if self._legacy: - return self._legacy.todict(True) - else: - result = extract_by_key(self._data, self.INDEX_KEYS) - return result - - def _from_legacy(self): - assert self._legacy and not self._data - result = { - 'metadata_version': self.METADATA_VERSION, - 'generator': self.GENERATOR, - } - lmd = self._legacy.todict(True) # skip missing ones - for k in ('name', 'version', 'license', 'summary', 'description', - 'classifier'): - if k in lmd: - if k == 'classifier': - nk = 'classifiers' - else: - nk = k - result[nk] = lmd[k] - kw = lmd.get('Keywords', []) - if kw == ['']: - kw = [] - result['keywords'] = kw - keys = (('requires_dist', 'run_requires'), - ('setup_requires_dist', 'build_requires')) - for ok, nk in keys: - if ok in lmd and lmd[ok]: - result[nk] = [{'requires': lmd[ok]}] - result['provides'] = self.provides - author = {} - maintainer = {} - return result - - LEGACY_MAPPING = { - 'name': 'Name', - 'version': 'Version', - 'license': 'License', - 'summary': 'Summary', - 'description': 'Description', - 'classifiers': 'Classifier', - } - - def _to_legacy(self): - def process_entries(entries): - reqts = set() - for e in entries: - extra = e.get('extra') - env = e.get('environment') - rlist = e['requires'] - for r in rlist: - if not env and not extra: - reqts.add(r) - else: - marker = '' - if extra: - marker = 'extra == "%s"' % extra - if env: - if marker: - marker = '(%s) and %s' % (env, marker) - else: - marker = env - reqts.add(';'.join((r, marker))) - return reqts - - assert self._data and not self._legacy - result = LegacyMetadata() - nmd = self._data - for nk, ok in self.LEGACY_MAPPING.items(): - if nk in nmd: - result[ok] = nmd[nk] - r1 = process_entries(self.run_requires + self.meta_requires) - r2 = process_entries(self.build_requires + self.dev_requires) - if self.extras: - result['Provides-Extra'] = sorted(self.extras) - result['Requires-Dist'] = sorted(r1) - result['Setup-Requires-Dist'] = sorted(r2) - # TODO: other fields such as contacts - return result - - def write(self, path=None, fileobj=None, legacy=False, skip_unknown=True): - if [path, fileobj].count(None) != 1: - raise ValueError('Exactly one of path and fileobj is needed') - self.validate() - if legacy: - if self._legacy: - legacy_md = self._legacy - else: - legacy_md = self._to_legacy() - if path: - legacy_md.write(path, skip_unknown=skip_unknown) - else: - legacy_md.write_file(fileobj, skip_unknown=skip_unknown) - else: - if self._legacy: - d = self._from_legacy() - else: - d = self._data - if fileobj: - json.dump(d, fileobj, ensure_ascii=True, indent=2, - sort_keys=True) - else: - with codecs.open(path, 'w', 'utf-8') as f: - json.dump(d, f, ensure_ascii=True, indent=2, - sort_keys=True) - - def add_requirements(self, requirements): - if self._legacy: - self._legacy.add_requirements(requirements) - else: - run_requires = self._data.setdefault('run_requires', []) - always = None - for entry in run_requires: - if 'environment' not in entry and 'extra' not in entry: - always = entry - break - if always is None: - always = { 'requires': requirements } - run_requires.insert(0, always) - else: - rset = set(always['requires']) | set(requirements) - always['requires'] = sorted(rset) - - def __repr__(self): - name = self.name or '(no name)' - version = self.version or 'no version' - return '<%s %s %s (%s)>' % (self.__class__.__name__, - self.metadata_version, name, version) diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distlib/resources.py b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distlib/resources.py deleted file mode 100644 index f07cde2..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distlib/resources.py +++ /dev/null @@ -1,355 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (C) 2013-2016 Vinay Sajip. -# Licensed to the Python Software Foundation under a contributor agreement. -# See LICENSE.txt and CONTRIBUTORS.txt. -# -from __future__ import unicode_literals - -import bisect -import io -import logging -import os -import pkgutil -import shutil -import sys -import types -import zipimport - -from . import DistlibException -from .util import cached_property, get_cache_base, path_to_cache_dir, Cache - -logger = logging.getLogger(__name__) - - -cache = None # created when needed - - -class ResourceCache(Cache): - def __init__(self, base=None): - if base is None: - # Use native string to avoid issues on 2.x: see Python #20140. - base = os.path.join(get_cache_base(), str('resource-cache')) - super(ResourceCache, self).__init__(base) - - def is_stale(self, resource, path): - """ - Is the cache stale for the given resource? - - :param resource: The :class:`Resource` being cached. - :param path: The path of the resource in the cache. - :return: True if the cache is stale. - """ - # Cache invalidation is a hard problem :-) - return True - - def get(self, resource): - """ - Get a resource into the cache, - - :param resource: A :class:`Resource` instance. - :return: The pathname of the resource in the cache. - """ - prefix, path = resource.finder.get_cache_info(resource) - if prefix is None: - result = path - else: - result = os.path.join(self.base, self.prefix_to_dir(prefix), path) - dirname = os.path.dirname(result) - if not os.path.isdir(dirname): - os.makedirs(dirname) - if not os.path.exists(result): - stale = True - else: - stale = self.is_stale(resource, path) - if stale: - # write the bytes of the resource to the cache location - with open(result, 'wb') as f: - f.write(resource.bytes) - return result - - -class ResourceBase(object): - def __init__(self, finder, name): - self.finder = finder - self.name = name - - -class Resource(ResourceBase): - """ - A class representing an in-package resource, such as a data file. This is - not normally instantiated by user code, but rather by a - :class:`ResourceFinder` which manages the resource. - """ - is_container = False # Backwards compatibility - - def as_stream(self): - """ - Get the resource as a stream. - - This is not a property to make it obvious that it returns a new stream - each time. - """ - return self.finder.get_stream(self) - - @cached_property - def file_path(self): - global cache - if cache is None: - cache = ResourceCache() - return cache.get(self) - - @cached_property - def bytes(self): - return self.finder.get_bytes(self) - - @cached_property - def size(self): - return self.finder.get_size(self) - - -class ResourceContainer(ResourceBase): - is_container = True # Backwards compatibility - - @cached_property - def resources(self): - return self.finder.get_resources(self) - - -class ResourceFinder(object): - """ - Resource finder for file system resources. - """ - - if sys.platform.startswith('java'): - skipped_extensions = ('.pyc', '.pyo', '.class') - else: - skipped_extensions = ('.pyc', '.pyo') - - def __init__(self, module): - self.module = module - self.loader = getattr(module, '__loader__', None) - self.base = os.path.dirname(getattr(module, '__file__', '')) - - def _adjust_path(self, path): - return os.path.realpath(path) - - def _make_path(self, resource_name): - # Issue #50: need to preserve type of path on Python 2.x - # like os.path._get_sep - if isinstance(resource_name, bytes): # should only happen on 2.x - sep = b'/' - else: - sep = '/' - parts = resource_name.split(sep) - parts.insert(0, self.base) - result = os.path.join(*parts) - return self._adjust_path(result) - - def _find(self, path): - return os.path.exists(path) - - def get_cache_info(self, resource): - return None, resource.path - - def find(self, resource_name): - path = self._make_path(resource_name) - if not self._find(path): - result = None - else: - if self._is_directory(path): - result = ResourceContainer(self, resource_name) - else: - result = Resource(self, resource_name) - result.path = path - return result - - def get_stream(self, resource): - return open(resource.path, 'rb') - - def get_bytes(self, resource): - with open(resource.path, 'rb') as f: - return f.read() - - def get_size(self, resource): - return os.path.getsize(resource.path) - - def get_resources(self, resource): - def allowed(f): - return (f != '__pycache__' and not - f.endswith(self.skipped_extensions)) - return set([f for f in os.listdir(resource.path) if allowed(f)]) - - def is_container(self, resource): - return self._is_directory(resource.path) - - _is_directory = staticmethod(os.path.isdir) - - def iterator(self, resource_name): - resource = self.find(resource_name) - if resource is not None: - todo = [resource] - while todo: - resource = todo.pop(0) - yield resource - if resource.is_container: - rname = resource.name - for name in resource.resources: - if not rname: - new_name = name - else: - new_name = '/'.join([rname, name]) - child = self.find(new_name) - if child.is_container: - todo.append(child) - else: - yield child - - -class ZipResourceFinder(ResourceFinder): - """ - Resource finder for resources in .zip files. - """ - def __init__(self, module): - super(ZipResourceFinder, self).__init__(module) - archive = self.loader.archive - self.prefix_len = 1 + len(archive) - # PyPy doesn't have a _files attr on zipimporter, and you can't set one - if hasattr(self.loader, '_files'): - self._files = self.loader._files - else: - self._files = zipimport._zip_directory_cache[archive] - self.index = sorted(self._files) - - def _adjust_path(self, path): - return path - - def _find(self, path): - path = path[self.prefix_len:] - if path in self._files: - result = True - else: - if path and path[-1] != os.sep: - path = path + os.sep - i = bisect.bisect(self.index, path) - try: - result = self.index[i].startswith(path) - except IndexError: - result = False - if not result: - logger.debug('_find failed: %r %r', path, self.loader.prefix) - else: - logger.debug('_find worked: %r %r', path, self.loader.prefix) - return result - - def get_cache_info(self, resource): - prefix = self.loader.archive - path = resource.path[1 + len(prefix):] - return prefix, path - - def get_bytes(self, resource): - return self.loader.get_data(resource.path) - - def get_stream(self, resource): - return io.BytesIO(self.get_bytes(resource)) - - def get_size(self, resource): - path = resource.path[self.prefix_len:] - return self._files[path][3] - - def get_resources(self, resource): - path = resource.path[self.prefix_len:] - if path and path[-1] != os.sep: - path += os.sep - plen = len(path) - result = set() - i = bisect.bisect(self.index, path) - while i < len(self.index): - if not self.index[i].startswith(path): - break - s = self.index[i][plen:] - result.add(s.split(os.sep, 1)[0]) # only immediate children - i += 1 - return result - - def _is_directory(self, path): - path = path[self.prefix_len:] - if path and path[-1] != os.sep: - path += os.sep - i = bisect.bisect(self.index, path) - try: - result = self.index[i].startswith(path) - except IndexError: - result = False - return result - -_finder_registry = { - type(None): ResourceFinder, - zipimport.zipimporter: ZipResourceFinder -} - -try: - # In Python 3.6, _frozen_importlib -> _frozen_importlib_external - try: - import _frozen_importlib_external as _fi - except ImportError: - import _frozen_importlib as _fi - _finder_registry[_fi.SourceFileLoader] = ResourceFinder - _finder_registry[_fi.FileFinder] = ResourceFinder - del _fi -except (ImportError, AttributeError): - pass - - -def register_finder(loader, finder_maker): - _finder_registry[type(loader)] = finder_maker - -_finder_cache = {} - - -def finder(package): - """ - Return a resource finder for a package. - :param package: The name of the package. - :return: A :class:`ResourceFinder` instance for the package. - """ - if package in _finder_cache: - result = _finder_cache[package] - else: - if package not in sys.modules: - __import__(package) - module = sys.modules[package] - path = getattr(module, '__path__', None) - if path is None: - raise DistlibException('You cannot get a finder for a module, ' - 'only for a package') - loader = getattr(module, '__loader__', None) - finder_maker = _finder_registry.get(type(loader)) - if finder_maker is None: - raise DistlibException('Unable to locate finder for %r' % package) - result = finder_maker(module) - _finder_cache[package] = result - return result - - -_dummy_module = types.ModuleType(str('__dummy__')) - - -def finder_for_path(path): - """ - Return a resource finder for a path, which should represent a container. - - :param path: The path. - :return: A :class:`ResourceFinder` instance for the path. - """ - result = None - # calls any path hooks, gets importer into cache - pkgutil.get_importer(path) - loader = sys.path_importer_cache.get(path) - finder = _finder_registry.get(type(loader)) - if finder: - module = _dummy_module - module.__file__ = os.path.join(path, '') - module.__loader__ = loader - result = finder(module) - return result diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distlib/scripts.py b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distlib/scripts.py deleted file mode 100644 index 792fc2e..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distlib/scripts.py +++ /dev/null @@ -1,384 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (C) 2013-2015 Vinay Sajip. -# Licensed to the Python Software Foundation under a contributor agreement. -# See LICENSE.txt and CONTRIBUTORS.txt. -# -from io import BytesIO -import logging -import os -import re -import struct -import sys - -from .compat import sysconfig, detect_encoding, ZipFile -from .resources import finder -from .util import (FileOperator, get_export_entry, convert_path, - get_executable, in_venv) - -logger = logging.getLogger(__name__) - -_DEFAULT_MANIFEST = ''' - - - - - - - - - - - - -'''.strip() - -# check if Python is called on the first line with this expression -FIRST_LINE_RE = re.compile(b'^#!.*pythonw?[0-9.]*([ \t].*)?$') -SCRIPT_TEMPLATE = '''# -*- coding: utf-8 -*- -if __name__ == '__main__': - import sys, re - - def _resolve(module, func): - __import__(module) - mod = sys.modules[module] - parts = func.split('.') - result = getattr(mod, parts.pop(0)) - for p in parts: - result = getattr(result, p) - return result - - try: - sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - - func = _resolve('%(module)s', '%(func)s') - rc = func() # None interpreted as 0 - except Exception as e: # only supporting Python >= 2.6 - sys.stderr.write('%%s\\n' %% e) - rc = 1 - sys.exit(rc) -''' - - -def _enquote_executable(executable): - if ' ' in executable: - # make sure we quote only the executable in case of env - # for example /usr/bin/env "/dir with spaces/bin/jython" - # instead of "/usr/bin/env /dir with spaces/bin/jython" - # otherwise whole - if executable.startswith('/usr/bin/env '): - env, _executable = executable.split(' ', 1) - if ' ' in _executable and not _executable.startswith('"'): - executable = '%s "%s"' % (env, _executable) - else: - if not executable.startswith('"'): - executable = '"%s"' % executable - return executable - - -class ScriptMaker(object): - """ - A class to copy or create scripts from source scripts or callable - specifications. - """ - script_template = SCRIPT_TEMPLATE - - executable = None # for shebangs - - def __init__(self, source_dir, target_dir, add_launchers=True, - dry_run=False, fileop=None): - self.source_dir = source_dir - self.target_dir = target_dir - self.add_launchers = add_launchers - self.force = False - self.clobber = False - # It only makes sense to set mode bits on POSIX. - self.set_mode = (os.name == 'posix') or (os.name == 'java' and - os._name == 'posix') - self.variants = set(('', 'X.Y')) - self._fileop = fileop or FileOperator(dry_run) - - self._is_nt = os.name == 'nt' or ( - os.name == 'java' and os._name == 'nt') - - def _get_alternate_executable(self, executable, options): - if options.get('gui', False) and self._is_nt: # pragma: no cover - dn, fn = os.path.split(executable) - fn = fn.replace('python', 'pythonw') - executable = os.path.join(dn, fn) - return executable - - if sys.platform.startswith('java'): # pragma: no cover - def _is_shell(self, executable): - """ - Determine if the specified executable is a script - (contains a #! line) - """ - try: - with open(executable) as fp: - return fp.read(2) == '#!' - except (OSError, IOError): - logger.warning('Failed to open %s', executable) - return False - - def _fix_jython_executable(self, executable): - if self._is_shell(executable): - # Workaround for Jython is not needed on Linux systems. - import java - - if java.lang.System.getProperty('os.name') == 'Linux': - return executable - elif executable.lower().endswith('jython.exe'): - # Use wrapper exe for Jython on Windows - return executable - return '/usr/bin/env %s' % executable - - def _get_shebang(self, encoding, post_interp=b'', options=None): - enquote = True - if self.executable: - executable = self.executable - enquote = False # assume this will be taken care of - elif not sysconfig.is_python_build(): - executable = get_executable() - elif in_venv(): # pragma: no cover - executable = os.path.join(sysconfig.get_path('scripts'), - 'python%s' % sysconfig.get_config_var('EXE')) - else: # pragma: no cover - executable = os.path.join( - sysconfig.get_config_var('BINDIR'), - 'python%s%s' % (sysconfig.get_config_var('VERSION'), - sysconfig.get_config_var('EXE'))) - if options: - executable = self._get_alternate_executable(executable, options) - - if sys.platform.startswith('java'): # pragma: no cover - executable = self._fix_jython_executable(executable) - # Normalise case for Windows - executable = os.path.normcase(executable) - # If the user didn't specify an executable, it may be necessary to - # cater for executable paths with spaces (not uncommon on Windows) - if enquote: - executable = _enquote_executable(executable) - # Issue #51: don't use fsencode, since we later try to - # check that the shebang is decodable using utf-8. - executable = executable.encode('utf-8') - # in case of IronPython, play safe and enable frames support - if (sys.platform == 'cli' and '-X:Frames' not in post_interp - and '-X:FullFrames' not in post_interp): # pragma: no cover - post_interp += b' -X:Frames' - shebang = b'#!' + executable + post_interp + b'\n' - # Python parser starts to read a script using UTF-8 until - # it gets a #coding:xxx cookie. The shebang has to be the - # first line of a file, the #coding:xxx cookie cannot be - # written before. So the shebang has to be decodable from - # UTF-8. - try: - shebang.decode('utf-8') - except UnicodeDecodeError: # pragma: no cover - raise ValueError( - 'The shebang (%r) is not decodable from utf-8' % shebang) - # If the script is encoded to a custom encoding (use a - # #coding:xxx cookie), the shebang has to be decodable from - # the script encoding too. - if encoding != 'utf-8': - try: - shebang.decode(encoding) - except UnicodeDecodeError: # pragma: no cover - raise ValueError( - 'The shebang (%r) is not decodable ' - 'from the script encoding (%r)' % (shebang, encoding)) - return shebang - - def _get_script_text(self, entry): - return self.script_template % dict(module=entry.prefix, - func=entry.suffix) - - manifest = _DEFAULT_MANIFEST - - def get_manifest(self, exename): - base = os.path.basename(exename) - return self.manifest % base - - def _write_script(self, names, shebang, script_bytes, filenames, ext): - use_launcher = self.add_launchers and self._is_nt - linesep = os.linesep.encode('utf-8') - if not use_launcher: - script_bytes = shebang + linesep + script_bytes - else: # pragma: no cover - if ext == 'py': - launcher = self._get_launcher('t') - else: - launcher = self._get_launcher('w') - stream = BytesIO() - with ZipFile(stream, 'w') as zf: - zf.writestr('__main__.py', script_bytes) - zip_data = stream.getvalue() - script_bytes = launcher + shebang + linesep + zip_data - for name in names: - outname = os.path.join(self.target_dir, name) - if use_launcher: # pragma: no cover - n, e = os.path.splitext(outname) - if e.startswith('.py'): - outname = n - outname = '%s.exe' % outname - try: - self._fileop.write_binary_file(outname, script_bytes) - except Exception: - # Failed writing an executable - it might be in use. - logger.warning('Failed to write executable - trying to ' - 'use .deleteme logic') - dfname = '%s.deleteme' % outname - if os.path.exists(dfname): - os.remove(dfname) # Not allowed to fail here - os.rename(outname, dfname) # nor here - self._fileop.write_binary_file(outname, script_bytes) - logger.debug('Able to replace executable using ' - '.deleteme logic') - try: - os.remove(dfname) - except Exception: - pass # still in use - ignore error - else: - if self._is_nt and not outname.endswith('.' + ext): # pragma: no cover - outname = '%s.%s' % (outname, ext) - if os.path.exists(outname) and not self.clobber: - logger.warning('Skipping existing file %s', outname) - continue - self._fileop.write_binary_file(outname, script_bytes) - if self.set_mode: - self._fileop.set_executable_mode([outname]) - filenames.append(outname) - - def _make_script(self, entry, filenames, options=None): - post_interp = b'' - if options: - args = options.get('interpreter_args', []) - if args: - args = ' %s' % ' '.join(args) - post_interp = args.encode('utf-8') - shebang = self._get_shebang('utf-8', post_interp, options=options) - script = self._get_script_text(entry).encode('utf-8') - name = entry.name - scriptnames = set() - if '' in self.variants: - scriptnames.add(name) - if 'X' in self.variants: - scriptnames.add('%s%s' % (name, sys.version[0])) - if 'X.Y' in self.variants: - scriptnames.add('%s-%s' % (name, sys.version[:3])) - if options and options.get('gui', False): - ext = 'pyw' - else: - ext = 'py' - self._write_script(scriptnames, shebang, script, filenames, ext) - - def _copy_script(self, script, filenames): - adjust = False - script = os.path.join(self.source_dir, convert_path(script)) - outname = os.path.join(self.target_dir, os.path.basename(script)) - if not self.force and not self._fileop.newer(script, outname): - logger.debug('not copying %s (up-to-date)', script) - return - - # Always open the file, but ignore failures in dry-run mode -- - # that way, we'll get accurate feedback if we can read the - # script. - try: - f = open(script, 'rb') - except IOError: # pragma: no cover - if not self.dry_run: - raise - f = None - else: - first_line = f.readline() - if not first_line: # pragma: no cover - logger.warning('%s: %s is an empty file (skipping)', - self.get_command_name(), script) - return - - match = FIRST_LINE_RE.match(first_line.replace(b'\r\n', b'\n')) - if match: - adjust = True - post_interp = match.group(1) or b'' - - if not adjust: - if f: - f.close() - self._fileop.copy_file(script, outname) - if self.set_mode: - self._fileop.set_executable_mode([outname]) - filenames.append(outname) - else: - logger.info('copying and adjusting %s -> %s', script, - self.target_dir) - if not self._fileop.dry_run: - encoding, lines = detect_encoding(f.readline) - f.seek(0) - shebang = self._get_shebang(encoding, post_interp) - if b'pythonw' in first_line: # pragma: no cover - ext = 'pyw' - else: - ext = 'py' - n = os.path.basename(outname) - self._write_script([n], shebang, f.read(), filenames, ext) - if f: - f.close() - - @property - def dry_run(self): - return self._fileop.dry_run - - @dry_run.setter - def dry_run(self, value): - self._fileop.dry_run = value - - if os.name == 'nt' or (os.name == 'java' and os._name == 'nt'): # pragma: no cover - # Executable launcher support. - # Launchers are from https://bitbucket.org/vinay.sajip/simple_launcher/ - - def _get_launcher(self, kind): - if struct.calcsize('P') == 8: # 64-bit - bits = '64' - else: - bits = '32' - name = '%s%s.exe' % (kind, bits) - # Issue 31: don't hardcode an absolute package name, but - # determine it relative to the current package - distlib_package = __name__.rsplit('.', 1)[0] - result = finder(distlib_package).find(name).bytes - return result - - # Public API follows - - def make(self, specification, options=None): - """ - Make a script. - - :param specification: The specification, which is either a valid export - entry specification (to make a script from a - callable) or a filename (to make a script by - copying from a source location). - :param options: A dictionary of options controlling script generation. - :return: A list of all absolute pathnames written to. - """ - filenames = [] - entry = get_export_entry(specification) - if entry is None: - self._copy_script(specification, filenames) - else: - self._make_script(entry, filenames, options=options) - return filenames - - def make_multiple(self, specifications, options=None): - """ - Take a list of specifications and make scripts from them, - :param specifications: A list of specifications. - :return: A list of all absolute pathnames written to, - """ - filenames = [] - for specification in specifications: - filenames.extend(self.make(specification, options)) - return filenames diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distlib/t32.exe b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distlib/t32.exe deleted file mode 100644 index 836211d..0000000 Binary files a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distlib/t32.exe and /dev/null differ diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distlib/t64.exe b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distlib/t64.exe deleted file mode 100644 index a401b59..0000000 Binary files a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distlib/t64.exe and /dev/null differ diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distlib/util.py b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distlib/util.py deleted file mode 100644 index aadc874..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distlib/util.py +++ /dev/null @@ -1,1611 +0,0 @@ -# -# Copyright (C) 2012-2016 The Python Software Foundation. -# See LICENSE.txt and CONTRIBUTORS.txt. -# -import codecs -from collections import deque -import contextlib -import csv -from glob import iglob as std_iglob -import io -import json -import logging -import os -import py_compile -import re -import shutil -import socket -try: - import ssl -except ImportError: # pragma: no cover - ssl = None -import subprocess -import sys -import tarfile -import tempfile -import textwrap - -try: - import threading -except ImportError: # pragma: no cover - import dummy_threading as threading -import time - -from . import DistlibException -from .compat import (string_types, text_type, shutil, raw_input, StringIO, - cache_from_source, urlopen, urljoin, httplib, xmlrpclib, - splittype, HTTPHandler, BaseConfigurator, valid_ident, - Container, configparser, URLError, ZipFile, fsdecode, - unquote) - -logger = logging.getLogger(__name__) - -# -# Requirement parsing code for name + optional constraints + optional extras -# -# e.g. 'foo >= 1.2, < 2.0 [bar, baz]' -# -# The regex can seem a bit hairy, so we build it up out of smaller pieces -# which are manageable. -# - -COMMA = r'\s*,\s*' -COMMA_RE = re.compile(COMMA) - -IDENT = r'(\w|[.-])+' -EXTRA_IDENT = r'(\*|:(\*|\w+):|' + IDENT + ')' -VERSPEC = IDENT + r'\*?' - -RELOP = '([<>=!~]=)|[<>]' - -# -# The first relop is optional - if absent, will be taken as '~=' -# -BARE_CONSTRAINTS = ('(' + RELOP + r')?\s*(' + VERSPEC + ')(' + COMMA + '(' + - RELOP + r')\s*(' + VERSPEC + '))*') - -DIRECT_REF = '(from\s+(?P.*))' - -# -# Either the bare constraints or the bare constraints in parentheses -# -CONSTRAINTS = (r'\(\s*(?P' + BARE_CONSTRAINTS + '|' + DIRECT_REF + - r')\s*\)|(?P' + BARE_CONSTRAINTS + '\s*)') - -EXTRA_LIST = EXTRA_IDENT + '(' + COMMA + EXTRA_IDENT + ')*' -EXTRAS = r'\[\s*(?P' + EXTRA_LIST + r')?\s*\]' -REQUIREMENT = ('(?P' + IDENT + r')\s*(' + EXTRAS + r'\s*)?(\s*' + - CONSTRAINTS + ')?$') -REQUIREMENT_RE = re.compile(REQUIREMENT) - -# -# Used to scan through the constraints -# -RELOP_IDENT = '(?P' + RELOP + r')\s*(?P' + VERSPEC + ')' -RELOP_IDENT_RE = re.compile(RELOP_IDENT) - -def parse_requirement(s): - - def get_constraint(m): - d = m.groupdict() - return d['op'], d['vn'] - - result = None - m = REQUIREMENT_RE.match(s) - if m: - d = m.groupdict() - name = d['dn'] - cons = d['c1'] or d['c2'] - if not d['diref']: - url = None - else: - # direct reference - cons = None - url = d['diref'].strip() - if not cons: - cons = None - constr = '' - rs = d['dn'] - else: - if cons[0] not in '<>!=': - cons = '~=' + cons - iterator = RELOP_IDENT_RE.finditer(cons) - cons = [get_constraint(m) for m in iterator] - rs = '%s (%s)' % (name, ', '.join(['%s %s' % con for con in cons])) - if not d['ex']: - extras = None - else: - extras = COMMA_RE.split(d['ex']) - result = Container(name=name, constraints=cons, extras=extras, - requirement=rs, source=s, url=url) - return result - - -def get_resources_dests(resources_root, rules): - """Find destinations for resources files""" - - def get_rel_path(base, path): - # normalizes and returns a lstripped-/-separated path - base = base.replace(os.path.sep, '/') - path = path.replace(os.path.sep, '/') - assert path.startswith(base) - return path[len(base):].lstrip('/') - - - destinations = {} - for base, suffix, dest in rules: - prefix = os.path.join(resources_root, base) - for abs_base in iglob(prefix): - abs_glob = os.path.join(abs_base, suffix) - for abs_path in iglob(abs_glob): - resource_file = get_rel_path(resources_root, abs_path) - if dest is None: # remove the entry if it was here - destinations.pop(resource_file, None) - else: - rel_path = get_rel_path(abs_base, abs_path) - rel_dest = dest.replace(os.path.sep, '/').rstrip('/') - destinations[resource_file] = rel_dest + '/' + rel_path - return destinations - - -def in_venv(): - if hasattr(sys, 'real_prefix'): - # virtualenv venvs - result = True - else: - # PEP 405 venvs - result = sys.prefix != getattr(sys, 'base_prefix', sys.prefix) - return result - - -def get_executable(): -# The __PYVENV_LAUNCHER__ dance is apparently no longer needed, as -# changes to the stub launcher mean that sys.executable always points -# to the stub on macOS -# if sys.platform == 'darwin' and ('__PYVENV_LAUNCHER__' -# in os.environ): -# result = os.environ['__PYVENV_LAUNCHER__'] -# else: -# result = sys.executable -# return result - result = os.path.normcase(sys.executable) - if not isinstance(result, text_type): - result = fsdecode(result) - return result - - -def proceed(prompt, allowed_chars, error_prompt=None, default=None): - p = prompt - while True: - s = raw_input(p) - p = prompt - if not s and default: - s = default - if s: - c = s[0].lower() - if c in allowed_chars: - break - if error_prompt: - p = '%c: %s\n%s' % (c, error_prompt, prompt) - return c - - -def extract_by_key(d, keys): - if isinstance(keys, string_types): - keys = keys.split() - result = {} - for key in keys: - if key in d: - result[key] = d[key] - return result - -def read_exports(stream): - if sys.version_info[0] >= 3: - # needs to be a text stream - stream = codecs.getreader('utf-8')(stream) - # Try to load as JSON, falling back on legacy format - data = stream.read() - stream = StringIO(data) - try: - jdata = json.load(stream) - result = jdata['extensions']['python.exports']['exports'] - for group, entries in result.items(): - for k, v in entries.items(): - s = '%s = %s' % (k, v) - entry = get_export_entry(s) - assert entry is not None - entries[k] = entry - return result - except Exception: - stream.seek(0, 0) - - def read_stream(cp, stream): - if hasattr(cp, 'read_file'): - cp.read_file(stream) - else: - cp.readfp(stream) - - cp = configparser.ConfigParser() - try: - read_stream(cp, stream) - except configparser.MissingSectionHeaderError: - stream.close() - data = textwrap.dedent(data) - stream = StringIO(data) - read_stream(cp, stream) - - result = {} - for key in cp.sections(): - result[key] = entries = {} - for name, value in cp.items(key): - s = '%s = %s' % (name, value) - entry = get_export_entry(s) - assert entry is not None - #entry.dist = self - entries[name] = entry - return result - - -def write_exports(exports, stream): - if sys.version_info[0] >= 3: - # needs to be a text stream - stream = codecs.getwriter('utf-8')(stream) - cp = configparser.ConfigParser() - for k, v in exports.items(): - # TODO check k, v for valid values - cp.add_section(k) - for entry in v.values(): - if entry.suffix is None: - s = entry.prefix - else: - s = '%s:%s' % (entry.prefix, entry.suffix) - if entry.flags: - s = '%s [%s]' % (s, ', '.join(entry.flags)) - cp.set(k, entry.name, s) - cp.write(stream) - - -@contextlib.contextmanager -def tempdir(): - td = tempfile.mkdtemp() - try: - yield td - finally: - shutil.rmtree(td) - -@contextlib.contextmanager -def chdir(d): - cwd = os.getcwd() - try: - os.chdir(d) - yield - finally: - os.chdir(cwd) - - -@contextlib.contextmanager -def socket_timeout(seconds=15): - cto = socket.getdefaulttimeout() - try: - socket.setdefaulttimeout(seconds) - yield - finally: - socket.setdefaulttimeout(cto) - - -class cached_property(object): - def __init__(self, func): - self.func = func - #for attr in ('__name__', '__module__', '__doc__'): - # setattr(self, attr, getattr(func, attr, None)) - - def __get__(self, obj, cls=None): - if obj is None: - return self - value = self.func(obj) - object.__setattr__(obj, self.func.__name__, value) - #obj.__dict__[self.func.__name__] = value = self.func(obj) - return value - -def convert_path(pathname): - """Return 'pathname' as a name that will work on the native filesystem. - - The path is split on '/' and put back together again using the current - directory separator. Needed because filenames in the setup script are - always supplied in Unix style, and have to be converted to the local - convention before we can actually use them in the filesystem. Raises - ValueError on non-Unix-ish systems if 'pathname' either starts or - ends with a slash. - """ - if os.sep == '/': - return pathname - if not pathname: - return pathname - if pathname[0] == '/': - raise ValueError("path '%s' cannot be absolute" % pathname) - if pathname[-1] == '/': - raise ValueError("path '%s' cannot end with '/'" % pathname) - - paths = pathname.split('/') - while os.curdir in paths: - paths.remove(os.curdir) - if not paths: - return os.curdir - return os.path.join(*paths) - - -class FileOperator(object): - def __init__(self, dry_run=False): - self.dry_run = dry_run - self.ensured = set() - self._init_record() - - def _init_record(self): - self.record = False - self.files_written = set() - self.dirs_created = set() - - def record_as_written(self, path): - if self.record: - self.files_written.add(path) - - def newer(self, source, target): - """Tell if the target is newer than the source. - - Returns true if 'source' exists and is more recently modified than - 'target', or if 'source' exists and 'target' doesn't. - - Returns false if both exist and 'target' is the same age or younger - than 'source'. Raise PackagingFileError if 'source' does not exist. - - Note that this test is not very accurate: files created in the same - second will have the same "age". - """ - if not os.path.exists(source): - raise DistlibException("file '%r' does not exist" % - os.path.abspath(source)) - if not os.path.exists(target): - return True - - return os.stat(source).st_mtime > os.stat(target).st_mtime - - def copy_file(self, infile, outfile, check=True): - """Copy a file respecting dry-run and force flags. - """ - self.ensure_dir(os.path.dirname(outfile)) - logger.info('Copying %s to %s', infile, outfile) - if not self.dry_run: - msg = None - if check: - if os.path.islink(outfile): - msg = '%s is a symlink' % outfile - elif os.path.exists(outfile) and not os.path.isfile(outfile): - msg = '%s is a non-regular file' % outfile - if msg: - raise ValueError(msg + ' which would be overwritten') - shutil.copyfile(infile, outfile) - self.record_as_written(outfile) - - def copy_stream(self, instream, outfile, encoding=None): - assert not os.path.isdir(outfile) - self.ensure_dir(os.path.dirname(outfile)) - logger.info('Copying stream %s to %s', instream, outfile) - if not self.dry_run: - if encoding is None: - outstream = open(outfile, 'wb') - else: - outstream = codecs.open(outfile, 'w', encoding=encoding) - try: - shutil.copyfileobj(instream, outstream) - finally: - outstream.close() - self.record_as_written(outfile) - - def write_binary_file(self, path, data): - self.ensure_dir(os.path.dirname(path)) - if not self.dry_run: - with open(path, 'wb') as f: - f.write(data) - self.record_as_written(path) - - def write_text_file(self, path, data, encoding): - self.ensure_dir(os.path.dirname(path)) - if not self.dry_run: - with open(path, 'wb') as f: - f.write(data.encode(encoding)) - self.record_as_written(path) - - def set_mode(self, bits, mask, files): - if os.name == 'posix' or (os.name == 'java' and os._name == 'posix'): - # Set the executable bits (owner, group, and world) on - # all the files specified. - for f in files: - if self.dry_run: - logger.info("changing mode of %s", f) - else: - mode = (os.stat(f).st_mode | bits) & mask - logger.info("changing mode of %s to %o", f, mode) - os.chmod(f, mode) - - set_executable_mode = lambda s, f: s.set_mode(0o555, 0o7777, f) - - def ensure_dir(self, path): - path = os.path.abspath(path) - if path not in self.ensured and not os.path.exists(path): - self.ensured.add(path) - d, f = os.path.split(path) - self.ensure_dir(d) - logger.info('Creating %s' % path) - if not self.dry_run: - os.mkdir(path) - if self.record: - self.dirs_created.add(path) - - def byte_compile(self, path, optimize=False, force=False, prefix=None): - dpath = cache_from_source(path, not optimize) - logger.info('Byte-compiling %s to %s', path, dpath) - if not self.dry_run: - if force or self.newer(path, dpath): - if not prefix: - diagpath = None - else: - assert path.startswith(prefix) - diagpath = path[len(prefix):] - py_compile.compile(path, dpath, diagpath, True) # raise error - self.record_as_written(dpath) - return dpath - - def ensure_removed(self, path): - if os.path.exists(path): - if os.path.isdir(path) and not os.path.islink(path): - logger.debug('Removing directory tree at %s', path) - if not self.dry_run: - shutil.rmtree(path) - if self.record: - if path in self.dirs_created: - self.dirs_created.remove(path) - else: - if os.path.islink(path): - s = 'link' - else: - s = 'file' - logger.debug('Removing %s %s', s, path) - if not self.dry_run: - os.remove(path) - if self.record: - if path in self.files_written: - self.files_written.remove(path) - - def is_writable(self, path): - result = False - while not result: - if os.path.exists(path): - result = os.access(path, os.W_OK) - break - parent = os.path.dirname(path) - if parent == path: - break - path = parent - return result - - def commit(self): - """ - Commit recorded changes, turn off recording, return - changes. - """ - assert self.record - result = self.files_written, self.dirs_created - self._init_record() - return result - - def rollback(self): - if not self.dry_run: - for f in list(self.files_written): - if os.path.exists(f): - os.remove(f) - # dirs should all be empty now, except perhaps for - # __pycache__ subdirs - # reverse so that subdirs appear before their parents - dirs = sorted(self.dirs_created, reverse=True) - for d in dirs: - flist = os.listdir(d) - if flist: - assert flist == ['__pycache__'] - sd = os.path.join(d, flist[0]) - os.rmdir(sd) - os.rmdir(d) # should fail if non-empty - self._init_record() - -def resolve(module_name, dotted_path): - if module_name in sys.modules: - mod = sys.modules[module_name] - else: - mod = __import__(module_name) - if dotted_path is None: - result = mod - else: - parts = dotted_path.split('.') - result = getattr(mod, parts.pop(0)) - for p in parts: - result = getattr(result, p) - return result - - -class ExportEntry(object): - def __init__(self, name, prefix, suffix, flags): - self.name = name - self.prefix = prefix - self.suffix = suffix - self.flags = flags - - @cached_property - def value(self): - return resolve(self.prefix, self.suffix) - - def __repr__(self): # pragma: no cover - return '' % (self.name, self.prefix, - self.suffix, self.flags) - - def __eq__(self, other): - if not isinstance(other, ExportEntry): - result = False - else: - result = (self.name == other.name and - self.prefix == other.prefix and - self.suffix == other.suffix and - self.flags == other.flags) - return result - - __hash__ = object.__hash__ - - -ENTRY_RE = re.compile(r'''(?P(\w|[-.+])+) - \s*=\s*(?P(\w+)([:\.]\w+)*) - \s*(\[\s*(?P\w+(=\w+)?(,\s*\w+(=\w+)?)*)\s*\])? - ''', re.VERBOSE) - -def get_export_entry(specification): - m = ENTRY_RE.search(specification) - if not m: - result = None - if '[' in specification or ']' in specification: - raise DistlibException("Invalid specification " - "'%s'" % specification) - else: - d = m.groupdict() - name = d['name'] - path = d['callable'] - colons = path.count(':') - if colons == 0: - prefix, suffix = path, None - else: - if colons != 1: - raise DistlibException("Invalid specification " - "'%s'" % specification) - prefix, suffix = path.split(':') - flags = d['flags'] - if flags is None: - if '[' in specification or ']' in specification: - raise DistlibException("Invalid specification " - "'%s'" % specification) - flags = [] - else: - flags = [f.strip() for f in flags.split(',')] - result = ExportEntry(name, prefix, suffix, flags) - return result - - -def get_cache_base(suffix=None): - """ - Return the default base location for distlib caches. If the directory does - not exist, it is created. Use the suffix provided for the base directory, - and default to '.distlib' if it isn't provided. - - On Windows, if LOCALAPPDATA is defined in the environment, then it is - assumed to be a directory, and will be the parent directory of the result. - On POSIX, and on Windows if LOCALAPPDATA is not defined, the user's home - directory - using os.expanduser('~') - will be the parent directory of - the result. - - The result is just the directory '.distlib' in the parent directory as - determined above, or with the name specified with ``suffix``. - """ - if suffix is None: - suffix = '.distlib' - if os.name == 'nt' and 'LOCALAPPDATA' in os.environ: - result = os.path.expandvars('$localappdata') - else: - # Assume posix, or old Windows - result = os.path.expanduser('~') - # we use 'isdir' instead of 'exists', because we want to - # fail if there's a file with that name - if os.path.isdir(result): - usable = os.access(result, os.W_OK) - if not usable: - logger.warning('Directory exists but is not writable: %s', result) - else: - try: - os.makedirs(result) - usable = True - except OSError: - logger.warning('Unable to create %s', result, exc_info=True) - usable = False - if not usable: - result = tempfile.mkdtemp() - logger.warning('Default location unusable, using %s', result) - return os.path.join(result, suffix) - - -def path_to_cache_dir(path): - """ - Convert an absolute path to a directory name for use in a cache. - - The algorithm used is: - - #. On Windows, any ``':'`` in the drive is replaced with ``'---'``. - #. Any occurrence of ``os.sep`` is replaced with ``'--'``. - #. ``'.cache'`` is appended. - """ - d, p = os.path.splitdrive(os.path.abspath(path)) - if d: - d = d.replace(':', '---') - p = p.replace(os.sep, '--') - return d + p + '.cache' - - -def ensure_slash(s): - if not s.endswith('/'): - return s + '/' - return s - - -def parse_credentials(netloc): - username = password = None - if '@' in netloc: - prefix, netloc = netloc.split('@', 1) - if ':' not in prefix: - username = prefix - else: - username, password = prefix.split(':', 1) - return username, password, netloc - - -def get_process_umask(): - result = os.umask(0o22) - os.umask(result) - return result - -def is_string_sequence(seq): - result = True - i = None - for i, s in enumerate(seq): - if not isinstance(s, string_types): - result = False - break - assert i is not None - return result - -PROJECT_NAME_AND_VERSION = re.compile('([a-z0-9_]+([.-][a-z_][a-z0-9_]*)*)-' - '([a-z0-9_.+-]+)', re.I) -PYTHON_VERSION = re.compile(r'-py(\d\.?\d?)') - - -def split_filename(filename, project_name=None): - """ - Extract name, version, python version from a filename (no extension) - - Return name, version, pyver or None - """ - result = None - pyver = None - filename = unquote(filename).replace(' ', '-') - m = PYTHON_VERSION.search(filename) - if m: - pyver = m.group(1) - filename = filename[:m.start()] - if project_name and len(filename) > len(project_name) + 1: - m = re.match(re.escape(project_name) + r'\b', filename) - if m: - n = m.end() - result = filename[:n], filename[n + 1:], pyver - if result is None: - m = PROJECT_NAME_AND_VERSION.match(filename) - if m: - result = m.group(1), m.group(3), pyver - return result - -# Allow spaces in name because of legacy dists like "Twisted Core" -NAME_VERSION_RE = re.compile(r'(?P[\w .-]+)\s*' - r'\(\s*(?P[^\s)]+)\)$') - -def parse_name_and_version(p): - """ - A utility method used to get name and version from a string. - - From e.g. a Provides-Dist value. - - :param p: A value in a form 'foo (1.0)' - :return: The name and version as a tuple. - """ - m = NAME_VERSION_RE.match(p) - if not m: - raise DistlibException('Ill-formed name/version string: \'%s\'' % p) - d = m.groupdict() - return d['name'].strip().lower(), d['ver'] - -def get_extras(requested, available): - result = set() - requested = set(requested or []) - available = set(available or []) - if '*' in requested: - requested.remove('*') - result |= available - for r in requested: - if r == '-': - result.add(r) - elif r.startswith('-'): - unwanted = r[1:] - if unwanted not in available: - logger.warning('undeclared extra: %s' % unwanted) - if unwanted in result: - result.remove(unwanted) - else: - if r not in available: - logger.warning('undeclared extra: %s' % r) - result.add(r) - return result -# -# Extended metadata functionality -# - -def _get_external_data(url): - result = {} - try: - # urlopen might fail if it runs into redirections, - # because of Python issue #13696. Fixed in locators - # using a custom redirect handler. - resp = urlopen(url) - headers = resp.info() - ct = headers.get('Content-Type') - if not ct.startswith('application/json'): - logger.debug('Unexpected response for JSON request: %s', ct) - else: - reader = codecs.getreader('utf-8')(resp) - #data = reader.read().decode('utf-8') - #result = json.loads(data) - result = json.load(reader) - except Exception as e: - logger.exception('Failed to get external data for %s: %s', url, e) - return result - -_external_data_base_url = 'https://www.red-dove.com/pypi/projects/' - -def get_project_data(name): - url = '%s/%s/project.json' % (name[0].upper(), name) - url = urljoin(_external_data_base_url, url) - result = _get_external_data(url) - return result - -def get_package_data(name, version): - url = '%s/%s/package-%s.json' % (name[0].upper(), name, version) - url = urljoin(_external_data_base_url, url) - return _get_external_data(url) - - -class Cache(object): - """ - A class implementing a cache for resources that need to live in the file system - e.g. shared libraries. This class was moved from resources to here because it - could be used by other modules, e.g. the wheel module. - """ - - def __init__(self, base): - """ - Initialise an instance. - - :param base: The base directory where the cache should be located. - """ - # we use 'isdir' instead of 'exists', because we want to - # fail if there's a file with that name - if not os.path.isdir(base): # pragma: no cover - os.makedirs(base) - if (os.stat(base).st_mode & 0o77) != 0: - logger.warning('Directory \'%s\' is not private', base) - self.base = os.path.abspath(os.path.normpath(base)) - - def prefix_to_dir(self, prefix): - """ - Converts a resource prefix to a directory name in the cache. - """ - return path_to_cache_dir(prefix) - - def clear(self): - """ - Clear the cache. - """ - not_removed = [] - for fn in os.listdir(self.base): - fn = os.path.join(self.base, fn) - try: - if os.path.islink(fn) or os.path.isfile(fn): - os.remove(fn) - elif os.path.isdir(fn): - shutil.rmtree(fn) - except Exception: - not_removed.append(fn) - return not_removed - - -class EventMixin(object): - """ - A very simple publish/subscribe system. - """ - def __init__(self): - self._subscribers = {} - - def add(self, event, subscriber, append=True): - """ - Add a subscriber for an event. - - :param event: The name of an event. - :param subscriber: The subscriber to be added (and called when the - event is published). - :param append: Whether to append or prepend the subscriber to an - existing subscriber list for the event. - """ - subs = self._subscribers - if event not in subs: - subs[event] = deque([subscriber]) - else: - sq = subs[event] - if append: - sq.append(subscriber) - else: - sq.appendleft(subscriber) - - def remove(self, event, subscriber): - """ - Remove a subscriber for an event. - - :param event: The name of an event. - :param subscriber: The subscriber to be removed. - """ - subs = self._subscribers - if event not in subs: - raise ValueError('No subscribers: %r' % event) - subs[event].remove(subscriber) - - def get_subscribers(self, event): - """ - Return an iterator for the subscribers for an event. - :param event: The event to return subscribers for. - """ - return iter(self._subscribers.get(event, ())) - - def publish(self, event, *args, **kwargs): - """ - Publish a event and return a list of values returned by its - subscribers. - - :param event: The event to publish. - :param args: The positional arguments to pass to the event's - subscribers. - :param kwargs: The keyword arguments to pass to the event's - subscribers. - """ - result = [] - for subscriber in self.get_subscribers(event): - try: - value = subscriber(event, *args, **kwargs) - except Exception: - logger.exception('Exception during event publication') - value = None - result.append(value) - logger.debug('publish %s: args = %s, kwargs = %s, result = %s', - event, args, kwargs, result) - return result - -# -# Simple sequencing -# -class Sequencer(object): - def __init__(self): - self._preds = {} - self._succs = {} - self._nodes = set() # nodes with no preds/succs - - def add_node(self, node): - self._nodes.add(node) - - def remove_node(self, node, edges=False): - if node in self._nodes: - self._nodes.remove(node) - if edges: - for p in set(self._preds.get(node, ())): - self.remove(p, node) - for s in set(self._succs.get(node, ())): - self.remove(node, s) - # Remove empties - for k, v in list(self._preds.items()): - if not v: - del self._preds[k] - for k, v in list(self._succs.items()): - if not v: - del self._succs[k] - - def add(self, pred, succ): - assert pred != succ - self._preds.setdefault(succ, set()).add(pred) - self._succs.setdefault(pred, set()).add(succ) - - def remove(self, pred, succ): - assert pred != succ - try: - preds = self._preds[succ] - succs = self._succs[pred] - except KeyError: # pragma: no cover - raise ValueError('%r not a successor of anything' % succ) - try: - preds.remove(pred) - succs.remove(succ) - except KeyError: # pragma: no cover - raise ValueError('%r not a successor of %r' % (succ, pred)) - - def is_step(self, step): - return (step in self._preds or step in self._succs or - step in self._nodes) - - def get_steps(self, final): - if not self.is_step(final): - raise ValueError('Unknown: %r' % final) - result = [] - todo = [] - seen = set() - todo.append(final) - while todo: - step = todo.pop(0) - if step in seen: - # if a step was already seen, - # move it to the end (so it will appear earlier - # when reversed on return) ... but not for the - # final step, as that would be confusing for - # users - if step != final: - result.remove(step) - result.append(step) - else: - seen.add(step) - result.append(step) - preds = self._preds.get(step, ()) - todo.extend(preds) - return reversed(result) - - @property - def strong_connections(self): - #http://en.wikipedia.org/wiki/Tarjan%27s_strongly_connected_components_algorithm - index_counter = [0] - stack = [] - lowlinks = {} - index = {} - result = [] - - graph = self._succs - - def strongconnect(node): - # set the depth index for this node to the smallest unused index - index[node] = index_counter[0] - lowlinks[node] = index_counter[0] - index_counter[0] += 1 - stack.append(node) - - # Consider successors - try: - successors = graph[node] - except Exception: - successors = [] - for successor in successors: - if successor not in lowlinks: - # Successor has not yet been visited - strongconnect(successor) - lowlinks[node] = min(lowlinks[node],lowlinks[successor]) - elif successor in stack: - # the successor is in the stack and hence in the current - # strongly connected component (SCC) - lowlinks[node] = min(lowlinks[node],index[successor]) - - # If `node` is a root node, pop the stack and generate an SCC - if lowlinks[node] == index[node]: - connected_component = [] - - while True: - successor = stack.pop() - connected_component.append(successor) - if successor == node: break - component = tuple(connected_component) - # storing the result - result.append(component) - - for node in graph: - if node not in lowlinks: - strongconnect(node) - - return result - - @property - def dot(self): - result = ['digraph G {'] - for succ in self._preds: - preds = self._preds[succ] - for pred in preds: - result.append(' %s -> %s;' % (pred, succ)) - for node in self._nodes: - result.append(' %s;' % node) - result.append('}') - return '\n'.join(result) - -# -# Unarchiving functionality for zip, tar, tgz, tbz, whl -# - -ARCHIVE_EXTENSIONS = ('.tar.gz', '.tar.bz2', '.tar', '.zip', - '.tgz', '.tbz', '.whl') - -def unarchive(archive_filename, dest_dir, format=None, check=True): - - def check_path(path): - if not isinstance(path, text_type): - path = path.decode('utf-8') - p = os.path.abspath(os.path.join(dest_dir, path)) - if not p.startswith(dest_dir) or p[plen] != os.sep: - raise ValueError('path outside destination: %r' % p) - - dest_dir = os.path.abspath(dest_dir) - plen = len(dest_dir) - archive = None - if format is None: - if archive_filename.endswith(('.zip', '.whl')): - format = 'zip' - elif archive_filename.endswith(('.tar.gz', '.tgz')): - format = 'tgz' - mode = 'r:gz' - elif archive_filename.endswith(('.tar.bz2', '.tbz')): - format = 'tbz' - mode = 'r:bz2' - elif archive_filename.endswith('.tar'): - format = 'tar' - mode = 'r' - else: # pragma: no cover - raise ValueError('Unknown format for %r' % archive_filename) - try: - if format == 'zip': - archive = ZipFile(archive_filename, 'r') - if check: - names = archive.namelist() - for name in names: - check_path(name) - else: - archive = tarfile.open(archive_filename, mode) - if check: - names = archive.getnames() - for name in names: - check_path(name) - if format != 'zip' and sys.version_info[0] < 3: - # See Python issue 17153. If the dest path contains Unicode, - # tarfile extraction fails on Python 2.x if a member path name - # contains non-ASCII characters - it leads to an implicit - # bytes -> unicode conversion using ASCII to decode. - for tarinfo in archive.getmembers(): - if not isinstance(tarinfo.name, text_type): - tarinfo.name = tarinfo.name.decode('utf-8') - archive.extractall(dest_dir) - - finally: - if archive: - archive.close() - - -def zip_dir(directory): - """zip a directory tree into a BytesIO object""" - result = io.BytesIO() - dlen = len(directory) - with ZipFile(result, "w") as zf: - for root, dirs, files in os.walk(directory): - for name in files: - full = os.path.join(root, name) - rel = root[dlen:] - dest = os.path.join(rel, name) - zf.write(full, dest) - return result - -# -# Simple progress bar -# - -UNITS = ('', 'K', 'M', 'G','T','P') - - -class Progress(object): - unknown = 'UNKNOWN' - - def __init__(self, minval=0, maxval=100): - assert maxval is None or maxval >= minval - self.min = self.cur = minval - self.max = maxval - self.started = None - self.elapsed = 0 - self.done = False - - def update(self, curval): - assert self.min <= curval - assert self.max is None or curval <= self.max - self.cur = curval - now = time.time() - if self.started is None: - self.started = now - else: - self.elapsed = now - self.started - - def increment(self, incr): - assert incr >= 0 - self.update(self.cur + incr) - - def start(self): - self.update(self.min) - return self - - def stop(self): - if self.max is not None: - self.update(self.max) - self.done = True - - @property - def maximum(self): - return self.unknown if self.max is None else self.max - - @property - def percentage(self): - if self.done: - result = '100 %' - elif self.max is None: - result = ' ?? %' - else: - v = 100.0 * (self.cur - self.min) / (self.max - self.min) - result = '%3d %%' % v - return result - - def format_duration(self, duration): - if (duration <= 0) and self.max is None or self.cur == self.min: - result = '??:??:??' - #elif duration < 1: - # result = '--:--:--' - else: - result = time.strftime('%H:%M:%S', time.gmtime(duration)) - return result - - @property - def ETA(self): - if self.done: - prefix = 'Done' - t = self.elapsed - #import pdb; pdb.set_trace() - else: - prefix = 'ETA ' - if self.max is None: - t = -1 - elif self.elapsed == 0 or (self.cur == self.min): - t = 0 - else: - #import pdb; pdb.set_trace() - t = float(self.max - self.min) - t /= self.cur - self.min - t = (t - 1) * self.elapsed - return '%s: %s' % (prefix, self.format_duration(t)) - - @property - def speed(self): - if self.elapsed == 0: - result = 0.0 - else: - result = (self.cur - self.min) / self.elapsed - for unit in UNITS: - if result < 1000: - break - result /= 1000.0 - return '%d %sB/s' % (result, unit) - -# -# Glob functionality -# - -RICH_GLOB = re.compile(r'\{([^}]*)\}') -_CHECK_RECURSIVE_GLOB = re.compile(r'[^/\\,{]\*\*|\*\*[^/\\,}]') -_CHECK_MISMATCH_SET = re.compile(r'^[^{]*\}|\{[^}]*$') - - -def iglob(path_glob): - """Extended globbing function that supports ** and {opt1,opt2,opt3}.""" - if _CHECK_RECURSIVE_GLOB.search(path_glob): - msg = """invalid glob %r: recursive glob "**" must be used alone""" - raise ValueError(msg % path_glob) - if _CHECK_MISMATCH_SET.search(path_glob): - msg = """invalid glob %r: mismatching set marker '{' or '}'""" - raise ValueError(msg % path_glob) - return _iglob(path_glob) - - -def _iglob(path_glob): - rich_path_glob = RICH_GLOB.split(path_glob, 1) - if len(rich_path_glob) > 1: - assert len(rich_path_glob) == 3, rich_path_glob - prefix, set, suffix = rich_path_glob - for item in set.split(','): - for path in _iglob(''.join((prefix, item, suffix))): - yield path - else: - if '**' not in path_glob: - for item in std_iglob(path_glob): - yield item - else: - prefix, radical = path_glob.split('**', 1) - if prefix == '': - prefix = '.' - if radical == '': - radical = '*' - else: - # we support both - radical = radical.lstrip('/') - radical = radical.lstrip('\\') - for path, dir, files in os.walk(prefix): - path = os.path.normpath(path) - for fn in _iglob(os.path.join(path, radical)): - yield fn - -if ssl: - from .compat import (HTTPSHandler as BaseHTTPSHandler, match_hostname, - CertificateError) - - -# -# HTTPSConnection which verifies certificates/matches domains -# - - class HTTPSConnection(httplib.HTTPSConnection): - ca_certs = None # set this to the path to the certs file (.pem) - check_domain = True # only used if ca_certs is not None - - # noinspection PyPropertyAccess - def connect(self): - sock = socket.create_connection((self.host, self.port), self.timeout) - if getattr(self, '_tunnel_host', False): - self.sock = sock - self._tunnel() - - if not hasattr(ssl, 'SSLContext'): - # For 2.x - if self.ca_certs: - cert_reqs = ssl.CERT_REQUIRED - else: - cert_reqs = ssl.CERT_NONE - self.sock = ssl.wrap_socket(sock, self.key_file, self.cert_file, - cert_reqs=cert_reqs, - ssl_version=ssl.PROTOCOL_SSLv23, - ca_certs=self.ca_certs) - else: # pragma: no cover - context = ssl.SSLContext(ssl.PROTOCOL_SSLv23) - context.options |= ssl.OP_NO_SSLv2 - if self.cert_file: - context.load_cert_chain(self.cert_file, self.key_file) - kwargs = {} - if self.ca_certs: - context.verify_mode = ssl.CERT_REQUIRED - context.load_verify_locations(cafile=self.ca_certs) - if getattr(ssl, 'HAS_SNI', False): - kwargs['server_hostname'] = self.host - self.sock = context.wrap_socket(sock, **kwargs) - if self.ca_certs and self.check_domain: - try: - match_hostname(self.sock.getpeercert(), self.host) - logger.debug('Host verified: %s', self.host) - except CertificateError: # pragma: no cover - self.sock.shutdown(socket.SHUT_RDWR) - self.sock.close() - raise - - class HTTPSHandler(BaseHTTPSHandler): - def __init__(self, ca_certs, check_domain=True): - BaseHTTPSHandler.__init__(self) - self.ca_certs = ca_certs - self.check_domain = check_domain - - def _conn_maker(self, *args, **kwargs): - """ - This is called to create a connection instance. Normally you'd - pass a connection class to do_open, but it doesn't actually check for - a class, and just expects a callable. As long as we behave just as a - constructor would have, we should be OK. If it ever changes so that - we *must* pass a class, we'll create an UnsafeHTTPSConnection class - which just sets check_domain to False in the class definition, and - choose which one to pass to do_open. - """ - result = HTTPSConnection(*args, **kwargs) - if self.ca_certs: - result.ca_certs = self.ca_certs - result.check_domain = self.check_domain - return result - - def https_open(self, req): - try: - return self.do_open(self._conn_maker, req) - except URLError as e: - if 'certificate verify failed' in str(e.reason): - raise CertificateError('Unable to verify server certificate ' - 'for %s' % req.host) - else: - raise - - # - # To prevent against mixing HTTP traffic with HTTPS (examples: A Man-In-The- - # Middle proxy using HTTP listens on port 443, or an index mistakenly serves - # HTML containing a http://xyz link when it should be https://xyz), - # you can use the following handler class, which does not allow HTTP traffic. - # - # It works by inheriting from HTTPHandler - so build_opener won't add a - # handler for HTTP itself. - # - class HTTPSOnlyHandler(HTTPSHandler, HTTPHandler): - def http_open(self, req): - raise URLError('Unexpected HTTP request on what should be a secure ' - 'connection: %s' % req) - -# -# XML-RPC with timeouts -# - -_ver_info = sys.version_info[:2] - -if _ver_info == (2, 6): - class HTTP(httplib.HTTP): - def __init__(self, host='', port=None, **kwargs): - if port == 0: # 0 means use port 0, not the default port - port = None - self._setup(self._connection_class(host, port, **kwargs)) - - - if ssl: - class HTTPS(httplib.HTTPS): - def __init__(self, host='', port=None, **kwargs): - if port == 0: # 0 means use port 0, not the default port - port = None - self._setup(self._connection_class(host, port, **kwargs)) - - -class Transport(xmlrpclib.Transport): - def __init__(self, timeout, use_datetime=0): - self.timeout = timeout - xmlrpclib.Transport.__init__(self, use_datetime) - - def make_connection(self, host): - h, eh, x509 = self.get_host_info(host) - if _ver_info == (2, 6): - result = HTTP(h, timeout=self.timeout) - else: - if not self._connection or host != self._connection[0]: - self._extra_headers = eh - self._connection = host, httplib.HTTPConnection(h) - result = self._connection[1] - return result - -if ssl: - class SafeTransport(xmlrpclib.SafeTransport): - def __init__(self, timeout, use_datetime=0): - self.timeout = timeout - xmlrpclib.SafeTransport.__init__(self, use_datetime) - - def make_connection(self, host): - h, eh, kwargs = self.get_host_info(host) - if not kwargs: - kwargs = {} - kwargs['timeout'] = self.timeout - if _ver_info == (2, 6): - result = HTTPS(host, None, **kwargs) - else: - if not self._connection or host != self._connection[0]: - self._extra_headers = eh - self._connection = host, httplib.HTTPSConnection(h, None, - **kwargs) - result = self._connection[1] - return result - - -class ServerProxy(xmlrpclib.ServerProxy): - def __init__(self, uri, **kwargs): - self.timeout = timeout = kwargs.pop('timeout', None) - # The above classes only come into play if a timeout - # is specified - if timeout is not None: - scheme, _ = splittype(uri) - use_datetime = kwargs.get('use_datetime', 0) - if scheme == 'https': - tcls = SafeTransport - else: - tcls = Transport - kwargs['transport'] = t = tcls(timeout, use_datetime=use_datetime) - self.transport = t - xmlrpclib.ServerProxy.__init__(self, uri, **kwargs) - -# -# CSV functionality. This is provided because on 2.x, the csv module can't -# handle Unicode. However, we need to deal with Unicode in e.g. RECORD files. -# - -def _csv_open(fn, mode, **kwargs): - if sys.version_info[0] < 3: - mode += 'b' - else: - kwargs['newline'] = '' - return open(fn, mode, **kwargs) - - -class CSVBase(object): - defaults = { - 'delimiter': str(','), # The strs are used because we need native - 'quotechar': str('"'), # str in the csv API (2.x won't take - 'lineterminator': str('\n') # Unicode) - } - - def __enter__(self): - return self - - def __exit__(self, *exc_info): - self.stream.close() - - -class CSVReader(CSVBase): - def __init__(self, **kwargs): - if 'stream' in kwargs: - stream = kwargs['stream'] - if sys.version_info[0] >= 3: - # needs to be a text stream - stream = codecs.getreader('utf-8')(stream) - self.stream = stream - else: - self.stream = _csv_open(kwargs['path'], 'r') - self.reader = csv.reader(self.stream, **self.defaults) - - def __iter__(self): - return self - - def next(self): - result = next(self.reader) - if sys.version_info[0] < 3: - for i, item in enumerate(result): - if not isinstance(item, text_type): - result[i] = item.decode('utf-8') - return result - - __next__ = next - -class CSVWriter(CSVBase): - def __init__(self, fn, **kwargs): - self.stream = _csv_open(fn, 'w') - self.writer = csv.writer(self.stream, **self.defaults) - - def writerow(self, row): - if sys.version_info[0] < 3: - r = [] - for item in row: - if isinstance(item, text_type): - item = item.encode('utf-8') - r.append(item) - row = r - self.writer.writerow(row) - -# -# Configurator functionality -# - -class Configurator(BaseConfigurator): - - value_converters = dict(BaseConfigurator.value_converters) - value_converters['inc'] = 'inc_convert' - - def __init__(self, config, base=None): - super(Configurator, self).__init__(config) - self.base = base or os.getcwd() - - def configure_custom(self, config): - def convert(o): - if isinstance(o, (list, tuple)): - result = type(o)([convert(i) for i in o]) - elif isinstance(o, dict): - if '()' in o: - result = self.configure_custom(o) - else: - result = {} - for k in o: - result[k] = convert(o[k]) - else: - result = self.convert(o) - return result - - c = config.pop('()') - if not callable(c): - c = self.resolve(c) - props = config.pop('.', None) - # Check for valid identifiers - args = config.pop('[]', ()) - if args: - args = tuple([convert(o) for o in args]) - items = [(k, convert(config[k])) for k in config if valid_ident(k)] - kwargs = dict(items) - result = c(*args, **kwargs) - if props: - for n, v in props.items(): - setattr(result, n, convert(v)) - return result - - def __getitem__(self, key): - result = self.config[key] - if isinstance(result, dict) and '()' in result: - self.config[key] = result = self.configure_custom(result) - return result - - def inc_convert(self, value): - """Default converter for the inc:// protocol.""" - if not os.path.isabs(value): - value = os.path.join(self.base, value) - with codecs.open(value, 'r', encoding='utf-8') as f: - result = json.load(f) - return result - -# -# Mixin for running subprocesses and capturing their output -# - -class SubprocessMixin(object): - def __init__(self, verbose=False, progress=None): - self.verbose = verbose - self.progress = progress - - def reader(self, stream, context): - """ - Read lines from a subprocess' output stream and either pass to a progress - callable (if specified) or write progress information to sys.stderr. - """ - progress = self.progress - verbose = self.verbose - while True: - s = stream.readline() - if not s: - break - if progress is not None: - progress(s, context) - else: - if not verbose: - sys.stderr.write('.') - else: - sys.stderr.write(s.decode('utf-8')) - sys.stderr.flush() - stream.close() - - def run_command(self, cmd, **kwargs): - p = subprocess.Popen(cmd, stdout=subprocess.PIPE, - stderr=subprocess.PIPE, **kwargs) - t1 = threading.Thread(target=self.reader, args=(p.stdout, 'stdout')) - t1.start() - t2 = threading.Thread(target=self.reader, args=(p.stderr, 'stderr')) - t2.start() - p.wait() - t1.join() - t2.join() - if self.progress is not None: - self.progress('done.', 'main') - elif self.verbose: - sys.stderr.write('done.\n') - return p - - -def normalize_name(name): - """Normalize a python package name a la PEP 503""" - # https://www.python.org/dev/peps/pep-0503/#normalized-names - return re.sub('[-_.]+', '-', name).lower() diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distlib/version.py b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distlib/version.py deleted file mode 100644 index 48c17c0..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distlib/version.py +++ /dev/null @@ -1,742 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (C) 2012-2016 The Python Software Foundation. -# See LICENSE.txt and CONTRIBUTORS.txt. -# -""" -Implementation of a flexible versioning scheme providing support for PEP-440, -setuptools-compatible and semantic versioning. -""" - -import logging -import re - -from .compat import string_types - -__all__ = ['NormalizedVersion', 'NormalizedMatcher', - 'LegacyVersion', 'LegacyMatcher', - 'SemanticVersion', 'SemanticMatcher', - 'UnsupportedVersionError', 'get_scheme'] - -logger = logging.getLogger(__name__) - - -class UnsupportedVersionError(ValueError): - """This is an unsupported version.""" - pass - - -class Version(object): - def __init__(self, s): - self._string = s = s.strip() - self._parts = parts = self.parse(s) - assert isinstance(parts, tuple) - assert len(parts) > 0 - - def parse(self, s): - raise NotImplementedError('please implement in a subclass') - - def _check_compatible(self, other): - if type(self) != type(other): - raise TypeError('cannot compare %r and %r' % (self, other)) - - def __eq__(self, other): - self._check_compatible(other) - return self._parts == other._parts - - def __ne__(self, other): - return not self.__eq__(other) - - def __lt__(self, other): - self._check_compatible(other) - return self._parts < other._parts - - def __gt__(self, other): - return not (self.__lt__(other) or self.__eq__(other)) - - def __le__(self, other): - return self.__lt__(other) or self.__eq__(other) - - def __ge__(self, other): - return self.__gt__(other) or self.__eq__(other) - - # See http://docs.python.org/reference/datamodel#object.__hash__ - def __hash__(self): - return hash(self._parts) - - def __repr__(self): - return "%s('%s')" % (self.__class__.__name__, self._string) - - def __str__(self): - return self._string - - @property - def is_prerelease(self): - raise NotImplementedError('Please implement in subclasses.') - - -class Matcher(object): - version_class = None - - dist_re = re.compile(r"^(\w[\s\w'.-]*)(\((.*)\))?") - comp_re = re.compile(r'^(<=|>=|<|>|!=|={2,3}|~=)?\s*([^\s,]+)$') - num_re = re.compile(r'^\d+(\.\d+)*$') - - # value is either a callable or the name of a method - _operators = { - '<': lambda v, c, p: v < c, - '>': lambda v, c, p: v > c, - '<=': lambda v, c, p: v == c or v < c, - '>=': lambda v, c, p: v == c or v > c, - '==': lambda v, c, p: v == c, - '===': lambda v, c, p: v == c, - # by default, compatible => >=. - '~=': lambda v, c, p: v == c or v > c, - '!=': lambda v, c, p: v != c, - } - - def __init__(self, s): - if self.version_class is None: - raise ValueError('Please specify a version class') - self._string = s = s.strip() - m = self.dist_re.match(s) - if not m: - raise ValueError('Not valid: %r' % s) - groups = m.groups('') - self.name = groups[0].strip() - self.key = self.name.lower() # for case-insensitive comparisons - clist = [] - if groups[2]: - constraints = [c.strip() for c in groups[2].split(',')] - for c in constraints: - m = self.comp_re.match(c) - if not m: - raise ValueError('Invalid %r in %r' % (c, s)) - groups = m.groups() - op = groups[0] or '~=' - s = groups[1] - if s.endswith('.*'): - if op not in ('==', '!='): - raise ValueError('\'.*\' not allowed for ' - '%r constraints' % op) - # Could be a partial version (e.g. for '2.*') which - # won't parse as a version, so keep it as a string - vn, prefix = s[:-2], True - if not self.num_re.match(vn): - # Just to check that vn is a valid version - self.version_class(vn) - else: - # Should parse as a version, so we can create an - # instance for the comparison - vn, prefix = self.version_class(s), False - clist.append((op, vn, prefix)) - self._parts = tuple(clist) - - def match(self, version): - """ - Check if the provided version matches the constraints. - - :param version: The version to match against this instance. - :type version: String or :class:`Version` instance. - """ - if isinstance(version, string_types): - version = self.version_class(version) - for operator, constraint, prefix in self._parts: - f = self._operators.get(operator) - if isinstance(f, string_types): - f = getattr(self, f) - if not f: - msg = ('%r not implemented ' - 'for %s' % (operator, self.__class__.__name__)) - raise NotImplementedError(msg) - if not f(version, constraint, prefix): - return False - return True - - @property - def exact_version(self): - result = None - if len(self._parts) == 1 and self._parts[0][0] in ('==', '==='): - result = self._parts[0][1] - return result - - def _check_compatible(self, other): - if type(self) != type(other) or self.name != other.name: - raise TypeError('cannot compare %s and %s' % (self, other)) - - def __eq__(self, other): - self._check_compatible(other) - return self.key == other.key and self._parts == other._parts - - def __ne__(self, other): - return not self.__eq__(other) - - # See http://docs.python.org/reference/datamodel#object.__hash__ - def __hash__(self): - return hash(self.key) + hash(self._parts) - - def __repr__(self): - return "%s(%r)" % (self.__class__.__name__, self._string) - - def __str__(self): - return self._string - - -PEP440_VERSION_RE = re.compile(r'^v?(\d+!)?(\d+(\.\d+)*)((a|b|c|rc)(\d+))?' - r'(\.(post)(\d+))?(\.(dev)(\d+))?' - r'(\+([a-zA-Z\d]+(\.[a-zA-Z\d]+)?))?$') - - -def _pep_440_key(s): - s = s.strip() - m = PEP440_VERSION_RE.match(s) - if not m: - raise UnsupportedVersionError('Not a valid version: %s' % s) - groups = m.groups() - nums = tuple(int(v) for v in groups[1].split('.')) - while len(nums) > 1 and nums[-1] == 0: - nums = nums[:-1] - - if not groups[0]: - epoch = 0 - else: - epoch = int(groups[0]) - pre = groups[4:6] - post = groups[7:9] - dev = groups[10:12] - local = groups[13] - if pre == (None, None): - pre = () - else: - pre = pre[0], int(pre[1]) - if post == (None, None): - post = () - else: - post = post[0], int(post[1]) - if dev == (None, None): - dev = () - else: - dev = dev[0], int(dev[1]) - if local is None: - local = () - else: - parts = [] - for part in local.split('.'): - # to ensure that numeric compares as > lexicographic, avoid - # comparing them directly, but encode a tuple which ensures - # correct sorting - if part.isdigit(): - part = (1, int(part)) - else: - part = (0, part) - parts.append(part) - local = tuple(parts) - if not pre: - # either before pre-release, or final release and after - if not post and dev: - # before pre-release - pre = ('a', -1) # to sort before a0 - else: - pre = ('z',) # to sort after all pre-releases - # now look at the state of post and dev. - if not post: - post = ('_',) # sort before 'a' - if not dev: - dev = ('final',) - - #print('%s -> %s' % (s, m.groups())) - return epoch, nums, pre, post, dev, local - - -_normalized_key = _pep_440_key - - -class NormalizedVersion(Version): - """A rational version. - - Good: - 1.2 # equivalent to "1.2.0" - 1.2.0 - 1.2a1 - 1.2.3a2 - 1.2.3b1 - 1.2.3c1 - 1.2.3.4 - TODO: fill this out - - Bad: - 1 # minimum two numbers - 1.2a # release level must have a release serial - 1.2.3b - """ - def parse(self, s): - result = _normalized_key(s) - # _normalized_key loses trailing zeroes in the release - # clause, since that's needed to ensure that X.Y == X.Y.0 == X.Y.0.0 - # However, PEP 440 prefix matching needs it: for example, - # (~= 1.4.5.0) matches differently to (~= 1.4.5.0.0). - m = PEP440_VERSION_RE.match(s) # must succeed - groups = m.groups() - self._release_clause = tuple(int(v) for v in groups[1].split('.')) - return result - - PREREL_TAGS = set(['a', 'b', 'c', 'rc', 'dev']) - - @property - def is_prerelease(self): - return any(t[0] in self.PREREL_TAGS for t in self._parts if t) - - -def _match_prefix(x, y): - x = str(x) - y = str(y) - if x == y: - return True - if not x.startswith(y): - return False - n = len(y) - return x[n] == '.' - - -class NormalizedMatcher(Matcher): - version_class = NormalizedVersion - - # value is either a callable or the name of a method - _operators = { - '~=': '_match_compatible', - '<': '_match_lt', - '>': '_match_gt', - '<=': '_match_le', - '>=': '_match_ge', - '==': '_match_eq', - '===': '_match_arbitrary', - '!=': '_match_ne', - } - - def _adjust_local(self, version, constraint, prefix): - if prefix: - strip_local = '+' not in constraint and version._parts[-1] - else: - # both constraint and version are - # NormalizedVersion instances. - # If constraint does not have a local component, - # ensure the version doesn't, either. - strip_local = not constraint._parts[-1] and version._parts[-1] - if strip_local: - s = version._string.split('+', 1)[0] - version = self.version_class(s) - return version, constraint - - def _match_lt(self, version, constraint, prefix): - version, constraint = self._adjust_local(version, constraint, prefix) - if version >= constraint: - return False - release_clause = constraint._release_clause - pfx = '.'.join([str(i) for i in release_clause]) - return not _match_prefix(version, pfx) - - def _match_gt(self, version, constraint, prefix): - version, constraint = self._adjust_local(version, constraint, prefix) - if version <= constraint: - return False - release_clause = constraint._release_clause - pfx = '.'.join([str(i) for i in release_clause]) - return not _match_prefix(version, pfx) - - def _match_le(self, version, constraint, prefix): - version, constraint = self._adjust_local(version, constraint, prefix) - return version <= constraint - - def _match_ge(self, version, constraint, prefix): - version, constraint = self._adjust_local(version, constraint, prefix) - return version >= constraint - - def _match_eq(self, version, constraint, prefix): - version, constraint = self._adjust_local(version, constraint, prefix) - if not prefix: - result = (version == constraint) - else: - result = _match_prefix(version, constraint) - return result - - def _match_arbitrary(self, version, constraint, prefix): - return str(version) == str(constraint) - - def _match_ne(self, version, constraint, prefix): - version, constraint = self._adjust_local(version, constraint, prefix) - if not prefix: - result = (version != constraint) - else: - result = not _match_prefix(version, constraint) - return result - - def _match_compatible(self, version, constraint, prefix): - version, constraint = self._adjust_local(version, constraint, prefix) - if version == constraint: - return True - if version < constraint: - return False -# if not prefix: -# return True - release_clause = constraint._release_clause - if len(release_clause) > 1: - release_clause = release_clause[:-1] - pfx = '.'.join([str(i) for i in release_clause]) - return _match_prefix(version, pfx) - -_REPLACEMENTS = ( - (re.compile('[.+-]$'), ''), # remove trailing puncts - (re.compile(r'^[.](\d)'), r'0.\1'), # .N -> 0.N at start - (re.compile('^[.-]'), ''), # remove leading puncts - (re.compile(r'^\((.*)\)$'), r'\1'), # remove parentheses - (re.compile(r'^v(ersion)?\s*(\d+)'), r'\2'), # remove leading v(ersion) - (re.compile(r'^r(ev)?\s*(\d+)'), r'\2'), # remove leading v(ersion) - (re.compile('[.]{2,}'), '.'), # multiple runs of '.' - (re.compile(r'\b(alfa|apha)\b'), 'alpha'), # misspelt alpha - (re.compile(r'\b(pre-alpha|prealpha)\b'), - 'pre.alpha'), # standardise - (re.compile(r'\(beta\)$'), 'beta'), # remove parentheses -) - -_SUFFIX_REPLACEMENTS = ( - (re.compile('^[:~._+-]+'), ''), # remove leading puncts - (re.compile('[,*")([\]]'), ''), # remove unwanted chars - (re.compile('[~:+_ -]'), '.'), # replace illegal chars - (re.compile('[.]{2,}'), '.'), # multiple runs of '.' - (re.compile(r'\.$'), ''), # trailing '.' -) - -_NUMERIC_PREFIX = re.compile(r'(\d+(\.\d+)*)') - - -def _suggest_semantic_version(s): - """ - Try to suggest a semantic form for a version for which - _suggest_normalized_version couldn't come up with anything. - """ - result = s.strip().lower() - for pat, repl in _REPLACEMENTS: - result = pat.sub(repl, result) - if not result: - result = '0.0.0' - - # Now look for numeric prefix, and separate it out from - # the rest. - #import pdb; pdb.set_trace() - m = _NUMERIC_PREFIX.match(result) - if not m: - prefix = '0.0.0' - suffix = result - else: - prefix = m.groups()[0].split('.') - prefix = [int(i) for i in prefix] - while len(prefix) < 3: - prefix.append(0) - if len(prefix) == 3: - suffix = result[m.end():] - else: - suffix = '.'.join([str(i) for i in prefix[3:]]) + result[m.end():] - prefix = prefix[:3] - prefix = '.'.join([str(i) for i in prefix]) - suffix = suffix.strip() - if suffix: - #import pdb; pdb.set_trace() - # massage the suffix. - for pat, repl in _SUFFIX_REPLACEMENTS: - suffix = pat.sub(repl, suffix) - - if not suffix: - result = prefix - else: - sep = '-' if 'dev' in suffix else '+' - result = prefix + sep + suffix - if not is_semver(result): - result = None - return result - - -def _suggest_normalized_version(s): - """Suggest a normalized version close to the given version string. - - If you have a version string that isn't rational (i.e. NormalizedVersion - doesn't like it) then you might be able to get an equivalent (or close) - rational version from this function. - - This does a number of simple normalizations to the given string, based - on observation of versions currently in use on PyPI. Given a dump of - those version during PyCon 2009, 4287 of them: - - 2312 (53.93%) match NormalizedVersion without change - with the automatic suggestion - - 3474 (81.04%) match when using this suggestion method - - @param s {str} An irrational version string. - @returns A rational version string, or None, if couldn't determine one. - """ - try: - _normalized_key(s) - return s # already rational - except UnsupportedVersionError: - pass - - rs = s.lower() - - # part of this could use maketrans - for orig, repl in (('-alpha', 'a'), ('-beta', 'b'), ('alpha', 'a'), - ('beta', 'b'), ('rc', 'c'), ('-final', ''), - ('-pre', 'c'), - ('-release', ''), ('.release', ''), ('-stable', ''), - ('+', '.'), ('_', '.'), (' ', ''), ('.final', ''), - ('final', '')): - rs = rs.replace(orig, repl) - - # if something ends with dev or pre, we add a 0 - rs = re.sub(r"pre$", r"pre0", rs) - rs = re.sub(r"dev$", r"dev0", rs) - - # if we have something like "b-2" or "a.2" at the end of the - # version, that is probably beta, alpha, etc - # let's remove the dash or dot - rs = re.sub(r"([abc]|rc)[\-\.](\d+)$", r"\1\2", rs) - - # 1.0-dev-r371 -> 1.0.dev371 - # 0.1-dev-r79 -> 0.1.dev79 - rs = re.sub(r"[\-\.](dev)[\-\.]?r?(\d+)$", r".\1\2", rs) - - # Clean: 2.0.a.3, 2.0.b1, 0.9.0~c1 - rs = re.sub(r"[.~]?([abc])\.?", r"\1", rs) - - # Clean: v0.3, v1.0 - if rs.startswith('v'): - rs = rs[1:] - - # Clean leading '0's on numbers. - #TODO: unintended side-effect on, e.g., "2003.05.09" - # PyPI stats: 77 (~2%) better - rs = re.sub(r"\b0+(\d+)(?!\d)", r"\1", rs) - - # Clean a/b/c with no version. E.g. "1.0a" -> "1.0a0". Setuptools infers - # zero. - # PyPI stats: 245 (7.56%) better - rs = re.sub(r"(\d+[abc])$", r"\g<1>0", rs) - - # the 'dev-rNNN' tag is a dev tag - rs = re.sub(r"\.?(dev-r|dev\.r)\.?(\d+)$", r".dev\2", rs) - - # clean the - when used as a pre delimiter - rs = re.sub(r"-(a|b|c)(\d+)$", r"\1\2", rs) - - # a terminal "dev" or "devel" can be changed into ".dev0" - rs = re.sub(r"[\.\-](dev|devel)$", r".dev0", rs) - - # a terminal "dev" can be changed into ".dev0" - rs = re.sub(r"(?![\.\-])dev$", r".dev0", rs) - - # a terminal "final" or "stable" can be removed - rs = re.sub(r"(final|stable)$", "", rs) - - # The 'r' and the '-' tags are post release tags - # 0.4a1.r10 -> 0.4a1.post10 - # 0.9.33-17222 -> 0.9.33.post17222 - # 0.9.33-r17222 -> 0.9.33.post17222 - rs = re.sub(r"\.?(r|-|-r)\.?(\d+)$", r".post\2", rs) - - # Clean 'r' instead of 'dev' usage: - # 0.9.33+r17222 -> 0.9.33.dev17222 - # 1.0dev123 -> 1.0.dev123 - # 1.0.git123 -> 1.0.dev123 - # 1.0.bzr123 -> 1.0.dev123 - # 0.1a0dev.123 -> 0.1a0.dev123 - # PyPI stats: ~150 (~4%) better - rs = re.sub(r"\.?(dev|git|bzr)\.?(\d+)$", r".dev\2", rs) - - # Clean '.pre' (normalized from '-pre' above) instead of 'c' usage: - # 0.2.pre1 -> 0.2c1 - # 0.2-c1 -> 0.2c1 - # 1.0preview123 -> 1.0c123 - # PyPI stats: ~21 (0.62%) better - rs = re.sub(r"\.?(pre|preview|-c)(\d+)$", r"c\g<2>", rs) - - # Tcl/Tk uses "px" for their post release markers - rs = re.sub(r"p(\d+)$", r".post\1", rs) - - try: - _normalized_key(rs) - except UnsupportedVersionError: - rs = None - return rs - -# -# Legacy version processing (distribute-compatible) -# - -_VERSION_PART = re.compile(r'([a-z]+|\d+|[\.-])', re.I) -_VERSION_REPLACE = { - 'pre': 'c', - 'preview': 'c', - '-': 'final-', - 'rc': 'c', - 'dev': '@', - '': None, - '.': None, -} - - -def _legacy_key(s): - def get_parts(s): - result = [] - for p in _VERSION_PART.split(s.lower()): - p = _VERSION_REPLACE.get(p, p) - if p: - if '0' <= p[:1] <= '9': - p = p.zfill(8) - else: - p = '*' + p - result.append(p) - result.append('*final') - return result - - result = [] - for p in get_parts(s): - if p.startswith('*'): - if p < '*final': - while result and result[-1] == '*final-': - result.pop() - while result and result[-1] == '00000000': - result.pop() - result.append(p) - return tuple(result) - - -class LegacyVersion(Version): - def parse(self, s): - return _legacy_key(s) - - @property - def is_prerelease(self): - result = False - for x in self._parts: - if (isinstance(x, string_types) and x.startswith('*') and - x < '*final'): - result = True - break - return result - - -class LegacyMatcher(Matcher): - version_class = LegacyVersion - - _operators = dict(Matcher._operators) - _operators['~='] = '_match_compatible' - - numeric_re = re.compile('^(\d+(\.\d+)*)') - - def _match_compatible(self, version, constraint, prefix): - if version < constraint: - return False - m = self.numeric_re.match(str(constraint)) - if not m: - logger.warning('Cannot compute compatible match for version %s ' - ' and constraint %s', version, constraint) - return True - s = m.groups()[0] - if '.' in s: - s = s.rsplit('.', 1)[0] - return _match_prefix(version, s) - -# -# Semantic versioning -# - -_SEMVER_RE = re.compile(r'^(\d+)\.(\d+)\.(\d+)' - r'(-[a-z0-9]+(\.[a-z0-9-]+)*)?' - r'(\+[a-z0-9]+(\.[a-z0-9-]+)*)?$', re.I) - - -def is_semver(s): - return _SEMVER_RE.match(s) - - -def _semantic_key(s): - def make_tuple(s, absent): - if s is None: - result = (absent,) - else: - parts = s[1:].split('.') - # We can't compare ints and strings on Python 3, so fudge it - # by zero-filling numeric values so simulate a numeric comparison - result = tuple([p.zfill(8) if p.isdigit() else p for p in parts]) - return result - - m = is_semver(s) - if not m: - raise UnsupportedVersionError(s) - groups = m.groups() - major, minor, patch = [int(i) for i in groups[:3]] - # choose the '|' and '*' so that versions sort correctly - pre, build = make_tuple(groups[3], '|'), make_tuple(groups[5], '*') - return (major, minor, patch), pre, build - - -class SemanticVersion(Version): - def parse(self, s): - return _semantic_key(s) - - @property - def is_prerelease(self): - return self._parts[1][0] != '|' - - -class SemanticMatcher(Matcher): - version_class = SemanticVersion - - -class VersionScheme(object): - def __init__(self, key, matcher, suggester=None): - self.key = key - self.matcher = matcher - self.suggester = suggester - - def is_valid_version(self, s): - try: - self.matcher.version_class(s) - result = True - except UnsupportedVersionError: - result = False - return result - - def is_valid_matcher(self, s): - try: - self.matcher(s) - result = True - except UnsupportedVersionError: - result = False - return result - - def is_valid_constraint_list(self, s): - """ - Used for processing some metadata fields - """ - return self.is_valid_matcher('dummy_name (%s)' % s) - - def suggest(self, s): - if self.suggester is None: - result = None - else: - result = self.suggester(s) - return result - -_SCHEMES = { - 'normalized': VersionScheme(_normalized_key, NormalizedMatcher, - _suggest_normalized_version), - 'legacy': VersionScheme(_legacy_key, LegacyMatcher, lambda self, s: s), - 'semantic': VersionScheme(_semantic_key, SemanticMatcher, - _suggest_semantic_version), -} - -_SCHEMES['default'] = _SCHEMES['normalized'] - - -def get_scheme(name): - if name not in _SCHEMES: - raise ValueError('unknown scheme name: %r' % name) - return _SCHEMES[name] diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distlib/w32.exe b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distlib/w32.exe deleted file mode 100644 index 85a90a5..0000000 Binary files a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distlib/w32.exe and /dev/null differ diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distlib/w64.exe b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distlib/w64.exe deleted file mode 100644 index b3aea31..0000000 Binary files a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distlib/w64.exe and /dev/null differ diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distlib/wheel.py b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distlib/wheel.py deleted file mode 100644 index 2952b8e..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distlib/wheel.py +++ /dev/null @@ -1,978 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (C) 2013-2016 Vinay Sajip. -# Licensed to the Python Software Foundation under a contributor agreement. -# See LICENSE.txt and CONTRIBUTORS.txt. -# -from __future__ import unicode_literals - -import base64 -import codecs -import datetime -import distutils.util -from email import message_from_file -import hashlib -import imp -import json -import logging -import os -import posixpath -import re -import shutil -import sys -import tempfile -import zipfile - -from . import __version__, DistlibException -from .compat import sysconfig, ZipFile, fsdecode, text_type, filter -from .database import InstalledDistribution -from .metadata import Metadata, METADATA_FILENAME -from .util import (FileOperator, convert_path, CSVReader, CSVWriter, Cache, - cached_property, get_cache_base, read_exports, tempdir) -from .version import NormalizedVersion, UnsupportedVersionError - -logger = logging.getLogger(__name__) - -cache = None # created when needed - -if hasattr(sys, 'pypy_version_info'): - IMP_PREFIX = 'pp' -elif sys.platform.startswith('java'): - IMP_PREFIX = 'jy' -elif sys.platform == 'cli': - IMP_PREFIX = 'ip' -else: - IMP_PREFIX = 'cp' - -VER_SUFFIX = sysconfig.get_config_var('py_version_nodot') -if not VER_SUFFIX: # pragma: no cover - VER_SUFFIX = '%s%s' % sys.version_info[:2] -PYVER = 'py' + VER_SUFFIX -IMPVER = IMP_PREFIX + VER_SUFFIX - -ARCH = distutils.util.get_platform().replace('-', '_').replace('.', '_') - -ABI = sysconfig.get_config_var('SOABI') -if ABI and ABI.startswith('cpython-'): - ABI = ABI.replace('cpython-', 'cp') -else: - def _derive_abi(): - parts = ['cp', VER_SUFFIX] - if sysconfig.get_config_var('Py_DEBUG'): - parts.append('d') - if sysconfig.get_config_var('WITH_PYMALLOC'): - parts.append('m') - if sysconfig.get_config_var('Py_UNICODE_SIZE') == 4: - parts.append('u') - return ''.join(parts) - ABI = _derive_abi() - del _derive_abi - -FILENAME_RE = re.compile(r''' -(?P[^-]+) --(?P\d+[^-]*) -(-(?P\d+[^-]*))? --(?P\w+\d+(\.\w+\d+)*) --(?P\w+) --(?P\w+(\.\w+)*) -\.whl$ -''', re.IGNORECASE | re.VERBOSE) - -NAME_VERSION_RE = re.compile(r''' -(?P[^-]+) --(?P\d+[^-]*) -(-(?P\d+[^-]*))?$ -''', re.IGNORECASE | re.VERBOSE) - -SHEBANG_RE = re.compile(br'\s*#![^\r\n]*') -SHEBANG_DETAIL_RE = re.compile(br'^(\s*#!("[^"]+"|\S+))\s+(.*)$') -SHEBANG_PYTHON = b'#!python' -SHEBANG_PYTHONW = b'#!pythonw' - -if os.sep == '/': - to_posix = lambda o: o -else: - to_posix = lambda o: o.replace(os.sep, '/') - - -class Mounter(object): - def __init__(self): - self.impure_wheels = {} - self.libs = {} - - def add(self, pathname, extensions): - self.impure_wheels[pathname] = extensions - self.libs.update(extensions) - - def remove(self, pathname): - extensions = self.impure_wheels.pop(pathname) - for k, v in extensions: - if k in self.libs: - del self.libs[k] - - def find_module(self, fullname, path=None): - if fullname in self.libs: - result = self - else: - result = None - return result - - def load_module(self, fullname): - if fullname in sys.modules: - result = sys.modules[fullname] - else: - if fullname not in self.libs: - raise ImportError('unable to find extension for %s' % fullname) - result = imp.load_dynamic(fullname, self.libs[fullname]) - result.__loader__ = self - parts = fullname.rsplit('.', 1) - if len(parts) > 1: - result.__package__ = parts[0] - return result - -_hook = Mounter() - - -class Wheel(object): - """ - Class to build and install from Wheel files (PEP 427). - """ - - wheel_version = (1, 1) - hash_kind = 'sha256' - - def __init__(self, filename=None, sign=False, verify=False): - """ - Initialise an instance using a (valid) filename. - """ - self.sign = sign - self.should_verify = verify - self.buildver = '' - self.pyver = [PYVER] - self.abi = ['none'] - self.arch = ['any'] - self.dirname = os.getcwd() - if filename is None: - self.name = 'dummy' - self.version = '0.1' - self._filename = self.filename - else: - m = NAME_VERSION_RE.match(filename) - if m: - info = m.groupdict('') - self.name = info['nm'] - # Reinstate the local version separator - self.version = info['vn'].replace('_', '-') - self.buildver = info['bn'] - self._filename = self.filename - else: - dirname, filename = os.path.split(filename) - m = FILENAME_RE.match(filename) - if not m: - raise DistlibException('Invalid name or ' - 'filename: %r' % filename) - if dirname: - self.dirname = os.path.abspath(dirname) - self._filename = filename - info = m.groupdict('') - self.name = info['nm'] - self.version = info['vn'] - self.buildver = info['bn'] - self.pyver = info['py'].split('.') - self.abi = info['bi'].split('.') - self.arch = info['ar'].split('.') - - @property - def filename(self): - """ - Build and return a filename from the various components. - """ - if self.buildver: - buildver = '-' + self.buildver - else: - buildver = '' - pyver = '.'.join(self.pyver) - abi = '.'.join(self.abi) - arch = '.'.join(self.arch) - # replace - with _ as a local version separator - version = self.version.replace('-', '_') - return '%s-%s%s-%s-%s-%s.whl' % (self.name, version, buildver, - pyver, abi, arch) - - @property - def exists(self): - path = os.path.join(self.dirname, self.filename) - return os.path.isfile(path) - - @property - def tags(self): - for pyver in self.pyver: - for abi in self.abi: - for arch in self.arch: - yield pyver, abi, arch - - @cached_property - def metadata(self): - pathname = os.path.join(self.dirname, self.filename) - name_ver = '%s-%s' % (self.name, self.version) - info_dir = '%s.dist-info' % name_ver - wrapper = codecs.getreader('utf-8') - with ZipFile(pathname, 'r') as zf: - wheel_metadata = self.get_wheel_metadata(zf) - wv = wheel_metadata['Wheel-Version'].split('.', 1) - file_version = tuple([int(i) for i in wv]) - if file_version < (1, 1): - fn = 'METADATA' - else: - fn = METADATA_FILENAME - try: - metadata_filename = posixpath.join(info_dir, fn) - with zf.open(metadata_filename) as bf: - wf = wrapper(bf) - result = Metadata(fileobj=wf) - except KeyError: - raise ValueError('Invalid wheel, because %s is ' - 'missing' % fn) - return result - - def get_wheel_metadata(self, zf): - name_ver = '%s-%s' % (self.name, self.version) - info_dir = '%s.dist-info' % name_ver - metadata_filename = posixpath.join(info_dir, 'WHEEL') - with zf.open(metadata_filename) as bf: - wf = codecs.getreader('utf-8')(bf) - message = message_from_file(wf) - return dict(message) - - @cached_property - def info(self): - pathname = os.path.join(self.dirname, self.filename) - with ZipFile(pathname, 'r') as zf: - result = self.get_wheel_metadata(zf) - return result - - def process_shebang(self, data): - m = SHEBANG_RE.match(data) - if m: - end = m.end() - shebang, data_after_shebang = data[:end], data[end:] - # Preserve any arguments after the interpreter - if b'pythonw' in shebang.lower(): - shebang_python = SHEBANG_PYTHONW - else: - shebang_python = SHEBANG_PYTHON - m = SHEBANG_DETAIL_RE.match(shebang) - if m: - args = b' ' + m.groups()[-1] - else: - args = b'' - shebang = shebang_python + args - data = shebang + data_after_shebang - else: - cr = data.find(b'\r') - lf = data.find(b'\n') - if cr < 0 or cr > lf: - term = b'\n' - else: - if data[cr:cr + 2] == b'\r\n': - term = b'\r\n' - else: - term = b'\r' - data = SHEBANG_PYTHON + term + data - return data - - def get_hash(self, data, hash_kind=None): - if hash_kind is None: - hash_kind = self.hash_kind - try: - hasher = getattr(hashlib, hash_kind) - except AttributeError: - raise DistlibException('Unsupported hash algorithm: %r' % hash_kind) - result = hasher(data).digest() - result = base64.urlsafe_b64encode(result).rstrip(b'=').decode('ascii') - return hash_kind, result - - def write_record(self, records, record_path, base): - records = list(records) # make a copy for sorting - p = to_posix(os.path.relpath(record_path, base)) - records.append((p, '', '')) - records.sort() - with CSVWriter(record_path) as writer: - for row in records: - writer.writerow(row) - - def write_records(self, info, libdir, archive_paths): - records = [] - distinfo, info_dir = info - hasher = getattr(hashlib, self.hash_kind) - for ap, p in archive_paths: - with open(p, 'rb') as f: - data = f.read() - digest = '%s=%s' % self.get_hash(data) - size = os.path.getsize(p) - records.append((ap, digest, size)) - - p = os.path.join(distinfo, 'RECORD') - self.write_record(records, p, libdir) - ap = to_posix(os.path.join(info_dir, 'RECORD')) - archive_paths.append((ap, p)) - - def build_zip(self, pathname, archive_paths): - with ZipFile(pathname, 'w', zipfile.ZIP_DEFLATED) as zf: - for ap, p in archive_paths: - logger.debug('Wrote %s to %s in wheel', p, ap) - zf.write(p, ap) - - def build(self, paths, tags=None, wheel_version=None): - """ - Build a wheel from files in specified paths, and use any specified tags - when determining the name of the wheel. - """ - if tags is None: - tags = {} - - libkey = list(filter(lambda o: o in paths, ('purelib', 'platlib')))[0] - if libkey == 'platlib': - is_pure = 'false' - default_pyver = [IMPVER] - default_abi = [ABI] - default_arch = [ARCH] - else: - is_pure = 'true' - default_pyver = [PYVER] - default_abi = ['none'] - default_arch = ['any'] - - self.pyver = tags.get('pyver', default_pyver) - self.abi = tags.get('abi', default_abi) - self.arch = tags.get('arch', default_arch) - - libdir = paths[libkey] - - name_ver = '%s-%s' % (self.name, self.version) - data_dir = '%s.data' % name_ver - info_dir = '%s.dist-info' % name_ver - - archive_paths = [] - - # First, stuff which is not in site-packages - for key in ('data', 'headers', 'scripts'): - if key not in paths: - continue - path = paths[key] - if os.path.isdir(path): - for root, dirs, files in os.walk(path): - for fn in files: - p = fsdecode(os.path.join(root, fn)) - rp = os.path.relpath(p, path) - ap = to_posix(os.path.join(data_dir, key, rp)) - archive_paths.append((ap, p)) - if key == 'scripts' and not p.endswith('.exe'): - with open(p, 'rb') as f: - data = f.read() - data = self.process_shebang(data) - with open(p, 'wb') as f: - f.write(data) - - # Now, stuff which is in site-packages, other than the - # distinfo stuff. - path = libdir - distinfo = None - for root, dirs, files in os.walk(path): - if root == path: - # At the top level only, save distinfo for later - # and skip it for now - for i, dn in enumerate(dirs): - dn = fsdecode(dn) - if dn.endswith('.dist-info'): - distinfo = os.path.join(root, dn) - del dirs[i] - break - assert distinfo, '.dist-info directory expected, not found' - - for fn in files: - # comment out next suite to leave .pyc files in - if fsdecode(fn).endswith(('.pyc', '.pyo')): - continue - p = os.path.join(root, fn) - rp = to_posix(os.path.relpath(p, path)) - archive_paths.append((rp, p)) - - # Now distinfo. Assumed to be flat, i.e. os.listdir is enough. - files = os.listdir(distinfo) - for fn in files: - if fn not in ('RECORD', 'INSTALLER', 'SHARED', 'WHEEL'): - p = fsdecode(os.path.join(distinfo, fn)) - ap = to_posix(os.path.join(info_dir, fn)) - archive_paths.append((ap, p)) - - wheel_metadata = [ - 'Wheel-Version: %d.%d' % (wheel_version or self.wheel_version), - 'Generator: distlib %s' % __version__, - 'Root-Is-Purelib: %s' % is_pure, - ] - for pyver, abi, arch in self.tags: - wheel_metadata.append('Tag: %s-%s-%s' % (pyver, abi, arch)) - p = os.path.join(distinfo, 'WHEEL') - with open(p, 'w') as f: - f.write('\n'.join(wheel_metadata)) - ap = to_posix(os.path.join(info_dir, 'WHEEL')) - archive_paths.append((ap, p)) - - # Now, at last, RECORD. - # Paths in here are archive paths - nothing else makes sense. - self.write_records((distinfo, info_dir), libdir, archive_paths) - # Now, ready to build the zip file - pathname = os.path.join(self.dirname, self.filename) - self.build_zip(pathname, archive_paths) - return pathname - - def install(self, paths, maker, **kwargs): - """ - Install a wheel to the specified paths. If kwarg ``warner`` is - specified, it should be a callable, which will be called with two - tuples indicating the wheel version of this software and the wheel - version in the file, if there is a discrepancy in the versions. - This can be used to issue any warnings to raise any exceptions. - If kwarg ``lib_only`` is True, only the purelib/platlib files are - installed, and the headers, scripts, data and dist-info metadata are - not written. - - The return value is a :class:`InstalledDistribution` instance unless - ``options.lib_only`` is True, in which case the return value is ``None``. - """ - - dry_run = maker.dry_run - warner = kwargs.get('warner') - lib_only = kwargs.get('lib_only', False) - - pathname = os.path.join(self.dirname, self.filename) - name_ver = '%s-%s' % (self.name, self.version) - data_dir = '%s.data' % name_ver - info_dir = '%s.dist-info' % name_ver - - metadata_name = posixpath.join(info_dir, METADATA_FILENAME) - wheel_metadata_name = posixpath.join(info_dir, 'WHEEL') - record_name = posixpath.join(info_dir, 'RECORD') - - wrapper = codecs.getreader('utf-8') - - with ZipFile(pathname, 'r') as zf: - with zf.open(wheel_metadata_name) as bwf: - wf = wrapper(bwf) - message = message_from_file(wf) - wv = message['Wheel-Version'].split('.', 1) - file_version = tuple([int(i) for i in wv]) - if (file_version != self.wheel_version) and warner: - warner(self.wheel_version, file_version) - - if message['Root-Is-Purelib'] == 'true': - libdir = paths['purelib'] - else: - libdir = paths['platlib'] - - records = {} - with zf.open(record_name) as bf: - with CSVReader(stream=bf) as reader: - for row in reader: - p = row[0] - records[p] = row - - data_pfx = posixpath.join(data_dir, '') - info_pfx = posixpath.join(info_dir, '') - script_pfx = posixpath.join(data_dir, 'scripts', '') - - # make a new instance rather than a copy of maker's, - # as we mutate it - fileop = FileOperator(dry_run=dry_run) - fileop.record = True # so we can rollback if needed - - bc = not sys.dont_write_bytecode # Double negatives. Lovely! - - outfiles = [] # for RECORD writing - - # for script copying/shebang processing - workdir = tempfile.mkdtemp() - # set target dir later - # we default add_launchers to False, as the - # Python Launcher should be used instead - maker.source_dir = workdir - maker.target_dir = None - try: - for zinfo in zf.infolist(): - arcname = zinfo.filename - if isinstance(arcname, text_type): - u_arcname = arcname - else: - u_arcname = arcname.decode('utf-8') - # The signature file won't be in RECORD, - # and we don't currently don't do anything with it - if u_arcname.endswith('/RECORD.jws'): - continue - row = records[u_arcname] - if row[2] and str(zinfo.file_size) != row[2]: - raise DistlibException('size mismatch for ' - '%s' % u_arcname) - if row[1]: - kind, value = row[1].split('=', 1) - with zf.open(arcname) as bf: - data = bf.read() - _, digest = self.get_hash(data, kind) - if digest != value: - raise DistlibException('digest mismatch for ' - '%s' % arcname) - - if lib_only and u_arcname.startswith((info_pfx, data_pfx)): - logger.debug('lib_only: skipping %s', u_arcname) - continue - is_script = (u_arcname.startswith(script_pfx) - and not u_arcname.endswith('.exe')) - - if u_arcname.startswith(data_pfx): - _, where, rp = u_arcname.split('/', 2) - outfile = os.path.join(paths[where], convert_path(rp)) - else: - # meant for site-packages. - if u_arcname in (wheel_metadata_name, record_name): - continue - outfile = os.path.join(libdir, convert_path(u_arcname)) - if not is_script: - with zf.open(arcname) as bf: - fileop.copy_stream(bf, outfile) - outfiles.append(outfile) - # Double check the digest of the written file - if not dry_run and row[1]: - with open(outfile, 'rb') as bf: - data = bf.read() - _, newdigest = self.get_hash(data, kind) - if newdigest != digest: - raise DistlibException('digest mismatch ' - 'on write for ' - '%s' % outfile) - if bc and outfile.endswith('.py'): - try: - pyc = fileop.byte_compile(outfile) - outfiles.append(pyc) - except Exception: - # Don't give up if byte-compilation fails, - # but log it and perhaps warn the user - logger.warning('Byte-compilation failed', - exc_info=True) - else: - fn = os.path.basename(convert_path(arcname)) - workname = os.path.join(workdir, fn) - with zf.open(arcname) as bf: - fileop.copy_stream(bf, workname) - - dn, fn = os.path.split(outfile) - maker.target_dir = dn - filenames = maker.make(fn) - fileop.set_executable_mode(filenames) - outfiles.extend(filenames) - - if lib_only: - logger.debug('lib_only: returning None') - dist = None - else: - # Generate scripts - - # Try to get pydist.json so we can see if there are - # any commands to generate. If this fails (e.g. because - # of a legacy wheel), log a warning but don't give up. - commands = None - file_version = self.info['Wheel-Version'] - if file_version == '1.0': - # Use legacy info - ep = posixpath.join(info_dir, 'entry_points.txt') - try: - with zf.open(ep) as bwf: - epdata = read_exports(bwf) - commands = {} - for key in ('console', 'gui'): - k = '%s_scripts' % key - if k in epdata: - commands['wrap_%s' % key] = d = {} - for v in epdata[k].values(): - s = '%s:%s' % (v.prefix, v.suffix) - if v.flags: - s += ' %s' % v.flags - d[v.name] = s - except Exception: - logger.warning('Unable to read legacy script ' - 'metadata, so cannot generate ' - 'scripts') - else: - try: - with zf.open(metadata_name) as bwf: - wf = wrapper(bwf) - commands = json.load(wf).get('extensions') - if commands: - commands = commands.get('python.commands') - except Exception: - logger.warning('Unable to read JSON metadata, so ' - 'cannot generate scripts') - if commands: - console_scripts = commands.get('wrap_console', {}) - gui_scripts = commands.get('wrap_gui', {}) - if console_scripts or gui_scripts: - script_dir = paths.get('scripts', '') - if not os.path.isdir(script_dir): - raise ValueError('Valid script path not ' - 'specified') - maker.target_dir = script_dir - for k, v in console_scripts.items(): - script = '%s = %s' % (k, v) - filenames = maker.make(script) - fileop.set_executable_mode(filenames) - - if gui_scripts: - options = {'gui': True } - for k, v in gui_scripts.items(): - script = '%s = %s' % (k, v) - filenames = maker.make(script, options) - fileop.set_executable_mode(filenames) - - p = os.path.join(libdir, info_dir) - dist = InstalledDistribution(p) - - # Write SHARED - paths = dict(paths) # don't change passed in dict - del paths['purelib'] - del paths['platlib'] - paths['lib'] = libdir - p = dist.write_shared_locations(paths, dry_run) - if p: - outfiles.append(p) - - # Write RECORD - dist.write_installed_files(outfiles, paths['prefix'], - dry_run) - return dist - except Exception: # pragma: no cover - logger.exception('installation failed.') - fileop.rollback() - raise - finally: - shutil.rmtree(workdir) - - def _get_dylib_cache(self): - global cache - if cache is None: - # Use native string to avoid issues on 2.x: see Python #20140. - base = os.path.join(get_cache_base(), str('dylib-cache'), - sys.version[:3]) - cache = Cache(base) - return cache - - def _get_extensions(self): - pathname = os.path.join(self.dirname, self.filename) - name_ver = '%s-%s' % (self.name, self.version) - info_dir = '%s.dist-info' % name_ver - arcname = posixpath.join(info_dir, 'EXTENSIONS') - wrapper = codecs.getreader('utf-8') - result = [] - with ZipFile(pathname, 'r') as zf: - try: - with zf.open(arcname) as bf: - wf = wrapper(bf) - extensions = json.load(wf) - cache = self._get_dylib_cache() - prefix = cache.prefix_to_dir(pathname) - cache_base = os.path.join(cache.base, prefix) - if not os.path.isdir(cache_base): - os.makedirs(cache_base) - for name, relpath in extensions.items(): - dest = os.path.join(cache_base, convert_path(relpath)) - if not os.path.exists(dest): - extract = True - else: - file_time = os.stat(dest).st_mtime - file_time = datetime.datetime.fromtimestamp(file_time) - info = zf.getinfo(relpath) - wheel_time = datetime.datetime(*info.date_time) - extract = wheel_time > file_time - if extract: - zf.extract(relpath, cache_base) - result.append((name, dest)) - except KeyError: - pass - return result - - def is_compatible(self): - """ - Determine if a wheel is compatible with the running system. - """ - return is_compatible(self) - - def is_mountable(self): - """ - Determine if a wheel is asserted as mountable by its metadata. - """ - return True # for now - metadata details TBD - - def mount(self, append=False): - pathname = os.path.abspath(os.path.join(self.dirname, self.filename)) - if not self.is_compatible(): - msg = 'Wheel %s not compatible with this Python.' % pathname - raise DistlibException(msg) - if not self.is_mountable(): - msg = 'Wheel %s is marked as not mountable.' % pathname - raise DistlibException(msg) - if pathname in sys.path: - logger.debug('%s already in path', pathname) - else: - if append: - sys.path.append(pathname) - else: - sys.path.insert(0, pathname) - extensions = self._get_extensions() - if extensions: - if _hook not in sys.meta_path: - sys.meta_path.append(_hook) - _hook.add(pathname, extensions) - - def unmount(self): - pathname = os.path.abspath(os.path.join(self.dirname, self.filename)) - if pathname not in sys.path: - logger.debug('%s not in path', pathname) - else: - sys.path.remove(pathname) - if pathname in _hook.impure_wheels: - _hook.remove(pathname) - if not _hook.impure_wheels: - if _hook in sys.meta_path: - sys.meta_path.remove(_hook) - - def verify(self): - pathname = os.path.join(self.dirname, self.filename) - name_ver = '%s-%s' % (self.name, self.version) - data_dir = '%s.data' % name_ver - info_dir = '%s.dist-info' % name_ver - - metadata_name = posixpath.join(info_dir, METADATA_FILENAME) - wheel_metadata_name = posixpath.join(info_dir, 'WHEEL') - record_name = posixpath.join(info_dir, 'RECORD') - - wrapper = codecs.getreader('utf-8') - - with ZipFile(pathname, 'r') as zf: - with zf.open(wheel_metadata_name) as bwf: - wf = wrapper(bwf) - message = message_from_file(wf) - wv = message['Wheel-Version'].split('.', 1) - file_version = tuple([int(i) for i in wv]) - # TODO version verification - - records = {} - with zf.open(record_name) as bf: - with CSVReader(stream=bf) as reader: - for row in reader: - p = row[0] - records[p] = row - - for zinfo in zf.infolist(): - arcname = zinfo.filename - if isinstance(arcname, text_type): - u_arcname = arcname - else: - u_arcname = arcname.decode('utf-8') - if '..' in u_arcname: - raise DistlibException('invalid entry in ' - 'wheel: %r' % u_arcname) - - # The signature file won't be in RECORD, - # and we don't currently don't do anything with it - if u_arcname.endswith('/RECORD.jws'): - continue - row = records[u_arcname] - if row[2] and str(zinfo.file_size) != row[2]: - raise DistlibException('size mismatch for ' - '%s' % u_arcname) - if row[1]: - kind, value = row[1].split('=', 1) - with zf.open(arcname) as bf: - data = bf.read() - _, digest = self.get_hash(data, kind) - if digest != value: - raise DistlibException('digest mismatch for ' - '%s' % arcname) - - def update(self, modifier, dest_dir=None, **kwargs): - """ - Update the contents of a wheel in a generic way. The modifier should - be a callable which expects a dictionary argument: its keys are - archive-entry paths, and its values are absolute filesystem paths - where the contents the corresponding archive entries can be found. The - modifier is free to change the contents of the files pointed to, add - new entries and remove entries, before returning. This method will - extract the entire contents of the wheel to a temporary location, call - the modifier, and then use the passed (and possibly updated) - dictionary to write a new wheel. If ``dest_dir`` is specified, the new - wheel is written there -- otherwise, the original wheel is overwritten. - - The modifier should return True if it updated the wheel, else False. - This method returns the same value the modifier returns. - """ - - def get_version(path_map, info_dir): - version = path = None - key = '%s/%s' % (info_dir, METADATA_FILENAME) - if key not in path_map: - key = '%s/PKG-INFO' % info_dir - if key in path_map: - path = path_map[key] - version = Metadata(path=path).version - return version, path - - def update_version(version, path): - updated = None - try: - v = NormalizedVersion(version) - i = version.find('-') - if i < 0: - updated = '%s+1' % version - else: - parts = [int(s) for s in version[i + 1:].split('.')] - parts[-1] += 1 - updated = '%s+%s' % (version[:i], - '.'.join(str(i) for i in parts)) - except UnsupportedVersionError: - logger.debug('Cannot update non-compliant (PEP-440) ' - 'version %r', version) - if updated: - md = Metadata(path=path) - md.version = updated - legacy = not path.endswith(METADATA_FILENAME) - md.write(path=path, legacy=legacy) - logger.debug('Version updated from %r to %r', version, - updated) - - pathname = os.path.join(self.dirname, self.filename) - name_ver = '%s-%s' % (self.name, self.version) - info_dir = '%s.dist-info' % name_ver - record_name = posixpath.join(info_dir, 'RECORD') - with tempdir() as workdir: - with ZipFile(pathname, 'r') as zf: - path_map = {} - for zinfo in zf.infolist(): - arcname = zinfo.filename - if isinstance(arcname, text_type): - u_arcname = arcname - else: - u_arcname = arcname.decode('utf-8') - if u_arcname == record_name: - continue - if '..' in u_arcname: - raise DistlibException('invalid entry in ' - 'wheel: %r' % u_arcname) - zf.extract(zinfo, workdir) - path = os.path.join(workdir, convert_path(u_arcname)) - path_map[u_arcname] = path - - # Remember the version. - original_version, _ = get_version(path_map, info_dir) - # Files extracted. Call the modifier. - modified = modifier(path_map, **kwargs) - if modified: - # Something changed - need to build a new wheel. - current_version, path = get_version(path_map, info_dir) - if current_version and (current_version == original_version): - # Add or update local version to signify changes. - update_version(current_version, path) - # Decide where the new wheel goes. - if dest_dir is None: - fd, newpath = tempfile.mkstemp(suffix='.whl', - prefix='wheel-update-', - dir=workdir) - os.close(fd) - else: - if not os.path.isdir(dest_dir): - raise DistlibException('Not a directory: %r' % dest_dir) - newpath = os.path.join(dest_dir, self.filename) - archive_paths = list(path_map.items()) - distinfo = os.path.join(workdir, info_dir) - info = distinfo, info_dir - self.write_records(info, workdir, archive_paths) - self.build_zip(newpath, archive_paths) - if dest_dir is None: - shutil.copyfile(newpath, pathname) - return modified - -def compatible_tags(): - """ - Return (pyver, abi, arch) tuples compatible with this Python. - """ - versions = [VER_SUFFIX] - major = VER_SUFFIX[0] - for minor in range(sys.version_info[1] - 1, - 1, -1): - versions.append(''.join([major, str(minor)])) - - abis = [] - for suffix, _, _ in imp.get_suffixes(): - if suffix.startswith('.abi'): - abis.append(suffix.split('.', 2)[1]) - abis.sort() - if ABI != 'none': - abis.insert(0, ABI) - abis.append('none') - result = [] - - arches = [ARCH] - if sys.platform == 'darwin': - m = re.match('(\w+)_(\d+)_(\d+)_(\w+)$', ARCH) - if m: - name, major, minor, arch = m.groups() - minor = int(minor) - matches = [arch] - if arch in ('i386', 'ppc'): - matches.append('fat') - if arch in ('i386', 'ppc', 'x86_64'): - matches.append('fat3') - if arch in ('ppc64', 'x86_64'): - matches.append('fat64') - if arch in ('i386', 'x86_64'): - matches.append('intel') - if arch in ('i386', 'x86_64', 'intel', 'ppc', 'ppc64'): - matches.append('universal') - while minor >= 0: - for match in matches: - s = '%s_%s_%s_%s' % (name, major, minor, match) - if s != ARCH: # already there - arches.append(s) - minor -= 1 - - # Most specific - our Python version, ABI and arch - for abi in abis: - for arch in arches: - result.append((''.join((IMP_PREFIX, versions[0])), abi, arch)) - - # where no ABI / arch dependency, but IMP_PREFIX dependency - for i, version in enumerate(versions): - result.append((''.join((IMP_PREFIX, version)), 'none', 'any')) - if i == 0: - result.append((''.join((IMP_PREFIX, version[0])), 'none', 'any')) - - # no IMP_PREFIX, ABI or arch dependency - for i, version in enumerate(versions): - result.append((''.join(('py', version)), 'none', 'any')) - if i == 0: - result.append((''.join(('py', version[0])), 'none', 'any')) - return set(result) - - -COMPATIBLE_TAGS = compatible_tags() - -del compatible_tags - - -def is_compatible(wheel, tags=None): - if not isinstance(wheel, Wheel): - wheel = Wheel(wheel) # assume it's a filename - result = False - if tags is None: - tags = COMPATIBLE_TAGS - for ver, abi, arch in tags: - if ver in wheel.pyver and abi in wheel.abi and arch in wheel.arch: - result = True - break - return result diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distro.py b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distro.py deleted file mode 100644 index 9e7daad..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/distro.py +++ /dev/null @@ -1,1081 +0,0 @@ -# Copyright 2015,2016 Nir Cohen -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -""" -The ``distro`` package (``distro`` stands for Linux Distribution) provides -information about the Linux distribution it runs on, such as a reliable -machine-readable distro ID, or version information. - -It is a renewed alternative implementation for Python's original -:py:func:`platform.linux_distribution` function, but it provides much more -functionality. An alternative implementation became necessary because Python -3.5 deprecated this function, and Python 3.7 is expected to remove it -altogether. Its predecessor function :py:func:`platform.dist` was already -deprecated since Python 2.6 and is also expected to be removed in Python 3.7. -Still, there are many cases in which access to Linux distribution information -is needed. See `Python issue 1322 `_ for -more information. -""" - -import os -import re -import sys -import json -import shlex -import logging -import subprocess - - -if not sys.platform.startswith('linux'): - raise ImportError('Unsupported platform: {0}'.format(sys.platform)) - -_UNIXCONFDIR = '/etc' -_OS_RELEASE_BASENAME = 'os-release' - -#: Translation table for normalizing the "ID" attribute defined in os-release -#: files, for use by the :func:`distro.id` method. -#: -#: * Key: Value as defined in the os-release file, translated to lower case, -#: with blanks translated to underscores. -#: -#: * Value: Normalized value. -NORMALIZED_OS_ID = {} - -#: Translation table for normalizing the "Distributor ID" attribute returned by -#: the lsb_release command, for use by the :func:`distro.id` method. -#: -#: * Key: Value as returned by the lsb_release command, translated to lower -#: case, with blanks translated to underscores. -#: -#: * Value: Normalized value. -NORMALIZED_LSB_ID = { - 'enterpriseenterprise': 'oracle', # Oracle Enterprise Linux - 'redhatenterpriseworkstation': 'rhel', # RHEL 6.7 -} - -#: Translation table for normalizing the distro ID derived from the file name -#: of distro release files, for use by the :func:`distro.id` method. -#: -#: * Key: Value as derived from the file name of a distro release file, -#: translated to lower case, with blanks translated to underscores. -#: -#: * Value: Normalized value. -NORMALIZED_DISTRO_ID = { - 'redhat': 'rhel', # RHEL 6.x, 7.x -} - -# Pattern for content of distro release file (reversed) -_DISTRO_RELEASE_CONTENT_REVERSED_PATTERN = re.compile( - r'(?:[^)]*\)(.*)\()? *(?:STL )?([\d.+\-a-z]*\d) *(?:esaeler *)?(.+)') - -# Pattern for base file name of distro release file -_DISTRO_RELEASE_BASENAME_PATTERN = re.compile( - r'(\w+)[-_](release|version)$') - -# Base file names to be ignored when searching for distro release file -_DISTRO_RELEASE_IGNORE_BASENAMES = ( - 'debian_version', - 'lsb-release', - 'oem-release', - _OS_RELEASE_BASENAME, - 'system-release' -) - - -def linux_distribution(full_distribution_name=True): - """ - Return information about the current Linux distribution as a tuple - ``(id_name, version, codename)`` with items as follows: - - * ``id_name``: If *full_distribution_name* is false, the result of - :func:`distro.id`. Otherwise, the result of :func:`distro.name`. - - * ``version``: The result of :func:`distro.version`. - - * ``codename``: The result of :func:`distro.codename`. - - The interface of this function is compatible with the original - :py:func:`platform.linux_distribution` function, supporting a subset of - its parameters. - - The data it returns may not exactly be the same, because it uses more data - sources than the original function, and that may lead to different data if - the Linux distribution is not consistent across multiple data sources it - provides (there are indeed such distributions ...). - - Another reason for differences is the fact that the :func:`distro.id` - method normalizes the distro ID string to a reliable machine-readable value - for a number of popular Linux distributions. - """ - return _distro.linux_distribution(full_distribution_name) - - -def id(): - """ - Return the distro ID of the current Linux distribution, as a - machine-readable string. - - For a number of Linux distributions, the returned distro ID value is - *reliable*, in the sense that it is documented and that it does not change - across releases of the distribution. - - This package maintains the following reliable distro ID values: - - ============== ========================================= - Distro ID Distribution - ============== ========================================= - "ubuntu" Ubuntu - "debian" Debian - "rhel" RedHat Enterprise Linux - "centos" CentOS - "fedora" Fedora - "sles" SUSE Linux Enterprise Server - "opensuse" openSUSE - "amazon" Amazon Linux - "arch" Arch Linux - "cloudlinux" CloudLinux OS - "exherbo" Exherbo Linux - "gentoo" GenToo Linux - "ibm_powerkvm" IBM PowerKVM - "kvmibm" KVM for IBM z Systems - "linuxmint" Linux Mint - "mageia" Mageia - "mandriva" Mandriva Linux - "parallels" Parallels - "pidora" Pidora - "raspbian" Raspbian - "oracle" Oracle Linux (and Oracle Enterprise Linux) - "scientific" Scientific Linux - "slackware" Slackware - "xenserver" XenServer - ============== ========================================= - - If you have a need to get distros for reliable IDs added into this set, - or if you find that the :func:`distro.id` function returns a different - distro ID for one of the listed distros, please create an issue in the - `distro issue tracker`_. - - **Lookup hierarchy and transformations:** - - First, the ID is obtained from the following sources, in the specified - order. The first available and non-empty value is used: - - * the value of the "ID" attribute of the os-release file, - - * the value of the "Distributor ID" attribute returned by the lsb_release - command, - - * the first part of the file name of the distro release file, - - The so determined ID value then passes the following transformations, - before it is returned by this method: - - * it is translated to lower case, - - * blanks (which should not be there anyway) are translated to underscores, - - * a normalization of the ID is performed, based upon - `normalization tables`_. The purpose of this normalization is to ensure - that the ID is as reliable as possible, even across incompatible changes - in the Linux distributions. A common reason for an incompatible change is - the addition of an os-release file, or the addition of the lsb_release - command, with ID values that differ from what was previously determined - from the distro release file name. - """ - return _distro.id() - - -def name(pretty=False): - """ - Return the name of the current Linux distribution, as a human-readable - string. - - If *pretty* is false, the name is returned without version or codename. - (e.g. "CentOS Linux") - - If *pretty* is true, the version and codename are appended. - (e.g. "CentOS Linux 7.1.1503 (Core)") - - **Lookup hierarchy:** - - The name is obtained from the following sources, in the specified order. - The first available and non-empty value is used: - - * If *pretty* is false: - - - the value of the "NAME" attribute of the os-release file, - - - the value of the "Distributor ID" attribute returned by the lsb_release - command, - - - the value of the "" field of the distro release file. - - * If *pretty* is true: - - - the value of the "PRETTY_NAME" attribute of the os-release file, - - - the value of the "Description" attribute returned by the lsb_release - command, - - - the value of the "" field of the distro release file, appended - with the value of the pretty version ("" and "" - fields) of the distro release file, if available. - """ - return _distro.name(pretty) - - -def version(pretty=False, best=False): - """ - Return the version of the current Linux distribution, as a human-readable - string. - - If *pretty* is false, the version is returned without codename (e.g. - "7.0"). - - If *pretty* is true, the codename in parenthesis is appended, if the - codename is non-empty (e.g. "7.0 (Maipo)"). - - Some distributions provide version numbers with different precisions in - the different sources of distribution information. Examining the different - sources in a fixed priority order does not always yield the most precise - version (e.g. for Debian 8.2, or CentOS 7.1). - - The *best* parameter can be used to control the approach for the returned - version: - - If *best* is false, the first non-empty version number in priority order of - the examined sources is returned. - - If *best* is true, the most precise version number out of all examined - sources is returned. - - **Lookup hierarchy:** - - In all cases, the version number is obtained from the following sources. - If *best* is false, this order represents the priority order: - - * the value of the "VERSION_ID" attribute of the os-release file, - * the value of the "Release" attribute returned by the lsb_release - command, - * the version number parsed from the "" field of the first line - of the distro release file, - * the version number parsed from the "PRETTY_NAME" attribute of the - os-release file, if it follows the format of the distro release files. - * the version number parsed from the "Description" attribute returned by - the lsb_release command, if it follows the format of the distro release - files. - """ - return _distro.version(pretty, best) - - -def version_parts(best=False): - """ - Return the version of the current Linux distribution as a tuple - ``(major, minor, build_number)`` with items as follows: - - * ``major``: The result of :func:`distro.major_version`. - - * ``minor``: The result of :func:`distro.minor_version`. - - * ``build_number``: The result of :func:`distro.build_number`. - - For a description of the *best* parameter, see the :func:`distro.version` - method. - """ - return _distro.version_parts(best) - - -def major_version(best=False): - """ - Return the major version of the current Linux distribution, as a string, - if provided. - Otherwise, the empty string is returned. The major version is the first - part of the dot-separated version string. - - For a description of the *best* parameter, see the :func:`distro.version` - method. - """ - return _distro.major_version(best) - - -def minor_version(best=False): - """ - Return the minor version of the current Linux distribution, as a string, - if provided. - Otherwise, the empty string is returned. The minor version is the second - part of the dot-separated version string. - - For a description of the *best* parameter, see the :func:`distro.version` - method. - """ - return _distro.minor_version(best) - - -def build_number(best=False): - """ - Return the build number of the current Linux distribution, as a string, - if provided. - Otherwise, the empty string is returned. The build number is the third part - of the dot-separated version string. - - For a description of the *best* parameter, see the :func:`distro.version` - method. - """ - return _distro.build_number(best) - - -def like(): - """ - Return a space-separated list of distro IDs of distributions that are - closely related to the current Linux distribution in regards to packaging - and programming interfaces, for example distributions the current - distribution is a derivative from. - - **Lookup hierarchy:** - - This information item is only provided by the os-release file. - For details, see the description of the "ID_LIKE" attribute in the - `os-release man page - `_. - """ - return _distro.like() - - -def codename(): - """ - Return the codename for the release of the current Linux distribution, - as a string. - - If the distribution does not have a codename, an empty string is returned. - - Note that the returned codename is not always really a codename. For - example, openSUSE returns "x86_64". This function does not handle such - cases in any special way and just returns the string it finds, if any. - - **Lookup hierarchy:** - - * the codename within the "VERSION" attribute of the os-release file, if - provided, - - * the value of the "Codename" attribute returned by the lsb_release - command, - - * the value of the "" field of the distro release file. - """ - return _distro.codename() - - -def info(pretty=False, best=False): - """ - Return certain machine-readable information items about the current Linux - distribution in a dictionary, as shown in the following example: - - .. sourcecode:: python - - { - 'id': 'rhel', - 'version': '7.0', - 'version_parts': { - 'major': '7', - 'minor': '0', - 'build_number': '' - }, - 'like': 'fedora', - 'codename': 'Maipo' - } - - The dictionary structure and keys are always the same, regardless of which - information items are available in the underlying data sources. The values - for the various keys are as follows: - - * ``id``: The result of :func:`distro.id`. - - * ``version``: The result of :func:`distro.version`. - - * ``version_parts -> major``: The result of :func:`distro.major_version`. - - * ``version_parts -> minor``: The result of :func:`distro.minor_version`. - - * ``version_parts -> build_number``: The result of - :func:`distro.build_number`. - - * ``like``: The result of :func:`distro.like`. - - * ``codename``: The result of :func:`distro.codename`. - - For a description of the *pretty* and *best* parameters, see the - :func:`distro.version` method. - """ - return _distro.info(pretty, best) - - -def os_release_info(): - """ - Return a dictionary containing key-value pairs for the information items - from the os-release file data source of the current Linux distribution. - - See `os-release file`_ for details about these information items. - """ - return _distro.os_release_info() - - -def lsb_release_info(): - """ - Return a dictionary containing key-value pairs for the information items - from the lsb_release command data source of the current Linux distribution. - - See `lsb_release command output`_ for details about these information - items. - """ - return _distro.lsb_release_info() - - -def distro_release_info(): - """ - Return a dictionary containing key-value pairs for the information items - from the distro release file data source of the current Linux distribution. - - See `distro release file`_ for details about these information items. - """ - return _distro.distro_release_info() - - -def os_release_attr(attribute): - """ - Return a single named information item from the os-release file data source - of the current Linux distribution. - - Parameters: - - * ``attribute`` (string): Key of the information item. - - Returns: - - * (string): Value of the information item, if the item exists. - The empty string, if the item does not exist. - - See `os-release file`_ for details about these information items. - """ - return _distro.os_release_attr(attribute) - - -def lsb_release_attr(attribute): - """ - Return a single named information item from the lsb_release command output - data source of the current Linux distribution. - - Parameters: - - * ``attribute`` (string): Key of the information item. - - Returns: - - * (string): Value of the information item, if the item exists. - The empty string, if the item does not exist. - - See `lsb_release command output`_ for details about these information - items. - """ - return _distro.lsb_release_attr(attribute) - - -def distro_release_attr(attribute): - """ - Return a single named information item from the distro release file - data source of the current Linux distribution. - - Parameters: - - * ``attribute`` (string): Key of the information item. - - Returns: - - * (string): Value of the information item, if the item exists. - The empty string, if the item does not exist. - - See `distro release file`_ for details about these information items. - """ - return _distro.distro_release_attr(attribute) - - -class LinuxDistribution(object): - """ - Provides information about a Linux distribution. - - This package creates a private module-global instance of this class with - default initialization arguments, that is used by the - `consolidated accessor functions`_ and `single source accessor functions`_. - By using default initialization arguments, that module-global instance - returns data about the current Linux distribution (i.e. the distro this - package runs on). - - Normally, it is not necessary to create additional instances of this class. - However, in situations where control is needed over the exact data sources - that are used, instances of this class can be created with a specific - distro release file, or a specific os-release file, or without invoking the - lsb_release command. - """ - - def __init__(self, - include_lsb=True, - os_release_file='', - distro_release_file=''): - """ - The initialization method of this class gathers information from the - available data sources, and stores that in private instance attributes. - Subsequent access to the information items uses these private instance - attributes, so that the data sources are read only once. - - Parameters: - - * ``include_lsb`` (bool): Controls whether the - `lsb_release command output`_ is included as a data source. - - If the lsb_release command is not available in the program execution - path, the data source for the lsb_release command will be empty. - - * ``os_release_file`` (string): The path name of the - `os-release file`_ that is to be used as a data source. - - An empty string (the default) will cause the default path name to - be used (see `os-release file`_ for details). - - If the specified or defaulted os-release file does not exist, the - data source for the os-release file will be empty. - - * ``distro_release_file`` (string): The path name of the - `distro release file`_ that is to be used as a data source. - - An empty string (the default) will cause a default search algorithm - to be used (see `distro release file`_ for details). - - If the specified distro release file does not exist, or if no default - distro release file can be found, the data source for the distro - release file will be empty. - - Public instance attributes: - - * ``os_release_file`` (string): The path name of the - `os-release file`_ that is actually used as a data source. The - empty string if no distro release file is used as a data source. - - * ``distro_release_file`` (string): The path name of the - `distro release file`_ that is actually used as a data source. The - empty string if no distro release file is used as a data source. - - Raises: - - * :py:exc:`IOError`: Some I/O issue with an os-release file or distro - release file. - - * :py:exc:`subprocess.CalledProcessError`: The lsb_release command had - some issue (other than not being available in the program execution - path). - - * :py:exc:`UnicodeError`: A data source has unexpected characters or - uses an unexpected encoding. - """ - self.os_release_file = os_release_file or \ - os.path.join(_UNIXCONFDIR, _OS_RELEASE_BASENAME) - self.distro_release_file = distro_release_file or '' # updated later - self._os_release_info = self._get_os_release_info() - self._lsb_release_info = self._get_lsb_release_info() \ - if include_lsb else {} - self._distro_release_info = self._get_distro_release_info() - - def __repr__(self): - """Return repr of all info - """ - return \ - "LinuxDistribution(" \ - "os_release_file={0!r}, " \ - "distro_release_file={1!r}, " \ - "_os_release_info={2!r}, " \ - "_lsb_release_info={3!r}, " \ - "_distro_release_info={4!r})".format( - self.os_release_file, - self.distro_release_file, - self._os_release_info, - self._lsb_release_info, - self._distro_release_info) - - def linux_distribution(self, full_distribution_name=True): - """ - Return information about the Linux distribution that is compatible - with Python's :func:`platform.linux_distribution`, supporting a subset - of its parameters. - - For details, see :func:`distro.linux_distribution`. - """ - return ( - self.name() if full_distribution_name else self.id(), - self.version(), - self.codename() - ) - - def id(self): - """Return the distro ID of the Linux distribution, as a string. - - For details, see :func:`distro.id`. - """ - def normalize(distro_id, table): - distro_id = distro_id.lower().replace(' ', '_') - return table.get(distro_id, distro_id) - - distro_id = self.os_release_attr('id') - if distro_id: - return normalize(distro_id, NORMALIZED_OS_ID) - - distro_id = self.lsb_release_attr('distributor_id') - if distro_id: - return normalize(distro_id, NORMALIZED_LSB_ID) - - distro_id = self.distro_release_attr('id') - if distro_id: - return normalize(distro_id, NORMALIZED_DISTRO_ID) - - return '' - - def name(self, pretty=False): - """ - Return the name of the Linux distribution, as a string. - - For details, see :func:`distro.name`. - """ - name = self.os_release_attr('name') \ - or self.lsb_release_attr('distributor_id') \ - or self.distro_release_attr('name') - if pretty: - name = self.os_release_attr('pretty_name') \ - or self.lsb_release_attr('description') - if not name: - name = self.distro_release_attr('name') - version = self.version(pretty=True) - if version: - name = name + ' ' + version - return name or '' - - def version(self, pretty=False, best=False): - """ - Return the version of the Linux distribution, as a string. - - For details, see :func:`distro.version`. - """ - versions = [ - self.os_release_attr('version_id'), - self.lsb_release_attr('release'), - self.distro_release_attr('version_id'), - self._parse_distro_release_content( - self.os_release_attr('pretty_name')).get('version_id', ''), - self._parse_distro_release_content( - self.lsb_release_attr('description')).get('version_id', '') - ] - version = '' - if best: - # This algorithm uses the last version in priority order that has - # the best precision. If the versions are not in conflict, that - # does not matter; otherwise, using the last one instead of the - # first one might be considered a surprise. - for v in versions: - if v.count(".") > version.count(".") or version == '': - version = v - else: - for v in versions: - if v != '': - version = v - break - if pretty and version and self.codename(): - version = u'{0} ({1})'.format(version, self.codename()) - return version - - def version_parts(self, best=False): - """ - Return the version of the Linux distribution, as a tuple of version - numbers. - - For details, see :func:`distro.version_parts`. - """ - version_str = self.version(best=best) - if version_str: - version_regex = re.compile(r'(\d+)\.?(\d+)?\.?(\d+)?') - matches = version_regex.match(version_str) - if matches: - major, minor, build_number = matches.groups() - return major, minor or '', build_number or '' - return '', '', '' - - def major_version(self, best=False): - """ - Return the major version number of the current distribution. - - For details, see :func:`distro.major_version`. - """ - return self.version_parts(best)[0] - - def minor_version(self, best=False): - """ - Return the minor version number of the Linux distribution. - - For details, see :func:`distro.minor_version`. - """ - return self.version_parts(best)[1] - - def build_number(self, best=False): - """ - Return the build number of the Linux distribution. - - For details, see :func:`distro.build_number`. - """ - return self.version_parts(best)[2] - - def like(self): - """ - Return the IDs of distributions that are like the Linux distribution. - - For details, see :func:`distro.like`. - """ - return self.os_release_attr('id_like') or '' - - def codename(self): - """ - Return the codename of the Linux distribution. - - For details, see :func:`distro.codename`. - """ - return self.os_release_attr('codename') \ - or self.lsb_release_attr('codename') \ - or self.distro_release_attr('codename') \ - or '' - - def info(self, pretty=False, best=False): - """ - Return certain machine-readable information about the Linux - distribution. - - For details, see :func:`distro.info`. - """ - return dict( - id=self.id(), - version=self.version(pretty, best), - version_parts=dict( - major=self.major_version(best), - minor=self.minor_version(best), - build_number=self.build_number(best) - ), - like=self.like(), - codename=self.codename(), - ) - - def os_release_info(self): - """ - Return a dictionary containing key-value pairs for the information - items from the os-release file data source of the Linux distribution. - - For details, see :func:`distro.os_release_info`. - """ - return self._os_release_info - - def lsb_release_info(self): - """ - Return a dictionary containing key-value pairs for the information - items from the lsb_release command data source of the Linux - distribution. - - For details, see :func:`distro.lsb_release_info`. - """ - return self._lsb_release_info - - def distro_release_info(self): - """ - Return a dictionary containing key-value pairs for the information - items from the distro release file data source of the Linux - distribution. - - For details, see :func:`distro.distro_release_info`. - """ - return self._distro_release_info - - def os_release_attr(self, attribute): - """ - Return a single named information item from the os-release file data - source of the Linux distribution. - - For details, see :func:`distro.os_release_attr`. - """ - return self._os_release_info.get(attribute, '') - - def lsb_release_attr(self, attribute): - """ - Return a single named information item from the lsb_release command - output data source of the Linux distribution. - - For details, see :func:`distro.lsb_release_attr`. - """ - return self._lsb_release_info.get(attribute, '') - - def distro_release_attr(self, attribute): - """ - Return a single named information item from the distro release file - data source of the Linux distribution. - - For details, see :func:`distro.distro_release_attr`. - """ - return self._distro_release_info.get(attribute, '') - - def _get_os_release_info(self): - """ - Get the information items from the specified os-release file. - - Returns: - A dictionary containing all information items. - """ - if os.path.isfile(self.os_release_file): - with open(self.os_release_file) as release_file: - return self._parse_os_release_content(release_file) - return {} - - @staticmethod - def _parse_os_release_content(lines): - """ - Parse the lines of an os-release file. - - Parameters: - - * lines: Iterable through the lines in the os-release file. - Each line must be a unicode string or a UTF-8 encoded byte - string. - - Returns: - A dictionary containing all information items. - """ - props = {} - lexer = shlex.shlex(lines, posix=True) - lexer.whitespace_split = True - - # The shlex module defines its `wordchars` variable using literals, - # making it dependent on the encoding of the Python source file. - # In Python 2.6 and 2.7, the shlex source file is encoded in - # 'iso-8859-1', and the `wordchars` variable is defined as a byte - # string. This causes a UnicodeDecodeError to be raised when the - # parsed content is a unicode object. The following fix resolves that - # (... but it should be fixed in shlex...): - if sys.version_info[0] == 2 and isinstance(lexer.wordchars, bytes): - lexer.wordchars = lexer.wordchars.decode('iso-8859-1') - - tokens = list(lexer) - for token in tokens: - # At this point, all shell-like parsing has been done (i.e. - # comments processed, quotes and backslash escape sequences - # processed, multi-line values assembled, trailing newlines - # stripped, etc.), so the tokens are now either: - # * variable assignments: var=value - # * commands or their arguments (not allowed in os-release) - if '=' in token: - k, v = token.split('=', 1) - if isinstance(v, bytes): - v = v.decode('utf-8') - props[k.lower()] = v - if k == 'VERSION': - # this handles cases in which the codename is in - # the `(CODENAME)` (rhel, centos, fedora) format - # or in the `, CODENAME` format (Ubuntu). - codename = re.search(r'(\(\D+\))|,(\s+)?\D+', v) - if codename: - codename = codename.group() - codename = codename.strip('()') - codename = codename.strip(',') - codename = codename.strip() - # codename appears within paranthese. - props['codename'] = codename - else: - props['codename'] = '' - else: - # Ignore any tokens that are not variable assignments - pass - return props - - def _get_lsb_release_info(self): - """ - Get the information items from the lsb_release command output. - - Returns: - A dictionary containing all information items. - """ - cmd = 'lsb_release -a' - process = subprocess.Popen( - cmd, - shell=True, - stdout=subprocess.PIPE, - stderr=subprocess.PIPE) - stdout, stderr = process.communicate() - stdout, stderr = stdout.decode('utf-8'), stderr.decode('utf-8') - code = process.returncode - if code == 0: - content = stdout.splitlines() - return self._parse_lsb_release_content(content) - elif code == 127: # Command not found - return {} - else: - if sys.version_info[:2] >= (3, 5): - raise subprocess.CalledProcessError(code, cmd, stdout, stderr) - elif sys.version_info[:2] >= (2, 7): - raise subprocess.CalledProcessError(code, cmd, stdout) - elif sys.version_info[:2] == (2, 6): - raise subprocess.CalledProcessError(code, cmd) - - @staticmethod - def _parse_lsb_release_content(lines): - """ - Parse the output of the lsb_release command. - - Parameters: - - * lines: Iterable through the lines of the lsb_release output. - Each line must be a unicode string or a UTF-8 encoded byte - string. - - Returns: - A dictionary containing all information items. - """ - props = {} - for line in lines: - line = line.decode('utf-8') if isinstance(line, bytes) else line - kv = line.strip('\n').split(':', 1) - if len(kv) != 2: - # Ignore lines without colon. - continue - k, v = kv - props.update({k.replace(' ', '_').lower(): v.strip()}) - return props - - def _get_distro_release_info(self): - """ - Get the information items from the specified distro release file. - - Returns: - A dictionary containing all information items. - """ - if self.distro_release_file: - # If it was specified, we use it and parse what we can, even if - # its file name or content does not match the expected pattern. - distro_info = self._parse_distro_release_file( - self.distro_release_file) - basename = os.path.basename(self.distro_release_file) - # The file name pattern for user-specified distro release files - # is somewhat more tolerant (compared to when searching for the - # file), because we want to use what was specified as best as - # possible. - match = _DISTRO_RELEASE_BASENAME_PATTERN.match(basename) - if match: - distro_info['id'] = match.group(1) - return distro_info - else: - basenames = os.listdir(_UNIXCONFDIR) - # We sort for repeatability in cases where there are multiple - # distro specific files; e.g. CentOS, Oracle, Enterprise all - # containing `redhat-release` on top of their own. - basenames.sort() - for basename in basenames: - if basename in _DISTRO_RELEASE_IGNORE_BASENAMES: - continue - match = _DISTRO_RELEASE_BASENAME_PATTERN.match(basename) - if match: - filepath = os.path.join(_UNIXCONFDIR, basename) - distro_info = self._parse_distro_release_file(filepath) - if 'name' in distro_info: - # The name is always present if the pattern matches - self.distro_release_file = filepath - distro_info['id'] = match.group(1) - return distro_info - return {} - - def _parse_distro_release_file(self, filepath): - """ - Parse a distro release file. - - Parameters: - - * filepath: Path name of the distro release file. - - Returns: - A dictionary containing all information items. - """ - if os.path.isfile(filepath): - with open(filepath) as fp: - # Only parse the first line. For instance, on SLES there - # are multiple lines. We don't want them... - return self._parse_distro_release_content(fp.readline()) - return {} - - @staticmethod - def _parse_distro_release_content(line): - """ - Parse a line from a distro release file. - - Parameters: - * line: Line from the distro release file. Must be a unicode string - or a UTF-8 encoded byte string. - - Returns: - A dictionary containing all information items. - """ - if isinstance(line, bytes): - line = line.decode('utf-8') - matches = _DISTRO_RELEASE_CONTENT_REVERSED_PATTERN.match( - line.strip()[::-1]) - distro_info = {} - if matches: - # regexp ensures non-None - distro_info['name'] = matches.group(3)[::-1] - if matches.group(2): - distro_info['version_id'] = matches.group(2)[::-1] - if matches.group(1): - distro_info['codename'] = matches.group(1)[::-1] - elif line: - distro_info['name'] = line.strip() - return distro_info - - -_distro = LinuxDistribution() - - -def main(): - import argparse - - logger = logging.getLogger(__name__) - logger.setLevel(logging.DEBUG) - logger.addHandler(logging.StreamHandler(sys.stdout)) - - parser = argparse.ArgumentParser(description="Linux distro info tool") - parser.add_argument( - '--json', - '-j', - help="Output in machine readable format", - action="store_true") - args = parser.parse_args() - - if args.json: - logger.info(json.dumps(info(), indent=4, sort_keys=True)) - else: - logger.info('Name: %s', name(pretty=True)) - distribution_version = version(pretty=True) - if distribution_version: - logger.info('Version: %s', distribution_version) - distribution_codename = codename() - if distribution_codename: - logger.info('Codename: %s', distribution_codename) - - -if __name__ == '__main__': - main() diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/html5lib/__init__.py b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/html5lib/__init__.py deleted file mode 100644 index 7427eb1..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/html5lib/__init__.py +++ /dev/null @@ -1,25 +0,0 @@ -""" -HTML parsing library based on the WHATWG "HTML5" -specification. The parser is designed to be compatible with existing -HTML found in the wild and implements well-defined error recovery that -is largely compatible with modern desktop web browsers. - -Example usage: - -import html5lib -f = open("my_document.html") -tree = html5lib.parse(f) -""" - -from __future__ import absolute_import, division, unicode_literals - -from .html5parser import HTMLParser, parse, parseFragment -from .treebuilders import getTreeBuilder -from .treewalkers import getTreeWalker -from .serializer import serialize - -__all__ = ["HTMLParser", "parse", "parseFragment", "getTreeBuilder", - "getTreeWalker", "serialize"] - -# this has to be at the top level, see how setup.py parses this -__version__ = "1.0b10" diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/html5lib/_ihatexml.py b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/html5lib/_ihatexml.py deleted file mode 100644 index d6d1d6f..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/html5lib/_ihatexml.py +++ /dev/null @@ -1,288 +0,0 @@ -from __future__ import absolute_import, division, unicode_literals - -import re -import warnings - -from .constants import DataLossWarning - -baseChar = """ -[#x0041-#x005A] | [#x0061-#x007A] | [#x00C0-#x00D6] | [#x00D8-#x00F6] | -[#x00F8-#x00FF] | [#x0100-#x0131] | [#x0134-#x013E] | [#x0141-#x0148] | -[#x014A-#x017E] | [#x0180-#x01C3] | [#x01CD-#x01F0] | [#x01F4-#x01F5] | -[#x01FA-#x0217] | [#x0250-#x02A8] | [#x02BB-#x02C1] | #x0386 | -[#x0388-#x038A] | #x038C | [#x038E-#x03A1] | [#x03A3-#x03CE] | -[#x03D0-#x03D6] | #x03DA | #x03DC | #x03DE | #x03E0 | [#x03E2-#x03F3] | -[#x0401-#x040C] | [#x040E-#x044F] | [#x0451-#x045C] | [#x045E-#x0481] | -[#x0490-#x04C4] | [#x04C7-#x04C8] | [#x04CB-#x04CC] | [#x04D0-#x04EB] | -[#x04EE-#x04F5] | [#x04F8-#x04F9] | [#x0531-#x0556] | #x0559 | -[#x0561-#x0586] | [#x05D0-#x05EA] | [#x05F0-#x05F2] | [#x0621-#x063A] | -[#x0641-#x064A] | [#x0671-#x06B7] | [#x06BA-#x06BE] | [#x06C0-#x06CE] | -[#x06D0-#x06D3] | #x06D5 | [#x06E5-#x06E6] | [#x0905-#x0939] | #x093D | -[#x0958-#x0961] | [#x0985-#x098C] | [#x098F-#x0990] | [#x0993-#x09A8] | -[#x09AA-#x09B0] | #x09B2 | [#x09B6-#x09B9] | [#x09DC-#x09DD] | -[#x09DF-#x09E1] | [#x09F0-#x09F1] | [#x0A05-#x0A0A] | [#x0A0F-#x0A10] | -[#x0A13-#x0A28] | [#x0A2A-#x0A30] | [#x0A32-#x0A33] | [#x0A35-#x0A36] | -[#x0A38-#x0A39] | [#x0A59-#x0A5C] | #x0A5E | [#x0A72-#x0A74] | -[#x0A85-#x0A8B] | #x0A8D | [#x0A8F-#x0A91] | [#x0A93-#x0AA8] | -[#x0AAA-#x0AB0] | [#x0AB2-#x0AB3] | [#x0AB5-#x0AB9] | #x0ABD | #x0AE0 | -[#x0B05-#x0B0C] | [#x0B0F-#x0B10] | [#x0B13-#x0B28] | [#x0B2A-#x0B30] | -[#x0B32-#x0B33] | [#x0B36-#x0B39] | #x0B3D | [#x0B5C-#x0B5D] | -[#x0B5F-#x0B61] | [#x0B85-#x0B8A] | [#x0B8E-#x0B90] | [#x0B92-#x0B95] | -[#x0B99-#x0B9A] | #x0B9C | [#x0B9E-#x0B9F] | [#x0BA3-#x0BA4] | -[#x0BA8-#x0BAA] | [#x0BAE-#x0BB5] | [#x0BB7-#x0BB9] | [#x0C05-#x0C0C] | -[#x0C0E-#x0C10] | [#x0C12-#x0C28] | [#x0C2A-#x0C33] | [#x0C35-#x0C39] | -[#x0C60-#x0C61] | [#x0C85-#x0C8C] | [#x0C8E-#x0C90] | [#x0C92-#x0CA8] | -[#x0CAA-#x0CB3] | [#x0CB5-#x0CB9] | #x0CDE | [#x0CE0-#x0CE1] | -[#x0D05-#x0D0C] | [#x0D0E-#x0D10] | [#x0D12-#x0D28] | [#x0D2A-#x0D39] | -[#x0D60-#x0D61] | [#x0E01-#x0E2E] | #x0E30 | [#x0E32-#x0E33] | -[#x0E40-#x0E45] | [#x0E81-#x0E82] | #x0E84 | [#x0E87-#x0E88] | #x0E8A | -#x0E8D | [#x0E94-#x0E97] | [#x0E99-#x0E9F] | [#x0EA1-#x0EA3] | #x0EA5 | -#x0EA7 | [#x0EAA-#x0EAB] | [#x0EAD-#x0EAE] | #x0EB0 | [#x0EB2-#x0EB3] | -#x0EBD | [#x0EC0-#x0EC4] | [#x0F40-#x0F47] | [#x0F49-#x0F69] | -[#x10A0-#x10C5] | [#x10D0-#x10F6] | #x1100 | [#x1102-#x1103] | -[#x1105-#x1107] | #x1109 | [#x110B-#x110C] | [#x110E-#x1112] | #x113C | -#x113E | #x1140 | #x114C | #x114E | #x1150 | [#x1154-#x1155] | #x1159 | -[#x115F-#x1161] | #x1163 | #x1165 | #x1167 | #x1169 | [#x116D-#x116E] | -[#x1172-#x1173] | #x1175 | #x119E | #x11A8 | #x11AB | [#x11AE-#x11AF] | -[#x11B7-#x11B8] | #x11BA | [#x11BC-#x11C2] | #x11EB | #x11F0 | #x11F9 | -[#x1E00-#x1E9B] | [#x1EA0-#x1EF9] | [#x1F00-#x1F15] | [#x1F18-#x1F1D] | -[#x1F20-#x1F45] | [#x1F48-#x1F4D] | [#x1F50-#x1F57] | #x1F59 | #x1F5B | -#x1F5D | [#x1F5F-#x1F7D] | [#x1F80-#x1FB4] | [#x1FB6-#x1FBC] | #x1FBE | -[#x1FC2-#x1FC4] | [#x1FC6-#x1FCC] | [#x1FD0-#x1FD3] | [#x1FD6-#x1FDB] | -[#x1FE0-#x1FEC] | [#x1FF2-#x1FF4] | [#x1FF6-#x1FFC] | #x2126 | -[#x212A-#x212B] | #x212E | [#x2180-#x2182] | [#x3041-#x3094] | -[#x30A1-#x30FA] | [#x3105-#x312C] | [#xAC00-#xD7A3]""" - -ideographic = """[#x4E00-#x9FA5] | #x3007 | [#x3021-#x3029]""" - -combiningCharacter = """ -[#x0300-#x0345] | [#x0360-#x0361] | [#x0483-#x0486] | [#x0591-#x05A1] | -[#x05A3-#x05B9] | [#x05BB-#x05BD] | #x05BF | [#x05C1-#x05C2] | #x05C4 | -[#x064B-#x0652] | #x0670 | [#x06D6-#x06DC] | [#x06DD-#x06DF] | -[#x06E0-#x06E4] | [#x06E7-#x06E8] | [#x06EA-#x06ED] | [#x0901-#x0903] | -#x093C | [#x093E-#x094C] | #x094D | [#x0951-#x0954] | [#x0962-#x0963] | -[#x0981-#x0983] | #x09BC | #x09BE | #x09BF | [#x09C0-#x09C4] | -[#x09C7-#x09C8] | [#x09CB-#x09CD] | #x09D7 | [#x09E2-#x09E3] | #x0A02 | -#x0A3C | #x0A3E | #x0A3F | [#x0A40-#x0A42] | [#x0A47-#x0A48] | -[#x0A4B-#x0A4D] | [#x0A70-#x0A71] | [#x0A81-#x0A83] | #x0ABC | -[#x0ABE-#x0AC5] | [#x0AC7-#x0AC9] | [#x0ACB-#x0ACD] | [#x0B01-#x0B03] | -#x0B3C | [#x0B3E-#x0B43] | [#x0B47-#x0B48] | [#x0B4B-#x0B4D] | -[#x0B56-#x0B57] | [#x0B82-#x0B83] | [#x0BBE-#x0BC2] | [#x0BC6-#x0BC8] | -[#x0BCA-#x0BCD] | #x0BD7 | [#x0C01-#x0C03] | [#x0C3E-#x0C44] | -[#x0C46-#x0C48] | [#x0C4A-#x0C4D] | [#x0C55-#x0C56] | [#x0C82-#x0C83] | -[#x0CBE-#x0CC4] | [#x0CC6-#x0CC8] | [#x0CCA-#x0CCD] | [#x0CD5-#x0CD6] | -[#x0D02-#x0D03] | [#x0D3E-#x0D43] | [#x0D46-#x0D48] | [#x0D4A-#x0D4D] | -#x0D57 | #x0E31 | [#x0E34-#x0E3A] | [#x0E47-#x0E4E] | #x0EB1 | -[#x0EB4-#x0EB9] | [#x0EBB-#x0EBC] | [#x0EC8-#x0ECD] | [#x0F18-#x0F19] | -#x0F35 | #x0F37 | #x0F39 | #x0F3E | #x0F3F | [#x0F71-#x0F84] | -[#x0F86-#x0F8B] | [#x0F90-#x0F95] | #x0F97 | [#x0F99-#x0FAD] | -[#x0FB1-#x0FB7] | #x0FB9 | [#x20D0-#x20DC] | #x20E1 | [#x302A-#x302F] | -#x3099 | #x309A""" - -digit = """ -[#x0030-#x0039] | [#x0660-#x0669] | [#x06F0-#x06F9] | [#x0966-#x096F] | -[#x09E6-#x09EF] | [#x0A66-#x0A6F] | [#x0AE6-#x0AEF] | [#x0B66-#x0B6F] | -[#x0BE7-#x0BEF] | [#x0C66-#x0C6F] | [#x0CE6-#x0CEF] | [#x0D66-#x0D6F] | -[#x0E50-#x0E59] | [#x0ED0-#x0ED9] | [#x0F20-#x0F29]""" - -extender = """ -#x00B7 | #x02D0 | #x02D1 | #x0387 | #x0640 | #x0E46 | #x0EC6 | #x3005 | -#[#x3031-#x3035] | [#x309D-#x309E] | [#x30FC-#x30FE]""" - -letter = " | ".join([baseChar, ideographic]) - -# Without the -name = " | ".join([letter, digit, ".", "-", "_", combiningCharacter, - extender]) -nameFirst = " | ".join([letter, "_"]) - -reChar = re.compile(r"#x([\d|A-F]{4,4})") -reCharRange = re.compile(r"\[#x([\d|A-F]{4,4})-#x([\d|A-F]{4,4})\]") - - -def charStringToList(chars): - charRanges = [item.strip() for item in chars.split(" | ")] - rv = [] - for item in charRanges: - foundMatch = False - for regexp in (reChar, reCharRange): - match = regexp.match(item) - if match is not None: - rv.append([hexToInt(item) for item in match.groups()]) - if len(rv[-1]) == 1: - rv[-1] = rv[-1] * 2 - foundMatch = True - break - if not foundMatch: - assert len(item) == 1 - - rv.append([ord(item)] * 2) - rv = normaliseCharList(rv) - return rv - - -def normaliseCharList(charList): - charList = sorted(charList) - for item in charList: - assert item[1] >= item[0] - rv = [] - i = 0 - while i < len(charList): - j = 1 - rv.append(charList[i]) - while i + j < len(charList) and charList[i + j][0] <= rv[-1][1] + 1: - rv[-1][1] = charList[i + j][1] - j += 1 - i += j - return rv - -# We don't really support characters above the BMP :( -max_unicode = int("FFFF", 16) - - -def missingRanges(charList): - rv = [] - if charList[0] != 0: - rv.append([0, charList[0][0] - 1]) - for i, item in enumerate(charList[:-1]): - rv.append([item[1] + 1, charList[i + 1][0] - 1]) - if charList[-1][1] != max_unicode: - rv.append([charList[-1][1] + 1, max_unicode]) - return rv - - -def listToRegexpStr(charList): - rv = [] - for item in charList: - if item[0] == item[1]: - rv.append(escapeRegexp(chr(item[0]))) - else: - rv.append(escapeRegexp(chr(item[0])) + "-" + - escapeRegexp(chr(item[1]))) - return "[%s]" % "".join(rv) - - -def hexToInt(hex_str): - return int(hex_str, 16) - - -def escapeRegexp(string): - specialCharacters = (".", "^", "$", "*", "+", "?", "{", "}", - "[", "]", "|", "(", ")", "-") - for char in specialCharacters: - string = string.replace(char, "\\" + char) - - return string - -# output from the above -nonXmlNameBMPRegexp = re.compile('[\x00-,/:-@\\[-\\^`\\{-\xb6\xb8-\xbf\xd7\xf7\u0132-\u0133\u013f-\u0140\u0149\u017f\u01c4-\u01cc\u01f1-\u01f3\u01f6-\u01f9\u0218-\u024f\u02a9-\u02ba\u02c2-\u02cf\u02d2-\u02ff\u0346-\u035f\u0362-\u0385\u038b\u038d\u03a2\u03cf\u03d7-\u03d9\u03db\u03dd\u03df\u03e1\u03f4-\u0400\u040d\u0450\u045d\u0482\u0487-\u048f\u04c5-\u04c6\u04c9-\u04ca\u04cd-\u04cf\u04ec-\u04ed\u04f6-\u04f7\u04fa-\u0530\u0557-\u0558\u055a-\u0560\u0587-\u0590\u05a2\u05ba\u05be\u05c0\u05c3\u05c5-\u05cf\u05eb-\u05ef\u05f3-\u0620\u063b-\u063f\u0653-\u065f\u066a-\u066f\u06b8-\u06b9\u06bf\u06cf\u06d4\u06e9\u06ee-\u06ef\u06fa-\u0900\u0904\u093a-\u093b\u094e-\u0950\u0955-\u0957\u0964-\u0965\u0970-\u0980\u0984\u098d-\u098e\u0991-\u0992\u09a9\u09b1\u09b3-\u09b5\u09ba-\u09bb\u09bd\u09c5-\u09c6\u09c9-\u09ca\u09ce-\u09d6\u09d8-\u09db\u09de\u09e4-\u09e5\u09f2-\u0a01\u0a03-\u0a04\u0a0b-\u0a0e\u0a11-\u0a12\u0a29\u0a31\u0a34\u0a37\u0a3a-\u0a3b\u0a3d\u0a43-\u0a46\u0a49-\u0a4a\u0a4e-\u0a58\u0a5d\u0a5f-\u0a65\u0a75-\u0a80\u0a84\u0a8c\u0a8e\u0a92\u0aa9\u0ab1\u0ab4\u0aba-\u0abb\u0ac6\u0aca\u0ace-\u0adf\u0ae1-\u0ae5\u0af0-\u0b00\u0b04\u0b0d-\u0b0e\u0b11-\u0b12\u0b29\u0b31\u0b34-\u0b35\u0b3a-\u0b3b\u0b44-\u0b46\u0b49-\u0b4a\u0b4e-\u0b55\u0b58-\u0b5b\u0b5e\u0b62-\u0b65\u0b70-\u0b81\u0b84\u0b8b-\u0b8d\u0b91\u0b96-\u0b98\u0b9b\u0b9d\u0ba0-\u0ba2\u0ba5-\u0ba7\u0bab-\u0bad\u0bb6\u0bba-\u0bbd\u0bc3-\u0bc5\u0bc9\u0bce-\u0bd6\u0bd8-\u0be6\u0bf0-\u0c00\u0c04\u0c0d\u0c11\u0c29\u0c34\u0c3a-\u0c3d\u0c45\u0c49\u0c4e-\u0c54\u0c57-\u0c5f\u0c62-\u0c65\u0c70-\u0c81\u0c84\u0c8d\u0c91\u0ca9\u0cb4\u0cba-\u0cbd\u0cc5\u0cc9\u0cce-\u0cd4\u0cd7-\u0cdd\u0cdf\u0ce2-\u0ce5\u0cf0-\u0d01\u0d04\u0d0d\u0d11\u0d29\u0d3a-\u0d3d\u0d44-\u0d45\u0d49\u0d4e-\u0d56\u0d58-\u0d5f\u0d62-\u0d65\u0d70-\u0e00\u0e2f\u0e3b-\u0e3f\u0e4f\u0e5a-\u0e80\u0e83\u0e85-\u0e86\u0e89\u0e8b-\u0e8c\u0e8e-\u0e93\u0e98\u0ea0\u0ea4\u0ea6\u0ea8-\u0ea9\u0eac\u0eaf\u0eba\u0ebe-\u0ebf\u0ec5\u0ec7\u0ece-\u0ecf\u0eda-\u0f17\u0f1a-\u0f1f\u0f2a-\u0f34\u0f36\u0f38\u0f3a-\u0f3d\u0f48\u0f6a-\u0f70\u0f85\u0f8c-\u0f8f\u0f96\u0f98\u0fae-\u0fb0\u0fb8\u0fba-\u109f\u10c6-\u10cf\u10f7-\u10ff\u1101\u1104\u1108\u110a\u110d\u1113-\u113b\u113d\u113f\u1141-\u114b\u114d\u114f\u1151-\u1153\u1156-\u1158\u115a-\u115e\u1162\u1164\u1166\u1168\u116a-\u116c\u116f-\u1171\u1174\u1176-\u119d\u119f-\u11a7\u11a9-\u11aa\u11ac-\u11ad\u11b0-\u11b6\u11b9\u11bb\u11c3-\u11ea\u11ec-\u11ef\u11f1-\u11f8\u11fa-\u1dff\u1e9c-\u1e9f\u1efa-\u1eff\u1f16-\u1f17\u1f1e-\u1f1f\u1f46-\u1f47\u1f4e-\u1f4f\u1f58\u1f5a\u1f5c\u1f5e\u1f7e-\u1f7f\u1fb5\u1fbd\u1fbf-\u1fc1\u1fc5\u1fcd-\u1fcf\u1fd4-\u1fd5\u1fdc-\u1fdf\u1fed-\u1ff1\u1ff5\u1ffd-\u20cf\u20dd-\u20e0\u20e2-\u2125\u2127-\u2129\u212c-\u212d\u212f-\u217f\u2183-\u3004\u3006\u3008-\u3020\u3030\u3036-\u3040\u3095-\u3098\u309b-\u309c\u309f-\u30a0\u30fb\u30ff-\u3104\u312d-\u4dff\u9fa6-\uabff\ud7a4-\uffff]') # noqa - -nonXmlNameFirstBMPRegexp = re.compile('[\x00-@\\[-\\^`\\{-\xbf\xd7\xf7\u0132-\u0133\u013f-\u0140\u0149\u017f\u01c4-\u01cc\u01f1-\u01f3\u01f6-\u01f9\u0218-\u024f\u02a9-\u02ba\u02c2-\u0385\u0387\u038b\u038d\u03a2\u03cf\u03d7-\u03d9\u03db\u03dd\u03df\u03e1\u03f4-\u0400\u040d\u0450\u045d\u0482-\u048f\u04c5-\u04c6\u04c9-\u04ca\u04cd-\u04cf\u04ec-\u04ed\u04f6-\u04f7\u04fa-\u0530\u0557-\u0558\u055a-\u0560\u0587-\u05cf\u05eb-\u05ef\u05f3-\u0620\u063b-\u0640\u064b-\u0670\u06b8-\u06b9\u06bf\u06cf\u06d4\u06d6-\u06e4\u06e7-\u0904\u093a-\u093c\u093e-\u0957\u0962-\u0984\u098d-\u098e\u0991-\u0992\u09a9\u09b1\u09b3-\u09b5\u09ba-\u09db\u09de\u09e2-\u09ef\u09f2-\u0a04\u0a0b-\u0a0e\u0a11-\u0a12\u0a29\u0a31\u0a34\u0a37\u0a3a-\u0a58\u0a5d\u0a5f-\u0a71\u0a75-\u0a84\u0a8c\u0a8e\u0a92\u0aa9\u0ab1\u0ab4\u0aba-\u0abc\u0abe-\u0adf\u0ae1-\u0b04\u0b0d-\u0b0e\u0b11-\u0b12\u0b29\u0b31\u0b34-\u0b35\u0b3a-\u0b3c\u0b3e-\u0b5b\u0b5e\u0b62-\u0b84\u0b8b-\u0b8d\u0b91\u0b96-\u0b98\u0b9b\u0b9d\u0ba0-\u0ba2\u0ba5-\u0ba7\u0bab-\u0bad\u0bb6\u0bba-\u0c04\u0c0d\u0c11\u0c29\u0c34\u0c3a-\u0c5f\u0c62-\u0c84\u0c8d\u0c91\u0ca9\u0cb4\u0cba-\u0cdd\u0cdf\u0ce2-\u0d04\u0d0d\u0d11\u0d29\u0d3a-\u0d5f\u0d62-\u0e00\u0e2f\u0e31\u0e34-\u0e3f\u0e46-\u0e80\u0e83\u0e85-\u0e86\u0e89\u0e8b-\u0e8c\u0e8e-\u0e93\u0e98\u0ea0\u0ea4\u0ea6\u0ea8-\u0ea9\u0eac\u0eaf\u0eb1\u0eb4-\u0ebc\u0ebe-\u0ebf\u0ec5-\u0f3f\u0f48\u0f6a-\u109f\u10c6-\u10cf\u10f7-\u10ff\u1101\u1104\u1108\u110a\u110d\u1113-\u113b\u113d\u113f\u1141-\u114b\u114d\u114f\u1151-\u1153\u1156-\u1158\u115a-\u115e\u1162\u1164\u1166\u1168\u116a-\u116c\u116f-\u1171\u1174\u1176-\u119d\u119f-\u11a7\u11a9-\u11aa\u11ac-\u11ad\u11b0-\u11b6\u11b9\u11bb\u11c3-\u11ea\u11ec-\u11ef\u11f1-\u11f8\u11fa-\u1dff\u1e9c-\u1e9f\u1efa-\u1eff\u1f16-\u1f17\u1f1e-\u1f1f\u1f46-\u1f47\u1f4e-\u1f4f\u1f58\u1f5a\u1f5c\u1f5e\u1f7e-\u1f7f\u1fb5\u1fbd\u1fbf-\u1fc1\u1fc5\u1fcd-\u1fcf\u1fd4-\u1fd5\u1fdc-\u1fdf\u1fed-\u1ff1\u1ff5\u1ffd-\u2125\u2127-\u2129\u212c-\u212d\u212f-\u217f\u2183-\u3006\u3008-\u3020\u302a-\u3040\u3095-\u30a0\u30fb-\u3104\u312d-\u4dff\u9fa6-\uabff\ud7a4-\uffff]') # noqa - -# Simpler things -nonPubidCharRegexp = re.compile("[^\x20\x0D\x0Aa-zA-Z0-9\-\'()+,./:=?;!*#@$_%]") - - -class InfosetFilter(object): - replacementRegexp = re.compile(r"U[\dA-F]{5,5}") - - def __init__(self, - dropXmlnsLocalName=False, - dropXmlnsAttrNs=False, - preventDoubleDashComments=False, - preventDashAtCommentEnd=False, - replaceFormFeedCharacters=True, - preventSingleQuotePubid=False): - - self.dropXmlnsLocalName = dropXmlnsLocalName - self.dropXmlnsAttrNs = dropXmlnsAttrNs - - self.preventDoubleDashComments = preventDoubleDashComments - self.preventDashAtCommentEnd = preventDashAtCommentEnd - - self.replaceFormFeedCharacters = replaceFormFeedCharacters - - self.preventSingleQuotePubid = preventSingleQuotePubid - - self.replaceCache = {} - - def coerceAttribute(self, name, namespace=None): - if self.dropXmlnsLocalName and name.startswith("xmlns:"): - warnings.warn("Attributes cannot begin with xmlns", DataLossWarning) - return None - elif (self.dropXmlnsAttrNs and - namespace == "http://www.w3.org/2000/xmlns/"): - warnings.warn("Attributes cannot be in the xml namespace", DataLossWarning) - return None - else: - return self.toXmlName(name) - - def coerceElement(self, name): - return self.toXmlName(name) - - def coerceComment(self, data): - if self.preventDoubleDashComments: - while "--" in data: - warnings.warn("Comments cannot contain adjacent dashes", DataLossWarning) - data = data.replace("--", "- -") - if data.endswith("-"): - warnings.warn("Comments cannot end in a dash", DataLossWarning) - data += " " - return data - - def coerceCharacters(self, data): - if self.replaceFormFeedCharacters: - for _ in range(data.count("\x0C")): - warnings.warn("Text cannot contain U+000C", DataLossWarning) - data = data.replace("\x0C", " ") - # Other non-xml characters - return data - - def coercePubid(self, data): - dataOutput = data - for char in nonPubidCharRegexp.findall(data): - warnings.warn("Coercing non-XML pubid", DataLossWarning) - replacement = self.getReplacementCharacter(char) - dataOutput = dataOutput.replace(char, replacement) - if self.preventSingleQuotePubid and dataOutput.find("'") >= 0: - warnings.warn("Pubid cannot contain single quote", DataLossWarning) - dataOutput = dataOutput.replace("'", self.getReplacementCharacter("'")) - return dataOutput - - def toXmlName(self, name): - nameFirst = name[0] - nameRest = name[1:] - m = nonXmlNameFirstBMPRegexp.match(nameFirst) - if m: - warnings.warn("Coercing non-XML name", DataLossWarning) - nameFirstOutput = self.getReplacementCharacter(nameFirst) - else: - nameFirstOutput = nameFirst - - nameRestOutput = nameRest - replaceChars = set(nonXmlNameBMPRegexp.findall(nameRest)) - for char in replaceChars: - warnings.warn("Coercing non-XML name", DataLossWarning) - replacement = self.getReplacementCharacter(char) - nameRestOutput = nameRestOutput.replace(char, replacement) - return nameFirstOutput + nameRestOutput - - def getReplacementCharacter(self, char): - if char in self.replaceCache: - replacement = self.replaceCache[char] - else: - replacement = self.escapeChar(char) - return replacement - - def fromXmlName(self, name): - for item in set(self.replacementRegexp.findall(name)): - name = name.replace(item, self.unescapeChar(item)) - return name - - def escapeChar(self, char): - replacement = "U%05X" % ord(char) - self.replaceCache[char] = replacement - return replacement - - def unescapeChar(self, charcode): - return chr(int(charcode[1:], 16)) diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/html5lib/_inputstream.py b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/html5lib/_inputstream.py deleted file mode 100644 index 7c5639f..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/html5lib/_inputstream.py +++ /dev/null @@ -1,923 +0,0 @@ -from __future__ import absolute_import, division, unicode_literals - -from pip._vendor.six import text_type, binary_type -from pip._vendor.six.moves import http_client, urllib - -import codecs -import re - -from pip._vendor import webencodings - -from .constants import EOF, spaceCharacters, asciiLetters, asciiUppercase -from .constants import ReparseException -from . import _utils - -from io import StringIO - -try: - from io import BytesIO -except ImportError: - BytesIO = StringIO - -# Non-unicode versions of constants for use in the pre-parser -spaceCharactersBytes = frozenset([item.encode("ascii") for item in spaceCharacters]) -asciiLettersBytes = frozenset([item.encode("ascii") for item in asciiLetters]) -asciiUppercaseBytes = frozenset([item.encode("ascii") for item in asciiUppercase]) -spacesAngleBrackets = spaceCharactersBytes | frozenset([b">", b"<"]) - - -invalid_unicode_no_surrogate = "[\u0001-\u0008\u000B\u000E-\u001F\u007F-\u009F\uFDD0-\uFDEF\uFFFE\uFFFF\U0001FFFE\U0001FFFF\U0002FFFE\U0002FFFF\U0003FFFE\U0003FFFF\U0004FFFE\U0004FFFF\U0005FFFE\U0005FFFF\U0006FFFE\U0006FFFF\U0007FFFE\U0007FFFF\U0008FFFE\U0008FFFF\U0009FFFE\U0009FFFF\U000AFFFE\U000AFFFF\U000BFFFE\U000BFFFF\U000CFFFE\U000CFFFF\U000DFFFE\U000DFFFF\U000EFFFE\U000EFFFF\U000FFFFE\U000FFFFF\U0010FFFE\U0010FFFF]" # noqa - -if _utils.supports_lone_surrogates: - # Use one extra step of indirection and create surrogates with - # eval. Not using this indirection would introduce an illegal - # unicode literal on platforms not supporting such lone - # surrogates. - assert invalid_unicode_no_surrogate[-1] == "]" and invalid_unicode_no_surrogate.count("]") == 1 - invalid_unicode_re = re.compile(invalid_unicode_no_surrogate[:-1] + - eval('"\\uD800-\\uDFFF"') + # pylint:disable=eval-used - "]") -else: - invalid_unicode_re = re.compile(invalid_unicode_no_surrogate) - -non_bmp_invalid_codepoints = set([0x1FFFE, 0x1FFFF, 0x2FFFE, 0x2FFFF, 0x3FFFE, - 0x3FFFF, 0x4FFFE, 0x4FFFF, 0x5FFFE, 0x5FFFF, - 0x6FFFE, 0x6FFFF, 0x7FFFE, 0x7FFFF, 0x8FFFE, - 0x8FFFF, 0x9FFFE, 0x9FFFF, 0xAFFFE, 0xAFFFF, - 0xBFFFE, 0xBFFFF, 0xCFFFE, 0xCFFFF, 0xDFFFE, - 0xDFFFF, 0xEFFFE, 0xEFFFF, 0xFFFFE, 0xFFFFF, - 0x10FFFE, 0x10FFFF]) - -ascii_punctuation_re = re.compile("[\u0009-\u000D\u0020-\u002F\u003A-\u0040\u005B-\u0060\u007B-\u007E]") - -# Cache for charsUntil() -charsUntilRegEx = {} - - -class BufferedStream(object): - """Buffering for streams that do not have buffering of their own - - The buffer is implemented as a list of chunks on the assumption that - joining many strings will be slow since it is O(n**2) - """ - - def __init__(self, stream): - self.stream = stream - self.buffer = [] - self.position = [-1, 0] # chunk number, offset - - def tell(self): - pos = 0 - for chunk in self.buffer[:self.position[0]]: - pos += len(chunk) - pos += self.position[1] - return pos - - def seek(self, pos): - assert pos <= self._bufferedBytes() - offset = pos - i = 0 - while len(self.buffer[i]) < offset: - offset -= len(self.buffer[i]) - i += 1 - self.position = [i, offset] - - def read(self, bytes): - if not self.buffer: - return self._readStream(bytes) - elif (self.position[0] == len(self.buffer) and - self.position[1] == len(self.buffer[-1])): - return self._readStream(bytes) - else: - return self._readFromBuffer(bytes) - - def _bufferedBytes(self): - return sum([len(item) for item in self.buffer]) - - def _readStream(self, bytes): - data = self.stream.read(bytes) - self.buffer.append(data) - self.position[0] += 1 - self.position[1] = len(data) - return data - - def _readFromBuffer(self, bytes): - remainingBytes = bytes - rv = [] - bufferIndex = self.position[0] - bufferOffset = self.position[1] - while bufferIndex < len(self.buffer) and remainingBytes != 0: - assert remainingBytes > 0 - bufferedData = self.buffer[bufferIndex] - - if remainingBytes <= len(bufferedData) - bufferOffset: - bytesToRead = remainingBytes - self.position = [bufferIndex, bufferOffset + bytesToRead] - else: - bytesToRead = len(bufferedData) - bufferOffset - self.position = [bufferIndex, len(bufferedData)] - bufferIndex += 1 - rv.append(bufferedData[bufferOffset:bufferOffset + bytesToRead]) - remainingBytes -= bytesToRead - - bufferOffset = 0 - - if remainingBytes: - rv.append(self._readStream(remainingBytes)) - - return b"".join(rv) - - -def HTMLInputStream(source, **kwargs): - # Work around Python bug #20007: read(0) closes the connection. - # http://bugs.python.org/issue20007 - if (isinstance(source, http_client.HTTPResponse) or - # Also check for addinfourl wrapping HTTPResponse - (isinstance(source, urllib.response.addbase) and - isinstance(source.fp, http_client.HTTPResponse))): - isUnicode = False - elif hasattr(source, "read"): - isUnicode = isinstance(source.read(0), text_type) - else: - isUnicode = isinstance(source, text_type) - - if isUnicode: - encodings = [x for x in kwargs if x.endswith("_encoding")] - if encodings: - raise TypeError("Cannot set an encoding with a unicode input, set %r" % encodings) - - return HTMLUnicodeInputStream(source, **kwargs) - else: - return HTMLBinaryInputStream(source, **kwargs) - - -class HTMLUnicodeInputStream(object): - """Provides a unicode stream of characters to the HTMLTokenizer. - - This class takes care of character encoding and removing or replacing - incorrect byte-sequences and also provides column and line tracking. - - """ - - _defaultChunkSize = 10240 - - def __init__(self, source): - """Initialises the HTMLInputStream. - - HTMLInputStream(source, [encoding]) -> Normalized stream from source - for use by html5lib. - - source can be either a file-object, local filename or a string. - - The optional encoding parameter must be a string that indicates - the encoding. If specified, that encoding will be used, - regardless of any BOM or later declaration (such as in a meta - element) - - """ - - if not _utils.supports_lone_surrogates: - # Such platforms will have already checked for such - # surrogate errors, so no need to do this checking. - self.reportCharacterErrors = None - elif len("\U0010FFFF") == 1: - self.reportCharacterErrors = self.characterErrorsUCS4 - else: - self.reportCharacterErrors = self.characterErrorsUCS2 - - # List of where new lines occur - self.newLines = [0] - - self.charEncoding = (lookupEncoding("utf-8"), "certain") - self.dataStream = self.openStream(source) - - self.reset() - - def reset(self): - self.chunk = "" - self.chunkSize = 0 - self.chunkOffset = 0 - self.errors = [] - - # number of (complete) lines in previous chunks - self.prevNumLines = 0 - # number of columns in the last line of the previous chunk - self.prevNumCols = 0 - - # Deal with CR LF and surrogates split over chunk boundaries - self._bufferedCharacter = None - - def openStream(self, source): - """Produces a file object from source. - - source can be either a file object, local filename or a string. - - """ - # Already a file object - if hasattr(source, 'read'): - stream = source - else: - stream = StringIO(source) - - return stream - - def _position(self, offset): - chunk = self.chunk - nLines = chunk.count('\n', 0, offset) - positionLine = self.prevNumLines + nLines - lastLinePos = chunk.rfind('\n', 0, offset) - if lastLinePos == -1: - positionColumn = self.prevNumCols + offset - else: - positionColumn = offset - (lastLinePos + 1) - return (positionLine, positionColumn) - - def position(self): - """Returns (line, col) of the current position in the stream.""" - line, col = self._position(self.chunkOffset) - return (line + 1, col) - - def char(self): - """ Read one character from the stream or queue if available. Return - EOF when EOF is reached. - """ - # Read a new chunk from the input stream if necessary - if self.chunkOffset >= self.chunkSize: - if not self.readChunk(): - return EOF - - chunkOffset = self.chunkOffset - char = self.chunk[chunkOffset] - self.chunkOffset = chunkOffset + 1 - - return char - - def readChunk(self, chunkSize=None): - if chunkSize is None: - chunkSize = self._defaultChunkSize - - self.prevNumLines, self.prevNumCols = self._position(self.chunkSize) - - self.chunk = "" - self.chunkSize = 0 - self.chunkOffset = 0 - - data = self.dataStream.read(chunkSize) - - # Deal with CR LF and surrogates broken across chunks - if self._bufferedCharacter: - data = self._bufferedCharacter + data - self._bufferedCharacter = None - elif not data: - # We have no more data, bye-bye stream - return False - - if len(data) > 1: - lastv = ord(data[-1]) - if lastv == 0x0D or 0xD800 <= lastv <= 0xDBFF: - self._bufferedCharacter = data[-1] - data = data[:-1] - - if self.reportCharacterErrors: - self.reportCharacterErrors(data) - - # Replace invalid characters - data = data.replace("\r\n", "\n") - data = data.replace("\r", "\n") - - self.chunk = data - self.chunkSize = len(data) - - return True - - def characterErrorsUCS4(self, data): - for _ in range(len(invalid_unicode_re.findall(data))): - self.errors.append("invalid-codepoint") - - def characterErrorsUCS2(self, data): - # Someone picked the wrong compile option - # You lose - skip = False - for match in invalid_unicode_re.finditer(data): - if skip: - continue - codepoint = ord(match.group()) - pos = match.start() - # Pretty sure there should be endianness issues here - if _utils.isSurrogatePair(data[pos:pos + 2]): - # We have a surrogate pair! - char_val = _utils.surrogatePairToCodepoint(data[pos:pos + 2]) - if char_val in non_bmp_invalid_codepoints: - self.errors.append("invalid-codepoint") - skip = True - elif (codepoint >= 0xD800 and codepoint <= 0xDFFF and - pos == len(data) - 1): - self.errors.append("invalid-codepoint") - else: - skip = False - self.errors.append("invalid-codepoint") - - def charsUntil(self, characters, opposite=False): - """ Returns a string of characters from the stream up to but not - including any character in 'characters' or EOF. 'characters' must be - a container that supports the 'in' method and iteration over its - characters. - """ - - # Use a cache of regexps to find the required characters - try: - chars = charsUntilRegEx[(characters, opposite)] - except KeyError: - if __debug__: - for c in characters: - assert(ord(c) < 128) - regex = "".join(["\\x%02x" % ord(c) for c in characters]) - if not opposite: - regex = "^%s" % regex - chars = charsUntilRegEx[(characters, opposite)] = re.compile("[%s]+" % regex) - - rv = [] - - while True: - # Find the longest matching prefix - m = chars.match(self.chunk, self.chunkOffset) - if m is None: - # If nothing matched, and it wasn't because we ran out of chunk, - # then stop - if self.chunkOffset != self.chunkSize: - break - else: - end = m.end() - # If not the whole chunk matched, return everything - # up to the part that didn't match - if end != self.chunkSize: - rv.append(self.chunk[self.chunkOffset:end]) - self.chunkOffset = end - break - # If the whole remainder of the chunk matched, - # use it all and read the next chunk - rv.append(self.chunk[self.chunkOffset:]) - if not self.readChunk(): - # Reached EOF - break - - r = "".join(rv) - return r - - def unget(self, char): - # Only one character is allowed to be ungotten at once - it must - # be consumed again before any further call to unget - if char is not None: - if self.chunkOffset == 0: - # unget is called quite rarely, so it's a good idea to do - # more work here if it saves a bit of work in the frequently - # called char and charsUntil. - # So, just prepend the ungotten character onto the current - # chunk: - self.chunk = char + self.chunk - self.chunkSize += 1 - else: - self.chunkOffset -= 1 - assert self.chunk[self.chunkOffset] == char - - -class HTMLBinaryInputStream(HTMLUnicodeInputStream): - """Provides a unicode stream of characters to the HTMLTokenizer. - - This class takes care of character encoding and removing or replacing - incorrect byte-sequences and also provides column and line tracking. - - """ - - def __init__(self, source, override_encoding=None, transport_encoding=None, - same_origin_parent_encoding=None, likely_encoding=None, - default_encoding="windows-1252", useChardet=True): - """Initialises the HTMLInputStream. - - HTMLInputStream(source, [encoding]) -> Normalized stream from source - for use by html5lib. - - source can be either a file-object, local filename or a string. - - The optional encoding parameter must be a string that indicates - the encoding. If specified, that encoding will be used, - regardless of any BOM or later declaration (such as in a meta - element) - - """ - # Raw Stream - for unicode objects this will encode to utf-8 and set - # self.charEncoding as appropriate - self.rawStream = self.openStream(source) - - HTMLUnicodeInputStream.__init__(self, self.rawStream) - - # Encoding Information - # Number of bytes to use when looking for a meta element with - # encoding information - self.numBytesMeta = 1024 - # Number of bytes to use when using detecting encoding using chardet - self.numBytesChardet = 100 - # Things from args - self.override_encoding = override_encoding - self.transport_encoding = transport_encoding - self.same_origin_parent_encoding = same_origin_parent_encoding - self.likely_encoding = likely_encoding - self.default_encoding = default_encoding - - # Determine encoding - self.charEncoding = self.determineEncoding(useChardet) - assert self.charEncoding[0] is not None - - # Call superclass - self.reset() - - def reset(self): - self.dataStream = self.charEncoding[0].codec_info.streamreader(self.rawStream, 'replace') - HTMLUnicodeInputStream.reset(self) - - def openStream(self, source): - """Produces a file object from source. - - source can be either a file object, local filename or a string. - - """ - # Already a file object - if hasattr(source, 'read'): - stream = source - else: - stream = BytesIO(source) - - try: - stream.seek(stream.tell()) - except: # pylint:disable=bare-except - stream = BufferedStream(stream) - - return stream - - def determineEncoding(self, chardet=True): - # BOMs take precedence over everything - # This will also read past the BOM if present - charEncoding = self.detectBOM(), "certain" - if charEncoding[0] is not None: - return charEncoding - - # If we've been overriden, we've been overriden - charEncoding = lookupEncoding(self.override_encoding), "certain" - if charEncoding[0] is not None: - return charEncoding - - # Now check the transport layer - charEncoding = lookupEncoding(self.transport_encoding), "certain" - if charEncoding[0] is not None: - return charEncoding - - # Look for meta elements with encoding information - charEncoding = self.detectEncodingMeta(), "tentative" - if charEncoding[0] is not None: - return charEncoding - - # Parent document encoding - charEncoding = lookupEncoding(self.same_origin_parent_encoding), "tentative" - if charEncoding[0] is not None and not charEncoding[0].name.startswith("utf-16"): - return charEncoding - - # "likely" encoding - charEncoding = lookupEncoding(self.likely_encoding), "tentative" - if charEncoding[0] is not None: - return charEncoding - - # Guess with chardet, if available - if chardet: - try: - from chardet.universaldetector import UniversalDetector - except ImportError: - pass - else: - buffers = [] - detector = UniversalDetector() - while not detector.done: - buffer = self.rawStream.read(self.numBytesChardet) - assert isinstance(buffer, bytes) - if not buffer: - break - buffers.append(buffer) - detector.feed(buffer) - detector.close() - encoding = lookupEncoding(detector.result['encoding']) - self.rawStream.seek(0) - if encoding is not None: - return encoding, "tentative" - - # Try the default encoding - charEncoding = lookupEncoding(self.default_encoding), "tentative" - if charEncoding[0] is not None: - return charEncoding - - # Fallback to html5lib's default if even that hasn't worked - return lookupEncoding("windows-1252"), "tentative" - - def changeEncoding(self, newEncoding): - assert self.charEncoding[1] != "certain" - newEncoding = lookupEncoding(newEncoding) - if newEncoding is None: - return - if newEncoding.name in ("utf-16be", "utf-16le"): - newEncoding = lookupEncoding("utf-8") - assert newEncoding is not None - elif newEncoding == self.charEncoding[0]: - self.charEncoding = (self.charEncoding[0], "certain") - else: - self.rawStream.seek(0) - self.charEncoding = (newEncoding, "certain") - self.reset() - raise ReparseException("Encoding changed from %s to %s" % (self.charEncoding[0], newEncoding)) - - def detectBOM(self): - """Attempts to detect at BOM at the start of the stream. If - an encoding can be determined from the BOM return the name of the - encoding otherwise return None""" - bomDict = { - codecs.BOM_UTF8: 'utf-8', - codecs.BOM_UTF16_LE: 'utf-16le', codecs.BOM_UTF16_BE: 'utf-16be', - codecs.BOM_UTF32_LE: 'utf-32le', codecs.BOM_UTF32_BE: 'utf-32be' - } - - # Go to beginning of file and read in 4 bytes - string = self.rawStream.read(4) - assert isinstance(string, bytes) - - # Try detecting the BOM using bytes from the string - encoding = bomDict.get(string[:3]) # UTF-8 - seek = 3 - if not encoding: - # Need to detect UTF-32 before UTF-16 - encoding = bomDict.get(string) # UTF-32 - seek = 4 - if not encoding: - encoding = bomDict.get(string[:2]) # UTF-16 - seek = 2 - - # Set the read position past the BOM if one was found, otherwise - # set it to the start of the stream - if encoding: - self.rawStream.seek(seek) - return lookupEncoding(encoding) - else: - self.rawStream.seek(0) - return None - - def detectEncodingMeta(self): - """Report the encoding declared by the meta element - """ - buffer = self.rawStream.read(self.numBytesMeta) - assert isinstance(buffer, bytes) - parser = EncodingParser(buffer) - self.rawStream.seek(0) - encoding = parser.getEncoding() - - if encoding is not None and encoding.name in ("utf-16be", "utf-16le"): - encoding = lookupEncoding("utf-8") - - return encoding - - -class EncodingBytes(bytes): - """String-like object with an associated position and various extra methods - If the position is ever greater than the string length then an exception is - raised""" - def __new__(self, value): - assert isinstance(value, bytes) - return bytes.__new__(self, value.lower()) - - def __init__(self, value): - # pylint:disable=unused-argument - self._position = -1 - - def __iter__(self): - return self - - def __next__(self): - p = self._position = self._position + 1 - if p >= len(self): - raise StopIteration - elif p < 0: - raise TypeError - return self[p:p + 1] - - def next(self): - # Py2 compat - return self.__next__() - - def previous(self): - p = self._position - if p >= len(self): - raise StopIteration - elif p < 0: - raise TypeError - self._position = p = p - 1 - return self[p:p + 1] - - def setPosition(self, position): - if self._position >= len(self): - raise StopIteration - self._position = position - - def getPosition(self): - if self._position >= len(self): - raise StopIteration - if self._position >= 0: - return self._position - else: - return None - - position = property(getPosition, setPosition) - - def getCurrentByte(self): - return self[self.position:self.position + 1] - - currentByte = property(getCurrentByte) - - def skip(self, chars=spaceCharactersBytes): - """Skip past a list of characters""" - p = self.position # use property for the error-checking - while p < len(self): - c = self[p:p + 1] - if c not in chars: - self._position = p - return c - p += 1 - self._position = p - return None - - def skipUntil(self, chars): - p = self.position - while p < len(self): - c = self[p:p + 1] - if c in chars: - self._position = p - return c - p += 1 - self._position = p - return None - - def matchBytes(self, bytes): - """Look for a sequence of bytes at the start of a string. If the bytes - are found return True and advance the position to the byte after the - match. Otherwise return False and leave the position alone""" - p = self.position - data = self[p:p + len(bytes)] - rv = data.startswith(bytes) - if rv: - self.position += len(bytes) - return rv - - def jumpTo(self, bytes): - """Look for the next sequence of bytes matching a given sequence. If - a match is found advance the position to the last byte of the match""" - newPosition = self[self.position:].find(bytes) - if newPosition > -1: - # XXX: This is ugly, but I can't see a nicer way to fix this. - if self._position == -1: - self._position = 0 - self._position += (newPosition + len(bytes) - 1) - return True - else: - raise StopIteration - - -class EncodingParser(object): - """Mini parser for detecting character encoding from meta elements""" - - def __init__(self, data): - """string - the data to work on for encoding detection""" - self.data = EncodingBytes(data) - self.encoding = None - - def getEncoding(self): - methodDispatch = ( - (b"") - - def handleMeta(self): - if self.data.currentByte not in spaceCharactersBytes: - # if we have ") - - def getAttribute(self): - """Return a name,value pair for the next attribute in the stream, - if one is found, or None""" - data = self.data - # Step 1 (skip chars) - c = data.skip(spaceCharactersBytes | frozenset([b"/"])) - assert c is None or len(c) == 1 - # Step 2 - if c in (b">", None): - return None - # Step 3 - attrName = [] - attrValue = [] - # Step 4 attribute name - while True: - if c == b"=" and attrName: - break - elif c in spaceCharactersBytes: - # Step 6! - c = data.skip() - break - elif c in (b"/", b">"): - return b"".join(attrName), b"" - elif c in asciiUppercaseBytes: - attrName.append(c.lower()) - elif c is None: - return None - else: - attrName.append(c) - # Step 5 - c = next(data) - # Step 7 - if c != b"=": - data.previous() - return b"".join(attrName), b"" - # Step 8 - next(data) - # Step 9 - c = data.skip() - # Step 10 - if c in (b"'", b'"'): - # 10.1 - quoteChar = c - while True: - # 10.2 - c = next(data) - # 10.3 - if c == quoteChar: - next(data) - return b"".join(attrName), b"".join(attrValue) - # 10.4 - elif c in asciiUppercaseBytes: - attrValue.append(c.lower()) - # 10.5 - else: - attrValue.append(c) - elif c == b">": - return b"".join(attrName), b"" - elif c in asciiUppercaseBytes: - attrValue.append(c.lower()) - elif c is None: - return None - else: - attrValue.append(c) - # Step 11 - while True: - c = next(data) - if c in spacesAngleBrackets: - return b"".join(attrName), b"".join(attrValue) - elif c in asciiUppercaseBytes: - attrValue.append(c.lower()) - elif c is None: - return None - else: - attrValue.append(c) - - -class ContentAttrParser(object): - def __init__(self, data): - assert isinstance(data, bytes) - self.data = data - - def parse(self): - try: - # Check if the attr name is charset - # otherwise return - self.data.jumpTo(b"charset") - self.data.position += 1 - self.data.skip() - if not self.data.currentByte == b"=": - # If there is no = sign keep looking for attrs - return None - self.data.position += 1 - self.data.skip() - # Look for an encoding between matching quote marks - if self.data.currentByte in (b'"', b"'"): - quoteMark = self.data.currentByte - self.data.position += 1 - oldPosition = self.data.position - if self.data.jumpTo(quoteMark): - return self.data[oldPosition:self.data.position] - else: - return None - else: - # Unquoted value - oldPosition = self.data.position - try: - self.data.skipUntil(spaceCharactersBytes) - return self.data[oldPosition:self.data.position] - except StopIteration: - # Return the whole remaining value - return self.data[oldPosition:] - except StopIteration: - return None - - -def lookupEncoding(encoding): - """Return the python codec name corresponding to an encoding or None if the - string doesn't correspond to a valid encoding.""" - if isinstance(encoding, binary_type): - try: - encoding = encoding.decode("ascii") - except UnicodeDecodeError: - return None - - if encoding is not None: - try: - return webencodings.lookup(encoding) - except AttributeError: - return None - else: - return None diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/html5lib/_tokenizer.py b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/html5lib/_tokenizer.py deleted file mode 100644 index 178f6e7..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/html5lib/_tokenizer.py +++ /dev/null @@ -1,1721 +0,0 @@ -from __future__ import absolute_import, division, unicode_literals - -from pip._vendor.six import unichr as chr - -from collections import deque - -from .constants import spaceCharacters -from .constants import entities -from .constants import asciiLetters, asciiUpper2Lower -from .constants import digits, hexDigits, EOF -from .constants import tokenTypes, tagTokenTypes -from .constants import replacementCharacters - -from ._inputstream import HTMLInputStream - -from ._trie import Trie - -entitiesTrie = Trie(entities) - - -class HTMLTokenizer(object): - """ This class takes care of tokenizing HTML. - - * self.currentToken - Holds the token that is currently being processed. - - * self.state - Holds a reference to the method to be invoked... XXX - - * self.stream - Points to HTMLInputStream object. - """ - - def __init__(self, stream, parser=None, **kwargs): - - self.stream = HTMLInputStream(stream, **kwargs) - self.parser = parser - - # Setup the initial tokenizer state - self.escapeFlag = False - self.lastFourChars = [] - self.state = self.dataState - self.escape = False - - # The current token being created - self.currentToken = None - super(HTMLTokenizer, self).__init__() - - def __iter__(self): - """ This is where the magic happens. - - We do our usually processing through the states and when we have a token - to return we yield the token which pauses processing until the next token - is requested. - """ - self.tokenQueue = deque([]) - # Start processing. When EOF is reached self.state will return False - # instead of True and the loop will terminate. - while self.state(): - while self.stream.errors: - yield {"type": tokenTypes["ParseError"], "data": self.stream.errors.pop(0)} - while self.tokenQueue: - yield self.tokenQueue.popleft() - - def consumeNumberEntity(self, isHex): - """This function returns either U+FFFD or the character based on the - decimal or hexadecimal representation. It also discards ";" if present. - If not present self.tokenQueue.append({"type": tokenTypes["ParseError"]}) is invoked. - """ - - allowed = digits - radix = 10 - if isHex: - allowed = hexDigits - radix = 16 - - charStack = [] - - # Consume all the characters that are in range while making sure we - # don't hit an EOF. - c = self.stream.char() - while c in allowed and c is not EOF: - charStack.append(c) - c = self.stream.char() - - # Convert the set of characters consumed to an int. - charAsInt = int("".join(charStack), radix) - - # Certain characters get replaced with others - if charAsInt in replacementCharacters: - char = replacementCharacters[charAsInt] - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "illegal-codepoint-for-numeric-entity", - "datavars": {"charAsInt": charAsInt}}) - elif ((0xD800 <= charAsInt <= 0xDFFF) or - (charAsInt > 0x10FFFF)): - char = "\uFFFD" - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "illegal-codepoint-for-numeric-entity", - "datavars": {"charAsInt": charAsInt}}) - else: - # Should speed up this check somehow (e.g. move the set to a constant) - if ((0x0001 <= charAsInt <= 0x0008) or - (0x000E <= charAsInt <= 0x001F) or - (0x007F <= charAsInt <= 0x009F) or - (0xFDD0 <= charAsInt <= 0xFDEF) or - charAsInt in frozenset([0x000B, 0xFFFE, 0xFFFF, 0x1FFFE, - 0x1FFFF, 0x2FFFE, 0x2FFFF, 0x3FFFE, - 0x3FFFF, 0x4FFFE, 0x4FFFF, 0x5FFFE, - 0x5FFFF, 0x6FFFE, 0x6FFFF, 0x7FFFE, - 0x7FFFF, 0x8FFFE, 0x8FFFF, 0x9FFFE, - 0x9FFFF, 0xAFFFE, 0xAFFFF, 0xBFFFE, - 0xBFFFF, 0xCFFFE, 0xCFFFF, 0xDFFFE, - 0xDFFFF, 0xEFFFE, 0xEFFFF, 0xFFFFE, - 0xFFFFF, 0x10FFFE, 0x10FFFF])): - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": - "illegal-codepoint-for-numeric-entity", - "datavars": {"charAsInt": charAsInt}}) - try: - # Try/except needed as UCS-2 Python builds' unichar only works - # within the BMP. - char = chr(charAsInt) - except ValueError: - v = charAsInt - 0x10000 - char = chr(0xD800 | (v >> 10)) + chr(0xDC00 | (v & 0x3FF)) - - # Discard the ; if present. Otherwise, put it back on the queue and - # invoke parseError on parser. - if c != ";": - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "numeric-entity-without-semicolon"}) - self.stream.unget(c) - - return char - - def consumeEntity(self, allowedChar=None, fromAttribute=False): - # Initialise to the default output for when no entity is matched - output = "&" - - charStack = [self.stream.char()] - if (charStack[0] in spaceCharacters or charStack[0] in (EOF, "<", "&") or - (allowedChar is not None and allowedChar == charStack[0])): - self.stream.unget(charStack[0]) - - elif charStack[0] == "#": - # Read the next character to see if it's hex or decimal - hex = False - charStack.append(self.stream.char()) - if charStack[-1] in ("x", "X"): - hex = True - charStack.append(self.stream.char()) - - # charStack[-1] should be the first digit - if (hex and charStack[-1] in hexDigits) \ - or (not hex and charStack[-1] in digits): - # At least one digit found, so consume the whole number - self.stream.unget(charStack[-1]) - output = self.consumeNumberEntity(hex) - else: - # No digits found - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "expected-numeric-entity"}) - self.stream.unget(charStack.pop()) - output = "&" + "".join(charStack) - - else: - # At this point in the process might have named entity. Entities - # are stored in the global variable "entities". - # - # Consume characters and compare to these to a substring of the - # entity names in the list until the substring no longer matches. - while (charStack[-1] is not EOF): - if not entitiesTrie.has_keys_with_prefix("".join(charStack)): - break - charStack.append(self.stream.char()) - - # At this point we have a string that starts with some characters - # that may match an entity - # Try to find the longest entity the string will match to take care - # of ¬i for instance. - try: - entityName = entitiesTrie.longest_prefix("".join(charStack[:-1])) - entityLength = len(entityName) - except KeyError: - entityName = None - - if entityName is not None: - if entityName[-1] != ";": - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "named-entity-without-semicolon"}) - if (entityName[-1] != ";" and fromAttribute and - (charStack[entityLength] in asciiLetters or - charStack[entityLength] in digits or - charStack[entityLength] == "=")): - self.stream.unget(charStack.pop()) - output = "&" + "".join(charStack) - else: - output = entities[entityName] - self.stream.unget(charStack.pop()) - output += "".join(charStack[entityLength:]) - else: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "expected-named-entity"}) - self.stream.unget(charStack.pop()) - output = "&" + "".join(charStack) - - if fromAttribute: - self.currentToken["data"][-1][1] += output - else: - if output in spaceCharacters: - tokenType = "SpaceCharacters" - else: - tokenType = "Characters" - self.tokenQueue.append({"type": tokenTypes[tokenType], "data": output}) - - def processEntityInAttribute(self, allowedChar): - """This method replaces the need for "entityInAttributeValueState". - """ - self.consumeEntity(allowedChar=allowedChar, fromAttribute=True) - - def emitCurrentToken(self): - """This method is a generic handler for emitting the tags. It also sets - the state to "data" because that's what's needed after a token has been - emitted. - """ - token = self.currentToken - # Add token to the queue to be yielded - if (token["type"] in tagTokenTypes): - token["name"] = token["name"].translate(asciiUpper2Lower) - if token["type"] == tokenTypes["EndTag"]: - if token["data"]: - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "attributes-in-end-tag"}) - if token["selfClosing"]: - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "self-closing-flag-on-end-tag"}) - self.tokenQueue.append(token) - self.state = self.dataState - - # Below are the various tokenizer states worked out. - def dataState(self): - data = self.stream.char() - if data == "&": - self.state = self.entityDataState - elif data == "<": - self.state = self.tagOpenState - elif data == "\u0000": - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "invalid-codepoint"}) - self.tokenQueue.append({"type": tokenTypes["Characters"], - "data": "\u0000"}) - elif data is EOF: - # Tokenization ends. - return False - elif data in spaceCharacters: - # Directly after emitting a token you switch back to the "data - # state". At that point spaceCharacters are important so they are - # emitted separately. - self.tokenQueue.append({"type": tokenTypes["SpaceCharacters"], "data": - data + self.stream.charsUntil(spaceCharacters, True)}) - # No need to update lastFourChars here, since the first space will - # have already been appended to lastFourChars and will have broken - # any sequences - else: - chars = self.stream.charsUntil(("&", "<", "\u0000")) - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": - data + chars}) - return True - - def entityDataState(self): - self.consumeEntity() - self.state = self.dataState - return True - - def rcdataState(self): - data = self.stream.char() - if data == "&": - self.state = self.characterReferenceInRcdata - elif data == "<": - self.state = self.rcdataLessThanSignState - elif data == EOF: - # Tokenization ends. - return False - elif data == "\u0000": - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "invalid-codepoint"}) - self.tokenQueue.append({"type": tokenTypes["Characters"], - "data": "\uFFFD"}) - elif data in spaceCharacters: - # Directly after emitting a token you switch back to the "data - # state". At that point spaceCharacters are important so they are - # emitted separately. - self.tokenQueue.append({"type": tokenTypes["SpaceCharacters"], "data": - data + self.stream.charsUntil(spaceCharacters, True)}) - # No need to update lastFourChars here, since the first space will - # have already been appended to lastFourChars and will have broken - # any sequences - else: - chars = self.stream.charsUntil(("&", "<", "\u0000")) - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": - data + chars}) - return True - - def characterReferenceInRcdata(self): - self.consumeEntity() - self.state = self.rcdataState - return True - - def rawtextState(self): - data = self.stream.char() - if data == "<": - self.state = self.rawtextLessThanSignState - elif data == "\u0000": - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "invalid-codepoint"}) - self.tokenQueue.append({"type": tokenTypes["Characters"], - "data": "\uFFFD"}) - elif data == EOF: - # Tokenization ends. - return False - else: - chars = self.stream.charsUntil(("<", "\u0000")) - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": - data + chars}) - return True - - def scriptDataState(self): - data = self.stream.char() - if data == "<": - self.state = self.scriptDataLessThanSignState - elif data == "\u0000": - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "invalid-codepoint"}) - self.tokenQueue.append({"type": tokenTypes["Characters"], - "data": "\uFFFD"}) - elif data == EOF: - # Tokenization ends. - return False - else: - chars = self.stream.charsUntil(("<", "\u0000")) - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": - data + chars}) - return True - - def plaintextState(self): - data = self.stream.char() - if data == EOF: - # Tokenization ends. - return False - elif data == "\u0000": - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "invalid-codepoint"}) - self.tokenQueue.append({"type": tokenTypes["Characters"], - "data": "\uFFFD"}) - else: - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": - data + self.stream.charsUntil("\u0000")}) - return True - - def tagOpenState(self): - data = self.stream.char() - if data == "!": - self.state = self.markupDeclarationOpenState - elif data == "/": - self.state = self.closeTagOpenState - elif data in asciiLetters: - self.currentToken = {"type": tokenTypes["StartTag"], - "name": data, "data": [], - "selfClosing": False, - "selfClosingAcknowledged": False} - self.state = self.tagNameState - elif data == ">": - # XXX In theory it could be something besides a tag name. But - # do we really care? - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "expected-tag-name-but-got-right-bracket"}) - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "<>"}) - self.state = self.dataState - elif data == "?": - # XXX In theory it could be something besides a tag name. But - # do we really care? - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "expected-tag-name-but-got-question-mark"}) - self.stream.unget(data) - self.state = self.bogusCommentState - else: - # XXX - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "expected-tag-name"}) - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "<"}) - self.stream.unget(data) - self.state = self.dataState - return True - - def closeTagOpenState(self): - data = self.stream.char() - if data in asciiLetters: - self.currentToken = {"type": tokenTypes["EndTag"], "name": data, - "data": [], "selfClosing": False} - self.state = self.tagNameState - elif data == ">": - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "expected-closing-tag-but-got-right-bracket"}) - self.state = self.dataState - elif data is EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "expected-closing-tag-but-got-eof"}) - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "": - self.emitCurrentToken() - elif data is EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "eof-in-tag-name"}) - self.state = self.dataState - elif data == "/": - self.state = self.selfClosingStartTagState - elif data == "\u0000": - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "invalid-codepoint"}) - self.currentToken["name"] += "\uFFFD" - else: - self.currentToken["name"] += data - # (Don't use charsUntil here, because tag names are - # very short and it's faster to not do anything fancy) - return True - - def rcdataLessThanSignState(self): - data = self.stream.char() - if data == "/": - self.temporaryBuffer = "" - self.state = self.rcdataEndTagOpenState - else: - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "<"}) - self.stream.unget(data) - self.state = self.rcdataState - return True - - def rcdataEndTagOpenState(self): - data = self.stream.char() - if data in asciiLetters: - self.temporaryBuffer += data - self.state = self.rcdataEndTagNameState - else: - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "" and appropriate: - self.currentToken = {"type": tokenTypes["EndTag"], - "name": self.temporaryBuffer, - "data": [], "selfClosing": False} - self.emitCurrentToken() - self.state = self.dataState - elif data in asciiLetters: - self.temporaryBuffer += data - else: - self.tokenQueue.append({"type": tokenTypes["Characters"], - "data": "" and appropriate: - self.currentToken = {"type": tokenTypes["EndTag"], - "name": self.temporaryBuffer, - "data": [], "selfClosing": False} - self.emitCurrentToken() - self.state = self.dataState - elif data in asciiLetters: - self.temporaryBuffer += data - else: - self.tokenQueue.append({"type": tokenTypes["Characters"], - "data": "" and appropriate: - self.currentToken = {"type": tokenTypes["EndTag"], - "name": self.temporaryBuffer, - "data": [], "selfClosing": False} - self.emitCurrentToken() - self.state = self.dataState - elif data in asciiLetters: - self.temporaryBuffer += data - else: - self.tokenQueue.append({"type": tokenTypes["Characters"], - "data": "": - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": ">"}) - self.state = self.scriptDataState - elif data == "\u0000": - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "invalid-codepoint"}) - self.tokenQueue.append({"type": tokenTypes["Characters"], - "data": "\uFFFD"}) - self.state = self.scriptDataEscapedState - elif data == EOF: - self.state = self.dataState - else: - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": data}) - self.state = self.scriptDataEscapedState - return True - - def scriptDataEscapedLessThanSignState(self): - data = self.stream.char() - if data == "/": - self.temporaryBuffer = "" - self.state = self.scriptDataEscapedEndTagOpenState - elif data in asciiLetters: - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "<" + data}) - self.temporaryBuffer = data - self.state = self.scriptDataDoubleEscapeStartState - else: - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "<"}) - self.stream.unget(data) - self.state = self.scriptDataEscapedState - return True - - def scriptDataEscapedEndTagOpenState(self): - data = self.stream.char() - if data in asciiLetters: - self.temporaryBuffer = data - self.state = self.scriptDataEscapedEndTagNameState - else: - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "" and appropriate: - self.currentToken = {"type": tokenTypes["EndTag"], - "name": self.temporaryBuffer, - "data": [], "selfClosing": False} - self.emitCurrentToken() - self.state = self.dataState - elif data in asciiLetters: - self.temporaryBuffer += data - else: - self.tokenQueue.append({"type": tokenTypes["Characters"], - "data": ""))): - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": data}) - if self.temporaryBuffer.lower() == "script": - self.state = self.scriptDataDoubleEscapedState - else: - self.state = self.scriptDataEscapedState - elif data in asciiLetters: - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": data}) - self.temporaryBuffer += data - else: - self.stream.unget(data) - self.state = self.scriptDataEscapedState - return True - - def scriptDataDoubleEscapedState(self): - data = self.stream.char() - if data == "-": - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "-"}) - self.state = self.scriptDataDoubleEscapedDashState - elif data == "<": - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "<"}) - self.state = self.scriptDataDoubleEscapedLessThanSignState - elif data == "\u0000": - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "invalid-codepoint"}) - self.tokenQueue.append({"type": tokenTypes["Characters"], - "data": "\uFFFD"}) - elif data == EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "eof-in-script-in-script"}) - self.state = self.dataState - else: - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": data}) - return True - - def scriptDataDoubleEscapedDashState(self): - data = self.stream.char() - if data == "-": - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "-"}) - self.state = self.scriptDataDoubleEscapedDashDashState - elif data == "<": - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "<"}) - self.state = self.scriptDataDoubleEscapedLessThanSignState - elif data == "\u0000": - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "invalid-codepoint"}) - self.tokenQueue.append({"type": tokenTypes["Characters"], - "data": "\uFFFD"}) - self.state = self.scriptDataDoubleEscapedState - elif data == EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "eof-in-script-in-script"}) - self.state = self.dataState - else: - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": data}) - self.state = self.scriptDataDoubleEscapedState - return True - - def scriptDataDoubleEscapedDashDashState(self): - data = self.stream.char() - if data == "-": - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "-"}) - elif data == "<": - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "<"}) - self.state = self.scriptDataDoubleEscapedLessThanSignState - elif data == ">": - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": ">"}) - self.state = self.scriptDataState - elif data == "\u0000": - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "invalid-codepoint"}) - self.tokenQueue.append({"type": tokenTypes["Characters"], - "data": "\uFFFD"}) - self.state = self.scriptDataDoubleEscapedState - elif data == EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "eof-in-script-in-script"}) - self.state = self.dataState - else: - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": data}) - self.state = self.scriptDataDoubleEscapedState - return True - - def scriptDataDoubleEscapedLessThanSignState(self): - data = self.stream.char() - if data == "/": - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "/"}) - self.temporaryBuffer = "" - self.state = self.scriptDataDoubleEscapeEndState - else: - self.stream.unget(data) - self.state = self.scriptDataDoubleEscapedState - return True - - def scriptDataDoubleEscapeEndState(self): - data = self.stream.char() - if data in (spaceCharacters | frozenset(("/", ">"))): - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": data}) - if self.temporaryBuffer.lower() == "script": - self.state = self.scriptDataEscapedState - else: - self.state = self.scriptDataDoubleEscapedState - elif data in asciiLetters: - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": data}) - self.temporaryBuffer += data - else: - self.stream.unget(data) - self.state = self.scriptDataDoubleEscapedState - return True - - def beforeAttributeNameState(self): - data = self.stream.char() - if data in spaceCharacters: - self.stream.charsUntil(spaceCharacters, True) - elif data in asciiLetters: - self.currentToken["data"].append([data, ""]) - self.state = self.attributeNameState - elif data == ">": - self.emitCurrentToken() - elif data == "/": - self.state = self.selfClosingStartTagState - elif data in ("'", '"', "=", "<"): - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "invalid-character-in-attribute-name"}) - self.currentToken["data"].append([data, ""]) - self.state = self.attributeNameState - elif data == "\u0000": - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "invalid-codepoint"}) - self.currentToken["data"].append(["\uFFFD", ""]) - self.state = self.attributeNameState - elif data is EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "expected-attribute-name-but-got-eof"}) - self.state = self.dataState - else: - self.currentToken["data"].append([data, ""]) - self.state = self.attributeNameState - return True - - def attributeNameState(self): - data = self.stream.char() - leavingThisState = True - emitToken = False - if data == "=": - self.state = self.beforeAttributeValueState - elif data in asciiLetters: - self.currentToken["data"][-1][0] += data +\ - self.stream.charsUntil(asciiLetters, True) - leavingThisState = False - elif data == ">": - # XXX If we emit here the attributes are converted to a dict - # without being checked and when the code below runs we error - # because data is a dict not a list - emitToken = True - elif data in spaceCharacters: - self.state = self.afterAttributeNameState - elif data == "/": - self.state = self.selfClosingStartTagState - elif data == "\u0000": - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "invalid-codepoint"}) - self.currentToken["data"][-1][0] += "\uFFFD" - leavingThisState = False - elif data in ("'", '"', "<"): - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": - "invalid-character-in-attribute-name"}) - self.currentToken["data"][-1][0] += data - leavingThisState = False - elif data is EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "eof-in-attribute-name"}) - self.state = self.dataState - else: - self.currentToken["data"][-1][0] += data - leavingThisState = False - - if leavingThisState: - # Attributes are not dropped at this stage. That happens when the - # start tag token is emitted so values can still be safely appended - # to attributes, but we do want to report the parse error in time. - self.currentToken["data"][-1][0] = ( - self.currentToken["data"][-1][0].translate(asciiUpper2Lower)) - for name, _ in self.currentToken["data"][:-1]: - if self.currentToken["data"][-1][0] == name: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "duplicate-attribute"}) - break - # XXX Fix for above XXX - if emitToken: - self.emitCurrentToken() - return True - - def afterAttributeNameState(self): - data = self.stream.char() - if data in spaceCharacters: - self.stream.charsUntil(spaceCharacters, True) - elif data == "=": - self.state = self.beforeAttributeValueState - elif data == ">": - self.emitCurrentToken() - elif data in asciiLetters: - self.currentToken["data"].append([data, ""]) - self.state = self.attributeNameState - elif data == "/": - self.state = self.selfClosingStartTagState - elif data == "\u0000": - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "invalid-codepoint"}) - self.currentToken["data"].append(["\uFFFD", ""]) - self.state = self.attributeNameState - elif data in ("'", '"', "<"): - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "invalid-character-after-attribute-name"}) - self.currentToken["data"].append([data, ""]) - self.state = self.attributeNameState - elif data is EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "expected-end-of-tag-but-got-eof"}) - self.state = self.dataState - else: - self.currentToken["data"].append([data, ""]) - self.state = self.attributeNameState - return True - - def beforeAttributeValueState(self): - data = self.stream.char() - if data in spaceCharacters: - self.stream.charsUntil(spaceCharacters, True) - elif data == "\"": - self.state = self.attributeValueDoubleQuotedState - elif data == "&": - self.state = self.attributeValueUnQuotedState - self.stream.unget(data) - elif data == "'": - self.state = self.attributeValueSingleQuotedState - elif data == ">": - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "expected-attribute-value-but-got-right-bracket"}) - self.emitCurrentToken() - elif data == "\u0000": - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "invalid-codepoint"}) - self.currentToken["data"][-1][1] += "\uFFFD" - self.state = self.attributeValueUnQuotedState - elif data in ("=", "<", "`"): - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "equals-in-unquoted-attribute-value"}) - self.currentToken["data"][-1][1] += data - self.state = self.attributeValueUnQuotedState - elif data is EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "expected-attribute-value-but-got-eof"}) - self.state = self.dataState - else: - self.currentToken["data"][-1][1] += data - self.state = self.attributeValueUnQuotedState - return True - - def attributeValueDoubleQuotedState(self): - data = self.stream.char() - if data == "\"": - self.state = self.afterAttributeValueState - elif data == "&": - self.processEntityInAttribute('"') - elif data == "\u0000": - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "invalid-codepoint"}) - self.currentToken["data"][-1][1] += "\uFFFD" - elif data is EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "eof-in-attribute-value-double-quote"}) - self.state = self.dataState - else: - self.currentToken["data"][-1][1] += data +\ - self.stream.charsUntil(("\"", "&", "\u0000")) - return True - - def attributeValueSingleQuotedState(self): - data = self.stream.char() - if data == "'": - self.state = self.afterAttributeValueState - elif data == "&": - self.processEntityInAttribute("'") - elif data == "\u0000": - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "invalid-codepoint"}) - self.currentToken["data"][-1][1] += "\uFFFD" - elif data is EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "eof-in-attribute-value-single-quote"}) - self.state = self.dataState - else: - self.currentToken["data"][-1][1] += data +\ - self.stream.charsUntil(("'", "&", "\u0000")) - return True - - def attributeValueUnQuotedState(self): - data = self.stream.char() - if data in spaceCharacters: - self.state = self.beforeAttributeNameState - elif data == "&": - self.processEntityInAttribute(">") - elif data == ">": - self.emitCurrentToken() - elif data in ('"', "'", "=", "<", "`"): - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "unexpected-character-in-unquoted-attribute-value"}) - self.currentToken["data"][-1][1] += data - elif data == "\u0000": - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "invalid-codepoint"}) - self.currentToken["data"][-1][1] += "\uFFFD" - elif data is EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "eof-in-attribute-value-no-quotes"}) - self.state = self.dataState - else: - self.currentToken["data"][-1][1] += data + self.stream.charsUntil( - frozenset(("&", ">", '"', "'", "=", "<", "`", "\u0000")) | spaceCharacters) - return True - - def afterAttributeValueState(self): - data = self.stream.char() - if data in spaceCharacters: - self.state = self.beforeAttributeNameState - elif data == ">": - self.emitCurrentToken() - elif data == "/": - self.state = self.selfClosingStartTagState - elif data is EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "unexpected-EOF-after-attribute-value"}) - self.stream.unget(data) - self.state = self.dataState - else: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "unexpected-character-after-attribute-value"}) - self.stream.unget(data) - self.state = self.beforeAttributeNameState - return True - - def selfClosingStartTagState(self): - data = self.stream.char() - if data == ">": - self.currentToken["selfClosing"] = True - self.emitCurrentToken() - elif data is EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": - "unexpected-EOF-after-solidus-in-tag"}) - self.stream.unget(data) - self.state = self.dataState - else: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "unexpected-character-after-solidus-in-tag"}) - self.stream.unget(data) - self.state = self.beforeAttributeNameState - return True - - def bogusCommentState(self): - # Make a new comment token and give it as value all the characters - # until the first > or EOF (charsUntil checks for EOF automatically) - # and emit it. - data = self.stream.charsUntil(">") - data = data.replace("\u0000", "\uFFFD") - self.tokenQueue.append( - {"type": tokenTypes["Comment"], "data": data}) - - # Eat the character directly after the bogus comment which is either a - # ">" or an EOF. - self.stream.char() - self.state = self.dataState - return True - - def markupDeclarationOpenState(self): - charStack = [self.stream.char()] - if charStack[-1] == "-": - charStack.append(self.stream.char()) - if charStack[-1] == "-": - self.currentToken = {"type": tokenTypes["Comment"], "data": ""} - self.state = self.commentStartState - return True - elif charStack[-1] in ('d', 'D'): - matched = True - for expected in (('o', 'O'), ('c', 'C'), ('t', 'T'), - ('y', 'Y'), ('p', 'P'), ('e', 'E')): - charStack.append(self.stream.char()) - if charStack[-1] not in expected: - matched = False - break - if matched: - self.currentToken = {"type": tokenTypes["Doctype"], - "name": "", - "publicId": None, "systemId": None, - "correct": True} - self.state = self.doctypeState - return True - elif (charStack[-1] == "[" and - self.parser is not None and - self.parser.tree.openElements and - self.parser.tree.openElements[-1].namespace != self.parser.tree.defaultNamespace): - matched = True - for expected in ["C", "D", "A", "T", "A", "["]: - charStack.append(self.stream.char()) - if charStack[-1] != expected: - matched = False - break - if matched: - self.state = self.cdataSectionState - return True - - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "expected-dashes-or-doctype"}) - - while charStack: - self.stream.unget(charStack.pop()) - self.state = self.bogusCommentState - return True - - def commentStartState(self): - data = self.stream.char() - if data == "-": - self.state = self.commentStartDashState - elif data == "\u0000": - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "invalid-codepoint"}) - self.currentToken["data"] += "\uFFFD" - elif data == ">": - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "incorrect-comment"}) - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - elif data is EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "eof-in-comment"}) - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - else: - self.currentToken["data"] += data - self.state = self.commentState - return True - - def commentStartDashState(self): - data = self.stream.char() - if data == "-": - self.state = self.commentEndState - elif data == "\u0000": - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "invalid-codepoint"}) - self.currentToken["data"] += "-\uFFFD" - elif data == ">": - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "incorrect-comment"}) - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - elif data is EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "eof-in-comment"}) - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - else: - self.currentToken["data"] += "-" + data - self.state = self.commentState - return True - - def commentState(self): - data = self.stream.char() - if data == "-": - self.state = self.commentEndDashState - elif data == "\u0000": - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "invalid-codepoint"}) - self.currentToken["data"] += "\uFFFD" - elif data is EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "eof-in-comment"}) - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - else: - self.currentToken["data"] += data + \ - self.stream.charsUntil(("-", "\u0000")) - return True - - def commentEndDashState(self): - data = self.stream.char() - if data == "-": - self.state = self.commentEndState - elif data == "\u0000": - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "invalid-codepoint"}) - self.currentToken["data"] += "-\uFFFD" - self.state = self.commentState - elif data is EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "eof-in-comment-end-dash"}) - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - else: - self.currentToken["data"] += "-" + data - self.state = self.commentState - return True - - def commentEndState(self): - data = self.stream.char() - if data == ">": - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - elif data == "\u0000": - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "invalid-codepoint"}) - self.currentToken["data"] += "--\uFFFD" - self.state = self.commentState - elif data == "!": - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "unexpected-bang-after-double-dash-in-comment"}) - self.state = self.commentEndBangState - elif data == "-": - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "unexpected-dash-after-double-dash-in-comment"}) - self.currentToken["data"] += data - elif data is EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "eof-in-comment-double-dash"}) - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - else: - # XXX - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "unexpected-char-in-comment"}) - self.currentToken["data"] += "--" + data - self.state = self.commentState - return True - - def commentEndBangState(self): - data = self.stream.char() - if data == ">": - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - elif data == "-": - self.currentToken["data"] += "--!" - self.state = self.commentEndDashState - elif data == "\u0000": - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "invalid-codepoint"}) - self.currentToken["data"] += "--!\uFFFD" - self.state = self.commentState - elif data is EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "eof-in-comment-end-bang-state"}) - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - else: - self.currentToken["data"] += "--!" + data - self.state = self.commentState - return True - - def doctypeState(self): - data = self.stream.char() - if data in spaceCharacters: - self.state = self.beforeDoctypeNameState - elif data is EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "expected-doctype-name-but-got-eof"}) - self.currentToken["correct"] = False - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - else: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "need-space-after-doctype"}) - self.stream.unget(data) - self.state = self.beforeDoctypeNameState - return True - - def beforeDoctypeNameState(self): - data = self.stream.char() - if data in spaceCharacters: - pass - elif data == ">": - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "expected-doctype-name-but-got-right-bracket"}) - self.currentToken["correct"] = False - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - elif data == "\u0000": - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "invalid-codepoint"}) - self.currentToken["name"] = "\uFFFD" - self.state = self.doctypeNameState - elif data is EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "expected-doctype-name-but-got-eof"}) - self.currentToken["correct"] = False - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - else: - self.currentToken["name"] = data - self.state = self.doctypeNameState - return True - - def doctypeNameState(self): - data = self.stream.char() - if data in spaceCharacters: - self.currentToken["name"] = self.currentToken["name"].translate(asciiUpper2Lower) - self.state = self.afterDoctypeNameState - elif data == ">": - self.currentToken["name"] = self.currentToken["name"].translate(asciiUpper2Lower) - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - elif data == "\u0000": - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "invalid-codepoint"}) - self.currentToken["name"] += "\uFFFD" - self.state = self.doctypeNameState - elif data is EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "eof-in-doctype-name"}) - self.currentToken["correct"] = False - self.currentToken["name"] = self.currentToken["name"].translate(asciiUpper2Lower) - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - else: - self.currentToken["name"] += data - return True - - def afterDoctypeNameState(self): - data = self.stream.char() - if data in spaceCharacters: - pass - elif data == ">": - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - elif data is EOF: - self.currentToken["correct"] = False - self.stream.unget(data) - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "eof-in-doctype"}) - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - else: - if data in ("p", "P"): - matched = True - for expected in (("u", "U"), ("b", "B"), ("l", "L"), - ("i", "I"), ("c", "C")): - data = self.stream.char() - if data not in expected: - matched = False - break - if matched: - self.state = self.afterDoctypePublicKeywordState - return True - elif data in ("s", "S"): - matched = True - for expected in (("y", "Y"), ("s", "S"), ("t", "T"), - ("e", "E"), ("m", "M")): - data = self.stream.char() - if data not in expected: - matched = False - break - if matched: - self.state = self.afterDoctypeSystemKeywordState - return True - - # All the characters read before the current 'data' will be - # [a-zA-Z], so they're garbage in the bogus doctype and can be - # discarded; only the latest character might be '>' or EOF - # and needs to be ungetted - self.stream.unget(data) - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "expected-space-or-right-bracket-in-doctype", "datavars": - {"data": data}}) - self.currentToken["correct"] = False - self.state = self.bogusDoctypeState - - return True - - def afterDoctypePublicKeywordState(self): - data = self.stream.char() - if data in spaceCharacters: - self.state = self.beforeDoctypePublicIdentifierState - elif data in ("'", '"'): - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "unexpected-char-in-doctype"}) - self.stream.unget(data) - self.state = self.beforeDoctypePublicIdentifierState - elif data is EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "eof-in-doctype"}) - self.currentToken["correct"] = False - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - else: - self.stream.unget(data) - self.state = self.beforeDoctypePublicIdentifierState - return True - - def beforeDoctypePublicIdentifierState(self): - data = self.stream.char() - if data in spaceCharacters: - pass - elif data == "\"": - self.currentToken["publicId"] = "" - self.state = self.doctypePublicIdentifierDoubleQuotedState - elif data == "'": - self.currentToken["publicId"] = "" - self.state = self.doctypePublicIdentifierSingleQuotedState - elif data == ">": - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "unexpected-end-of-doctype"}) - self.currentToken["correct"] = False - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - elif data is EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "eof-in-doctype"}) - self.currentToken["correct"] = False - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - else: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "unexpected-char-in-doctype"}) - self.currentToken["correct"] = False - self.state = self.bogusDoctypeState - return True - - def doctypePublicIdentifierDoubleQuotedState(self): - data = self.stream.char() - if data == "\"": - self.state = self.afterDoctypePublicIdentifierState - elif data == "\u0000": - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "invalid-codepoint"}) - self.currentToken["publicId"] += "\uFFFD" - elif data == ">": - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "unexpected-end-of-doctype"}) - self.currentToken["correct"] = False - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - elif data is EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "eof-in-doctype"}) - self.currentToken["correct"] = False - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - else: - self.currentToken["publicId"] += data - return True - - def doctypePublicIdentifierSingleQuotedState(self): - data = self.stream.char() - if data == "'": - self.state = self.afterDoctypePublicIdentifierState - elif data == "\u0000": - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "invalid-codepoint"}) - self.currentToken["publicId"] += "\uFFFD" - elif data == ">": - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "unexpected-end-of-doctype"}) - self.currentToken["correct"] = False - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - elif data is EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "eof-in-doctype"}) - self.currentToken["correct"] = False - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - else: - self.currentToken["publicId"] += data - return True - - def afterDoctypePublicIdentifierState(self): - data = self.stream.char() - if data in spaceCharacters: - self.state = self.betweenDoctypePublicAndSystemIdentifiersState - elif data == ">": - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - elif data == '"': - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "unexpected-char-in-doctype"}) - self.currentToken["systemId"] = "" - self.state = self.doctypeSystemIdentifierDoubleQuotedState - elif data == "'": - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "unexpected-char-in-doctype"}) - self.currentToken["systemId"] = "" - self.state = self.doctypeSystemIdentifierSingleQuotedState - elif data is EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "eof-in-doctype"}) - self.currentToken["correct"] = False - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - else: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "unexpected-char-in-doctype"}) - self.currentToken["correct"] = False - self.state = self.bogusDoctypeState - return True - - def betweenDoctypePublicAndSystemIdentifiersState(self): - data = self.stream.char() - if data in spaceCharacters: - pass - elif data == ">": - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - elif data == '"': - self.currentToken["systemId"] = "" - self.state = self.doctypeSystemIdentifierDoubleQuotedState - elif data == "'": - self.currentToken["systemId"] = "" - self.state = self.doctypeSystemIdentifierSingleQuotedState - elif data == EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "eof-in-doctype"}) - self.currentToken["correct"] = False - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - else: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "unexpected-char-in-doctype"}) - self.currentToken["correct"] = False - self.state = self.bogusDoctypeState - return True - - def afterDoctypeSystemKeywordState(self): - data = self.stream.char() - if data in spaceCharacters: - self.state = self.beforeDoctypeSystemIdentifierState - elif data in ("'", '"'): - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "unexpected-char-in-doctype"}) - self.stream.unget(data) - self.state = self.beforeDoctypeSystemIdentifierState - elif data is EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "eof-in-doctype"}) - self.currentToken["correct"] = False - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - else: - self.stream.unget(data) - self.state = self.beforeDoctypeSystemIdentifierState - return True - - def beforeDoctypeSystemIdentifierState(self): - data = self.stream.char() - if data in spaceCharacters: - pass - elif data == "\"": - self.currentToken["systemId"] = "" - self.state = self.doctypeSystemIdentifierDoubleQuotedState - elif data == "'": - self.currentToken["systemId"] = "" - self.state = self.doctypeSystemIdentifierSingleQuotedState - elif data == ">": - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "unexpected-char-in-doctype"}) - self.currentToken["correct"] = False - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - elif data is EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "eof-in-doctype"}) - self.currentToken["correct"] = False - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - else: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "unexpected-char-in-doctype"}) - self.currentToken["correct"] = False - self.state = self.bogusDoctypeState - return True - - def doctypeSystemIdentifierDoubleQuotedState(self): - data = self.stream.char() - if data == "\"": - self.state = self.afterDoctypeSystemIdentifierState - elif data == "\u0000": - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "invalid-codepoint"}) - self.currentToken["systemId"] += "\uFFFD" - elif data == ">": - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "unexpected-end-of-doctype"}) - self.currentToken["correct"] = False - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - elif data is EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "eof-in-doctype"}) - self.currentToken["correct"] = False - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - else: - self.currentToken["systemId"] += data - return True - - def doctypeSystemIdentifierSingleQuotedState(self): - data = self.stream.char() - if data == "'": - self.state = self.afterDoctypeSystemIdentifierState - elif data == "\u0000": - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "invalid-codepoint"}) - self.currentToken["systemId"] += "\uFFFD" - elif data == ">": - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "unexpected-end-of-doctype"}) - self.currentToken["correct"] = False - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - elif data is EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "eof-in-doctype"}) - self.currentToken["correct"] = False - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - else: - self.currentToken["systemId"] += data - return True - - def afterDoctypeSystemIdentifierState(self): - data = self.stream.char() - if data in spaceCharacters: - pass - elif data == ">": - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - elif data is EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "eof-in-doctype"}) - self.currentToken["correct"] = False - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - else: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "unexpected-char-in-doctype"}) - self.state = self.bogusDoctypeState - return True - - def bogusDoctypeState(self): - data = self.stream.char() - if data == ">": - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - elif data is EOF: - # XXX EMIT - self.stream.unget(data) - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - else: - pass - return True - - def cdataSectionState(self): - data = [] - while True: - data.append(self.stream.charsUntil("]")) - data.append(self.stream.charsUntil(">")) - char = self.stream.char() - if char == EOF: - break - else: - assert char == ">" - if data[-1][-2:] == "]]": - data[-1] = data[-1][:-2] - break - else: - data.append(char) - - data = "".join(data) # pylint:disable=redefined-variable-type - # Deal with null here rather than in the parser - nullCount = data.count("\u0000") - if nullCount > 0: - for _ in range(nullCount): - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "invalid-codepoint"}) - data = data.replace("\u0000", "\uFFFD") - if data: - self.tokenQueue.append({"type": tokenTypes["Characters"], - "data": data}) - self.state = self.dataState - return True diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/html5lib/_trie/__init__.py b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/html5lib/_trie/__init__.py deleted file mode 100644 index a5ba4bf..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/html5lib/_trie/__init__.py +++ /dev/null @@ -1,14 +0,0 @@ -from __future__ import absolute_import, division, unicode_literals - -from .py import Trie as PyTrie - -Trie = PyTrie - -# pylint:disable=wrong-import-position -try: - from .datrie import Trie as DATrie -except ImportError: - pass -else: - Trie = DATrie -# pylint:enable=wrong-import-position diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/html5lib/_trie/_base.py b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/html5lib/_trie/_base.py deleted file mode 100644 index 25eece4..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/html5lib/_trie/_base.py +++ /dev/null @@ -1,38 +0,0 @@ -from __future__ import absolute_import, division, unicode_literals - -from collections import Mapping - - -class Trie(Mapping): - """Abstract base class for tries""" - - def keys(self, prefix=None): - # pylint:disable=arguments-differ - keys = super(Trie, self).keys() - - if prefix is None: - return set(keys) - - # Python 2.6: no set comprehensions - return set([x for x in keys if x.startswith(prefix)]) - - def has_keys_with_prefix(self, prefix): - for key in self.keys(): - if key.startswith(prefix): - return True - - return False - - def longest_prefix(self, prefix): - if prefix in self: - return prefix - - for i in range(1, len(prefix) + 1): - if prefix[:-i] in self: - return prefix[:-i] - - raise KeyError(prefix) - - def longest_prefix_item(self, prefix): - lprefix = self.longest_prefix(prefix) - return (lprefix, self[lprefix]) diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/html5lib/_trie/datrie.py b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/html5lib/_trie/datrie.py deleted file mode 100644 index e2e5f86..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/html5lib/_trie/datrie.py +++ /dev/null @@ -1,44 +0,0 @@ -from __future__ import absolute_import, division, unicode_literals - -from datrie import Trie as DATrie -from pip._vendor.six import text_type - -from ._base import Trie as ABCTrie - - -class Trie(ABCTrie): - def __init__(self, data): - chars = set() - for key in data.keys(): - if not isinstance(key, text_type): - raise TypeError("All keys must be strings") - for char in key: - chars.add(char) - - self._data = DATrie("".join(chars)) - for key, value in data.items(): - self._data[key] = value - - def __contains__(self, key): - return key in self._data - - def __len__(self): - return len(self._data) - - def __iter__(self): - raise NotImplementedError() - - def __getitem__(self, key): - return self._data[key] - - def keys(self, prefix=None): - return self._data.keys(prefix) - - def has_keys_with_prefix(self, prefix): - return self._data.has_keys_with_prefix(prefix) - - def longest_prefix(self, prefix): - return self._data.longest_prefix(prefix) - - def longest_prefix_item(self, prefix): - return self._data.longest_prefix_item(prefix) diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/html5lib/_trie/py.py b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/html5lib/_trie/py.py deleted file mode 100644 index c178b21..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/html5lib/_trie/py.py +++ /dev/null @@ -1,67 +0,0 @@ -from __future__ import absolute_import, division, unicode_literals -from pip._vendor.six import text_type - -from bisect import bisect_left - -from ._base import Trie as ABCTrie - - -class Trie(ABCTrie): - def __init__(self, data): - if not all(isinstance(x, text_type) for x in data.keys()): - raise TypeError("All keys must be strings") - - self._data = data - self._keys = sorted(data.keys()) - self._cachestr = "" - self._cachepoints = (0, len(data)) - - def __contains__(self, key): - return key in self._data - - def __len__(self): - return len(self._data) - - def __iter__(self): - return iter(self._data) - - def __getitem__(self, key): - return self._data[key] - - def keys(self, prefix=None): - if prefix is None or prefix == "" or not self._keys: - return set(self._keys) - - if prefix.startswith(self._cachestr): - lo, hi = self._cachepoints - start = i = bisect_left(self._keys, prefix, lo, hi) - else: - start = i = bisect_left(self._keys, prefix) - - keys = set() - if start == len(self._keys): - return keys - - while self._keys[i].startswith(prefix): - keys.add(self._keys[i]) - i += 1 - - self._cachestr = prefix - self._cachepoints = (start, i) - - return keys - - def has_keys_with_prefix(self, prefix): - if prefix in self._data: - return True - - if prefix.startswith(self._cachestr): - lo, hi = self._cachepoints - i = bisect_left(self._keys, prefix, lo, hi) - else: - i = bisect_left(self._keys, prefix) - - if i == len(self._keys): - return False - - return self._keys[i].startswith(prefix) diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/html5lib/_utils.py b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/html5lib/_utils.py deleted file mode 100644 index 55d6747..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/html5lib/_utils.py +++ /dev/null @@ -1,127 +0,0 @@ -from __future__ import absolute_import, division, unicode_literals - -import sys -from types import ModuleType - -from pip._vendor.six import text_type - -try: - import xml.etree.cElementTree as default_etree -except ImportError: - import xml.etree.ElementTree as default_etree - - -__all__ = ["default_etree", "MethodDispatcher", "isSurrogatePair", - "surrogatePairToCodepoint", "moduleFactoryFactory", - "supports_lone_surrogates", "PY27"] - - -PY27 = sys.version_info[0] == 2 and sys.version_info[1] >= 7 - -# Platforms not supporting lone surrogates (\uD800-\uDFFF) should be -# caught by the below test. In general this would be any platform -# using UTF-16 as its encoding of unicode strings, such as -# Jython. This is because UTF-16 itself is based on the use of such -# surrogates, and there is no mechanism to further escape such -# escapes. -try: - _x = eval('"\\uD800"') # pylint:disable=eval-used - if not isinstance(_x, text_type): - # We need this with u"" because of http://bugs.jython.org/issue2039 - _x = eval('u"\\uD800"') # pylint:disable=eval-used - assert isinstance(_x, text_type) -except: # pylint:disable=bare-except - supports_lone_surrogates = False -else: - supports_lone_surrogates = True - - -class MethodDispatcher(dict): - """Dict with 2 special properties: - - On initiation, keys that are lists, sets or tuples are converted to - multiple keys so accessing any one of the items in the original - list-like object returns the matching value - - md = MethodDispatcher({("foo", "bar"):"baz"}) - md["foo"] == "baz" - - A default value which can be set through the default attribute. - """ - - def __init__(self, items=()): - # Using _dictEntries instead of directly assigning to self is about - # twice as fast. Please do careful performance testing before changing - # anything here. - _dictEntries = [] - for name, value in items: - if isinstance(name, (list, tuple, frozenset, set)): - for item in name: - _dictEntries.append((item, value)) - else: - _dictEntries.append((name, value)) - dict.__init__(self, _dictEntries) - assert len(self) == len(_dictEntries) - self.default = None - - def __getitem__(self, key): - return dict.get(self, key, self.default) - - -# Some utility functions to deal with weirdness around UCS2 vs UCS4 -# python builds - -def isSurrogatePair(data): - return (len(data) == 2 and - ord(data[0]) >= 0xD800 and ord(data[0]) <= 0xDBFF and - ord(data[1]) >= 0xDC00 and ord(data[1]) <= 0xDFFF) - - -def surrogatePairToCodepoint(data): - char_val = (0x10000 + (ord(data[0]) - 0xD800) * 0x400 + - (ord(data[1]) - 0xDC00)) - return char_val - -# Module Factory Factory (no, this isn't Java, I know) -# Here to stop this being duplicated all over the place. - - -def moduleFactoryFactory(factory): - moduleCache = {} - - def moduleFactory(baseModule, *args, **kwargs): - if isinstance(ModuleType.__name__, type("")): - name = "_%s_factory" % baseModule.__name__ - else: - name = b"_%s_factory" % baseModule.__name__ - - kwargs_tuple = tuple(kwargs.items()) - - try: - return moduleCache[name][args][kwargs_tuple] - except KeyError: - mod = ModuleType(name) - objs = factory(baseModule, *args, **kwargs) - mod.__dict__.update(objs) - if "name" not in moduleCache: - moduleCache[name] = {} - if "args" not in moduleCache[name]: - moduleCache[name][args] = {} - if "kwargs" not in moduleCache[name][args]: - moduleCache[name][args][kwargs_tuple] = {} - moduleCache[name][args][kwargs_tuple] = mod - return mod - - return moduleFactory - - -def memoize(func): - cache = {} - - def wrapped(*args, **kwargs): - key = (tuple(args), tuple(kwargs.items())) - if key not in cache: - cache[key] = func(*args, **kwargs) - return cache[key] - - return wrapped diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/html5lib/constants.py b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/html5lib/constants.py deleted file mode 100644 index 9e7541d..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/html5lib/constants.py +++ /dev/null @@ -1,2945 +0,0 @@ -from __future__ import absolute_import, division, unicode_literals - -import string - -EOF = None - -E = { - "null-character": - "Null character in input stream, replaced with U+FFFD.", - "invalid-codepoint": - "Invalid codepoint in stream.", - "incorrectly-placed-solidus": - "Solidus (/) incorrectly placed in tag.", - "incorrect-cr-newline-entity": - "Incorrect CR newline entity, replaced with LF.", - "illegal-windows-1252-entity": - "Entity used with illegal number (windows-1252 reference).", - "cant-convert-numeric-entity": - "Numeric entity couldn't be converted to character " - "(codepoint U+%(charAsInt)08x).", - "illegal-codepoint-for-numeric-entity": - "Numeric entity represents an illegal codepoint: " - "U+%(charAsInt)08x.", - "numeric-entity-without-semicolon": - "Numeric entity didn't end with ';'.", - "expected-numeric-entity-but-got-eof": - "Numeric entity expected. Got end of file instead.", - "expected-numeric-entity": - "Numeric entity expected but none found.", - "named-entity-without-semicolon": - "Named entity didn't end with ';'.", - "expected-named-entity": - "Named entity expected. Got none.", - "attributes-in-end-tag": - "End tag contains unexpected attributes.", - 'self-closing-flag-on-end-tag': - "End tag contains unexpected self-closing flag.", - "expected-tag-name-but-got-right-bracket": - "Expected tag name. Got '>' instead.", - "expected-tag-name-but-got-question-mark": - "Expected tag name. Got '?' instead. (HTML doesn't " - "support processing instructions.)", - "expected-tag-name": - "Expected tag name. Got something else instead", - "expected-closing-tag-but-got-right-bracket": - "Expected closing tag. Got '>' instead. Ignoring ''.", - "expected-closing-tag-but-got-eof": - "Expected closing tag. Unexpected end of file.", - "expected-closing-tag-but-got-char": - "Expected closing tag. Unexpected character '%(data)s' found.", - "eof-in-tag-name": - "Unexpected end of file in the tag name.", - "expected-attribute-name-but-got-eof": - "Unexpected end of file. Expected attribute name instead.", - "eof-in-attribute-name": - "Unexpected end of file in attribute name.", - "invalid-character-in-attribute-name": - "Invalid character in attribute name", - "duplicate-attribute": - "Dropped duplicate attribute on tag.", - "expected-end-of-tag-name-but-got-eof": - "Unexpected end of file. Expected = or end of tag.", - "expected-attribute-value-but-got-eof": - "Unexpected end of file. Expected attribute value.", - "expected-attribute-value-but-got-right-bracket": - "Expected attribute value. Got '>' instead.", - 'equals-in-unquoted-attribute-value': - "Unexpected = in unquoted attribute", - 'unexpected-character-in-unquoted-attribute-value': - "Unexpected character in unquoted attribute", - "invalid-character-after-attribute-name": - "Unexpected character after attribute name.", - "unexpected-character-after-attribute-value": - "Unexpected character after attribute value.", - "eof-in-attribute-value-double-quote": - "Unexpected end of file in attribute value (\").", - "eof-in-attribute-value-single-quote": - "Unexpected end of file in attribute value (').", - "eof-in-attribute-value-no-quotes": - "Unexpected end of file in attribute value.", - "unexpected-EOF-after-solidus-in-tag": - "Unexpected end of file in tag. Expected >", - "unexpected-character-after-solidus-in-tag": - "Unexpected character after / in tag. Expected >", - "expected-dashes-or-doctype": - "Expected '--' or 'DOCTYPE'. Not found.", - "unexpected-bang-after-double-dash-in-comment": - "Unexpected ! after -- in comment", - "unexpected-space-after-double-dash-in-comment": - "Unexpected space after -- in comment", - "incorrect-comment": - "Incorrect comment.", - "eof-in-comment": - "Unexpected end of file in comment.", - "eof-in-comment-end-dash": - "Unexpected end of file in comment (-)", - "unexpected-dash-after-double-dash-in-comment": - "Unexpected '-' after '--' found in comment.", - "eof-in-comment-double-dash": - "Unexpected end of file in comment (--).", - "eof-in-comment-end-space-state": - "Unexpected end of file in comment.", - "eof-in-comment-end-bang-state": - "Unexpected end of file in comment.", - "unexpected-char-in-comment": - "Unexpected character in comment found.", - "need-space-after-doctype": - "No space after literal string 'DOCTYPE'.", - "expected-doctype-name-but-got-right-bracket": - "Unexpected > character. Expected DOCTYPE name.", - "expected-doctype-name-but-got-eof": - "Unexpected end of file. Expected DOCTYPE name.", - "eof-in-doctype-name": - "Unexpected end of file in DOCTYPE name.", - "eof-in-doctype": - "Unexpected end of file in DOCTYPE.", - "expected-space-or-right-bracket-in-doctype": - "Expected space or '>'. Got '%(data)s'", - "unexpected-end-of-doctype": - "Unexpected end of DOCTYPE.", - "unexpected-char-in-doctype": - "Unexpected character in DOCTYPE.", - "eof-in-innerhtml": - "XXX innerHTML EOF", - "unexpected-doctype": - "Unexpected DOCTYPE. Ignored.", - "non-html-root": - "html needs to be the first start tag.", - "expected-doctype-but-got-eof": - "Unexpected End of file. Expected DOCTYPE.", - "unknown-doctype": - "Erroneous DOCTYPE.", - "expected-doctype-but-got-chars": - "Unexpected non-space characters. Expected DOCTYPE.", - "expected-doctype-but-got-start-tag": - "Unexpected start tag (%(name)s). Expected DOCTYPE.", - "expected-doctype-but-got-end-tag": - "Unexpected end tag (%(name)s). Expected DOCTYPE.", - "end-tag-after-implied-root": - "Unexpected end tag (%(name)s) after the (implied) root element.", - "expected-named-closing-tag-but-got-eof": - "Unexpected end of file. Expected end tag (%(name)s).", - "two-heads-are-not-better-than-one": - "Unexpected start tag head in existing head. Ignored.", - "unexpected-end-tag": - "Unexpected end tag (%(name)s). Ignored.", - "unexpected-start-tag-out-of-my-head": - "Unexpected start tag (%(name)s) that can be in head. Moved.", - "unexpected-start-tag": - "Unexpected start tag (%(name)s).", - "missing-end-tag": - "Missing end tag (%(name)s).", - "missing-end-tags": - "Missing end tags (%(name)s).", - "unexpected-start-tag-implies-end-tag": - "Unexpected start tag (%(startName)s) " - "implies end tag (%(endName)s).", - "unexpected-start-tag-treated-as": - "Unexpected start tag (%(originalName)s). Treated as %(newName)s.", - "deprecated-tag": - "Unexpected start tag %(name)s. Don't use it!", - "unexpected-start-tag-ignored": - "Unexpected start tag %(name)s. Ignored.", - "expected-one-end-tag-but-got-another": - "Unexpected end tag (%(gotName)s). " - "Missing end tag (%(expectedName)s).", - "end-tag-too-early": - "End tag (%(name)s) seen too early. Expected other end tag.", - "end-tag-too-early-named": - "Unexpected end tag (%(gotName)s). Expected end tag (%(expectedName)s).", - "end-tag-too-early-ignored": - "End tag (%(name)s) seen too early. Ignored.", - "adoption-agency-1.1": - "End tag (%(name)s) violates step 1, " - "paragraph 1 of the adoption agency algorithm.", - "adoption-agency-1.2": - "End tag (%(name)s) violates step 1, " - "paragraph 2 of the adoption agency algorithm.", - "adoption-agency-1.3": - "End tag (%(name)s) violates step 1, " - "paragraph 3 of the adoption agency algorithm.", - "adoption-agency-4.4": - "End tag (%(name)s) violates step 4, " - "paragraph 4 of the adoption agency algorithm.", - "unexpected-end-tag-treated-as": - "Unexpected end tag (%(originalName)s). Treated as %(newName)s.", - "no-end-tag": - "This element (%(name)s) has no end tag.", - "unexpected-implied-end-tag-in-table": - "Unexpected implied end tag (%(name)s) in the table phase.", - "unexpected-implied-end-tag-in-table-body": - "Unexpected implied end tag (%(name)s) in the table body phase.", - "unexpected-char-implies-table-voodoo": - "Unexpected non-space characters in " - "table context caused voodoo mode.", - "unexpected-hidden-input-in-table": - "Unexpected input with type hidden in table context.", - "unexpected-form-in-table": - "Unexpected form in table context.", - "unexpected-start-tag-implies-table-voodoo": - "Unexpected start tag (%(name)s) in " - "table context caused voodoo mode.", - "unexpected-end-tag-implies-table-voodoo": - "Unexpected end tag (%(name)s) in " - "table context caused voodoo mode.", - "unexpected-cell-in-table-body": - "Unexpected table cell start tag (%(name)s) " - "in the table body phase.", - "unexpected-cell-end-tag": - "Got table cell end tag (%(name)s) " - "while required end tags are missing.", - "unexpected-end-tag-in-table-body": - "Unexpected end tag (%(name)s) in the table body phase. Ignored.", - "unexpected-implied-end-tag-in-table-row": - "Unexpected implied end tag (%(name)s) in the table row phase.", - "unexpected-end-tag-in-table-row": - "Unexpected end tag (%(name)s) in the table row phase. Ignored.", - "unexpected-select-in-select": - "Unexpected select start tag in the select phase " - "treated as select end tag.", - "unexpected-input-in-select": - "Unexpected input start tag in the select phase.", - "unexpected-start-tag-in-select": - "Unexpected start tag token (%(name)s in the select phase. " - "Ignored.", - "unexpected-end-tag-in-select": - "Unexpected end tag (%(name)s) in the select phase. Ignored.", - "unexpected-table-element-start-tag-in-select-in-table": - "Unexpected table element start tag (%(name)s) in the select in table phase.", - "unexpected-table-element-end-tag-in-select-in-table": - "Unexpected table element end tag (%(name)s) in the select in table phase.", - "unexpected-char-after-body": - "Unexpected non-space characters in the after body phase.", - "unexpected-start-tag-after-body": - "Unexpected start tag token (%(name)s)" - " in the after body phase.", - "unexpected-end-tag-after-body": - "Unexpected end tag token (%(name)s)" - " in the after body phase.", - "unexpected-char-in-frameset": - "Unexpected characters in the frameset phase. Characters ignored.", - "unexpected-start-tag-in-frameset": - "Unexpected start tag token (%(name)s)" - " in the frameset phase. Ignored.", - "unexpected-frameset-in-frameset-innerhtml": - "Unexpected end tag token (frameset) " - "in the frameset phase (innerHTML).", - "unexpected-end-tag-in-frameset": - "Unexpected end tag token (%(name)s)" - " in the frameset phase. Ignored.", - "unexpected-char-after-frameset": - "Unexpected non-space characters in the " - "after frameset phase. Ignored.", - "unexpected-start-tag-after-frameset": - "Unexpected start tag (%(name)s)" - " in the after frameset phase. Ignored.", - "unexpected-end-tag-after-frameset": - "Unexpected end tag (%(name)s)" - " in the after frameset phase. Ignored.", - "unexpected-end-tag-after-body-innerhtml": - "Unexpected end tag after body(innerHtml)", - "expected-eof-but-got-char": - "Unexpected non-space characters. Expected end of file.", - "expected-eof-but-got-start-tag": - "Unexpected start tag (%(name)s)" - ". Expected end of file.", - "expected-eof-but-got-end-tag": - "Unexpected end tag (%(name)s)" - ". Expected end of file.", - "eof-in-table": - "Unexpected end of file. Expected table content.", - "eof-in-select": - "Unexpected end of file. Expected select content.", - "eof-in-frameset": - "Unexpected end of file. Expected frameset content.", - "eof-in-script-in-script": - "Unexpected end of file. Expected script content.", - "eof-in-foreign-lands": - "Unexpected end of file. Expected foreign content", - "non-void-element-with-trailing-solidus": - "Trailing solidus not allowed on element %(name)s", - "unexpected-html-element-in-foreign-content": - "Element %(name)s not allowed in a non-html context", - "unexpected-end-tag-before-html": - "Unexpected end tag (%(name)s) before html.", - "unexpected-inhead-noscript-tag": - "Element %(name)s not allowed in a inhead-noscript context", - "eof-in-head-noscript": - "Unexpected end of file. Expected inhead-noscript content", - "char-in-head-noscript": - "Unexpected non-space character. Expected inhead-noscript content", - "XXX-undefined-error": - "Undefined error (this sucks and should be fixed)", -} - -namespaces = { - "html": "http://www.w3.org/1999/xhtml", - "mathml": "http://www.w3.org/1998/Math/MathML", - "svg": "http://www.w3.org/2000/svg", - "xlink": "http://www.w3.org/1999/xlink", - "xml": "http://www.w3.org/XML/1998/namespace", - "xmlns": "http://www.w3.org/2000/xmlns/" -} - -scopingElements = frozenset([ - (namespaces["html"], "applet"), - (namespaces["html"], "caption"), - (namespaces["html"], "html"), - (namespaces["html"], "marquee"), - (namespaces["html"], "object"), - (namespaces["html"], "table"), - (namespaces["html"], "td"), - (namespaces["html"], "th"), - (namespaces["mathml"], "mi"), - (namespaces["mathml"], "mo"), - (namespaces["mathml"], "mn"), - (namespaces["mathml"], "ms"), - (namespaces["mathml"], "mtext"), - (namespaces["mathml"], "annotation-xml"), - (namespaces["svg"], "foreignObject"), - (namespaces["svg"], "desc"), - (namespaces["svg"], "title"), -]) - -formattingElements = frozenset([ - (namespaces["html"], "a"), - (namespaces["html"], "b"), - (namespaces["html"], "big"), - (namespaces["html"], "code"), - (namespaces["html"], "em"), - (namespaces["html"], "font"), - (namespaces["html"], "i"), - (namespaces["html"], "nobr"), - (namespaces["html"], "s"), - (namespaces["html"], "small"), - (namespaces["html"], "strike"), - (namespaces["html"], "strong"), - (namespaces["html"], "tt"), - (namespaces["html"], "u") -]) - -specialElements = frozenset([ - (namespaces["html"], "address"), - (namespaces["html"], "applet"), - (namespaces["html"], "area"), - (namespaces["html"], "article"), - (namespaces["html"], "aside"), - (namespaces["html"], "base"), - (namespaces["html"], "basefont"), - (namespaces["html"], "bgsound"), - (namespaces["html"], "blockquote"), - (namespaces["html"], "body"), - (namespaces["html"], "br"), - (namespaces["html"], "button"), - (namespaces["html"], "caption"), - (namespaces["html"], "center"), - (namespaces["html"], "col"), - (namespaces["html"], "colgroup"), - (namespaces["html"], "command"), - (namespaces["html"], "dd"), - (namespaces["html"], "details"), - (namespaces["html"], "dir"), - (namespaces["html"], "div"), - (namespaces["html"], "dl"), - (namespaces["html"], "dt"), - (namespaces["html"], "embed"), - (namespaces["html"], "fieldset"), - (namespaces["html"], "figure"), - (namespaces["html"], "footer"), - (namespaces["html"], "form"), - (namespaces["html"], "frame"), - (namespaces["html"], "frameset"), - (namespaces["html"], "h1"), - (namespaces["html"], "h2"), - (namespaces["html"], "h3"), - (namespaces["html"], "h4"), - (namespaces["html"], "h5"), - (namespaces["html"], "h6"), - (namespaces["html"], "head"), - (namespaces["html"], "header"), - (namespaces["html"], "hr"), - (namespaces["html"], "html"), - (namespaces["html"], "iframe"), - # Note that image is commented out in the spec as "this isn't an - # element that can end up on the stack, so it doesn't matter," - (namespaces["html"], "image"), - (namespaces["html"], "img"), - (namespaces["html"], "input"), - (namespaces["html"], "isindex"), - (namespaces["html"], "li"), - (namespaces["html"], "link"), - (namespaces["html"], "listing"), - (namespaces["html"], "marquee"), - (namespaces["html"], "menu"), - (namespaces["html"], "meta"), - (namespaces["html"], "nav"), - (namespaces["html"], "noembed"), - (namespaces["html"], "noframes"), - (namespaces["html"], "noscript"), - (namespaces["html"], "object"), - (namespaces["html"], "ol"), - (namespaces["html"], "p"), - (namespaces["html"], "param"), - (namespaces["html"], "plaintext"), - (namespaces["html"], "pre"), - (namespaces["html"], "script"), - (namespaces["html"], "section"), - (namespaces["html"], "select"), - (namespaces["html"], "style"), - (namespaces["html"], "table"), - (namespaces["html"], "tbody"), - (namespaces["html"], "td"), - (namespaces["html"], "textarea"), - (namespaces["html"], "tfoot"), - (namespaces["html"], "th"), - (namespaces["html"], "thead"), - (namespaces["html"], "title"), - (namespaces["html"], "tr"), - (namespaces["html"], "ul"), - (namespaces["html"], "wbr"), - (namespaces["html"], "xmp"), - (namespaces["svg"], "foreignObject") -]) - -htmlIntegrationPointElements = frozenset([ - (namespaces["mathml"], "annotaion-xml"), - (namespaces["svg"], "foreignObject"), - (namespaces["svg"], "desc"), - (namespaces["svg"], "title") -]) - -mathmlTextIntegrationPointElements = frozenset([ - (namespaces["mathml"], "mi"), - (namespaces["mathml"], "mo"), - (namespaces["mathml"], "mn"), - (namespaces["mathml"], "ms"), - (namespaces["mathml"], "mtext") -]) - -adjustSVGAttributes = { - "attributename": "attributeName", - "attributetype": "attributeType", - "basefrequency": "baseFrequency", - "baseprofile": "baseProfile", - "calcmode": "calcMode", - "clippathunits": "clipPathUnits", - "contentscripttype": "contentScriptType", - "contentstyletype": "contentStyleType", - "diffuseconstant": "diffuseConstant", - "edgemode": "edgeMode", - "externalresourcesrequired": "externalResourcesRequired", - "filterres": "filterRes", - "filterunits": "filterUnits", - "glyphref": "glyphRef", - "gradienttransform": "gradientTransform", - "gradientunits": "gradientUnits", - "kernelmatrix": "kernelMatrix", - "kernelunitlength": "kernelUnitLength", - "keypoints": "keyPoints", - "keysplines": "keySplines", - "keytimes": "keyTimes", - "lengthadjust": "lengthAdjust", - "limitingconeangle": "limitingConeAngle", - "markerheight": "markerHeight", - "markerunits": "markerUnits", - "markerwidth": "markerWidth", - "maskcontentunits": "maskContentUnits", - "maskunits": "maskUnits", - "numoctaves": "numOctaves", - "pathlength": "pathLength", - "patterncontentunits": "patternContentUnits", - "patterntransform": "patternTransform", - "patternunits": "patternUnits", - "pointsatx": "pointsAtX", - "pointsaty": "pointsAtY", - "pointsatz": "pointsAtZ", - "preservealpha": "preserveAlpha", - "preserveaspectratio": "preserveAspectRatio", - "primitiveunits": "primitiveUnits", - "refx": "refX", - "refy": "refY", - "repeatcount": "repeatCount", - "repeatdur": "repeatDur", - "requiredextensions": "requiredExtensions", - "requiredfeatures": "requiredFeatures", - "specularconstant": "specularConstant", - "specularexponent": "specularExponent", - "spreadmethod": "spreadMethod", - "startoffset": "startOffset", - "stddeviation": "stdDeviation", - "stitchtiles": "stitchTiles", - "surfacescale": "surfaceScale", - "systemlanguage": "systemLanguage", - "tablevalues": "tableValues", - "targetx": "targetX", - "targety": "targetY", - "textlength": "textLength", - "viewbox": "viewBox", - "viewtarget": "viewTarget", - "xchannelselector": "xChannelSelector", - "ychannelselector": "yChannelSelector", - "zoomandpan": "zoomAndPan" -} - -adjustMathMLAttributes = {"definitionurl": "definitionURL"} - -adjustForeignAttributes = { - "xlink:actuate": ("xlink", "actuate", namespaces["xlink"]), - "xlink:arcrole": ("xlink", "arcrole", namespaces["xlink"]), - "xlink:href": ("xlink", "href", namespaces["xlink"]), - "xlink:role": ("xlink", "role", namespaces["xlink"]), - "xlink:show": ("xlink", "show", namespaces["xlink"]), - "xlink:title": ("xlink", "title", namespaces["xlink"]), - "xlink:type": ("xlink", "type", namespaces["xlink"]), - "xml:base": ("xml", "base", namespaces["xml"]), - "xml:lang": ("xml", "lang", namespaces["xml"]), - "xml:space": ("xml", "space", namespaces["xml"]), - "xmlns": (None, "xmlns", namespaces["xmlns"]), - "xmlns:xlink": ("xmlns", "xlink", namespaces["xmlns"]) -} - -unadjustForeignAttributes = dict([((ns, local), qname) for qname, (prefix, local, ns) in - adjustForeignAttributes.items()]) - -spaceCharacters = frozenset([ - "\t", - "\n", - "\u000C", - " ", - "\r" -]) - -tableInsertModeElements = frozenset([ - "table", - "tbody", - "tfoot", - "thead", - "tr" -]) - -asciiLowercase = frozenset(string.ascii_lowercase) -asciiUppercase = frozenset(string.ascii_uppercase) -asciiLetters = frozenset(string.ascii_letters) -digits = frozenset(string.digits) -hexDigits = frozenset(string.hexdigits) - -asciiUpper2Lower = dict([(ord(c), ord(c.lower())) - for c in string.ascii_uppercase]) - -# Heading elements need to be ordered -headingElements = ( - "h1", - "h2", - "h3", - "h4", - "h5", - "h6" -) - -voidElements = frozenset([ - "base", - "command", - "event-source", - "link", - "meta", - "hr", - "br", - "img", - "embed", - "param", - "area", - "col", - "input", - "source", - "track" -]) - -cdataElements = frozenset(['title', 'textarea']) - -rcdataElements = frozenset([ - 'style', - 'script', - 'xmp', - 'iframe', - 'noembed', - 'noframes', - 'noscript' -]) - -booleanAttributes = { - "": frozenset(["irrelevant"]), - "style": frozenset(["scoped"]), - "img": frozenset(["ismap"]), - "audio": frozenset(["autoplay", "controls"]), - "video": frozenset(["autoplay", "controls"]), - "script": frozenset(["defer", "async"]), - "details": frozenset(["open"]), - "datagrid": frozenset(["multiple", "disabled"]), - "command": frozenset(["hidden", "disabled", "checked", "default"]), - "hr": frozenset(["noshade"]), - "menu": frozenset(["autosubmit"]), - "fieldset": frozenset(["disabled", "readonly"]), - "option": frozenset(["disabled", "readonly", "selected"]), - "optgroup": frozenset(["disabled", "readonly"]), - "button": frozenset(["disabled", "autofocus"]), - "input": frozenset(["disabled", "readonly", "required", "autofocus", "checked", "ismap"]), - "select": frozenset(["disabled", "readonly", "autofocus", "multiple"]), - "output": frozenset(["disabled", "readonly"]), -} - -# entitiesWindows1252 has to be _ordered_ and needs to have an index. It -# therefore can't be a frozenset. -entitiesWindows1252 = ( - 8364, # 0x80 0x20AC EURO SIGN - 65533, # 0x81 UNDEFINED - 8218, # 0x82 0x201A SINGLE LOW-9 QUOTATION MARK - 402, # 0x83 0x0192 LATIN SMALL LETTER F WITH HOOK - 8222, # 0x84 0x201E DOUBLE LOW-9 QUOTATION MARK - 8230, # 0x85 0x2026 HORIZONTAL ELLIPSIS - 8224, # 0x86 0x2020 DAGGER - 8225, # 0x87 0x2021 DOUBLE DAGGER - 710, # 0x88 0x02C6 MODIFIER LETTER CIRCUMFLEX ACCENT - 8240, # 0x89 0x2030 PER MILLE SIGN - 352, # 0x8A 0x0160 LATIN CAPITAL LETTER S WITH CARON - 8249, # 0x8B 0x2039 SINGLE LEFT-POINTING ANGLE QUOTATION MARK - 338, # 0x8C 0x0152 LATIN CAPITAL LIGATURE OE - 65533, # 0x8D UNDEFINED - 381, # 0x8E 0x017D LATIN CAPITAL LETTER Z WITH CARON - 65533, # 0x8F UNDEFINED - 65533, # 0x90 UNDEFINED - 8216, # 0x91 0x2018 LEFT SINGLE QUOTATION MARK - 8217, # 0x92 0x2019 RIGHT SINGLE QUOTATION MARK - 8220, # 0x93 0x201C LEFT DOUBLE QUOTATION MARK - 8221, # 0x94 0x201D RIGHT DOUBLE QUOTATION MARK - 8226, # 0x95 0x2022 BULLET - 8211, # 0x96 0x2013 EN DASH - 8212, # 0x97 0x2014 EM DASH - 732, # 0x98 0x02DC SMALL TILDE - 8482, # 0x99 0x2122 TRADE MARK SIGN - 353, # 0x9A 0x0161 LATIN SMALL LETTER S WITH CARON - 8250, # 0x9B 0x203A SINGLE RIGHT-POINTING ANGLE QUOTATION MARK - 339, # 0x9C 0x0153 LATIN SMALL LIGATURE OE - 65533, # 0x9D UNDEFINED - 382, # 0x9E 0x017E LATIN SMALL LETTER Z WITH CARON - 376 # 0x9F 0x0178 LATIN CAPITAL LETTER Y WITH DIAERESIS -) - -xmlEntities = frozenset(['lt;', 'gt;', 'amp;', 'apos;', 'quot;']) - -entities = { - "AElig": "\xc6", - "AElig;": "\xc6", - "AMP": "&", - "AMP;": "&", - "Aacute": "\xc1", - "Aacute;": "\xc1", - "Abreve;": "\u0102", - "Acirc": "\xc2", - "Acirc;": "\xc2", - "Acy;": "\u0410", - "Afr;": "\U0001d504", - "Agrave": "\xc0", - "Agrave;": "\xc0", - "Alpha;": "\u0391", - "Amacr;": "\u0100", - "And;": "\u2a53", - "Aogon;": "\u0104", - "Aopf;": "\U0001d538", - "ApplyFunction;": "\u2061", - "Aring": "\xc5", - "Aring;": "\xc5", - "Ascr;": "\U0001d49c", - "Assign;": "\u2254", - "Atilde": "\xc3", - "Atilde;": "\xc3", - "Auml": "\xc4", - "Auml;": "\xc4", - "Backslash;": "\u2216", - "Barv;": "\u2ae7", - "Barwed;": "\u2306", - "Bcy;": "\u0411", - "Because;": "\u2235", - "Bernoullis;": "\u212c", - "Beta;": "\u0392", - "Bfr;": "\U0001d505", - "Bopf;": "\U0001d539", - "Breve;": "\u02d8", - "Bscr;": "\u212c", - "Bumpeq;": "\u224e", - "CHcy;": "\u0427", - "COPY": "\xa9", - "COPY;": "\xa9", - "Cacute;": "\u0106", - "Cap;": "\u22d2", - "CapitalDifferentialD;": "\u2145", - "Cayleys;": "\u212d", - "Ccaron;": "\u010c", - "Ccedil": "\xc7", - "Ccedil;": "\xc7", - "Ccirc;": "\u0108", - "Cconint;": "\u2230", - "Cdot;": "\u010a", - "Cedilla;": "\xb8", - "CenterDot;": "\xb7", - "Cfr;": "\u212d", - "Chi;": "\u03a7", - "CircleDot;": "\u2299", - "CircleMinus;": "\u2296", - "CirclePlus;": "\u2295", - "CircleTimes;": "\u2297", - "ClockwiseContourIntegral;": "\u2232", - "CloseCurlyDoubleQuote;": "\u201d", - "CloseCurlyQuote;": "\u2019", - "Colon;": "\u2237", - "Colone;": "\u2a74", - "Congruent;": "\u2261", - "Conint;": "\u222f", - "ContourIntegral;": "\u222e", - "Copf;": "\u2102", - "Coproduct;": "\u2210", - "CounterClockwiseContourIntegral;": "\u2233", - "Cross;": "\u2a2f", - "Cscr;": "\U0001d49e", - "Cup;": "\u22d3", - "CupCap;": "\u224d", - "DD;": "\u2145", - "DDotrahd;": "\u2911", - "DJcy;": "\u0402", - "DScy;": "\u0405", - "DZcy;": "\u040f", - "Dagger;": "\u2021", - "Darr;": "\u21a1", - "Dashv;": "\u2ae4", - "Dcaron;": "\u010e", - "Dcy;": "\u0414", - "Del;": "\u2207", - "Delta;": "\u0394", - "Dfr;": "\U0001d507", - "DiacriticalAcute;": "\xb4", - "DiacriticalDot;": "\u02d9", - "DiacriticalDoubleAcute;": "\u02dd", - "DiacriticalGrave;": "`", - "DiacriticalTilde;": "\u02dc", - "Diamond;": "\u22c4", - "DifferentialD;": "\u2146", - "Dopf;": "\U0001d53b", - "Dot;": "\xa8", - "DotDot;": "\u20dc", - "DotEqual;": "\u2250", - "DoubleContourIntegral;": "\u222f", - "DoubleDot;": "\xa8", - "DoubleDownArrow;": "\u21d3", - "DoubleLeftArrow;": "\u21d0", - "DoubleLeftRightArrow;": "\u21d4", - "DoubleLeftTee;": "\u2ae4", - "DoubleLongLeftArrow;": "\u27f8", - "DoubleLongLeftRightArrow;": "\u27fa", - "DoubleLongRightArrow;": "\u27f9", - "DoubleRightArrow;": "\u21d2", - "DoubleRightTee;": "\u22a8", - "DoubleUpArrow;": "\u21d1", - "DoubleUpDownArrow;": "\u21d5", - "DoubleVerticalBar;": "\u2225", - "DownArrow;": "\u2193", - "DownArrowBar;": "\u2913", - "DownArrowUpArrow;": "\u21f5", - "DownBreve;": "\u0311", - "DownLeftRightVector;": "\u2950", - "DownLeftTeeVector;": "\u295e", - "DownLeftVector;": "\u21bd", - "DownLeftVectorBar;": "\u2956", - "DownRightTeeVector;": "\u295f", - "DownRightVector;": "\u21c1", - "DownRightVectorBar;": "\u2957", - "DownTee;": "\u22a4", - "DownTeeArrow;": "\u21a7", - "Downarrow;": "\u21d3", - "Dscr;": "\U0001d49f", - "Dstrok;": "\u0110", - "ENG;": "\u014a", - "ETH": "\xd0", - "ETH;": "\xd0", - "Eacute": "\xc9", - "Eacute;": "\xc9", - "Ecaron;": "\u011a", - "Ecirc": "\xca", - "Ecirc;": "\xca", - "Ecy;": "\u042d", - "Edot;": "\u0116", - "Efr;": "\U0001d508", - "Egrave": "\xc8", - "Egrave;": "\xc8", - "Element;": "\u2208", - "Emacr;": "\u0112", - "EmptySmallSquare;": "\u25fb", - "EmptyVerySmallSquare;": "\u25ab", - "Eogon;": "\u0118", - "Eopf;": "\U0001d53c", - "Epsilon;": "\u0395", - "Equal;": "\u2a75", - "EqualTilde;": "\u2242", - "Equilibrium;": "\u21cc", - "Escr;": "\u2130", - "Esim;": "\u2a73", - "Eta;": "\u0397", - "Euml": "\xcb", - "Euml;": "\xcb", - "Exists;": "\u2203", - "ExponentialE;": "\u2147", - "Fcy;": "\u0424", - "Ffr;": "\U0001d509", - "FilledSmallSquare;": "\u25fc", - "FilledVerySmallSquare;": "\u25aa", - "Fopf;": "\U0001d53d", - "ForAll;": "\u2200", - "Fouriertrf;": "\u2131", - "Fscr;": "\u2131", - "GJcy;": "\u0403", - "GT": ">", - "GT;": ">", - "Gamma;": "\u0393", - "Gammad;": "\u03dc", - "Gbreve;": "\u011e", - "Gcedil;": "\u0122", - "Gcirc;": "\u011c", - "Gcy;": "\u0413", - "Gdot;": "\u0120", - "Gfr;": "\U0001d50a", - "Gg;": "\u22d9", - "Gopf;": "\U0001d53e", - "GreaterEqual;": "\u2265", - "GreaterEqualLess;": "\u22db", - "GreaterFullEqual;": "\u2267", - "GreaterGreater;": "\u2aa2", - "GreaterLess;": "\u2277", - "GreaterSlantEqual;": "\u2a7e", - "GreaterTilde;": "\u2273", - "Gscr;": "\U0001d4a2", - "Gt;": "\u226b", - "HARDcy;": "\u042a", - "Hacek;": "\u02c7", - "Hat;": "^", - "Hcirc;": "\u0124", - "Hfr;": "\u210c", - "HilbertSpace;": "\u210b", - "Hopf;": "\u210d", - "HorizontalLine;": "\u2500", - "Hscr;": "\u210b", - "Hstrok;": "\u0126", - "HumpDownHump;": "\u224e", - "HumpEqual;": "\u224f", - "IEcy;": "\u0415", - "IJlig;": "\u0132", - "IOcy;": "\u0401", - "Iacute": "\xcd", - "Iacute;": "\xcd", - "Icirc": "\xce", - "Icirc;": "\xce", - "Icy;": "\u0418", - "Idot;": "\u0130", - "Ifr;": "\u2111", - "Igrave": "\xcc", - "Igrave;": "\xcc", - "Im;": "\u2111", - "Imacr;": "\u012a", - "ImaginaryI;": "\u2148", - "Implies;": "\u21d2", - "Int;": "\u222c", - "Integral;": "\u222b", - "Intersection;": "\u22c2", - "InvisibleComma;": "\u2063", - "InvisibleTimes;": "\u2062", - "Iogon;": "\u012e", - "Iopf;": "\U0001d540", - "Iota;": "\u0399", - "Iscr;": "\u2110", - "Itilde;": "\u0128", - "Iukcy;": "\u0406", - "Iuml": "\xcf", - "Iuml;": "\xcf", - "Jcirc;": "\u0134", - "Jcy;": "\u0419", - "Jfr;": "\U0001d50d", - "Jopf;": "\U0001d541", - "Jscr;": "\U0001d4a5", - "Jsercy;": "\u0408", - "Jukcy;": "\u0404", - "KHcy;": "\u0425", - "KJcy;": "\u040c", - "Kappa;": "\u039a", - "Kcedil;": "\u0136", - "Kcy;": "\u041a", - "Kfr;": "\U0001d50e", - "Kopf;": "\U0001d542", - "Kscr;": "\U0001d4a6", - "LJcy;": "\u0409", - "LT": "<", - "LT;": "<", - "Lacute;": "\u0139", - "Lambda;": "\u039b", - "Lang;": "\u27ea", - "Laplacetrf;": "\u2112", - "Larr;": "\u219e", - "Lcaron;": "\u013d", - "Lcedil;": "\u013b", - "Lcy;": "\u041b", - "LeftAngleBracket;": "\u27e8", - "LeftArrow;": "\u2190", - "LeftArrowBar;": "\u21e4", - "LeftArrowRightArrow;": "\u21c6", - "LeftCeiling;": "\u2308", - "LeftDoubleBracket;": "\u27e6", - "LeftDownTeeVector;": "\u2961", - "LeftDownVector;": "\u21c3", - "LeftDownVectorBar;": "\u2959", - "LeftFloor;": "\u230a", - "LeftRightArrow;": "\u2194", - "LeftRightVector;": "\u294e", - "LeftTee;": "\u22a3", - "LeftTeeArrow;": "\u21a4", - "LeftTeeVector;": "\u295a", - "LeftTriangle;": "\u22b2", - "LeftTriangleBar;": "\u29cf", - "LeftTriangleEqual;": "\u22b4", - "LeftUpDownVector;": "\u2951", - "LeftUpTeeVector;": "\u2960", - "LeftUpVector;": "\u21bf", - "LeftUpVectorBar;": "\u2958", - "LeftVector;": "\u21bc", - "LeftVectorBar;": "\u2952", - "Leftarrow;": "\u21d0", - "Leftrightarrow;": "\u21d4", - "LessEqualGreater;": "\u22da", - "LessFullEqual;": "\u2266", - "LessGreater;": "\u2276", - "LessLess;": "\u2aa1", - "LessSlantEqual;": "\u2a7d", - "LessTilde;": "\u2272", - "Lfr;": "\U0001d50f", - "Ll;": "\u22d8", - "Lleftarrow;": "\u21da", - "Lmidot;": "\u013f", - "LongLeftArrow;": "\u27f5", - "LongLeftRightArrow;": "\u27f7", - "LongRightArrow;": "\u27f6", - "Longleftarrow;": "\u27f8", - "Longleftrightarrow;": "\u27fa", - "Longrightarrow;": "\u27f9", - "Lopf;": "\U0001d543", - "LowerLeftArrow;": "\u2199", - "LowerRightArrow;": "\u2198", - "Lscr;": "\u2112", - "Lsh;": "\u21b0", - "Lstrok;": "\u0141", - "Lt;": "\u226a", - "Map;": "\u2905", - "Mcy;": "\u041c", - "MediumSpace;": "\u205f", - "Mellintrf;": "\u2133", - "Mfr;": "\U0001d510", - "MinusPlus;": "\u2213", - "Mopf;": "\U0001d544", - "Mscr;": "\u2133", - "Mu;": "\u039c", - "NJcy;": "\u040a", - "Nacute;": "\u0143", - "Ncaron;": "\u0147", - "Ncedil;": "\u0145", - "Ncy;": "\u041d", - "NegativeMediumSpace;": "\u200b", - "NegativeThickSpace;": "\u200b", - "NegativeThinSpace;": "\u200b", - "NegativeVeryThinSpace;": "\u200b", - "NestedGreaterGreater;": "\u226b", - "NestedLessLess;": "\u226a", - "NewLine;": "\n", - "Nfr;": "\U0001d511", - "NoBreak;": "\u2060", - "NonBreakingSpace;": "\xa0", - "Nopf;": "\u2115", - "Not;": "\u2aec", - "NotCongruent;": "\u2262", - "NotCupCap;": "\u226d", - "NotDoubleVerticalBar;": "\u2226", - "NotElement;": "\u2209", - "NotEqual;": "\u2260", - "NotEqualTilde;": "\u2242\u0338", - "NotExists;": "\u2204", - "NotGreater;": "\u226f", - "NotGreaterEqual;": "\u2271", - "NotGreaterFullEqual;": "\u2267\u0338", - "NotGreaterGreater;": "\u226b\u0338", - "NotGreaterLess;": "\u2279", - "NotGreaterSlantEqual;": "\u2a7e\u0338", - "NotGreaterTilde;": "\u2275", - "NotHumpDownHump;": "\u224e\u0338", - "NotHumpEqual;": "\u224f\u0338", - "NotLeftTriangle;": "\u22ea", - "NotLeftTriangleBar;": "\u29cf\u0338", - "NotLeftTriangleEqual;": "\u22ec", - "NotLess;": "\u226e", - "NotLessEqual;": "\u2270", - "NotLessGreater;": "\u2278", - "NotLessLess;": "\u226a\u0338", - "NotLessSlantEqual;": "\u2a7d\u0338", - "NotLessTilde;": "\u2274", - "NotNestedGreaterGreater;": "\u2aa2\u0338", - "NotNestedLessLess;": "\u2aa1\u0338", - "NotPrecedes;": "\u2280", - "NotPrecedesEqual;": "\u2aaf\u0338", - "NotPrecedesSlantEqual;": "\u22e0", - "NotReverseElement;": "\u220c", - "NotRightTriangle;": "\u22eb", - "NotRightTriangleBar;": "\u29d0\u0338", - "NotRightTriangleEqual;": "\u22ed", - "NotSquareSubset;": "\u228f\u0338", - "NotSquareSubsetEqual;": "\u22e2", - "NotSquareSuperset;": "\u2290\u0338", - "NotSquareSupersetEqual;": "\u22e3", - "NotSubset;": "\u2282\u20d2", - "NotSubsetEqual;": "\u2288", - "NotSucceeds;": "\u2281", - "NotSucceedsEqual;": "\u2ab0\u0338", - "NotSucceedsSlantEqual;": "\u22e1", - "NotSucceedsTilde;": "\u227f\u0338", - "NotSuperset;": "\u2283\u20d2", - "NotSupersetEqual;": "\u2289", - "NotTilde;": "\u2241", - "NotTildeEqual;": "\u2244", - "NotTildeFullEqual;": "\u2247", - "NotTildeTilde;": "\u2249", - "NotVerticalBar;": "\u2224", - "Nscr;": "\U0001d4a9", - "Ntilde": "\xd1", - "Ntilde;": "\xd1", - "Nu;": "\u039d", - "OElig;": "\u0152", - "Oacute": "\xd3", - "Oacute;": "\xd3", - "Ocirc": "\xd4", - "Ocirc;": "\xd4", - "Ocy;": "\u041e", - "Odblac;": "\u0150", - "Ofr;": "\U0001d512", - "Ograve": "\xd2", - "Ograve;": "\xd2", - "Omacr;": "\u014c", - "Omega;": "\u03a9", - "Omicron;": "\u039f", - "Oopf;": "\U0001d546", - "OpenCurlyDoubleQuote;": "\u201c", - "OpenCurlyQuote;": "\u2018", - "Or;": "\u2a54", - "Oscr;": "\U0001d4aa", - "Oslash": "\xd8", - "Oslash;": "\xd8", - "Otilde": "\xd5", - "Otilde;": "\xd5", - "Otimes;": "\u2a37", - "Ouml": "\xd6", - "Ouml;": "\xd6", - "OverBar;": "\u203e", - "OverBrace;": "\u23de", - "OverBracket;": "\u23b4", - "OverParenthesis;": "\u23dc", - "PartialD;": "\u2202", - "Pcy;": "\u041f", - "Pfr;": "\U0001d513", - "Phi;": "\u03a6", - "Pi;": "\u03a0", - "PlusMinus;": "\xb1", - "Poincareplane;": "\u210c", - "Popf;": "\u2119", - "Pr;": "\u2abb", - "Precedes;": "\u227a", - "PrecedesEqual;": "\u2aaf", - "PrecedesSlantEqual;": "\u227c", - "PrecedesTilde;": "\u227e", - "Prime;": "\u2033", - "Product;": "\u220f", - "Proportion;": "\u2237", - "Proportional;": "\u221d", - "Pscr;": "\U0001d4ab", - "Psi;": "\u03a8", - "QUOT": "\"", - "QUOT;": "\"", - "Qfr;": "\U0001d514", - "Qopf;": "\u211a", - "Qscr;": "\U0001d4ac", - "RBarr;": "\u2910", - "REG": "\xae", - "REG;": "\xae", - "Racute;": "\u0154", - "Rang;": "\u27eb", - "Rarr;": "\u21a0", - "Rarrtl;": "\u2916", - "Rcaron;": "\u0158", - "Rcedil;": "\u0156", - "Rcy;": "\u0420", - "Re;": "\u211c", - "ReverseElement;": "\u220b", - "ReverseEquilibrium;": "\u21cb", - "ReverseUpEquilibrium;": "\u296f", - "Rfr;": "\u211c", - "Rho;": "\u03a1", - "RightAngleBracket;": "\u27e9", - "RightArrow;": "\u2192", - "RightArrowBar;": "\u21e5", - "RightArrowLeftArrow;": "\u21c4", - "RightCeiling;": "\u2309", - "RightDoubleBracket;": "\u27e7", - "RightDownTeeVector;": "\u295d", - "RightDownVector;": "\u21c2", - "RightDownVectorBar;": "\u2955", - "RightFloor;": "\u230b", - "RightTee;": "\u22a2", - "RightTeeArrow;": "\u21a6", - "RightTeeVector;": "\u295b", - "RightTriangle;": "\u22b3", - "RightTriangleBar;": "\u29d0", - "RightTriangleEqual;": "\u22b5", - "RightUpDownVector;": "\u294f", - "RightUpTeeVector;": "\u295c", - "RightUpVector;": "\u21be", - "RightUpVectorBar;": "\u2954", - "RightVector;": "\u21c0", - "RightVectorBar;": "\u2953", - "Rightarrow;": "\u21d2", - "Ropf;": "\u211d", - "RoundImplies;": "\u2970", - "Rrightarrow;": "\u21db", - "Rscr;": "\u211b", - "Rsh;": "\u21b1", - "RuleDelayed;": "\u29f4", - "SHCHcy;": "\u0429", - "SHcy;": "\u0428", - "SOFTcy;": "\u042c", - "Sacute;": "\u015a", - "Sc;": "\u2abc", - "Scaron;": "\u0160", - "Scedil;": "\u015e", - "Scirc;": "\u015c", - "Scy;": "\u0421", - "Sfr;": "\U0001d516", - "ShortDownArrow;": "\u2193", - "ShortLeftArrow;": "\u2190", - "ShortRightArrow;": "\u2192", - "ShortUpArrow;": "\u2191", - "Sigma;": "\u03a3", - "SmallCircle;": "\u2218", - "Sopf;": "\U0001d54a", - "Sqrt;": "\u221a", - "Square;": "\u25a1", - "SquareIntersection;": "\u2293", - "SquareSubset;": "\u228f", - "SquareSubsetEqual;": "\u2291", - "SquareSuperset;": "\u2290", - "SquareSupersetEqual;": "\u2292", - "SquareUnion;": "\u2294", - "Sscr;": "\U0001d4ae", - "Star;": "\u22c6", - "Sub;": "\u22d0", - "Subset;": "\u22d0", - "SubsetEqual;": "\u2286", - "Succeeds;": "\u227b", - "SucceedsEqual;": "\u2ab0", - "SucceedsSlantEqual;": "\u227d", - "SucceedsTilde;": "\u227f", - "SuchThat;": "\u220b", - "Sum;": "\u2211", - "Sup;": "\u22d1", - "Superset;": "\u2283", - "SupersetEqual;": "\u2287", - "Supset;": "\u22d1", - "THORN": "\xde", - "THORN;": "\xde", - "TRADE;": "\u2122", - "TSHcy;": "\u040b", - "TScy;": "\u0426", - "Tab;": "\t", - "Tau;": "\u03a4", - "Tcaron;": "\u0164", - "Tcedil;": "\u0162", - "Tcy;": "\u0422", - "Tfr;": "\U0001d517", - "Therefore;": "\u2234", - "Theta;": "\u0398", - "ThickSpace;": "\u205f\u200a", - "ThinSpace;": "\u2009", - "Tilde;": "\u223c", - "TildeEqual;": "\u2243", - "TildeFullEqual;": "\u2245", - "TildeTilde;": "\u2248", - "Topf;": "\U0001d54b", - "TripleDot;": "\u20db", - "Tscr;": "\U0001d4af", - "Tstrok;": "\u0166", - "Uacute": "\xda", - "Uacute;": "\xda", - "Uarr;": "\u219f", - "Uarrocir;": "\u2949", - "Ubrcy;": "\u040e", - "Ubreve;": "\u016c", - "Ucirc": "\xdb", - "Ucirc;": "\xdb", - "Ucy;": "\u0423", - "Udblac;": "\u0170", - "Ufr;": "\U0001d518", - "Ugrave": "\xd9", - "Ugrave;": "\xd9", - "Umacr;": "\u016a", - "UnderBar;": "_", - "UnderBrace;": "\u23df", - "UnderBracket;": "\u23b5", - "UnderParenthesis;": "\u23dd", - "Union;": "\u22c3", - "UnionPlus;": "\u228e", - "Uogon;": "\u0172", - "Uopf;": "\U0001d54c", - "UpArrow;": "\u2191", - "UpArrowBar;": "\u2912", - "UpArrowDownArrow;": "\u21c5", - "UpDownArrow;": "\u2195", - "UpEquilibrium;": "\u296e", - "UpTee;": "\u22a5", - "UpTeeArrow;": "\u21a5", - "Uparrow;": "\u21d1", - "Updownarrow;": "\u21d5", - "UpperLeftArrow;": "\u2196", - "UpperRightArrow;": "\u2197", - "Upsi;": "\u03d2", - "Upsilon;": "\u03a5", - "Uring;": "\u016e", - "Uscr;": "\U0001d4b0", - "Utilde;": "\u0168", - "Uuml": "\xdc", - "Uuml;": "\xdc", - "VDash;": "\u22ab", - "Vbar;": "\u2aeb", - "Vcy;": "\u0412", - "Vdash;": "\u22a9", - "Vdashl;": "\u2ae6", - "Vee;": "\u22c1", - "Verbar;": "\u2016", - "Vert;": "\u2016", - "VerticalBar;": "\u2223", - "VerticalLine;": "|", - "VerticalSeparator;": "\u2758", - "VerticalTilde;": "\u2240", - "VeryThinSpace;": "\u200a", - "Vfr;": "\U0001d519", - "Vopf;": "\U0001d54d", - "Vscr;": "\U0001d4b1", - "Vvdash;": "\u22aa", - "Wcirc;": "\u0174", - "Wedge;": "\u22c0", - "Wfr;": "\U0001d51a", - "Wopf;": "\U0001d54e", - "Wscr;": "\U0001d4b2", - "Xfr;": "\U0001d51b", - "Xi;": "\u039e", - "Xopf;": "\U0001d54f", - "Xscr;": "\U0001d4b3", - "YAcy;": "\u042f", - "YIcy;": "\u0407", - "YUcy;": "\u042e", - "Yacute": "\xdd", - "Yacute;": "\xdd", - "Ycirc;": "\u0176", - "Ycy;": "\u042b", - "Yfr;": "\U0001d51c", - "Yopf;": "\U0001d550", - "Yscr;": "\U0001d4b4", - "Yuml;": "\u0178", - "ZHcy;": "\u0416", - "Zacute;": "\u0179", - "Zcaron;": "\u017d", - "Zcy;": "\u0417", - "Zdot;": "\u017b", - "ZeroWidthSpace;": "\u200b", - "Zeta;": "\u0396", - "Zfr;": "\u2128", - "Zopf;": "\u2124", - "Zscr;": "\U0001d4b5", - "aacute": "\xe1", - "aacute;": "\xe1", - "abreve;": "\u0103", - "ac;": "\u223e", - "acE;": "\u223e\u0333", - "acd;": "\u223f", - "acirc": "\xe2", - "acirc;": "\xe2", - "acute": "\xb4", - "acute;": "\xb4", - "acy;": "\u0430", - "aelig": "\xe6", - "aelig;": "\xe6", - "af;": "\u2061", - "afr;": "\U0001d51e", - "agrave": "\xe0", - "agrave;": "\xe0", - "alefsym;": "\u2135", - "aleph;": "\u2135", - "alpha;": "\u03b1", - "amacr;": "\u0101", - "amalg;": "\u2a3f", - "amp": "&", - "amp;": "&", - "and;": "\u2227", - "andand;": "\u2a55", - "andd;": "\u2a5c", - "andslope;": "\u2a58", - "andv;": "\u2a5a", - "ang;": "\u2220", - "ange;": "\u29a4", - "angle;": "\u2220", - "angmsd;": "\u2221", - "angmsdaa;": "\u29a8", - "angmsdab;": "\u29a9", - "angmsdac;": "\u29aa", - "angmsdad;": "\u29ab", - "angmsdae;": "\u29ac", - "angmsdaf;": "\u29ad", - "angmsdag;": "\u29ae", - "angmsdah;": "\u29af", - "angrt;": "\u221f", - "angrtvb;": "\u22be", - "angrtvbd;": "\u299d", - "angsph;": "\u2222", - "angst;": "\xc5", - "angzarr;": "\u237c", - "aogon;": "\u0105", - "aopf;": "\U0001d552", - "ap;": "\u2248", - "apE;": "\u2a70", - "apacir;": "\u2a6f", - "ape;": "\u224a", - "apid;": "\u224b", - "apos;": "'", - "approx;": "\u2248", - "approxeq;": "\u224a", - "aring": "\xe5", - "aring;": "\xe5", - "ascr;": "\U0001d4b6", - "ast;": "*", - "asymp;": "\u2248", - "asympeq;": "\u224d", - "atilde": "\xe3", - "atilde;": "\xe3", - "auml": "\xe4", - "auml;": "\xe4", - "awconint;": "\u2233", - "awint;": "\u2a11", - "bNot;": "\u2aed", - "backcong;": "\u224c", - "backepsilon;": "\u03f6", - "backprime;": "\u2035", - "backsim;": "\u223d", - "backsimeq;": "\u22cd", - "barvee;": "\u22bd", - "barwed;": "\u2305", - "barwedge;": "\u2305", - "bbrk;": "\u23b5", - "bbrktbrk;": "\u23b6", - "bcong;": "\u224c", - "bcy;": "\u0431", - "bdquo;": "\u201e", - "becaus;": "\u2235", - "because;": "\u2235", - "bemptyv;": "\u29b0", - "bepsi;": "\u03f6", - "bernou;": "\u212c", - "beta;": "\u03b2", - "beth;": "\u2136", - "between;": "\u226c", - "bfr;": "\U0001d51f", - "bigcap;": "\u22c2", - "bigcirc;": "\u25ef", - "bigcup;": "\u22c3", - "bigodot;": "\u2a00", - "bigoplus;": "\u2a01", - "bigotimes;": "\u2a02", - "bigsqcup;": "\u2a06", - "bigstar;": "\u2605", - "bigtriangledown;": "\u25bd", - "bigtriangleup;": "\u25b3", - "biguplus;": "\u2a04", - "bigvee;": "\u22c1", - "bigwedge;": "\u22c0", - "bkarow;": "\u290d", - "blacklozenge;": "\u29eb", - "blacksquare;": "\u25aa", - "blacktriangle;": "\u25b4", - "blacktriangledown;": "\u25be", - "blacktriangleleft;": "\u25c2", - "blacktriangleright;": "\u25b8", - "blank;": "\u2423", - "blk12;": "\u2592", - "blk14;": "\u2591", - "blk34;": "\u2593", - "block;": "\u2588", - "bne;": "=\u20e5", - "bnequiv;": "\u2261\u20e5", - "bnot;": "\u2310", - "bopf;": "\U0001d553", - "bot;": "\u22a5", - "bottom;": "\u22a5", - "bowtie;": "\u22c8", - "boxDL;": "\u2557", - "boxDR;": "\u2554", - "boxDl;": "\u2556", - "boxDr;": "\u2553", - "boxH;": "\u2550", - "boxHD;": "\u2566", - "boxHU;": "\u2569", - "boxHd;": "\u2564", - "boxHu;": "\u2567", - "boxUL;": "\u255d", - "boxUR;": "\u255a", - "boxUl;": "\u255c", - "boxUr;": "\u2559", - "boxV;": "\u2551", - "boxVH;": "\u256c", - "boxVL;": "\u2563", - "boxVR;": "\u2560", - "boxVh;": "\u256b", - "boxVl;": "\u2562", - "boxVr;": "\u255f", - "boxbox;": "\u29c9", - "boxdL;": "\u2555", - "boxdR;": "\u2552", - "boxdl;": "\u2510", - "boxdr;": "\u250c", - "boxh;": "\u2500", - "boxhD;": "\u2565", - "boxhU;": "\u2568", - "boxhd;": "\u252c", - "boxhu;": "\u2534", - "boxminus;": "\u229f", - "boxplus;": "\u229e", - "boxtimes;": "\u22a0", - "boxuL;": "\u255b", - "boxuR;": "\u2558", - "boxul;": "\u2518", - "boxur;": "\u2514", - "boxv;": "\u2502", - "boxvH;": "\u256a", - "boxvL;": "\u2561", - "boxvR;": "\u255e", - "boxvh;": "\u253c", - "boxvl;": "\u2524", - "boxvr;": "\u251c", - "bprime;": "\u2035", - "breve;": "\u02d8", - "brvbar": "\xa6", - "brvbar;": "\xa6", - "bscr;": "\U0001d4b7", - "bsemi;": "\u204f", - "bsim;": "\u223d", - "bsime;": "\u22cd", - "bsol;": "\\", - "bsolb;": "\u29c5", - "bsolhsub;": "\u27c8", - "bull;": "\u2022", - "bullet;": "\u2022", - "bump;": "\u224e", - "bumpE;": "\u2aae", - "bumpe;": "\u224f", - "bumpeq;": "\u224f", - "cacute;": "\u0107", - "cap;": "\u2229", - "capand;": "\u2a44", - "capbrcup;": "\u2a49", - "capcap;": "\u2a4b", - "capcup;": "\u2a47", - "capdot;": "\u2a40", - "caps;": "\u2229\ufe00", - "caret;": "\u2041", - "caron;": "\u02c7", - "ccaps;": "\u2a4d", - "ccaron;": "\u010d", - "ccedil": "\xe7", - "ccedil;": "\xe7", - "ccirc;": "\u0109", - "ccups;": "\u2a4c", - "ccupssm;": "\u2a50", - "cdot;": "\u010b", - "cedil": "\xb8", - "cedil;": "\xb8", - "cemptyv;": "\u29b2", - "cent": "\xa2", - "cent;": "\xa2", - "centerdot;": "\xb7", - "cfr;": "\U0001d520", - "chcy;": "\u0447", - "check;": "\u2713", - "checkmark;": "\u2713", - "chi;": "\u03c7", - "cir;": "\u25cb", - "cirE;": "\u29c3", - "circ;": "\u02c6", - "circeq;": "\u2257", - "circlearrowleft;": "\u21ba", - "circlearrowright;": "\u21bb", - "circledR;": "\xae", - "circledS;": "\u24c8", - "circledast;": "\u229b", - "circledcirc;": "\u229a", - "circleddash;": "\u229d", - "cire;": "\u2257", - "cirfnint;": "\u2a10", - "cirmid;": "\u2aef", - "cirscir;": "\u29c2", - "clubs;": "\u2663", - "clubsuit;": "\u2663", - "colon;": ":", - "colone;": "\u2254", - "coloneq;": "\u2254", - "comma;": ",", - "commat;": "@", - "comp;": "\u2201", - "compfn;": "\u2218", - "complement;": "\u2201", - "complexes;": "\u2102", - "cong;": "\u2245", - "congdot;": "\u2a6d", - "conint;": "\u222e", - "copf;": "\U0001d554", - "coprod;": "\u2210", - "copy": "\xa9", - "copy;": "\xa9", - "copysr;": "\u2117", - "crarr;": "\u21b5", - "cross;": "\u2717", - "cscr;": "\U0001d4b8", - "csub;": "\u2acf", - "csube;": "\u2ad1", - "csup;": "\u2ad0", - "csupe;": "\u2ad2", - "ctdot;": "\u22ef", - "cudarrl;": "\u2938", - "cudarrr;": "\u2935", - "cuepr;": "\u22de", - "cuesc;": "\u22df", - "cularr;": "\u21b6", - "cularrp;": "\u293d", - "cup;": "\u222a", - "cupbrcap;": "\u2a48", - "cupcap;": "\u2a46", - "cupcup;": "\u2a4a", - "cupdot;": "\u228d", - "cupor;": "\u2a45", - "cups;": "\u222a\ufe00", - "curarr;": "\u21b7", - "curarrm;": "\u293c", - "curlyeqprec;": "\u22de", - "curlyeqsucc;": "\u22df", - "curlyvee;": "\u22ce", - "curlywedge;": "\u22cf", - "curren": "\xa4", - "curren;": "\xa4", - "curvearrowleft;": "\u21b6", - "curvearrowright;": "\u21b7", - "cuvee;": "\u22ce", - "cuwed;": "\u22cf", - "cwconint;": "\u2232", - "cwint;": "\u2231", - "cylcty;": "\u232d", - "dArr;": "\u21d3", - "dHar;": "\u2965", - "dagger;": "\u2020", - "daleth;": "\u2138", - "darr;": "\u2193", - "dash;": "\u2010", - "dashv;": "\u22a3", - "dbkarow;": "\u290f", - "dblac;": "\u02dd", - "dcaron;": "\u010f", - "dcy;": "\u0434", - "dd;": "\u2146", - "ddagger;": "\u2021", - "ddarr;": "\u21ca", - "ddotseq;": "\u2a77", - "deg": "\xb0", - "deg;": "\xb0", - "delta;": "\u03b4", - "demptyv;": "\u29b1", - "dfisht;": "\u297f", - "dfr;": "\U0001d521", - "dharl;": "\u21c3", - "dharr;": "\u21c2", - "diam;": "\u22c4", - "diamond;": "\u22c4", - "diamondsuit;": "\u2666", - "diams;": "\u2666", - "die;": "\xa8", - "digamma;": "\u03dd", - "disin;": "\u22f2", - "div;": "\xf7", - "divide": "\xf7", - "divide;": "\xf7", - "divideontimes;": "\u22c7", - "divonx;": "\u22c7", - "djcy;": "\u0452", - "dlcorn;": "\u231e", - "dlcrop;": "\u230d", - "dollar;": "$", - "dopf;": "\U0001d555", - "dot;": "\u02d9", - "doteq;": "\u2250", - "doteqdot;": "\u2251", - "dotminus;": "\u2238", - "dotplus;": "\u2214", - "dotsquare;": "\u22a1", - "doublebarwedge;": "\u2306", - "downarrow;": "\u2193", - "downdownarrows;": "\u21ca", - "downharpoonleft;": "\u21c3", - "downharpoonright;": "\u21c2", - "drbkarow;": "\u2910", - "drcorn;": "\u231f", - "drcrop;": "\u230c", - "dscr;": "\U0001d4b9", - "dscy;": "\u0455", - "dsol;": "\u29f6", - "dstrok;": "\u0111", - "dtdot;": "\u22f1", - "dtri;": "\u25bf", - "dtrif;": "\u25be", - "duarr;": "\u21f5", - "duhar;": "\u296f", - "dwangle;": "\u29a6", - "dzcy;": "\u045f", - "dzigrarr;": "\u27ff", - "eDDot;": "\u2a77", - "eDot;": "\u2251", - "eacute": "\xe9", - "eacute;": "\xe9", - "easter;": "\u2a6e", - "ecaron;": "\u011b", - "ecir;": "\u2256", - "ecirc": "\xea", - "ecirc;": "\xea", - "ecolon;": "\u2255", - "ecy;": "\u044d", - "edot;": "\u0117", - "ee;": "\u2147", - "efDot;": "\u2252", - "efr;": "\U0001d522", - "eg;": "\u2a9a", - "egrave": "\xe8", - "egrave;": "\xe8", - "egs;": "\u2a96", - "egsdot;": "\u2a98", - "el;": "\u2a99", - "elinters;": "\u23e7", - "ell;": "\u2113", - "els;": "\u2a95", - "elsdot;": "\u2a97", - "emacr;": "\u0113", - "empty;": "\u2205", - "emptyset;": "\u2205", - "emptyv;": "\u2205", - "emsp13;": "\u2004", - "emsp14;": "\u2005", - "emsp;": "\u2003", - "eng;": "\u014b", - "ensp;": "\u2002", - "eogon;": "\u0119", - "eopf;": "\U0001d556", - "epar;": "\u22d5", - "eparsl;": "\u29e3", - "eplus;": "\u2a71", - "epsi;": "\u03b5", - "epsilon;": "\u03b5", - "epsiv;": "\u03f5", - "eqcirc;": "\u2256", - "eqcolon;": "\u2255", - "eqsim;": "\u2242", - "eqslantgtr;": "\u2a96", - "eqslantless;": "\u2a95", - "equals;": "=", - "equest;": "\u225f", - "equiv;": "\u2261", - "equivDD;": "\u2a78", - "eqvparsl;": "\u29e5", - "erDot;": "\u2253", - "erarr;": "\u2971", - "escr;": "\u212f", - "esdot;": "\u2250", - "esim;": "\u2242", - "eta;": "\u03b7", - "eth": "\xf0", - "eth;": "\xf0", - "euml": "\xeb", - "euml;": "\xeb", - "euro;": "\u20ac", - "excl;": "!", - "exist;": "\u2203", - "expectation;": "\u2130", - "exponentiale;": "\u2147", - "fallingdotseq;": "\u2252", - "fcy;": "\u0444", - "female;": "\u2640", - "ffilig;": "\ufb03", - "fflig;": "\ufb00", - "ffllig;": "\ufb04", - "ffr;": "\U0001d523", - "filig;": "\ufb01", - "fjlig;": "fj", - "flat;": "\u266d", - "fllig;": "\ufb02", - "fltns;": "\u25b1", - "fnof;": "\u0192", - "fopf;": "\U0001d557", - "forall;": "\u2200", - "fork;": "\u22d4", - "forkv;": "\u2ad9", - "fpartint;": "\u2a0d", - "frac12": "\xbd", - "frac12;": "\xbd", - "frac13;": "\u2153", - "frac14": "\xbc", - "frac14;": "\xbc", - "frac15;": "\u2155", - "frac16;": "\u2159", - "frac18;": "\u215b", - "frac23;": "\u2154", - "frac25;": "\u2156", - "frac34": "\xbe", - "frac34;": "\xbe", - "frac35;": "\u2157", - "frac38;": "\u215c", - "frac45;": "\u2158", - "frac56;": "\u215a", - "frac58;": "\u215d", - "frac78;": "\u215e", - "frasl;": "\u2044", - "frown;": "\u2322", - "fscr;": "\U0001d4bb", - "gE;": "\u2267", - "gEl;": "\u2a8c", - "gacute;": "\u01f5", - "gamma;": "\u03b3", - "gammad;": "\u03dd", - "gap;": "\u2a86", - "gbreve;": "\u011f", - "gcirc;": "\u011d", - "gcy;": "\u0433", - "gdot;": "\u0121", - "ge;": "\u2265", - "gel;": "\u22db", - "geq;": "\u2265", - "geqq;": "\u2267", - "geqslant;": "\u2a7e", - "ges;": "\u2a7e", - "gescc;": "\u2aa9", - "gesdot;": "\u2a80", - "gesdoto;": "\u2a82", - "gesdotol;": "\u2a84", - "gesl;": "\u22db\ufe00", - "gesles;": "\u2a94", - "gfr;": "\U0001d524", - "gg;": "\u226b", - "ggg;": "\u22d9", - "gimel;": "\u2137", - "gjcy;": "\u0453", - "gl;": "\u2277", - "glE;": "\u2a92", - "gla;": "\u2aa5", - "glj;": "\u2aa4", - "gnE;": "\u2269", - "gnap;": "\u2a8a", - "gnapprox;": "\u2a8a", - "gne;": "\u2a88", - "gneq;": "\u2a88", - "gneqq;": "\u2269", - "gnsim;": "\u22e7", - "gopf;": "\U0001d558", - "grave;": "`", - "gscr;": "\u210a", - "gsim;": "\u2273", - "gsime;": "\u2a8e", - "gsiml;": "\u2a90", - "gt": ">", - "gt;": ">", - "gtcc;": "\u2aa7", - "gtcir;": "\u2a7a", - "gtdot;": "\u22d7", - "gtlPar;": "\u2995", - "gtquest;": "\u2a7c", - "gtrapprox;": "\u2a86", - "gtrarr;": "\u2978", - "gtrdot;": "\u22d7", - "gtreqless;": "\u22db", - "gtreqqless;": "\u2a8c", - "gtrless;": "\u2277", - "gtrsim;": "\u2273", - "gvertneqq;": "\u2269\ufe00", - "gvnE;": "\u2269\ufe00", - "hArr;": "\u21d4", - "hairsp;": "\u200a", - "half;": "\xbd", - "hamilt;": "\u210b", - "hardcy;": "\u044a", - "harr;": "\u2194", - "harrcir;": "\u2948", - "harrw;": "\u21ad", - "hbar;": "\u210f", - "hcirc;": "\u0125", - "hearts;": "\u2665", - "heartsuit;": "\u2665", - "hellip;": "\u2026", - "hercon;": "\u22b9", - "hfr;": "\U0001d525", - "hksearow;": "\u2925", - "hkswarow;": "\u2926", - "hoarr;": "\u21ff", - "homtht;": "\u223b", - "hookleftarrow;": "\u21a9", - "hookrightarrow;": "\u21aa", - "hopf;": "\U0001d559", - "horbar;": "\u2015", - "hscr;": "\U0001d4bd", - "hslash;": "\u210f", - "hstrok;": "\u0127", - "hybull;": "\u2043", - "hyphen;": "\u2010", - "iacute": "\xed", - "iacute;": "\xed", - "ic;": "\u2063", - "icirc": "\xee", - "icirc;": "\xee", - "icy;": "\u0438", - "iecy;": "\u0435", - "iexcl": "\xa1", - "iexcl;": "\xa1", - "iff;": "\u21d4", - "ifr;": "\U0001d526", - "igrave": "\xec", - "igrave;": "\xec", - "ii;": "\u2148", - "iiiint;": "\u2a0c", - "iiint;": "\u222d", - "iinfin;": "\u29dc", - "iiota;": "\u2129", - "ijlig;": "\u0133", - "imacr;": "\u012b", - "image;": "\u2111", - "imagline;": "\u2110", - "imagpart;": "\u2111", - "imath;": "\u0131", - "imof;": "\u22b7", - "imped;": "\u01b5", - "in;": "\u2208", - "incare;": "\u2105", - "infin;": "\u221e", - "infintie;": "\u29dd", - "inodot;": "\u0131", - "int;": "\u222b", - "intcal;": "\u22ba", - "integers;": "\u2124", - "intercal;": "\u22ba", - "intlarhk;": "\u2a17", - "intprod;": "\u2a3c", - "iocy;": "\u0451", - "iogon;": "\u012f", - "iopf;": "\U0001d55a", - "iota;": "\u03b9", - "iprod;": "\u2a3c", - "iquest": "\xbf", - "iquest;": "\xbf", - "iscr;": "\U0001d4be", - "isin;": "\u2208", - "isinE;": "\u22f9", - "isindot;": "\u22f5", - "isins;": "\u22f4", - "isinsv;": "\u22f3", - "isinv;": "\u2208", - "it;": "\u2062", - "itilde;": "\u0129", - "iukcy;": "\u0456", - "iuml": "\xef", - "iuml;": "\xef", - "jcirc;": "\u0135", - "jcy;": "\u0439", - "jfr;": "\U0001d527", - "jmath;": "\u0237", - "jopf;": "\U0001d55b", - "jscr;": "\U0001d4bf", - "jsercy;": "\u0458", - "jukcy;": "\u0454", - "kappa;": "\u03ba", - "kappav;": "\u03f0", - "kcedil;": "\u0137", - "kcy;": "\u043a", - "kfr;": "\U0001d528", - "kgreen;": "\u0138", - "khcy;": "\u0445", - "kjcy;": "\u045c", - "kopf;": "\U0001d55c", - "kscr;": "\U0001d4c0", - "lAarr;": "\u21da", - "lArr;": "\u21d0", - "lAtail;": "\u291b", - "lBarr;": "\u290e", - "lE;": "\u2266", - "lEg;": "\u2a8b", - "lHar;": "\u2962", - "lacute;": "\u013a", - "laemptyv;": "\u29b4", - "lagran;": "\u2112", - "lambda;": "\u03bb", - "lang;": "\u27e8", - "langd;": "\u2991", - "langle;": "\u27e8", - "lap;": "\u2a85", - "laquo": "\xab", - "laquo;": "\xab", - "larr;": "\u2190", - "larrb;": "\u21e4", - "larrbfs;": "\u291f", - "larrfs;": "\u291d", - "larrhk;": "\u21a9", - "larrlp;": "\u21ab", - "larrpl;": "\u2939", - "larrsim;": "\u2973", - "larrtl;": "\u21a2", - "lat;": "\u2aab", - "latail;": "\u2919", - "late;": "\u2aad", - "lates;": "\u2aad\ufe00", - "lbarr;": "\u290c", - "lbbrk;": "\u2772", - "lbrace;": "{", - "lbrack;": "[", - "lbrke;": "\u298b", - "lbrksld;": "\u298f", - "lbrkslu;": "\u298d", - "lcaron;": "\u013e", - "lcedil;": "\u013c", - "lceil;": "\u2308", - "lcub;": "{", - "lcy;": "\u043b", - "ldca;": "\u2936", - "ldquo;": "\u201c", - "ldquor;": "\u201e", - "ldrdhar;": "\u2967", - "ldrushar;": "\u294b", - "ldsh;": "\u21b2", - "le;": "\u2264", - "leftarrow;": "\u2190", - "leftarrowtail;": "\u21a2", - "leftharpoondown;": "\u21bd", - "leftharpoonup;": "\u21bc", - "leftleftarrows;": "\u21c7", - "leftrightarrow;": "\u2194", - "leftrightarrows;": "\u21c6", - "leftrightharpoons;": "\u21cb", - "leftrightsquigarrow;": "\u21ad", - "leftthreetimes;": "\u22cb", - "leg;": "\u22da", - "leq;": "\u2264", - "leqq;": "\u2266", - "leqslant;": "\u2a7d", - "les;": "\u2a7d", - "lescc;": "\u2aa8", - "lesdot;": "\u2a7f", - "lesdoto;": "\u2a81", - "lesdotor;": "\u2a83", - "lesg;": "\u22da\ufe00", - "lesges;": "\u2a93", - "lessapprox;": "\u2a85", - "lessdot;": "\u22d6", - "lesseqgtr;": "\u22da", - "lesseqqgtr;": "\u2a8b", - "lessgtr;": "\u2276", - "lesssim;": "\u2272", - "lfisht;": "\u297c", - "lfloor;": "\u230a", - "lfr;": "\U0001d529", - "lg;": "\u2276", - "lgE;": "\u2a91", - "lhard;": "\u21bd", - "lharu;": "\u21bc", - "lharul;": "\u296a", - "lhblk;": "\u2584", - "ljcy;": "\u0459", - "ll;": "\u226a", - "llarr;": "\u21c7", - "llcorner;": "\u231e", - "llhard;": "\u296b", - "lltri;": "\u25fa", - "lmidot;": "\u0140", - "lmoust;": "\u23b0", - "lmoustache;": "\u23b0", - "lnE;": "\u2268", - "lnap;": "\u2a89", - "lnapprox;": "\u2a89", - "lne;": "\u2a87", - "lneq;": "\u2a87", - "lneqq;": "\u2268", - "lnsim;": "\u22e6", - "loang;": "\u27ec", - "loarr;": "\u21fd", - "lobrk;": "\u27e6", - "longleftarrow;": "\u27f5", - "longleftrightarrow;": "\u27f7", - "longmapsto;": "\u27fc", - "longrightarrow;": "\u27f6", - "looparrowleft;": "\u21ab", - "looparrowright;": "\u21ac", - "lopar;": "\u2985", - "lopf;": "\U0001d55d", - "loplus;": "\u2a2d", - "lotimes;": "\u2a34", - "lowast;": "\u2217", - "lowbar;": "_", - "loz;": "\u25ca", - "lozenge;": "\u25ca", - "lozf;": "\u29eb", - "lpar;": "(", - "lparlt;": "\u2993", - "lrarr;": "\u21c6", - "lrcorner;": "\u231f", - "lrhar;": "\u21cb", - "lrhard;": "\u296d", - "lrm;": "\u200e", - "lrtri;": "\u22bf", - "lsaquo;": "\u2039", - "lscr;": "\U0001d4c1", - "lsh;": "\u21b0", - "lsim;": "\u2272", - "lsime;": "\u2a8d", - "lsimg;": "\u2a8f", - "lsqb;": "[", - "lsquo;": "\u2018", - "lsquor;": "\u201a", - "lstrok;": "\u0142", - "lt": "<", - "lt;": "<", - "ltcc;": "\u2aa6", - "ltcir;": "\u2a79", - "ltdot;": "\u22d6", - "lthree;": "\u22cb", - "ltimes;": "\u22c9", - "ltlarr;": "\u2976", - "ltquest;": "\u2a7b", - "ltrPar;": "\u2996", - "ltri;": "\u25c3", - "ltrie;": "\u22b4", - "ltrif;": "\u25c2", - "lurdshar;": "\u294a", - "luruhar;": "\u2966", - "lvertneqq;": "\u2268\ufe00", - "lvnE;": "\u2268\ufe00", - "mDDot;": "\u223a", - "macr": "\xaf", - "macr;": "\xaf", - "male;": "\u2642", - "malt;": "\u2720", - "maltese;": "\u2720", - "map;": "\u21a6", - "mapsto;": "\u21a6", - "mapstodown;": "\u21a7", - "mapstoleft;": "\u21a4", - "mapstoup;": "\u21a5", - "marker;": "\u25ae", - "mcomma;": "\u2a29", - "mcy;": "\u043c", - "mdash;": "\u2014", - "measuredangle;": "\u2221", - "mfr;": "\U0001d52a", - "mho;": "\u2127", - "micro": "\xb5", - "micro;": "\xb5", - "mid;": "\u2223", - "midast;": "*", - "midcir;": "\u2af0", - "middot": "\xb7", - "middot;": "\xb7", - "minus;": "\u2212", - "minusb;": "\u229f", - "minusd;": "\u2238", - "minusdu;": "\u2a2a", - "mlcp;": "\u2adb", - "mldr;": "\u2026", - "mnplus;": "\u2213", - "models;": "\u22a7", - "mopf;": "\U0001d55e", - "mp;": "\u2213", - "mscr;": "\U0001d4c2", - "mstpos;": "\u223e", - "mu;": "\u03bc", - "multimap;": "\u22b8", - "mumap;": "\u22b8", - "nGg;": "\u22d9\u0338", - "nGt;": "\u226b\u20d2", - "nGtv;": "\u226b\u0338", - "nLeftarrow;": "\u21cd", - "nLeftrightarrow;": "\u21ce", - "nLl;": "\u22d8\u0338", - "nLt;": "\u226a\u20d2", - "nLtv;": "\u226a\u0338", - "nRightarrow;": "\u21cf", - "nVDash;": "\u22af", - "nVdash;": "\u22ae", - "nabla;": "\u2207", - "nacute;": "\u0144", - "nang;": "\u2220\u20d2", - "nap;": "\u2249", - "napE;": "\u2a70\u0338", - "napid;": "\u224b\u0338", - "napos;": "\u0149", - "napprox;": "\u2249", - "natur;": "\u266e", - "natural;": "\u266e", - "naturals;": "\u2115", - "nbsp": "\xa0", - "nbsp;": "\xa0", - "nbump;": "\u224e\u0338", - "nbumpe;": "\u224f\u0338", - "ncap;": "\u2a43", - "ncaron;": "\u0148", - "ncedil;": "\u0146", - "ncong;": "\u2247", - "ncongdot;": "\u2a6d\u0338", - "ncup;": "\u2a42", - "ncy;": "\u043d", - "ndash;": "\u2013", - "ne;": "\u2260", - "neArr;": "\u21d7", - "nearhk;": "\u2924", - "nearr;": "\u2197", - "nearrow;": "\u2197", - "nedot;": "\u2250\u0338", - "nequiv;": "\u2262", - "nesear;": "\u2928", - "nesim;": "\u2242\u0338", - "nexist;": "\u2204", - "nexists;": "\u2204", - "nfr;": "\U0001d52b", - "ngE;": "\u2267\u0338", - "nge;": "\u2271", - "ngeq;": "\u2271", - "ngeqq;": "\u2267\u0338", - "ngeqslant;": "\u2a7e\u0338", - "nges;": "\u2a7e\u0338", - "ngsim;": "\u2275", - "ngt;": "\u226f", - "ngtr;": "\u226f", - "nhArr;": "\u21ce", - "nharr;": "\u21ae", - "nhpar;": "\u2af2", - "ni;": "\u220b", - "nis;": "\u22fc", - "nisd;": "\u22fa", - "niv;": "\u220b", - "njcy;": "\u045a", - "nlArr;": "\u21cd", - "nlE;": "\u2266\u0338", - "nlarr;": "\u219a", - "nldr;": "\u2025", - "nle;": "\u2270", - "nleftarrow;": "\u219a", - "nleftrightarrow;": "\u21ae", - "nleq;": "\u2270", - "nleqq;": "\u2266\u0338", - "nleqslant;": "\u2a7d\u0338", - "nles;": "\u2a7d\u0338", - "nless;": "\u226e", - "nlsim;": "\u2274", - "nlt;": "\u226e", - "nltri;": "\u22ea", - "nltrie;": "\u22ec", - "nmid;": "\u2224", - "nopf;": "\U0001d55f", - "not": "\xac", - "not;": "\xac", - "notin;": "\u2209", - "notinE;": "\u22f9\u0338", - "notindot;": "\u22f5\u0338", - "notinva;": "\u2209", - "notinvb;": "\u22f7", - "notinvc;": "\u22f6", - "notni;": "\u220c", - "notniva;": "\u220c", - "notnivb;": "\u22fe", - "notnivc;": "\u22fd", - "npar;": "\u2226", - "nparallel;": "\u2226", - "nparsl;": "\u2afd\u20e5", - "npart;": "\u2202\u0338", - "npolint;": "\u2a14", - "npr;": "\u2280", - "nprcue;": "\u22e0", - "npre;": "\u2aaf\u0338", - "nprec;": "\u2280", - "npreceq;": "\u2aaf\u0338", - "nrArr;": "\u21cf", - "nrarr;": "\u219b", - "nrarrc;": "\u2933\u0338", - "nrarrw;": "\u219d\u0338", - "nrightarrow;": "\u219b", - "nrtri;": "\u22eb", - "nrtrie;": "\u22ed", - "nsc;": "\u2281", - "nsccue;": "\u22e1", - "nsce;": "\u2ab0\u0338", - "nscr;": "\U0001d4c3", - "nshortmid;": "\u2224", - "nshortparallel;": "\u2226", - "nsim;": "\u2241", - "nsime;": "\u2244", - "nsimeq;": "\u2244", - "nsmid;": "\u2224", - "nspar;": "\u2226", - "nsqsube;": "\u22e2", - "nsqsupe;": "\u22e3", - "nsub;": "\u2284", - "nsubE;": "\u2ac5\u0338", - "nsube;": "\u2288", - "nsubset;": "\u2282\u20d2", - "nsubseteq;": "\u2288", - "nsubseteqq;": "\u2ac5\u0338", - "nsucc;": "\u2281", - "nsucceq;": "\u2ab0\u0338", - "nsup;": "\u2285", - "nsupE;": "\u2ac6\u0338", - "nsupe;": "\u2289", - "nsupset;": "\u2283\u20d2", - "nsupseteq;": "\u2289", - "nsupseteqq;": "\u2ac6\u0338", - "ntgl;": "\u2279", - "ntilde": "\xf1", - "ntilde;": "\xf1", - "ntlg;": "\u2278", - "ntriangleleft;": "\u22ea", - "ntrianglelefteq;": "\u22ec", - "ntriangleright;": "\u22eb", - "ntrianglerighteq;": "\u22ed", - "nu;": "\u03bd", - "num;": "#", - "numero;": "\u2116", - "numsp;": "\u2007", - "nvDash;": "\u22ad", - "nvHarr;": "\u2904", - "nvap;": "\u224d\u20d2", - "nvdash;": "\u22ac", - "nvge;": "\u2265\u20d2", - "nvgt;": ">\u20d2", - "nvinfin;": "\u29de", - "nvlArr;": "\u2902", - "nvle;": "\u2264\u20d2", - "nvlt;": "<\u20d2", - "nvltrie;": "\u22b4\u20d2", - "nvrArr;": "\u2903", - "nvrtrie;": "\u22b5\u20d2", - "nvsim;": "\u223c\u20d2", - "nwArr;": "\u21d6", - "nwarhk;": "\u2923", - "nwarr;": "\u2196", - "nwarrow;": "\u2196", - "nwnear;": "\u2927", - "oS;": "\u24c8", - "oacute": "\xf3", - "oacute;": "\xf3", - "oast;": "\u229b", - "ocir;": "\u229a", - "ocirc": "\xf4", - "ocirc;": "\xf4", - "ocy;": "\u043e", - "odash;": "\u229d", - "odblac;": "\u0151", - "odiv;": "\u2a38", - "odot;": "\u2299", - "odsold;": "\u29bc", - "oelig;": "\u0153", - "ofcir;": "\u29bf", - "ofr;": "\U0001d52c", - "ogon;": "\u02db", - "ograve": "\xf2", - "ograve;": "\xf2", - "ogt;": "\u29c1", - "ohbar;": "\u29b5", - "ohm;": "\u03a9", - "oint;": "\u222e", - "olarr;": "\u21ba", - "olcir;": "\u29be", - "olcross;": "\u29bb", - "oline;": "\u203e", - "olt;": "\u29c0", - "omacr;": "\u014d", - "omega;": "\u03c9", - "omicron;": "\u03bf", - "omid;": "\u29b6", - "ominus;": "\u2296", - "oopf;": "\U0001d560", - "opar;": "\u29b7", - "operp;": "\u29b9", - "oplus;": "\u2295", - "or;": "\u2228", - "orarr;": "\u21bb", - "ord;": "\u2a5d", - "order;": "\u2134", - "orderof;": "\u2134", - "ordf": "\xaa", - "ordf;": "\xaa", - "ordm": "\xba", - "ordm;": "\xba", - "origof;": "\u22b6", - "oror;": "\u2a56", - "orslope;": "\u2a57", - "orv;": "\u2a5b", - "oscr;": "\u2134", - "oslash": "\xf8", - "oslash;": "\xf8", - "osol;": "\u2298", - "otilde": "\xf5", - "otilde;": "\xf5", - "otimes;": "\u2297", - "otimesas;": "\u2a36", - "ouml": "\xf6", - "ouml;": "\xf6", - "ovbar;": "\u233d", - "par;": "\u2225", - "para": "\xb6", - "para;": "\xb6", - "parallel;": "\u2225", - "parsim;": "\u2af3", - "parsl;": "\u2afd", - "part;": "\u2202", - "pcy;": "\u043f", - "percnt;": "%", - "period;": ".", - "permil;": "\u2030", - "perp;": "\u22a5", - "pertenk;": "\u2031", - "pfr;": "\U0001d52d", - "phi;": "\u03c6", - "phiv;": "\u03d5", - "phmmat;": "\u2133", - "phone;": "\u260e", - "pi;": "\u03c0", - "pitchfork;": "\u22d4", - "piv;": "\u03d6", - "planck;": "\u210f", - "planckh;": "\u210e", - "plankv;": "\u210f", - "plus;": "+", - "plusacir;": "\u2a23", - "plusb;": "\u229e", - "pluscir;": "\u2a22", - "plusdo;": "\u2214", - "plusdu;": "\u2a25", - "pluse;": "\u2a72", - "plusmn": "\xb1", - "plusmn;": "\xb1", - "plussim;": "\u2a26", - "plustwo;": "\u2a27", - "pm;": "\xb1", - "pointint;": "\u2a15", - "popf;": "\U0001d561", - "pound": "\xa3", - "pound;": "\xa3", - "pr;": "\u227a", - "prE;": "\u2ab3", - "prap;": "\u2ab7", - "prcue;": "\u227c", - "pre;": "\u2aaf", - "prec;": "\u227a", - "precapprox;": "\u2ab7", - "preccurlyeq;": "\u227c", - "preceq;": "\u2aaf", - "precnapprox;": "\u2ab9", - "precneqq;": "\u2ab5", - "precnsim;": "\u22e8", - "precsim;": "\u227e", - "prime;": "\u2032", - "primes;": "\u2119", - "prnE;": "\u2ab5", - "prnap;": "\u2ab9", - "prnsim;": "\u22e8", - "prod;": "\u220f", - "profalar;": "\u232e", - "profline;": "\u2312", - "profsurf;": "\u2313", - "prop;": "\u221d", - "propto;": "\u221d", - "prsim;": "\u227e", - "prurel;": "\u22b0", - "pscr;": "\U0001d4c5", - "psi;": "\u03c8", - "puncsp;": "\u2008", - "qfr;": "\U0001d52e", - "qint;": "\u2a0c", - "qopf;": "\U0001d562", - "qprime;": "\u2057", - "qscr;": "\U0001d4c6", - "quaternions;": "\u210d", - "quatint;": "\u2a16", - "quest;": "?", - "questeq;": "\u225f", - "quot": "\"", - "quot;": "\"", - "rAarr;": "\u21db", - "rArr;": "\u21d2", - "rAtail;": "\u291c", - "rBarr;": "\u290f", - "rHar;": "\u2964", - "race;": "\u223d\u0331", - "racute;": "\u0155", - "radic;": "\u221a", - "raemptyv;": "\u29b3", - "rang;": "\u27e9", - "rangd;": "\u2992", - "range;": "\u29a5", - "rangle;": "\u27e9", - "raquo": "\xbb", - "raquo;": "\xbb", - "rarr;": "\u2192", - "rarrap;": "\u2975", - "rarrb;": "\u21e5", - "rarrbfs;": "\u2920", - "rarrc;": "\u2933", - "rarrfs;": "\u291e", - "rarrhk;": "\u21aa", - "rarrlp;": "\u21ac", - "rarrpl;": "\u2945", - "rarrsim;": "\u2974", - "rarrtl;": "\u21a3", - "rarrw;": "\u219d", - "ratail;": "\u291a", - "ratio;": "\u2236", - "rationals;": "\u211a", - "rbarr;": "\u290d", - "rbbrk;": "\u2773", - "rbrace;": "}", - "rbrack;": "]", - "rbrke;": "\u298c", - "rbrksld;": "\u298e", - "rbrkslu;": "\u2990", - "rcaron;": "\u0159", - "rcedil;": "\u0157", - "rceil;": "\u2309", - "rcub;": "}", - "rcy;": "\u0440", - "rdca;": "\u2937", - "rdldhar;": "\u2969", - "rdquo;": "\u201d", - "rdquor;": "\u201d", - "rdsh;": "\u21b3", - "real;": "\u211c", - "realine;": "\u211b", - "realpart;": "\u211c", - "reals;": "\u211d", - "rect;": "\u25ad", - "reg": "\xae", - "reg;": "\xae", - "rfisht;": "\u297d", - "rfloor;": "\u230b", - "rfr;": "\U0001d52f", - "rhard;": "\u21c1", - "rharu;": "\u21c0", - "rharul;": "\u296c", - "rho;": "\u03c1", - "rhov;": "\u03f1", - "rightarrow;": "\u2192", - "rightarrowtail;": "\u21a3", - "rightharpoondown;": "\u21c1", - "rightharpoonup;": "\u21c0", - "rightleftarrows;": "\u21c4", - "rightleftharpoons;": "\u21cc", - "rightrightarrows;": "\u21c9", - "rightsquigarrow;": "\u219d", - "rightthreetimes;": "\u22cc", - "ring;": "\u02da", - "risingdotseq;": "\u2253", - "rlarr;": "\u21c4", - "rlhar;": "\u21cc", - "rlm;": "\u200f", - "rmoust;": "\u23b1", - "rmoustache;": "\u23b1", - "rnmid;": "\u2aee", - "roang;": "\u27ed", - "roarr;": "\u21fe", - "robrk;": "\u27e7", - "ropar;": "\u2986", - "ropf;": "\U0001d563", - "roplus;": "\u2a2e", - "rotimes;": "\u2a35", - "rpar;": ")", - "rpargt;": "\u2994", - "rppolint;": "\u2a12", - "rrarr;": "\u21c9", - "rsaquo;": "\u203a", - "rscr;": "\U0001d4c7", - "rsh;": "\u21b1", - "rsqb;": "]", - "rsquo;": "\u2019", - "rsquor;": "\u2019", - "rthree;": "\u22cc", - "rtimes;": "\u22ca", - "rtri;": "\u25b9", - "rtrie;": "\u22b5", - "rtrif;": "\u25b8", - "rtriltri;": "\u29ce", - "ruluhar;": "\u2968", - "rx;": "\u211e", - "sacute;": "\u015b", - "sbquo;": "\u201a", - "sc;": "\u227b", - "scE;": "\u2ab4", - "scap;": "\u2ab8", - "scaron;": "\u0161", - "sccue;": "\u227d", - "sce;": "\u2ab0", - "scedil;": "\u015f", - "scirc;": "\u015d", - "scnE;": "\u2ab6", - "scnap;": "\u2aba", - "scnsim;": "\u22e9", - "scpolint;": "\u2a13", - "scsim;": "\u227f", - "scy;": "\u0441", - "sdot;": "\u22c5", - "sdotb;": "\u22a1", - "sdote;": "\u2a66", - "seArr;": "\u21d8", - "searhk;": "\u2925", - "searr;": "\u2198", - "searrow;": "\u2198", - "sect": "\xa7", - "sect;": "\xa7", - "semi;": ";", - "seswar;": "\u2929", - "setminus;": "\u2216", - "setmn;": "\u2216", - "sext;": "\u2736", - "sfr;": "\U0001d530", - "sfrown;": "\u2322", - "sharp;": "\u266f", - "shchcy;": "\u0449", - "shcy;": "\u0448", - "shortmid;": "\u2223", - "shortparallel;": "\u2225", - "shy": "\xad", - "shy;": "\xad", - "sigma;": "\u03c3", - "sigmaf;": "\u03c2", - "sigmav;": "\u03c2", - "sim;": "\u223c", - "simdot;": "\u2a6a", - "sime;": "\u2243", - "simeq;": "\u2243", - "simg;": "\u2a9e", - "simgE;": "\u2aa0", - "siml;": "\u2a9d", - "simlE;": "\u2a9f", - "simne;": "\u2246", - "simplus;": "\u2a24", - "simrarr;": "\u2972", - "slarr;": "\u2190", - "smallsetminus;": "\u2216", - "smashp;": "\u2a33", - "smeparsl;": "\u29e4", - "smid;": "\u2223", - "smile;": "\u2323", - "smt;": "\u2aaa", - "smte;": "\u2aac", - "smtes;": "\u2aac\ufe00", - "softcy;": "\u044c", - "sol;": "/", - "solb;": "\u29c4", - "solbar;": "\u233f", - "sopf;": "\U0001d564", - "spades;": "\u2660", - "spadesuit;": "\u2660", - "spar;": "\u2225", - "sqcap;": "\u2293", - "sqcaps;": "\u2293\ufe00", - "sqcup;": "\u2294", - "sqcups;": "\u2294\ufe00", - "sqsub;": "\u228f", - "sqsube;": "\u2291", - "sqsubset;": "\u228f", - "sqsubseteq;": "\u2291", - "sqsup;": "\u2290", - "sqsupe;": "\u2292", - "sqsupset;": "\u2290", - "sqsupseteq;": "\u2292", - "squ;": "\u25a1", - "square;": "\u25a1", - "squarf;": "\u25aa", - "squf;": "\u25aa", - "srarr;": "\u2192", - "sscr;": "\U0001d4c8", - "ssetmn;": "\u2216", - "ssmile;": "\u2323", - "sstarf;": "\u22c6", - "star;": "\u2606", - "starf;": "\u2605", - "straightepsilon;": "\u03f5", - "straightphi;": "\u03d5", - "strns;": "\xaf", - "sub;": "\u2282", - "subE;": "\u2ac5", - "subdot;": "\u2abd", - "sube;": "\u2286", - "subedot;": "\u2ac3", - "submult;": "\u2ac1", - "subnE;": "\u2acb", - "subne;": "\u228a", - "subplus;": "\u2abf", - "subrarr;": "\u2979", - "subset;": "\u2282", - "subseteq;": "\u2286", - "subseteqq;": "\u2ac5", - "subsetneq;": "\u228a", - "subsetneqq;": "\u2acb", - "subsim;": "\u2ac7", - "subsub;": "\u2ad5", - "subsup;": "\u2ad3", - "succ;": "\u227b", - "succapprox;": "\u2ab8", - "succcurlyeq;": "\u227d", - "succeq;": "\u2ab0", - "succnapprox;": "\u2aba", - "succneqq;": "\u2ab6", - "succnsim;": "\u22e9", - "succsim;": "\u227f", - "sum;": "\u2211", - "sung;": "\u266a", - "sup1": "\xb9", - "sup1;": "\xb9", - "sup2": "\xb2", - "sup2;": "\xb2", - "sup3": "\xb3", - "sup3;": "\xb3", - "sup;": "\u2283", - "supE;": "\u2ac6", - "supdot;": "\u2abe", - "supdsub;": "\u2ad8", - "supe;": "\u2287", - "supedot;": "\u2ac4", - "suphsol;": "\u27c9", - "suphsub;": "\u2ad7", - "suplarr;": "\u297b", - "supmult;": "\u2ac2", - "supnE;": "\u2acc", - "supne;": "\u228b", - "supplus;": "\u2ac0", - "supset;": "\u2283", - "supseteq;": "\u2287", - "supseteqq;": "\u2ac6", - "supsetneq;": "\u228b", - "supsetneqq;": "\u2acc", - "supsim;": "\u2ac8", - "supsub;": "\u2ad4", - "supsup;": "\u2ad6", - "swArr;": "\u21d9", - "swarhk;": "\u2926", - "swarr;": "\u2199", - "swarrow;": "\u2199", - "swnwar;": "\u292a", - "szlig": "\xdf", - "szlig;": "\xdf", - "target;": "\u2316", - "tau;": "\u03c4", - "tbrk;": "\u23b4", - "tcaron;": "\u0165", - "tcedil;": "\u0163", - "tcy;": "\u0442", - "tdot;": "\u20db", - "telrec;": "\u2315", - "tfr;": "\U0001d531", - "there4;": "\u2234", - "therefore;": "\u2234", - "theta;": "\u03b8", - "thetasym;": "\u03d1", - "thetav;": "\u03d1", - "thickapprox;": "\u2248", - "thicksim;": "\u223c", - "thinsp;": "\u2009", - "thkap;": "\u2248", - "thksim;": "\u223c", - "thorn": "\xfe", - "thorn;": "\xfe", - "tilde;": "\u02dc", - "times": "\xd7", - "times;": "\xd7", - "timesb;": "\u22a0", - "timesbar;": "\u2a31", - "timesd;": "\u2a30", - "tint;": "\u222d", - "toea;": "\u2928", - "top;": "\u22a4", - "topbot;": "\u2336", - "topcir;": "\u2af1", - "topf;": "\U0001d565", - "topfork;": "\u2ada", - "tosa;": "\u2929", - "tprime;": "\u2034", - "trade;": "\u2122", - "triangle;": "\u25b5", - "triangledown;": "\u25bf", - "triangleleft;": "\u25c3", - "trianglelefteq;": "\u22b4", - "triangleq;": "\u225c", - "triangleright;": "\u25b9", - "trianglerighteq;": "\u22b5", - "tridot;": "\u25ec", - "trie;": "\u225c", - "triminus;": "\u2a3a", - "triplus;": "\u2a39", - "trisb;": "\u29cd", - "tritime;": "\u2a3b", - "trpezium;": "\u23e2", - "tscr;": "\U0001d4c9", - "tscy;": "\u0446", - "tshcy;": "\u045b", - "tstrok;": "\u0167", - "twixt;": "\u226c", - "twoheadleftarrow;": "\u219e", - "twoheadrightarrow;": "\u21a0", - "uArr;": "\u21d1", - "uHar;": "\u2963", - "uacute": "\xfa", - "uacute;": "\xfa", - "uarr;": "\u2191", - "ubrcy;": "\u045e", - "ubreve;": "\u016d", - "ucirc": "\xfb", - "ucirc;": "\xfb", - "ucy;": "\u0443", - "udarr;": "\u21c5", - "udblac;": "\u0171", - "udhar;": "\u296e", - "ufisht;": "\u297e", - "ufr;": "\U0001d532", - "ugrave": "\xf9", - "ugrave;": "\xf9", - "uharl;": "\u21bf", - "uharr;": "\u21be", - "uhblk;": "\u2580", - "ulcorn;": "\u231c", - "ulcorner;": "\u231c", - "ulcrop;": "\u230f", - "ultri;": "\u25f8", - "umacr;": "\u016b", - "uml": "\xa8", - "uml;": "\xa8", - "uogon;": "\u0173", - "uopf;": "\U0001d566", - "uparrow;": "\u2191", - "updownarrow;": "\u2195", - "upharpoonleft;": "\u21bf", - "upharpoonright;": "\u21be", - "uplus;": "\u228e", - "upsi;": "\u03c5", - "upsih;": "\u03d2", - "upsilon;": "\u03c5", - "upuparrows;": "\u21c8", - "urcorn;": "\u231d", - "urcorner;": "\u231d", - "urcrop;": "\u230e", - "uring;": "\u016f", - "urtri;": "\u25f9", - "uscr;": "\U0001d4ca", - "utdot;": "\u22f0", - "utilde;": "\u0169", - "utri;": "\u25b5", - "utrif;": "\u25b4", - "uuarr;": "\u21c8", - "uuml": "\xfc", - "uuml;": "\xfc", - "uwangle;": "\u29a7", - "vArr;": "\u21d5", - "vBar;": "\u2ae8", - "vBarv;": "\u2ae9", - "vDash;": "\u22a8", - "vangrt;": "\u299c", - "varepsilon;": "\u03f5", - "varkappa;": "\u03f0", - "varnothing;": "\u2205", - "varphi;": "\u03d5", - "varpi;": "\u03d6", - "varpropto;": "\u221d", - "varr;": "\u2195", - "varrho;": "\u03f1", - "varsigma;": "\u03c2", - "varsubsetneq;": "\u228a\ufe00", - "varsubsetneqq;": "\u2acb\ufe00", - "varsupsetneq;": "\u228b\ufe00", - "varsupsetneqq;": "\u2acc\ufe00", - "vartheta;": "\u03d1", - "vartriangleleft;": "\u22b2", - "vartriangleright;": "\u22b3", - "vcy;": "\u0432", - "vdash;": "\u22a2", - "vee;": "\u2228", - "veebar;": "\u22bb", - "veeeq;": "\u225a", - "vellip;": "\u22ee", - "verbar;": "|", - "vert;": "|", - "vfr;": "\U0001d533", - "vltri;": "\u22b2", - "vnsub;": "\u2282\u20d2", - "vnsup;": "\u2283\u20d2", - "vopf;": "\U0001d567", - "vprop;": "\u221d", - "vrtri;": "\u22b3", - "vscr;": "\U0001d4cb", - "vsubnE;": "\u2acb\ufe00", - "vsubne;": "\u228a\ufe00", - "vsupnE;": "\u2acc\ufe00", - "vsupne;": "\u228b\ufe00", - "vzigzag;": "\u299a", - "wcirc;": "\u0175", - "wedbar;": "\u2a5f", - "wedge;": "\u2227", - "wedgeq;": "\u2259", - "weierp;": "\u2118", - "wfr;": "\U0001d534", - "wopf;": "\U0001d568", - "wp;": "\u2118", - "wr;": "\u2240", - "wreath;": "\u2240", - "wscr;": "\U0001d4cc", - "xcap;": "\u22c2", - "xcirc;": "\u25ef", - "xcup;": "\u22c3", - "xdtri;": "\u25bd", - "xfr;": "\U0001d535", - "xhArr;": "\u27fa", - "xharr;": "\u27f7", - "xi;": "\u03be", - "xlArr;": "\u27f8", - "xlarr;": "\u27f5", - "xmap;": "\u27fc", - "xnis;": "\u22fb", - "xodot;": "\u2a00", - "xopf;": "\U0001d569", - "xoplus;": "\u2a01", - "xotime;": "\u2a02", - "xrArr;": "\u27f9", - "xrarr;": "\u27f6", - "xscr;": "\U0001d4cd", - "xsqcup;": "\u2a06", - "xuplus;": "\u2a04", - "xutri;": "\u25b3", - "xvee;": "\u22c1", - "xwedge;": "\u22c0", - "yacute": "\xfd", - "yacute;": "\xfd", - "yacy;": "\u044f", - "ycirc;": "\u0177", - "ycy;": "\u044b", - "yen": "\xa5", - "yen;": "\xa5", - "yfr;": "\U0001d536", - "yicy;": "\u0457", - "yopf;": "\U0001d56a", - "yscr;": "\U0001d4ce", - "yucy;": "\u044e", - "yuml": "\xff", - "yuml;": "\xff", - "zacute;": "\u017a", - "zcaron;": "\u017e", - "zcy;": "\u0437", - "zdot;": "\u017c", - "zeetrf;": "\u2128", - "zeta;": "\u03b6", - "zfr;": "\U0001d537", - "zhcy;": "\u0436", - "zigrarr;": "\u21dd", - "zopf;": "\U0001d56b", - "zscr;": "\U0001d4cf", - "zwj;": "\u200d", - "zwnj;": "\u200c", -} - -replacementCharacters = { - 0x0: "\uFFFD", - 0x0d: "\u000D", - 0x80: "\u20AC", - 0x81: "\u0081", - 0x82: "\u201A", - 0x83: "\u0192", - 0x84: "\u201E", - 0x85: "\u2026", - 0x86: "\u2020", - 0x87: "\u2021", - 0x88: "\u02C6", - 0x89: "\u2030", - 0x8A: "\u0160", - 0x8B: "\u2039", - 0x8C: "\u0152", - 0x8D: "\u008D", - 0x8E: "\u017D", - 0x8F: "\u008F", - 0x90: "\u0090", - 0x91: "\u2018", - 0x92: "\u2019", - 0x93: "\u201C", - 0x94: "\u201D", - 0x95: "\u2022", - 0x96: "\u2013", - 0x97: "\u2014", - 0x98: "\u02DC", - 0x99: "\u2122", - 0x9A: "\u0161", - 0x9B: "\u203A", - 0x9C: "\u0153", - 0x9D: "\u009D", - 0x9E: "\u017E", - 0x9F: "\u0178", -} - -tokenTypes = { - "Doctype": 0, - "Characters": 1, - "SpaceCharacters": 2, - "StartTag": 3, - "EndTag": 4, - "EmptyTag": 5, - "Comment": 6, - "ParseError": 7 -} - -tagTokenTypes = frozenset([tokenTypes["StartTag"], tokenTypes["EndTag"], - tokenTypes["EmptyTag"]]) - - -prefixes = dict([(v, k) for k, v in namespaces.items()]) -prefixes["http://www.w3.org/1998/Math/MathML"] = "math" - - -class DataLossWarning(UserWarning): - pass - - -class ReparseException(Exception): - pass diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/html5lib/filters/__init__.py b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/html5lib/filters/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/html5lib/filters/alphabeticalattributes.py b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/html5lib/filters/alphabeticalattributes.py deleted file mode 100644 index 4795bae..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/html5lib/filters/alphabeticalattributes.py +++ /dev/null @@ -1,20 +0,0 @@ -from __future__ import absolute_import, division, unicode_literals - -from . import base - -try: - from collections import OrderedDict -except ImportError: - from ordereddict import OrderedDict - - -class Filter(base.Filter): - def __iter__(self): - for token in base.Filter.__iter__(self): - if token["type"] in ("StartTag", "EmptyTag"): - attrs = OrderedDict() - for name, value in sorted(token["data"].items(), - key=lambda x: x[0]): - attrs[name] = value - token["data"] = attrs - yield token diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/html5lib/filters/base.py b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/html5lib/filters/base.py deleted file mode 100644 index c7dbaed..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/html5lib/filters/base.py +++ /dev/null @@ -1,12 +0,0 @@ -from __future__ import absolute_import, division, unicode_literals - - -class Filter(object): - def __init__(self, source): - self.source = source - - def __iter__(self): - return iter(self.source) - - def __getattr__(self, name): - return getattr(self.source, name) diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/html5lib/filters/inject_meta_charset.py b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/html5lib/filters/inject_meta_charset.py deleted file mode 100644 index 2059ec8..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/html5lib/filters/inject_meta_charset.py +++ /dev/null @@ -1,65 +0,0 @@ -from __future__ import absolute_import, division, unicode_literals - -from . import base - - -class Filter(base.Filter): - def __init__(self, source, encoding): - base.Filter.__init__(self, source) - self.encoding = encoding - - def __iter__(self): - state = "pre_head" - meta_found = (self.encoding is None) - pending = [] - - for token in base.Filter.__iter__(self): - type = token["type"] - if type == "StartTag": - if token["name"].lower() == "head": - state = "in_head" - - elif type == "EmptyTag": - if token["name"].lower() == "meta": - # replace charset with actual encoding - has_http_equiv_content_type = False - for (namespace, name), value in token["data"].items(): - if namespace is not None: - continue - elif name.lower() == 'charset': - token["data"][(namespace, name)] = self.encoding - meta_found = True - break - elif name == 'http-equiv' and value.lower() == 'content-type': - has_http_equiv_content_type = True - else: - if has_http_equiv_content_type and (None, "content") in token["data"]: - token["data"][(None, "content")] = 'text/html; charset=%s' % self.encoding - meta_found = True - - elif token["name"].lower() == "head" and not meta_found: - # insert meta into empty head - yield {"type": "StartTag", "name": "head", - "data": token["data"]} - yield {"type": "EmptyTag", "name": "meta", - "data": {(None, "charset"): self.encoding}} - yield {"type": "EndTag", "name": "head"} - meta_found = True - continue - - elif type == "EndTag": - if token["name"].lower() == "head" and pending: - # insert meta into head (if necessary) and flush pending queue - yield pending.pop(0) - if not meta_found: - yield {"type": "EmptyTag", "name": "meta", - "data": {(None, "charset"): self.encoding}} - while pending: - yield pending.pop(0) - meta_found = True - state = "post_head" - - if state == "in_head": - pending.append(token) - else: - yield token diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/html5lib/filters/lint.py b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/html5lib/filters/lint.py deleted file mode 100644 index 3b892c8..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/html5lib/filters/lint.py +++ /dev/null @@ -1,81 +0,0 @@ -from __future__ import absolute_import, division, unicode_literals - -from pip._vendor.six import text_type - -from . import base -from ..constants import namespaces, voidElements - -from ..constants import spaceCharacters -spaceCharacters = "".join(spaceCharacters) - - -class Filter(base.Filter): - def __init__(self, source, require_matching_tags=True): - super(Filter, self).__init__(source) - self.require_matching_tags = require_matching_tags - - def __iter__(self): - open_elements = [] - for token in base.Filter.__iter__(self): - type = token["type"] - if type in ("StartTag", "EmptyTag"): - namespace = token["namespace"] - name = token["name"] - assert namespace is None or isinstance(namespace, text_type) - assert namespace != "" - assert isinstance(name, text_type) - assert name != "" - assert isinstance(token["data"], dict) - if (not namespace or namespace == namespaces["html"]) and name in voidElements: - assert type == "EmptyTag" - else: - assert type == "StartTag" - if type == "StartTag" and self.require_matching_tags: - open_elements.append((namespace, name)) - for (namespace, name), value in token["data"].items(): - assert namespace is None or isinstance(namespace, text_type) - assert namespace != "" - assert isinstance(name, text_type) - assert name != "" - assert isinstance(value, text_type) - - elif type == "EndTag": - namespace = token["namespace"] - name = token["name"] - assert namespace is None or isinstance(namespace, text_type) - assert namespace != "" - assert isinstance(name, text_type) - assert name != "" - if (not namespace or namespace == namespaces["html"]) and name in voidElements: - assert False, "Void element reported as EndTag token: %(tag)s" % {"tag": name} - elif self.require_matching_tags: - start = open_elements.pop() - assert start == (namespace, name) - - elif type == "Comment": - data = token["data"] - assert isinstance(data, text_type) - - elif type in ("Characters", "SpaceCharacters"): - data = token["data"] - assert isinstance(data, text_type) - assert data != "" - if type == "SpaceCharacters": - assert data.strip(spaceCharacters) == "" - - elif type == "Doctype": - name = token["name"] - assert name is None or isinstance(name, text_type) - assert token["publicId"] is None or isinstance(name, text_type) - assert token["systemId"] is None or isinstance(name, text_type) - - elif type == "Entity": - assert isinstance(token["name"], text_type) - - elif type == "SerializerError": - assert isinstance(token["data"], text_type) - - else: - assert False, "Unknown token type: %(type)s" % {"type": type} - - yield token diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/html5lib/filters/optionaltags.py b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/html5lib/filters/optionaltags.py deleted file mode 100644 index f6edb73..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/html5lib/filters/optionaltags.py +++ /dev/null @@ -1,206 +0,0 @@ -from __future__ import absolute_import, division, unicode_literals - -from . import base - - -class Filter(base.Filter): - def slider(self): - previous1 = previous2 = None - for token in self.source: - if previous1 is not None: - yield previous2, previous1, token - previous2 = previous1 - previous1 = token - if previous1 is not None: - yield previous2, previous1, None - - def __iter__(self): - for previous, token, next in self.slider(): - type = token["type"] - if type == "StartTag": - if (token["data"] or - not self.is_optional_start(token["name"], previous, next)): - yield token - elif type == "EndTag": - if not self.is_optional_end(token["name"], next): - yield token - else: - yield token - - def is_optional_start(self, tagname, previous, next): - type = next and next["type"] or None - if tagname in 'html': - # An html element's start tag may be omitted if the first thing - # inside the html element is not a space character or a comment. - return type not in ("Comment", "SpaceCharacters") - elif tagname == 'head': - # A head element's start tag may be omitted if the first thing - # inside the head element is an element. - # XXX: we also omit the start tag if the head element is empty - if type in ("StartTag", "EmptyTag"): - return True - elif type == "EndTag": - return next["name"] == "head" - elif tagname == 'body': - # A body element's start tag may be omitted if the first thing - # inside the body element is not a space character or a comment, - # except if the first thing inside the body element is a script - # or style element and the node immediately preceding the body - # element is a head element whose end tag has been omitted. - if type in ("Comment", "SpaceCharacters"): - return False - elif type == "StartTag": - # XXX: we do not look at the preceding event, so we never omit - # the body element's start tag if it's followed by a script or - # a style element. - return next["name"] not in ('script', 'style') - else: - return True - elif tagname == 'colgroup': - # A colgroup element's start tag may be omitted if the first thing - # inside the colgroup element is a col element, and if the element - # is not immediately preceded by another colgroup element whose - # end tag has been omitted. - if type in ("StartTag", "EmptyTag"): - # XXX: we do not look at the preceding event, so instead we never - # omit the colgroup element's end tag when it is immediately - # followed by another colgroup element. See is_optional_end. - return next["name"] == "col" - else: - return False - elif tagname == 'tbody': - # A tbody element's start tag may be omitted if the first thing - # inside the tbody element is a tr element, and if the element is - # not immediately preceded by a tbody, thead, or tfoot element - # whose end tag has been omitted. - if type == "StartTag": - # omit the thead and tfoot elements' end tag when they are - # immediately followed by a tbody element. See is_optional_end. - if previous and previous['type'] == 'EndTag' and \ - previous['name'] in ('tbody', 'thead', 'tfoot'): - return False - return next["name"] == 'tr' - else: - return False - return False - - def is_optional_end(self, tagname, next): - type = next and next["type"] or None - if tagname in ('html', 'head', 'body'): - # An html element's end tag may be omitted if the html element - # is not immediately followed by a space character or a comment. - return type not in ("Comment", "SpaceCharacters") - elif tagname in ('li', 'optgroup', 'tr'): - # A li element's end tag may be omitted if the li element is - # immediately followed by another li element or if there is - # no more content in the parent element. - # An optgroup element's end tag may be omitted if the optgroup - # element is immediately followed by another optgroup element, - # or if there is no more content in the parent element. - # A tr element's end tag may be omitted if the tr element is - # immediately followed by another tr element, or if there is - # no more content in the parent element. - if type == "StartTag": - return next["name"] == tagname - else: - return type == "EndTag" or type is None - elif tagname in ('dt', 'dd'): - # A dt element's end tag may be omitted if the dt element is - # immediately followed by another dt element or a dd element. - # A dd element's end tag may be omitted if the dd element is - # immediately followed by another dd element or a dt element, - # or if there is no more content in the parent element. - if type == "StartTag": - return next["name"] in ('dt', 'dd') - elif tagname == 'dd': - return type == "EndTag" or type is None - else: - return False - elif tagname == 'p': - # A p element's end tag may be omitted if the p element is - # immediately followed by an address, article, aside, - # blockquote, datagrid, dialog, dir, div, dl, fieldset, - # footer, form, h1, h2, h3, h4, h5, h6, header, hr, menu, - # nav, ol, p, pre, section, table, or ul, element, or if - # there is no more content in the parent element. - if type in ("StartTag", "EmptyTag"): - return next["name"] in ('address', 'article', 'aside', - 'blockquote', 'datagrid', 'dialog', - 'dir', 'div', 'dl', 'fieldset', 'footer', - 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', - 'header', 'hr', 'menu', 'nav', 'ol', - 'p', 'pre', 'section', 'table', 'ul') - else: - return type == "EndTag" or type is None - elif tagname == 'option': - # An option element's end tag may be omitted if the option - # element is immediately followed by another option element, - # or if it is immediately followed by an optgroup - # element, or if there is no more content in the parent - # element. - if type == "StartTag": - return next["name"] in ('option', 'optgroup') - else: - return type == "EndTag" or type is None - elif tagname in ('rt', 'rp'): - # An rt element's end tag may be omitted if the rt element is - # immediately followed by an rt or rp element, or if there is - # no more content in the parent element. - # An rp element's end tag may be omitted if the rp element is - # immediately followed by an rt or rp element, or if there is - # no more content in the parent element. - if type == "StartTag": - return next["name"] in ('rt', 'rp') - else: - return type == "EndTag" or type is None - elif tagname == 'colgroup': - # A colgroup element's end tag may be omitted if the colgroup - # element is not immediately followed by a space character or - # a comment. - if type in ("Comment", "SpaceCharacters"): - return False - elif type == "StartTag": - # XXX: we also look for an immediately following colgroup - # element. See is_optional_start. - return next["name"] != 'colgroup' - else: - return True - elif tagname in ('thead', 'tbody'): - # A thead element's end tag may be omitted if the thead element - # is immediately followed by a tbody or tfoot element. - # A tbody element's end tag may be omitted if the tbody element - # is immediately followed by a tbody or tfoot element, or if - # there is no more content in the parent element. - # A tfoot element's end tag may be omitted if the tfoot element - # is immediately followed by a tbody element, or if there is no - # more content in the parent element. - # XXX: we never omit the end tag when the following element is - # a tbody. See is_optional_start. - if type == "StartTag": - return next["name"] in ['tbody', 'tfoot'] - elif tagname == 'tbody': - return type == "EndTag" or type is None - else: - return False - elif tagname == 'tfoot': - # A tfoot element's end tag may be omitted if the tfoot element - # is immediately followed by a tbody element, or if there is no - # more content in the parent element. - # XXX: we never omit the end tag when the following element is - # a tbody. See is_optional_start. - if type == "StartTag": - return next["name"] == 'tbody' - else: - return type == "EndTag" or type is None - elif tagname in ('td', 'th'): - # A td element's end tag may be omitted if the td element is - # immediately followed by a td or th element, or if there is - # no more content in the parent element. - # A th element's end tag may be omitted if the th element is - # immediately followed by a td or th element, or if there is - # no more content in the parent element. - if type == "StartTag": - return next["name"] in ('td', 'th') - else: - return type == "EndTag" or type is None - return False diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/html5lib/filters/sanitizer.py b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/html5lib/filters/sanitizer.py deleted file mode 100644 index 026748d..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/html5lib/filters/sanitizer.py +++ /dev/null @@ -1,865 +0,0 @@ -from __future__ import absolute_import, division, unicode_literals - -import re -from xml.sax.saxutils import escape, unescape - -from pip._vendor.six.moves import urllib_parse as urlparse - -from . import base -from ..constants import namespaces, prefixes - -__all__ = ["Filter"] - - -allowed_elements = frozenset(( - (namespaces['html'], 'a'), - (namespaces['html'], 'abbr'), - (namespaces['html'], 'acronym'), - (namespaces['html'], 'address'), - (namespaces['html'], 'area'), - (namespaces['html'], 'article'), - (namespaces['html'], 'aside'), - (namespaces['html'], 'audio'), - (namespaces['html'], 'b'), - (namespaces['html'], 'big'), - (namespaces['html'], 'blockquote'), - (namespaces['html'], 'br'), - (namespaces['html'], 'button'), - (namespaces['html'], 'canvas'), - (namespaces['html'], 'caption'), - (namespaces['html'], 'center'), - (namespaces['html'], 'cite'), - (namespaces['html'], 'code'), - (namespaces['html'], 'col'), - (namespaces['html'], 'colgroup'), - (namespaces['html'], 'command'), - (namespaces['html'], 'datagrid'), - (namespaces['html'], 'datalist'), - (namespaces['html'], 'dd'), - (namespaces['html'], 'del'), - (namespaces['html'], 'details'), - (namespaces['html'], 'dfn'), - (namespaces['html'], 'dialog'), - (namespaces['html'], 'dir'), - (namespaces['html'], 'div'), - (namespaces['html'], 'dl'), - (namespaces['html'], 'dt'), - (namespaces['html'], 'em'), - (namespaces['html'], 'event-source'), - (namespaces['html'], 'fieldset'), - (namespaces['html'], 'figcaption'), - (namespaces['html'], 'figure'), - (namespaces['html'], 'footer'), - (namespaces['html'], 'font'), - (namespaces['html'], 'form'), - (namespaces['html'], 'header'), - (namespaces['html'], 'h1'), - (namespaces['html'], 'h2'), - (namespaces['html'], 'h3'), - (namespaces['html'], 'h4'), - (namespaces['html'], 'h5'), - (namespaces['html'], 'h6'), - (namespaces['html'], 'hr'), - (namespaces['html'], 'i'), - (namespaces['html'], 'img'), - (namespaces['html'], 'input'), - (namespaces['html'], 'ins'), - (namespaces['html'], 'keygen'), - (namespaces['html'], 'kbd'), - (namespaces['html'], 'label'), - (namespaces['html'], 'legend'), - (namespaces['html'], 'li'), - (namespaces['html'], 'm'), - (namespaces['html'], 'map'), - (namespaces['html'], 'menu'), - (namespaces['html'], 'meter'), - (namespaces['html'], 'multicol'), - (namespaces['html'], 'nav'), - (namespaces['html'], 'nextid'), - (namespaces['html'], 'ol'), - (namespaces['html'], 'output'), - (namespaces['html'], 'optgroup'), - (namespaces['html'], 'option'), - (namespaces['html'], 'p'), - (namespaces['html'], 'pre'), - (namespaces['html'], 'progress'), - (namespaces['html'], 'q'), - (namespaces['html'], 's'), - (namespaces['html'], 'samp'), - (namespaces['html'], 'section'), - (namespaces['html'], 'select'), - (namespaces['html'], 'small'), - (namespaces['html'], 'sound'), - (namespaces['html'], 'source'), - (namespaces['html'], 'spacer'), - (namespaces['html'], 'span'), - (namespaces['html'], 'strike'), - (namespaces['html'], 'strong'), - (namespaces['html'], 'sub'), - (namespaces['html'], 'sup'), - (namespaces['html'], 'table'), - (namespaces['html'], 'tbody'), - (namespaces['html'], 'td'), - (namespaces['html'], 'textarea'), - (namespaces['html'], 'time'), - (namespaces['html'], 'tfoot'), - (namespaces['html'], 'th'), - (namespaces['html'], 'thead'), - (namespaces['html'], 'tr'), - (namespaces['html'], 'tt'), - (namespaces['html'], 'u'), - (namespaces['html'], 'ul'), - (namespaces['html'], 'var'), - (namespaces['html'], 'video'), - (namespaces['mathml'], 'maction'), - (namespaces['mathml'], 'math'), - (namespaces['mathml'], 'merror'), - (namespaces['mathml'], 'mfrac'), - (namespaces['mathml'], 'mi'), - (namespaces['mathml'], 'mmultiscripts'), - (namespaces['mathml'], 'mn'), - (namespaces['mathml'], 'mo'), - (namespaces['mathml'], 'mover'), - (namespaces['mathml'], 'mpadded'), - (namespaces['mathml'], 'mphantom'), - (namespaces['mathml'], 'mprescripts'), - (namespaces['mathml'], 'mroot'), - (namespaces['mathml'], 'mrow'), - (namespaces['mathml'], 'mspace'), - (namespaces['mathml'], 'msqrt'), - (namespaces['mathml'], 'mstyle'), - (namespaces['mathml'], 'msub'), - (namespaces['mathml'], 'msubsup'), - (namespaces['mathml'], 'msup'), - (namespaces['mathml'], 'mtable'), - (namespaces['mathml'], 'mtd'), - (namespaces['mathml'], 'mtext'), - (namespaces['mathml'], 'mtr'), - (namespaces['mathml'], 'munder'), - (namespaces['mathml'], 'munderover'), - (namespaces['mathml'], 'none'), - (namespaces['svg'], 'a'), - (namespaces['svg'], 'animate'), - (namespaces['svg'], 'animateColor'), - (namespaces['svg'], 'animateMotion'), - (namespaces['svg'], 'animateTransform'), - (namespaces['svg'], 'clipPath'), - (namespaces['svg'], 'circle'), - (namespaces['svg'], 'defs'), - (namespaces['svg'], 'desc'), - (namespaces['svg'], 'ellipse'), - (namespaces['svg'], 'font-face'), - (namespaces['svg'], 'font-face-name'), - (namespaces['svg'], 'font-face-src'), - (namespaces['svg'], 'g'), - (namespaces['svg'], 'glyph'), - (namespaces['svg'], 'hkern'), - (namespaces['svg'], 'linearGradient'), - (namespaces['svg'], 'line'), - (namespaces['svg'], 'marker'), - (namespaces['svg'], 'metadata'), - (namespaces['svg'], 'missing-glyph'), - (namespaces['svg'], 'mpath'), - (namespaces['svg'], 'path'), - (namespaces['svg'], 'polygon'), - (namespaces['svg'], 'polyline'), - (namespaces['svg'], 'radialGradient'), - (namespaces['svg'], 'rect'), - (namespaces['svg'], 'set'), - (namespaces['svg'], 'stop'), - (namespaces['svg'], 'svg'), - (namespaces['svg'], 'switch'), - (namespaces['svg'], 'text'), - (namespaces['svg'], 'title'), - (namespaces['svg'], 'tspan'), - (namespaces['svg'], 'use'), -)) - -allowed_attributes = frozenset(( - # HTML attributes - (None, 'abbr'), - (None, 'accept'), - (None, 'accept-charset'), - (None, 'accesskey'), - (None, 'action'), - (None, 'align'), - (None, 'alt'), - (None, 'autocomplete'), - (None, 'autofocus'), - (None, 'axis'), - (None, 'background'), - (None, 'balance'), - (None, 'bgcolor'), - (None, 'bgproperties'), - (None, 'border'), - (None, 'bordercolor'), - (None, 'bordercolordark'), - (None, 'bordercolorlight'), - (None, 'bottompadding'), - (None, 'cellpadding'), - (None, 'cellspacing'), - (None, 'ch'), - (None, 'challenge'), - (None, 'char'), - (None, 'charoff'), - (None, 'choff'), - (None, 'charset'), - (None, 'checked'), - (None, 'cite'), - (None, 'class'), - (None, 'clear'), - (None, 'color'), - (None, 'cols'), - (None, 'colspan'), - (None, 'compact'), - (None, 'contenteditable'), - (None, 'controls'), - (None, 'coords'), - (None, 'data'), - (None, 'datafld'), - (None, 'datapagesize'), - (None, 'datasrc'), - (None, 'datetime'), - (None, 'default'), - (None, 'delay'), - (None, 'dir'), - (None, 'disabled'), - (None, 'draggable'), - (None, 'dynsrc'), - (None, 'enctype'), - (None, 'end'), - (None, 'face'), - (None, 'for'), - (None, 'form'), - (None, 'frame'), - (None, 'galleryimg'), - (None, 'gutter'), - (None, 'headers'), - (None, 'height'), - (None, 'hidefocus'), - (None, 'hidden'), - (None, 'high'), - (None, 'href'), - (None, 'hreflang'), - (None, 'hspace'), - (None, 'icon'), - (None, 'id'), - (None, 'inputmode'), - (None, 'ismap'), - (None, 'keytype'), - (None, 'label'), - (None, 'leftspacing'), - (None, 'lang'), - (None, 'list'), - (None, 'longdesc'), - (None, 'loop'), - (None, 'loopcount'), - (None, 'loopend'), - (None, 'loopstart'), - (None, 'low'), - (None, 'lowsrc'), - (None, 'max'), - (None, 'maxlength'), - (None, 'media'), - (None, 'method'), - (None, 'min'), - (None, 'multiple'), - (None, 'name'), - (None, 'nohref'), - (None, 'noshade'), - (None, 'nowrap'), - (None, 'open'), - (None, 'optimum'), - (None, 'pattern'), - (None, 'ping'), - (None, 'point-size'), - (None, 'poster'), - (None, 'pqg'), - (None, 'preload'), - (None, 'prompt'), - (None, 'radiogroup'), - (None, 'readonly'), - (None, 'rel'), - (None, 'repeat-max'), - (None, 'repeat-min'), - (None, 'replace'), - (None, 'required'), - (None, 'rev'), - (None, 'rightspacing'), - (None, 'rows'), - (None, 'rowspan'), - (None, 'rules'), - (None, 'scope'), - (None, 'selected'), - (None, 'shape'), - (None, 'size'), - (None, 'span'), - (None, 'src'), - (None, 'start'), - (None, 'step'), - (None, 'style'), - (None, 'summary'), - (None, 'suppress'), - (None, 'tabindex'), - (None, 'target'), - (None, 'template'), - (None, 'title'), - (None, 'toppadding'), - (None, 'type'), - (None, 'unselectable'), - (None, 'usemap'), - (None, 'urn'), - (None, 'valign'), - (None, 'value'), - (None, 'variable'), - (None, 'volume'), - (None, 'vspace'), - (None, 'vrml'), - (None, 'width'), - (None, 'wrap'), - (namespaces['xml'], 'lang'), - # MathML attributes - (None, 'actiontype'), - (None, 'align'), - (None, 'columnalign'), - (None, 'columnalign'), - (None, 'columnalign'), - (None, 'columnlines'), - (None, 'columnspacing'), - (None, 'columnspan'), - (None, 'depth'), - (None, 'display'), - (None, 'displaystyle'), - (None, 'equalcolumns'), - (None, 'equalrows'), - (None, 'fence'), - (None, 'fontstyle'), - (None, 'fontweight'), - (None, 'frame'), - (None, 'height'), - (None, 'linethickness'), - (None, 'lspace'), - (None, 'mathbackground'), - (None, 'mathcolor'), - (None, 'mathvariant'), - (None, 'mathvariant'), - (None, 'maxsize'), - (None, 'minsize'), - (None, 'other'), - (None, 'rowalign'), - (None, 'rowalign'), - (None, 'rowalign'), - (None, 'rowlines'), - (None, 'rowspacing'), - (None, 'rowspan'), - (None, 'rspace'), - (None, 'scriptlevel'), - (None, 'selection'), - (None, 'separator'), - (None, 'stretchy'), - (None, 'width'), - (None, 'width'), - (namespaces['xlink'], 'href'), - (namespaces['xlink'], 'show'), - (namespaces['xlink'], 'type'), - # SVG attributes - (None, 'accent-height'), - (None, 'accumulate'), - (None, 'additive'), - (None, 'alphabetic'), - (None, 'arabic-form'), - (None, 'ascent'), - (None, 'attributeName'), - (None, 'attributeType'), - (None, 'baseProfile'), - (None, 'bbox'), - (None, 'begin'), - (None, 'by'), - (None, 'calcMode'), - (None, 'cap-height'), - (None, 'class'), - (None, 'clip-path'), - (None, 'color'), - (None, 'color-rendering'), - (None, 'content'), - (None, 'cx'), - (None, 'cy'), - (None, 'd'), - (None, 'dx'), - (None, 'dy'), - (None, 'descent'), - (None, 'display'), - (None, 'dur'), - (None, 'end'), - (None, 'fill'), - (None, 'fill-opacity'), - (None, 'fill-rule'), - (None, 'font-family'), - (None, 'font-size'), - (None, 'font-stretch'), - (None, 'font-style'), - (None, 'font-variant'), - (None, 'font-weight'), - (None, 'from'), - (None, 'fx'), - (None, 'fy'), - (None, 'g1'), - (None, 'g2'), - (None, 'glyph-name'), - (None, 'gradientUnits'), - (None, 'hanging'), - (None, 'height'), - (None, 'horiz-adv-x'), - (None, 'horiz-origin-x'), - (None, 'id'), - (None, 'ideographic'), - (None, 'k'), - (None, 'keyPoints'), - (None, 'keySplines'), - (None, 'keyTimes'), - (None, 'lang'), - (None, 'marker-end'), - (None, 'marker-mid'), - (None, 'marker-start'), - (None, 'markerHeight'), - (None, 'markerUnits'), - (None, 'markerWidth'), - (None, 'mathematical'), - (None, 'max'), - (None, 'min'), - (None, 'name'), - (None, 'offset'), - (None, 'opacity'), - (None, 'orient'), - (None, 'origin'), - (None, 'overline-position'), - (None, 'overline-thickness'), - (None, 'panose-1'), - (None, 'path'), - (None, 'pathLength'), - (None, 'points'), - (None, 'preserveAspectRatio'), - (None, 'r'), - (None, 'refX'), - (None, 'refY'), - (None, 'repeatCount'), - (None, 'repeatDur'), - (None, 'requiredExtensions'), - (None, 'requiredFeatures'), - (None, 'restart'), - (None, 'rotate'), - (None, 'rx'), - (None, 'ry'), - (None, 'slope'), - (None, 'stemh'), - (None, 'stemv'), - (None, 'stop-color'), - (None, 'stop-opacity'), - (None, 'strikethrough-position'), - (None, 'strikethrough-thickness'), - (None, 'stroke'), - (None, 'stroke-dasharray'), - (None, 'stroke-dashoffset'), - (None, 'stroke-linecap'), - (None, 'stroke-linejoin'), - (None, 'stroke-miterlimit'), - (None, 'stroke-opacity'), - (None, 'stroke-width'), - (None, 'systemLanguage'), - (None, 'target'), - (None, 'text-anchor'), - (None, 'to'), - (None, 'transform'), - (None, 'type'), - (None, 'u1'), - (None, 'u2'), - (None, 'underline-position'), - (None, 'underline-thickness'), - (None, 'unicode'), - (None, 'unicode-range'), - (None, 'units-per-em'), - (None, 'values'), - (None, 'version'), - (None, 'viewBox'), - (None, 'visibility'), - (None, 'width'), - (None, 'widths'), - (None, 'x'), - (None, 'x-height'), - (None, 'x1'), - (None, 'x2'), - (namespaces['xlink'], 'actuate'), - (namespaces['xlink'], 'arcrole'), - (namespaces['xlink'], 'href'), - (namespaces['xlink'], 'role'), - (namespaces['xlink'], 'show'), - (namespaces['xlink'], 'title'), - (namespaces['xlink'], 'type'), - (namespaces['xml'], 'base'), - (namespaces['xml'], 'lang'), - (namespaces['xml'], 'space'), - (None, 'y'), - (None, 'y1'), - (None, 'y2'), - (None, 'zoomAndPan'), -)) - -attr_val_is_uri = frozenset(( - (None, 'href'), - (None, 'src'), - (None, 'cite'), - (None, 'action'), - (None, 'longdesc'), - (None, 'poster'), - (None, 'background'), - (None, 'datasrc'), - (None, 'dynsrc'), - (None, 'lowsrc'), - (None, 'ping'), - (namespaces['xlink'], 'href'), - (namespaces['xml'], 'base'), -)) - -svg_attr_val_allows_ref = frozenset(( - (None, 'clip-path'), - (None, 'color-profile'), - (None, 'cursor'), - (None, 'fill'), - (None, 'filter'), - (None, 'marker'), - (None, 'marker-start'), - (None, 'marker-mid'), - (None, 'marker-end'), - (None, 'mask'), - (None, 'stroke'), -)) - -svg_allow_local_href = frozenset(( - (None, 'altGlyph'), - (None, 'animate'), - (None, 'animateColor'), - (None, 'animateMotion'), - (None, 'animateTransform'), - (None, 'cursor'), - (None, 'feImage'), - (None, 'filter'), - (None, 'linearGradient'), - (None, 'pattern'), - (None, 'radialGradient'), - (None, 'textpath'), - (None, 'tref'), - (None, 'set'), - (None, 'use') -)) - -allowed_css_properties = frozenset(( - 'azimuth', - 'background-color', - 'border-bottom-color', - 'border-collapse', - 'border-color', - 'border-left-color', - 'border-right-color', - 'border-top-color', - 'clear', - 'color', - 'cursor', - 'direction', - 'display', - 'elevation', - 'float', - 'font', - 'font-family', - 'font-size', - 'font-style', - 'font-variant', - 'font-weight', - 'height', - 'letter-spacing', - 'line-height', - 'overflow', - 'pause', - 'pause-after', - 'pause-before', - 'pitch', - 'pitch-range', - 'richness', - 'speak', - 'speak-header', - 'speak-numeral', - 'speak-punctuation', - 'speech-rate', - 'stress', - 'text-align', - 'text-decoration', - 'text-indent', - 'unicode-bidi', - 'vertical-align', - 'voice-family', - 'volume', - 'white-space', - 'width', -)) - -allowed_css_keywords = frozenset(( - 'auto', - 'aqua', - 'black', - 'block', - 'blue', - 'bold', - 'both', - 'bottom', - 'brown', - 'center', - 'collapse', - 'dashed', - 'dotted', - 'fuchsia', - 'gray', - 'green', - '!important', - 'italic', - 'left', - 'lime', - 'maroon', - 'medium', - 'none', - 'navy', - 'normal', - 'nowrap', - 'olive', - 'pointer', - 'purple', - 'red', - 'right', - 'solid', - 'silver', - 'teal', - 'top', - 'transparent', - 'underline', - 'white', - 'yellow', -)) - -allowed_svg_properties = frozenset(( - 'fill', - 'fill-opacity', - 'fill-rule', - 'stroke', - 'stroke-width', - 'stroke-linecap', - 'stroke-linejoin', - 'stroke-opacity', -)) - -allowed_protocols = frozenset(( - 'ed2k', - 'ftp', - 'http', - 'https', - 'irc', - 'mailto', - 'news', - 'gopher', - 'nntp', - 'telnet', - 'webcal', - 'xmpp', - 'callto', - 'feed', - 'urn', - 'aim', - 'rsync', - 'tag', - 'ssh', - 'sftp', - 'rtsp', - 'afs', - 'data', -)) - -allowed_content_types = frozenset(( - 'image/png', - 'image/jpeg', - 'image/gif', - 'image/webp', - 'image/bmp', - 'text/plain', -)) - - -data_content_type = re.compile(r''' - ^ - # Match a content type / - (?P[-a-zA-Z0-9.]+/[-a-zA-Z0-9.]+) - # Match any character set and encoding - (?:(?:;charset=(?:[-a-zA-Z0-9]+)(?:;(?:base64))?) - |(?:;(?:base64))?(?:;charset=(?:[-a-zA-Z0-9]+))?) - # Assume the rest is data - ,.* - $ - ''', - re.VERBOSE) - - -class Filter(base.Filter): - """ sanitization of XHTML+MathML+SVG and of inline style attributes.""" - def __init__(self, - source, - allowed_elements=allowed_elements, - allowed_attributes=allowed_attributes, - allowed_css_properties=allowed_css_properties, - allowed_css_keywords=allowed_css_keywords, - allowed_svg_properties=allowed_svg_properties, - allowed_protocols=allowed_protocols, - allowed_content_types=allowed_content_types, - attr_val_is_uri=attr_val_is_uri, - svg_attr_val_allows_ref=svg_attr_val_allows_ref, - svg_allow_local_href=svg_allow_local_href): - super(Filter, self).__init__(source) - self.allowed_elements = allowed_elements - self.allowed_attributes = allowed_attributes - self.allowed_css_properties = allowed_css_properties - self.allowed_css_keywords = allowed_css_keywords - self.allowed_svg_properties = allowed_svg_properties - self.allowed_protocols = allowed_protocols - self.allowed_content_types = allowed_content_types - self.attr_val_is_uri = attr_val_is_uri - self.svg_attr_val_allows_ref = svg_attr_val_allows_ref - self.svg_allow_local_href = svg_allow_local_href - - def __iter__(self): - for token in base.Filter.__iter__(self): - token = self.sanitize_token(token) - if token: - yield token - - # Sanitize the +html+, escaping all elements not in ALLOWED_ELEMENTS, and - # stripping out all # attributes not in ALLOWED_ATTRIBUTES. Style - # attributes are parsed, and a restricted set, # specified by - # ALLOWED_CSS_PROPERTIES and ALLOWED_CSS_KEYWORDS, are allowed through. - # attributes in ATTR_VAL_IS_URI are scanned, and only URI schemes specified - # in ALLOWED_PROTOCOLS are allowed. - # - # sanitize_html('') - # => <script> do_nasty_stuff() </script> - # sanitize_html('Click here for $100') - # => Click here for $100 - def sanitize_token(self, token): - - # accommodate filters which use token_type differently - token_type = token["type"] - if token_type in ("StartTag", "EndTag", "EmptyTag"): - name = token["name"] - namespace = token["namespace"] - if ((namespace, name) in self.allowed_elements or - (namespace is None and - (namespaces["html"], name) in self.allowed_elements)): - return self.allowed_token(token) - else: - return self.disallowed_token(token) - elif token_type == "Comment": - pass - else: - return token - - def allowed_token(self, token): - if "data" in token: - attrs = token["data"] - attr_names = set(attrs.keys()) - - # Remove forbidden attributes - for to_remove in (attr_names - self.allowed_attributes): - del token["data"][to_remove] - attr_names.remove(to_remove) - - # Remove attributes with disallowed URL values - for attr in (attr_names & self.attr_val_is_uri): - assert attr in attrs - # I don't have a clue where this regexp comes from or why it matches those - # characters, nor why we call unescape. I just know it's always been here. - # Should you be worried by this comment in a sanitizer? Yes. On the other hand, all - # this will do is remove *more* than it otherwise would. - val_unescaped = re.sub("[`\x00-\x20\x7f-\xa0\s]+", '', - unescape(attrs[attr])).lower() - # remove replacement characters from unescaped characters - val_unescaped = val_unescaped.replace("\ufffd", "") - try: - uri = urlparse.urlparse(val_unescaped) - except ValueError: - uri = None - del attrs[attr] - if uri and uri.scheme: - if uri.scheme not in self.allowed_protocols: - del attrs[attr] - if uri.scheme == 'data': - m = data_content_type.match(uri.path) - if not m: - del attrs[attr] - elif m.group('content_type') not in self.allowed_content_types: - del attrs[attr] - - for attr in self.svg_attr_val_allows_ref: - if attr in attrs: - attrs[attr] = re.sub(r'url\s*\(\s*[^#\s][^)]+?\)', - ' ', - unescape(attrs[attr])) - if (token["name"] in self.svg_allow_local_href and - (namespaces['xlink'], 'href') in attrs and re.search('^\s*[^#\s].*', - attrs[(namespaces['xlink'], 'href')])): - del attrs[(namespaces['xlink'], 'href')] - if (None, 'style') in attrs: - attrs[(None, 'style')] = self.sanitize_css(attrs[(None, 'style')]) - token["data"] = attrs - return token - - def disallowed_token(self, token): - token_type = token["type"] - if token_type == "EndTag": - token["data"] = "" % token["name"] - elif token["data"]: - assert token_type in ("StartTag", "EmptyTag") - attrs = [] - for (ns, name), v in token["data"].items(): - attrs.append(' %s="%s"' % (name if ns is None else "%s:%s" % (prefixes[ns], name), escape(v))) - token["data"] = "<%s%s>" % (token["name"], ''.join(attrs)) - else: - token["data"] = "<%s>" % token["name"] - if token.get("selfClosing"): - token["data"] = token["data"][:-1] + "/>" - - token["type"] = "Characters" - - del token["name"] - return token - - def sanitize_css(self, style): - # disallow urls - style = re.compile('url\s*\(\s*[^\s)]+?\s*\)\s*').sub(' ', style) - - # gauntlet - if not re.match("""^([:,;#%.\sa-zA-Z0-9!]|\w-\w|'[\s\w]+'|"[\s\w]+"|\([\d,\s]+\))*$""", style): - return '' - if not re.match("^\s*([-\w]+\s*:[^:;]*(;\s*|$))*$", style): - return '' - - clean = [] - for prop, value in re.findall("([-\w]+)\s*:\s*([^:;]*)", style): - if not value: - continue - if prop.lower() in self.allowed_css_properties: - clean.append(prop + ': ' + value + ';') - elif prop.split('-')[0].lower() in ['background', 'border', 'margin', - 'padding']: - for keyword in value.split(): - if keyword not in self.allowed_css_keywords and \ - not re.match("^(#[0-9a-f]+|rgb\(\d+%?,\d*%?,?\d*%?\)?|\d{0,2}\.?\d{0,2}(cm|em|ex|in|mm|pc|pt|px|%|,|\))?)$", keyword): # noqa - break - else: - clean.append(prop + ': ' + value + ';') - elif prop.lower() in self.allowed_svg_properties: - clean.append(prop + ': ' + value + ';') - - return ' '.join(clean) diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/html5lib/filters/whitespace.py b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/html5lib/filters/whitespace.py deleted file mode 100644 index 8921052..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/html5lib/filters/whitespace.py +++ /dev/null @@ -1,38 +0,0 @@ -from __future__ import absolute_import, division, unicode_literals - -import re - -from . import base -from ..constants import rcdataElements, spaceCharacters -spaceCharacters = "".join(spaceCharacters) - -SPACES_REGEX = re.compile("[%s]+" % spaceCharacters) - - -class Filter(base.Filter): - - spacePreserveElements = frozenset(["pre", "textarea"] + list(rcdataElements)) - - def __iter__(self): - preserve = 0 - for token in base.Filter.__iter__(self): - type = token["type"] - if type == "StartTag" \ - and (preserve or token["name"] in self.spacePreserveElements): - preserve += 1 - - elif type == "EndTag" and preserve: - preserve -= 1 - - elif not preserve and type == "SpaceCharacters" and token["data"]: - # Test on token["data"] above to not introduce spaces where there were not - token["data"] = " " - - elif not preserve and type == "Characters": - token["data"] = collapse_spaces(token["data"]) - - yield token - - -def collapse_spaces(text): - return SPACES_REGEX.sub(' ', text) diff --git a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/html5lib/html5parser.py b/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/html5lib/html5parser.py deleted file mode 100644 index f7043cb..0000000 --- a/Python/PyCharm/venv/Lib/site-packages/pip-9.0.1-py3.6.egg/pip/_vendor/html5lib/html5parser.py +++ /dev/null @@ -1,2733 +0,0 @@ -from __future__ import absolute_import, division, unicode_literals -from pip._vendor.six import with_metaclass, viewkeys, PY3 - -import types - -try: - from collections import OrderedDict -except ImportError: - from pip._vendor.ordereddict import OrderedDict - -from . import _inputstream -from . import _tokenizer - -from . import treebuilders -from .treebuilders.base import Marker - -from . import _utils -from .constants import ( - spaceCharacters, asciiUpper2Lower, - specialElements, headingElements, cdataElements, rcdataElements, - tokenTypes, tagTokenTypes, - namespaces, - htmlIntegrationPointElements, mathmlTextIntegrationPointElements, - adjustForeignAttributes as adjustForeignAttributesMap, - adjustMathMLAttributes, adjustSVGAttributes, - E, - ReparseException -) - - -def parse(doc, treebuilder="etree", namespaceHTMLElements=True, **kwargs): - """Parse a string or file-like object into a tree""" - tb = treebuilders.getTreeBuilder(treebuilder) - p = HTMLParser(tb, namespaceHTMLElements=namespaceHTMLElements) - return p.parse(doc, **kwargs) - - -def parseFragment(doc, container="div", treebuilder="etree", namespaceHTMLElements=True, **kwargs): - tb = treebuilders.getTreeBuilder(treebuilder) - p = HTMLParser(tb, namespaceHTMLElements=namespaceHTMLElements) - return p.parseFragment(doc, container=container, **kwargs) - - -def method_decorator_metaclass(function): - class Decorated(type): - def __new__(meta, classname, bases, classDict): - for attributeName, attribute in classDict.items(): - if isinstance(attribute, types.FunctionType): - attribute = function(attribute) - - classDict[attributeName] = attribute - return type.__new__(meta, classname, bases, classDict) - return Decorated - - -class HTMLParser(object): - """HTML parser. Generates a tree structure from a stream of (possibly - malformed) HTML""" - - def __init__(self, tree=None, strict=False, namespaceHTMLElements=True, debug=False): - """ - strict - raise an exception when a parse error is encountered - - tree - a treebuilder class controlling the type of tree that will be - returned. Built in treebuilders can be accessed through - html5lib.treebuilders.getTreeBuilder(treeType) - """ - - # Raise an exception on the first error encountered - self.strict = strict - - if tree is None: - tree = treebuilders.getTreeBuilder("etree") - self.tree = tree(namespaceHTMLElements) - self.errors = [] - - self.phases = dict([(name, cls(self, self.tree)) for name, cls in - getPhases(debug).items()]) - - def _parse(self, stream, innerHTML=False, container="div", scripting=False, **kwargs): - - self.innerHTMLMode = innerHTML - self.container = container - self.scripting = scripting - self.tokenizer = _tokenizer.HTMLTokenizer(stream, parser=self, **kwargs) - self.reset() - - try: - self.mainLoop() - except ReparseException: - self.reset() - self.mainLoop() - - def reset(self): - self.tree.reset() - self.firstStartTag = False - self.errors = [] - self.log = [] # only used with debug mode - # "quirks" / "limited quirks" / "no quirks" - self.compatMode = "no quirks" - - if self.innerHTMLMode: - self.innerHTML = self.container.lower() - - if self.innerHTML in cdataElements: - self.tokenizer.state = self.tokenizer.rcdataState - elif self.innerHTML in rcdataElements: - self.tokenizer.state = self.tokenizer.rawtextState - elif self.innerHTML == 'plaintext': - self.tokenizer.state = self.tokenizer.plaintextState - else: - # state already is data state - # self.tokenizer.state = self.tokenizer.dataState - pass - self.phase = self.phases["beforeHtml"] - self.phase.insertHtmlElement() - self.resetInsertionMode() - else: - self.innerHTML = False # pylint:disable=redefined-variable-type - self.phase = self.phases["initial"] - - self.lastPhase = None - - self.beforeRCDataPhase = None - - self.framesetOK = True - - @property - def documentEncoding(self): - """The name of the character encoding - that was used to decode the input stream, - or :obj:`None` if that is not determined yet. - - """ - if not hasattr(self, 'tokenizer'): - return None - return self.tokenizer.stream.charEncoding[0].name - - def isHTMLIntegrationPoint(self, element): - if (element.name == "annotation-xml" and - element.namespace == namespaces["mathml"]): - return ("encoding" in element.attributes and - element.attributes["encoding"].translate( - asciiUpper2Lower) in - ("text/html", "application/xhtml+xml")) - else: - return (element.namespace, element.name) in htmlIntegrationPointElements - - def isMathMLTextIntegrationPoint(self, element): - return (element.namespace, element.name) in mathmlTextIntegrationPointElements - - def mainLoop(self): - CharactersToken = tokenTypes["Characters"] - SpaceCharactersToken = tokenTypes["SpaceCharacters"] - StartTagToken = tokenTypes["StartTag"] - EndTagToken = tokenTypes["EndTag"] - CommentToken = tokenTypes["Comment"] - DoctypeToken = tokenTypes["Doctype"] - ParseErrorToken = tokenTypes["ParseError"] - - for token in self.normalizedTokens(): - prev_token = None - new_token = token - while new_token is not None: - prev_token = new_token - currentNode = self.tree.openElements[-1] if self.tree.openElements else None - currentNodeNamespace = currentNode.namespace if currentNode else None - currentNodeName = currentNode.name if currentNode else None - - type = new_token["type"] - - if type == ParseErrorToken: - self.parseError(new_token["data"], new_token.get("datavars", {})) - new_token = None - else: - if (len(self.tree.openElements) == 0 or - currentNodeNamespace == self.tree.defaultNamespace or - (self.isMathMLTextIntegrationPoint(currentNode) and - ((type == StartTagToken and - token["name"] not in frozenset(["mglyph", "malignmark"])) or - type in (CharactersToken, SpaceCharactersToken))) or - (currentNodeNamespace == namespaces["mathml"] and - currentNodeName == "annotation-xml" and - type == StartTagToken and - token["name"] == "svg") or - (self.isHTMLIntegrationPoint(currentNode) and - type in (StartTagToken, CharactersToken, SpaceCharactersToken))): - phase = self.phase - else: - phase = self.phases["inForeignContent"] - - if type == CharactersToken: - new_token = phase.processCharacters(new_token) - elif type == SpaceCharactersToken: - new_token = phase.processSpaceCharacters(new_token) - elif type == StartTagToken: - new_token = phase.processStartTag(new_token) - elif type == EndTagToken: - new_token = phase.processEndTag(new_token) - elif type == CommentToken: - new_token = phase.processComment(new_token) - elif type == DoctypeToken: - new_token = phase.processDoctype(new_token) - - if (type == StartTagToken and prev_token["selfClosing"] and - not prev_token["selfClosingAcknowledged"]): - self.parseError("non-void-element-with-trailing-solidus", - {"name": prev_token["name"]}) - - # When the loop finishes it's EOF - reprocess = True - phases = [] - while reprocess: - phases.append(self.phase) - reprocess = self.phase.processEOF() - if reprocess: - assert self.phase not in phases - - def normalizedTokens(self): - for token in self.tokenizer: - yield self.normalizeToken(token) - - def parse(self, stream, *args, **kwargs): - """Parse a HTML document into a well-formed tree - - stream - a filelike object or string containing the HTML to be parsed - - The optional encoding parameter must be a string that indicates - the encoding. If specified, that encoding will be used, - regardless of any BOM or later declaration (such as in a meta - element) - - scripting - treat noscript elements as if javascript was turned on - """ - self._parse(stream, False, None, *args, **kwargs) - return self.tree.getDocument() - - def parseFragment(self, stream, *args, **kwargs): - """Parse a HTML fragment into a well-formed tree fragment - - container - name of the element we're setting the innerHTML property - if set to None, default to 'div' - - stream - a filelike object or string containing the HTML to be parsed - - The optional encoding parameter must be a string that indicates - the encoding. If specified, that encoding will be used, - regardless of any BOM or later declaration (such as in a meta - element) - - scripting - treat noscript elements as if javascript was turned on - """ - self._parse(stream, True, *args, **kwargs) - return self.tree.getFragment() - - def parseError(self, errorcode="XXX-undefined-error", datavars=None): - # XXX The idea is to make errorcode mandatory. - if datavars is None: - datavars = {} - self.errors.append((self.tokenizer.stream.position(), errorcode, datavars)) - if self.strict: - raise ParseError(E[errorcode] % datavars) - - def normalizeToken(self, token): - """ HTML5 specific normalizations to the token stream """ - - if token["type"] == tokenTypes["StartTag"]: - raw = token["data"] - token["data"] = OrderedDict(raw) - if len(raw) > len(token["data"]): - # we had some duplicated attribute, fix so first wins - token["data"].update(raw[::-1]) - - return token - - def adjustMathMLAttributes(self, token): - adjust_attributes(token, adjustMathMLAttributes) - - def adjustSVGAttributes(self, token): - adjust_attributes(token, adjustSVGAttributes) - - def adjustForeignAttributes(self, token): - adjust_attributes(token, adjustForeignAttributesMap) - - def reparseTokenNormal(self, token): - # pylint:disable=unused-argument - self.parser.phase() - - def resetInsertionMode(self): - # The name of this method is mostly historical. (It's also used in the - # specification.) - last = False - newModes = { - "select": "inSelect", - "td": "inCell", - "th": "inCell", - "tr": "inRow", - "tbody": "inTableBody", - "thead": "inTableBody", - "tfoot": "inTableBody", - "caption": "inCaption", - "colgroup": "inColumnGroup", - "table": "inTable", - "head": "inBody", - "body": "inBody", - "frameset": "inFrameset", - "html": "beforeHead" - } - for node in self.tree.openElements[::-1]: - nodeName = node.name - new_phase = None - if node == self.tree.openElements[0]: - assert self.innerHTML - last = True - nodeName = self.innerHTML - # Check for conditions that should only happen in the innerHTML - # case - if nodeName in ("select", "colgroup", "head", "html"): - assert self.innerHTML - - if not last and node.namespace != self.tree.defaultNamespace: - continue - - if nodeName in newModes: - new_phase = self.phases[newModes[nodeName]] - break - elif last: - new_phase = self.phases["inBody"] - break - - self.phase = new_phase - - def parseRCDataRawtext(self, token, contentType): - """Generic RCDATA/RAWTEXT Parsing algorithm - contentType - RCDATA or RAWTEXT - """ - assert contentType in ("RAWTEXT", "RCDATA") - - self.tree.insertElement(token) - - if contentType == "RAWTEXT": - self.tokenizer.state = self.tokenizer.rawtextState - else: - self.tokenizer.state = self.tokenizer.rcdataState - - self.originalPhase = self.phase - - self.phase = self.phases["text"] - - -@_utils.memoize -def getPhases(debug): - def log(function): - """Logger that records which phase processes each token""" - type_names = dict((value, key) for key, value in - tokenTypes.items()) - - def wrapped(self, *args, **kwargs): - if function.__name__.startswith("process") and len(args) > 0: - token = args[0] - try: - info = {"type": type_names[token['type']]} - except: - raise - if token['type'] in tagTokenTypes: - info["name"] = token['name'] - - self.parser.log.append((self.parser.tokenizer.state.__name__, - self.parser.phase.__class__.__name__, - self.__class__.__name__, - function.__name__, - info)) - return function(self, *args, **kwargs) - else: - return function(self, *args, **kwargs) - return wrapped - - def getMetaclass(use_metaclass, metaclass_func): - if use_metaclass: - return method_decorator_metaclass(metaclass_func) - else: - return type - - # pylint:disable=unused-argument - class Phase(with_metaclass(getMetaclass(debug, log))): - """Base class for helper object that implements each phase of processing - """ - - def __init__(self, parser, tree): - self.parser = parser - self.tree = tree - - def processEOF(self): - raise NotImplementedError - - def processComment(self, token): - # For most phases the following is correct. Where it's not it will be - # overridden. - self.tree.insertComment(token, self.tree.openElements[-1]) - - def processDoctype(self, token): - self.parser.parseError("unexpected-doctype") - - def processCharacters(self, token): - self.tree.insertText(token["data"]) - - def processSpaceCharacters(self, token): - self.tree.insertText(token["data"]) - - def processStartTag(self, token): - return self.startTagHandler[token["name"]](token) - - def startTagHtml(self, token): - if not self.parser.firstStartTag and token["name"] == "html": - self.parser.parseError("non-html-root") - # XXX Need a check here to see if the first start tag token emitted is - # this token... If it's not, invoke self.parser.parseError(). - for attr, value in token["data"].items(): - if attr not in self.tree.openElements[0].attributes: - self.tree.openElements[0].attributes[attr] = value - self.parser.firstStartTag = False - - def processEndTag(self, token): - return self.endTagHandler[token["name"]](token) - - class InitialPhase(Phase): - def processSpaceCharacters(self, token): - pass - - def processComment(self, token): - self.tree.insertComment(token, self.tree.document) - - def processDoctype(self, token): - name = token["name"] - publicId = token["publicId"] - systemId = token["systemId"] - correct = token["correct"] - - if (name != "html" or publicId is not None or - systemId is not None and systemId != "about:legacy-compat"): - self.parser.parseError("unknown-doctype") - - if publicId is None: - publicId = "" - - self.tree.insertDoctype(token) - - if publicId != "": - publicId = publicId.translate(asciiUpper2Lower) - - if (not correct or token["name"] != "html" or - publicId.startswith( - ("+//silmaril//dtd html pro v0r11 19970101//", - "-//advasoft ltd//dtd html 3.0 aswedit + extensions//", - "-//as//dtd html 3.0 aswedit + extensions//", - "-//ietf//dtd html 2.0 level 1//", - "-//ietf//dtd html 2.0 level 2//", - "-//ietf//dtd html 2.0 strict level 1//", - "-//ietf//dtd html 2.0 strict level 2//", - "-//ietf//dtd html 2.0 strict//", - "-//ietf//dtd html 2.0//", - "-//ietf//dtd html 2.1e//", - "-//ietf//dtd html 3.0//", - "-//ietf//dtd html 3.2 final//", - "-//ietf//dtd html 3.2//", - "-//ietf//dtd html 3//", - "-//ietf//dtd html level 0//", - "-//ietf//dtd html level 1//", - "-//ietf//dtd html level 2//", - "-//ietf//dtd html level 3//", - "-//ietf//dtd html strict level 0//", - "-//ietf//dtd html strict level 1//", - "-//ietf//dtd html strict level 2//", - "-//ietf//dtd html strict level 3//", - "-//ietf//dtd html strict//", - "-//ietf//dtd html//", - "-//metrius//dtd metrius presentational//", - "-//microsoft//dtd internet explorer 2.0 html strict//", - "-//microsoft//dtd internet explorer 2.0 html//", - "-//microsoft//dtd internet explorer 2.0 tables//", - "-//microsoft//dtd internet explorer 3.0 html strict//", - "-//microsoft//dtd internet explorer 3.0 html//", - "-//microsoft//dtd internet explorer 3.0 tables//", - "-//netscape comm. corp.//dtd html//", - "-//netscape comm. corp.//dtd strict html//", - "-//o'reilly and associates//dtd html 2.0//", - "-//o'reilly and associates//dtd html extended 1.0//", - "-//o'reilly and associates//dtd html extended relaxed 1.0//", - "-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//", - "-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//", - "-//spyglass//dtd html 2.0 extended//", - "-//sq//dtd html 2.0 hotmetal + extensions//", - "-//sun microsystems corp.//dtd hotjava html//", - "-//sun microsystems corp.//dtd hotjava strict html//", - "-//w3c//dtd html 3 1995-03-24//", - "-//w3c//dtd html 3.2 draft//", - "-//w3c//dtd html 3.2 final//", - "-//w3c//dtd html 3.2//", - "-//w3c//dtd html 3.2s draft//", - "-//w3c//dtd html 4.0 frameset//", - "-//w3c//dtd html 4.0 transitional//", - "-//w3c//dtd html experimental 19960712//", - "-//w3c//dtd html experimental 970421//", - "-//w3c//dtd w3 html//", - "-//w3o//dtd w3 html 3.0//", - "-//webtechs//dtd mozilla html 2.0//", - "-//webtechs//dtd mozilla html//")) or - publicId in ("-//w3o//dtd w3 html strict 3.0//en//", - "-/w3c/dtd html 4.0 transitional/en", - "html") or - publicId.startswith( - ("-//w3c//dtd html 4.01 frameset//", - "-//w3c//dtd html 4.01 transitional//")) and - systemId is None or - systemId and systemId.lower() == "http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd"): - self.parser.compatMode = "quirks" - elif (publicId.startswith( - ("-//w3c//dtd xhtml 1.0 frameset//", - "-//w3c//dtd xhtml 1.0 transitional//")) or - publicId.startswith( - ("-//w3c//dtd html 4.01 frameset//", - "-//w3c//dtd html 4.01 transitional//")) and - systemId is not None): - self.parser.compatMode = "limited quirks" - - self.parser.phase = self.parser.phases["beforeHtml"] - - def anythingElse(self): - self.parser.compatMode = "quirks" - self.parser.phase = self.parser.phases["beforeHtml"] - - def processCharacters(self, token): - self.parser.parseError("expected-doctype-but-got-chars") - self.anythingElse() - return token - - def processStartTag(self, token): - self.parser.parseError("expected-doctype-but-got-start-tag", - {"name": token["name"]}) - self.anythingElse() - return token - - def processEndTag(self, token): - self.parser.parseError("expected-doctype-but-got-end-tag", - {"name": token["name"]}) - self.anythingElse() - return token - - def processEOF(self): - self.parser.parseError("expected-doctype-but-got-eof") - self.anythingElse() - return True - - class BeforeHtmlPhase(Phase): - # helper methods - def insertHtmlElement(self): - self.tree.insertRoot(impliedTagToken("html", "StartTag")) - self.parser.phase = self.parser.phases["beforeHead"] - - # other - def processEOF(self): - self.insertHtmlElement() - return True - - def processComment(self, token): - self.tree.insertComment(token, self.tree.document) - - def processSpaceCharacters(self, token): - pass - - def processCharacters(self, token): - self.insertHtmlElement() - return token - - def processStartTag(self, token): - if token["name"] == "html": - self.parser.firstStartTag = True - self.insertHtmlElement() - return token - - def processEndTag(self, token): - if token["name"] not in ("head", "body", "html", "br"): - self.parser.parseError("unexpected-end-tag-before-html", - {"name": token["name"]}) - else: - self.insertHtmlElement() - return token - - class BeforeHeadPhase(Phase): - def __init__(self, parser, tree): - Phase.__init__(self, parser, tree) - - self.startTagHandler = _utils.MethodDispatcher([ - ("html", self.startTagHtml), - ("head", self.startTagHead) - ]) - self.startTagHandler.default = self.startTagOther - - self.endTagHandler = _utils.MethodDispatcher([ - (("head", "body", "html", "br"), self.endTagImplyHead) - ]) - self.endTagHandler.default = self.endTagOther - - def processEOF(self): - self.startTagHead(impliedTagToken("head", "StartTag")) - return True - - def processSpaceCharacters(self, token): - pass - - def processCharacters(self, token): - self.startTagHead(impliedTagToken("head", "StartTag")) - return token - - def startTagHtml(self, token): - return self.parser.phases["inBody"].processStartTag(token) - - def startTagHead(self, token): - self.tree.insertElement(token) - self.tree.headPointer = self.tree.openElements[-1] - self.parser.phase = self.parser.phases["inHead"] - - def startTagOther(self, token): - self.startTagHead(impliedTagToken("head", "StartTag")) - return token - - def endTagImplyHead(self, token): - self.startTagHead(impliedTagToken("head", "StartTag")) - return token - - def endTagOther(self, token): - self.parser.parseError("end-tag-after-implied-root", - {"name": token["name"]}) - - class InHeadPhase(Phase): - def __init__(self, parser, tree): - Phase.__init__(self, parser, tree) - - self.startTagHandler = _utils.MethodDispatcher([ - ("html", self.startTagHtml), - ("title", self.startTagTitle), - (("noframes", "style"), self.startTagNoFramesStyle), - ("noscript", self.startTagNoscript), - ("script", self.startTagScript), - (("base", "basefont", "bgsound", "command", "link"), - self.startTagBaseLinkCommand), - ("meta", self.startTagMeta), - ("head", self.startTagHead) - ]) - self.startTagHandler.default = self.startTagOther - - self.endTagHandler = _utils.MethodDispatcher([ - ("head", self.endTagHead), - (("br", "html", "body"), self.endTagHtmlBodyBr) - ]) - self.endTagHandler.default = self.endTagOther - - # the real thing - def processEOF(self): - self.anythingElse() - return True - - def processCharacters(self, token): - self.anythingElse() - return token - - def startTagHtml(self, token): - return self.parser.phases["inBody"].processStartTag(token) - - def startTagHead(self, token): - self.parser.parseError("two-heads-are-not-better-than-one") - - def startTagBaseLinkCommand(self, token): - self.tree.insertElement(token) - self.tree.openElements.pop() - token["selfClosingAcknowledged"] = True - - def startTagMeta(self, token): - self.tree.insertElement(token) - self.tree.openElements.pop() - token["selfClosingAcknowledged"] = True - - attributes = token["data"] - if self.parser.tokenizer.stream.charEncoding[1] == "tentative": - if "charset" in attributes: - self.parser.tokenizer.stream.changeEncoding(attributes["charset"]) - elif ("content" in attributes and - "http-equiv" in attributes and - attributes["http-equiv"].lower() == "content-type"): - # Encoding it as UTF-8 here is a hack, as really we should pass - # the abstract Unicode string, and just use the - # ContentAttrParser on that, but using UTF-8 allows all chars - # to be encoded and as a ASCII-superset works. - data = _inputstream.EncodingBytes(attributes["content"].encode("utf-8")) - parser = _inputstream.ContentAttrParser(data) - codec = parser.parse() - self.parser.tokenizer.stream.changeEncoding(codec) - - def startTagTitle(self, token): - self.parser.parseRCDataRawtext(token, "RCDATA") - - def startTagNoFramesStyle(self, token): - # Need to decide whether to implement the scripting-disabled case - self.parser.parseRCDataRawtext(token, "RAWTEXT") - - def startTagNoscript(self, token): - if self.parser.scripting: - self.parser.parseRCDataRawtext(token, "RAWTEXT") - else: - self.tree.insertElement(token) - self.parser.phase = self.parser.phases["inHeadNoscript"] - - def startTagScript(self, token): - self.tree.insertElement(token) - self.parser.tokenizer.state = self.parser.tokenizer.scriptDataState - self.parser.originalPhase = self.parser.phase - self.parser.phase = self.parser.phases["text"] - - def startTagOther(self, token): - self.anythingElse() - return token - - def endTagHead(self, token): - node = self.parser.tree.openElements.pop() - assert node.name == "head", "Expected head got %s" % node.name - self.parser.phase = self.parser.phases["afterHead"] - - def endTagHtmlBodyBr(self, token): - self.anythingElse() - return token - - def endTagOther(self, token): - self.parser.parseError("unexpected-end-tag", {"name": token["name"]}) - - def anythingElse(self): - self.endTagHead(impliedTagToken("head")) - - class InHeadNoscriptPhase(Phase): - def __init__(self, parser, tree): - Phase.__init__(self, parser, tree) - - self.startTagHandler = _utils.MethodDispatcher([ - ("html", self.startTagHtml), - (("basefont", "bgsound", "link", "meta", "noframes", "style"), self.startTagBaseLinkCommand), - (("head", "noscript"), self.startTagHeadNoscript), - ]) - self.startTagHandler.default = self.startTagOther - - self.endTagHandler = _utils.MethodDispatcher([ - ("noscript", self.endTagNoscript), - ("br", self.endTagBr), - ]) - self.endTagHandler.default = self.endTagOther - - def processEOF(self): - self.parser.parseError("eof-in-head-noscript") - self.anythingElse() - return True - - def processComment(self, token): - return self.parser.phases["inHead"].processComment(token) - - def processCharacters(self, token): - self.parser.parseError("char-in-head-noscript") - self.anythingElse() - return token - - def processSpaceCharacters(self, token): - return self.parser.phases["inHead"].processSpaceCharacters(token) - - def startTagHtml(self, token): - return self.parser.phases["inBody"].processStartTag(token) - - def startTagBaseLinkCommand(self, token): - return self.parser.phases["inHead"].processStartTag(token) - - def startTagHeadNoscript(self, token): - self.parser.parseError("unexpected-start-tag", {"name": token["name"]}) - - def startTagOther(self, token): - self.parser.parseError("unexpected-inhead-noscript-tag", {"name": token["name"]}) - self.anythingElse() - return token - - def endTagNoscript(self, token): - node = self.parser.tree.openElements.pop() - assert node.name == "noscript", "Expected noscript got %s" % node.name - self.parser.phase = self.parser.phases["inHead"] - - def endTagBr(self, token): - self.parser.parseError("unexpected-inhead-noscript-tag", {"name": token["name"]}) - self.anythingElse() - return token - - def endTagOther(self, token): - self.parser.parseError("unexpected-end-tag", {"name": token["name"]}) - - def anythingElse(self): - # Caller must raise parse error first! - self.endTagNoscript(impliedTagToken("noscript")) - - class AfterHeadPhase(Phase): - def __init__(self, parser, tree): - Phase.__init__(self, parser, tree) - - self.startTagHandler = _utils.MethodDispatcher([ - ("html", self.startTagHtml), - ("body", self.startTagBody), - ("frameset", self.startTagFrameset), - (("base", "basefont", "bgsound", "link", "meta", "noframes", "script", - "style", "title"), - self.startTagFromHead), - ("head", self.startTagHead) - ]) - self.startTagHandler.default = self.startTagOther - self.endTagHandler = _utils.MethodDispatcher([(("body", "html", "br"), - self.endTagHtmlBodyBr)]) - self.endTagHandler.default = self.endTagOther - - def processEOF(self): - self.anythingElse() - return True - - def processCharacters(self, token): - self.anythingElse() - return token - - def startTagHtml(self, token): - return self.parser.phases["inBody"].processStartTag(token) - - def startTagBody(self, token): - self.parser.framesetOK = False - self.tree.insertElement(token) - self.parser.phase = self.parser.phases["inBody"] - - def startTagFrameset(self, token): - self.tree.insertElement(token) - self.parser.phase = self.parser.phases["inFrameset"] - - def startTagFromHead(self, token): - self.parser.parseError("unexpected-start-tag-out-of-my-head", - {"name": token["name"]}) - self.tree.openElements.append(self.tree.headPointer) - self.parser.phases["inHead"].processStartTag(token) - for node in self.tree.openElements[::-1]: - if node.name == "head": - self.tree.openElements.remove(node) - break - - def startTagHead(self, token): - self.parser.parseError("unexpected-start-tag", {"name": token["name"]}) - - def startTagOther(self, token): - self.anythingElse() - return token - - def endTagHtmlBodyBr(self, token): - self.anythingElse() - return token - - def endTagOther(self, token): - self.parser.parseError("unexpected-end-tag", {"name": token["name"]}) - - def anythingElse(self): - self.tree.insertElement(impliedTagToken("body", "StartTag")) - self.parser.phase = self.parser.phases["inBody"] - self.parser.framesetOK = True - - class InBodyPhase(Phase): - # http://www.whatwg.org/specs/web-apps/current-work/#parsing-main-inbody - # the really-really-really-very crazy mode - def __init__(self, parser, tree): - Phase.__init__(self, parser, tree) - - # Set this to the default handler - self.processSpaceCharacters = self.processSpaceCharactersNonPre - - self.startTagHandler = _utils.MethodDispatcher([ - ("html", self.startTagHtml), - (("base", "basefont", "bgsound", "command", "link", "meta", - "script", "style", "title"), - self.startTagProcessInHead), - ("body", self.startTagBody), - ("frameset", self.startTagFrameset), - (("address", "article", "aside", "blockquote", "center", "details", - "dir", "div", "dl", "fieldset", "figcaption", "figure", - "footer", "header", "hgroup", "main", "menu", "nav", "ol", "p", - "section", "summary", "ul"), - self.startTagCloseP), - (headingElements, self.startTagHeading), - (("pre", "listing"), self.startTagPreListing), - ("form", self.startTagForm), - (("li", "dd", "dt"), self.startTagListItem), - ("plaintext", self.startTagPlaintext), - ("a", self.startTagA), - (("b", "big", "code", "em", "font", "i", "s", "small", "strike", - "strong", "tt", "u"), self.startTagFormatting), - ("nobr", self.startTagNobr), - ("button", self.startTagButton), - (("applet", "marquee", "object"), self.startTagAppletMarqueeObject), - ("xmp", self.startTagXmp), - ("table", self.startTagTable), - (("area", "br", "embed", "img", "keygen", "wbr"), - self.startTagVoidFormatting), - (("param", "source", "track"), self.startTagParamSource), - ("input", self.startTagInput), - ("hr", self.startTagHr), - ("image", self.startTagImage), - ("isindex", self.startTagIsIndex), - ("textarea", self.startTagTextarea), - ("iframe", self.startTagIFrame), - ("noscript", self.startTagNoscript), - (("noembed", "noframes"), self.startTagRawtext), - ("select", self.startTagSelect), - (("rp", "rt"), self.startTagRpRt), - (("option", "optgroup"), self.startTagOpt), - (("math"), self.startTagMath), - (("svg"), self.startTagSvg), - (("caption", "col", "colgroup", "frame", "head", - "tbody", "td", "tfoot", "th", "thead", - "tr"), self.startTagMisplaced) - ]) - self.startTagHandler.default = self.startTagOther - - self.endTagHandler = _utils.MethodDispatcher([ - ("body", self.endTagBody), - ("html", self.endTagHtml), - (("address", "article", "aside", "blockquote", "button", "center", - "details", "dialog", "dir", "div", "dl", "fieldset", "figcaption", "figure", - "footer", "header", "hgroup", "listing", "main", "menu", "nav", "ol", "pre", - "section", "summary", "ul"), self.endTagBlock), - ("form", self.endTagForm), - ("p", self.endTagP), - (("dd", "dt", "li"), self.endTagListItem), - (headingElements, self.endTagHeading), - (("a", "b", "big", "code", "em", "font", "i", "nobr", "s", "small", - "strike", "strong", "tt", "u"), self.endTagFormatting), - (("applet", "marquee", "object"), self.endTagAppletMarqueeObject), - ("br", self.endTagBr), - ]) - self.endTagHandler.default = self.endTagOther - - def isMatchingFormattingElement(self, node1, node2): - return (node1.name == node2.name and - node1.namespace == node2.namespace and - node1.attributes == node2.attributes) - - # helper - def addFormattingElement(self, token): - self.tree.insertElement(token) - element = self.tree.openElements[-1] - - matchingElements = [] - for node in self.tree.activeFormattingElements[::-1]: - if node is Marker: - break - elif self.isMatchingFormattingElement(node, element): - matchingElements.append(node) - - assert len(matchingElements) <= 3 - if len(matchingElements) == 3: - self.tree.activeFormattingElements.remove(matchingElements[-1]) - self.tree.activeFormattingElements.append(element) - - # the real deal - def processEOF(self): - allowed_elements = frozenset(("dd", "dt", "li", "p", "tbody", "td", - "tfoot", "th", "thead", "tr", "body", - "html")) - for node in self.tree.openElements[::-1]: - if node.name not in allowed_elements: - self.parser.parseError("expected-closing-tag-but-got-eof") - break - # Stop parsing - - def processSpaceCharactersDropNewline(self, token): - # Sometimes (start of
, , and