From f55ac6dbe921b9fd6a4d95522c8b2393c5b3c3da Mon Sep 17 00:00:00 2001 From: "Victor.Matchenko" Date: Sun, 26 Jun 2016 22:29:40 +0200 Subject: [PATCH] resave and rebuild models with lost stub id --- .../editor/languageModels/constraints.mps | 2 +- .../mps/lang/editor/constraints/generated | 2 +- .../jetbrains/mps/lang/editor/generated | 2 +- .../baseLanguage/template/main@generator.mps | 2 +- .../baseLanguage/template/main/generated | 2 +- .../build/generator/template/main/generated | 2 +- .../generator/template/main@generator.mps | 2 +- .../test/languageModels/editor.mps | 26 +- .../jetbrains/mps/lang/test/runtime.mps | 2 +- .../jetbrains/mps/lang/test/runtime/generated | 2 +- .../jetbrains/mps/lang/test/editor/generated | 2 +- .../jetbrains/mps/lang/test/generated | 2 +- .../lang/migration/pluginSolution/plugin.mps | 8 +- .../migration/pluginSolution/plugin/generated | 2 +- .../jetbrains.mps.ide/models/actions.mps | 4 +- .../jetbrains/mps/ide/actions/dependencies | 3724 ++-- .../jetbrains/mps/ide/actions/generated | 3 + .../jetbrains/mps/ide/actions/trace.info | 14141 ++++++++++++++++ 18 files changed, 16035 insertions(+), 1895 deletions(-) diff --git a/languages/languageDesign/editor/languageModels/constraints.mps b/languages/languageDesign/editor/languageModels/constraints.mps index f036703cda08..c7c3da56a050 100644 --- a/languages/languageDesign/editor/languageModels/constraints.mps +++ b/languages/languageDesign/editor/languageModels/constraints.mps @@ -116,7 +116,7 @@ - + diff --git a/languages/languageDesign/editor/source_gen.caches/jetbrains/mps/lang/editor/constraints/generated b/languages/languageDesign/editor/source_gen.caches/jetbrains/mps/lang/editor/constraints/generated index 4338b58f5bc9..fedc4728952b 100644 --- a/languages/languageDesign/editor/source_gen.caches/jetbrains/mps/lang/editor/constraints/generated +++ b/languages/languageDesign/editor/source_gen.caches/jetbrains/mps/lang/editor/constraints/generated @@ -1,3 +1,3 @@ - + diff --git a/languages/languageDesign/editor/source_gen.caches/jetbrains/mps/lang/editor/generated b/languages/languageDesign/editor/source_gen.caches/jetbrains/mps/lang/editor/generated index 09f39bf105b1..e58388ac006d 100644 --- a/languages/languageDesign/editor/source_gen.caches/jetbrains/mps/lang/editor/generated +++ b/languages/languageDesign/editor/source_gen.caches/jetbrains/mps/lang/editor/generated @@ -1,3 +1,3 @@ - + diff --git a/languages/languageDesign/intentions/generator/baseLanguage/template/main@generator.mps b/languages/languageDesign/intentions/generator/baseLanguage/template/main@generator.mps index 2c79b587b50f..15fe15286650 100644 --- a/languages/languageDesign/intentions/generator/baseLanguage/template/main@generator.mps +++ b/languages/languageDesign/intentions/generator/baseLanguage/template/main@generator.mps @@ -151,7 +151,7 @@ - + diff --git a/languages/languageDesign/intentions/generator/source_gen.caches/jetbrains/mps/lang/intentions/generator/baseLanguage/template/main/generated b/languages/languageDesign/intentions/generator/source_gen.caches/jetbrains/mps/lang/intentions/generator/baseLanguage/template/main/generated index f079391e1f40..c29ec0b2b2cd 100644 --- a/languages/languageDesign/intentions/generator/source_gen.caches/jetbrains/mps/lang/intentions/generator/baseLanguage/template/main/generated +++ b/languages/languageDesign/intentions/generator/source_gen.caches/jetbrains/mps/lang/intentions/generator/baseLanguage/template/main/generated @@ -1,3 +1,3 @@ - + diff --git a/plugins/mps-build/languages/build/generator/source_gen.caches/jetbrains/mps/build/generator/template/main/generated b/plugins/mps-build/languages/build/generator/source_gen.caches/jetbrains/mps/build/generator/template/main/generated index 6bf8d297a236..408d62f1384d 100644 --- a/plugins/mps-build/languages/build/generator/source_gen.caches/jetbrains/mps/build/generator/template/main/generated +++ b/plugins/mps-build/languages/build/generator/source_gen.caches/jetbrains/mps/build/generator/template/main/generated @@ -1,3 +1,3 @@ - + diff --git a/plugins/mps-build/languages/build/generator/template/jetbrains/mps/buildScript/generator/template/main@generator.mps b/plugins/mps-build/languages/build/generator/template/jetbrains/mps/buildScript/generator/template/main@generator.mps index 362320a50e73..5e489f36a71b 100644 --- a/plugins/mps-build/languages/build/generator/template/jetbrains/mps/buildScript/generator/template/main@generator.mps +++ b/plugins/mps-build/languages/build/generator/template/jetbrains/mps/buildScript/generator/template/main@generator.mps @@ -127,7 +127,7 @@ - + diff --git a/plugins/mps-testing/languages/languageDesign/test/languageModels/editor.mps b/plugins/mps-testing/languages/languageDesign/test/languageModels/editor.mps index eafdf4c856a2..a58615779431 100644 --- a/plugins/mps-testing/languages/languageDesign/test/languageModels/editor.mps +++ b/plugins/mps-testing/languages/languageDesign/test/languageModels/editor.mps @@ -68,7 +68,7 @@ - + @@ -92,11 +92,11 @@ - + - + @@ -115,7 +115,7 @@ - + @@ -161,36 +161,36 @@ - + - + - + - - + + - + - + - + @@ -259,7 +259,7 @@ - + diff --git a/plugins/mps-testing/languages/languageDesign/test/solutions/jetbrains.mps.lang.test.runtime/jetbrains/mps/lang/test/runtime.mps b/plugins/mps-testing/languages/languageDesign/test/solutions/jetbrains.mps.lang.test.runtime/jetbrains/mps/lang/test/runtime.mps index fa84790d85c8..a33e0ffb48b2 100644 --- a/plugins/mps-testing/languages/languageDesign/test/solutions/jetbrains.mps.lang.test.runtime/jetbrains/mps/lang/test/runtime.mps +++ b/plugins/mps-testing/languages/languageDesign/test/solutions/jetbrains.mps.lang.test.runtime/jetbrains/mps/lang/test/runtime.mps @@ -249,7 +249,7 @@ - + diff --git a/plugins/mps-testing/languages/languageDesign/test/solutions/jetbrains.mps.lang.test.runtime/source_gen.caches/jetbrains/mps/lang/test/runtime/generated b/plugins/mps-testing/languages/languageDesign/test/solutions/jetbrains.mps.lang.test.runtime/source_gen.caches/jetbrains/mps/lang/test/runtime/generated index 8ef36f85c7b8..102da91d222b 100644 --- a/plugins/mps-testing/languages/languageDesign/test/solutions/jetbrains.mps.lang.test.runtime/source_gen.caches/jetbrains/mps/lang/test/runtime/generated +++ b/plugins/mps-testing/languages/languageDesign/test/solutions/jetbrains.mps.lang.test.runtime/source_gen.caches/jetbrains/mps/lang/test/runtime/generated @@ -1,3 +1,3 @@ - + diff --git a/plugins/mps-testing/languages/languageDesign/test/source_gen.caches/jetbrains/mps/lang/test/editor/generated b/plugins/mps-testing/languages/languageDesign/test/source_gen.caches/jetbrains/mps/lang/test/editor/generated index f3a023cc5e42..79c1da8f405b 100644 --- a/plugins/mps-testing/languages/languageDesign/test/source_gen.caches/jetbrains/mps/lang/test/editor/generated +++ b/plugins/mps-testing/languages/languageDesign/test/source_gen.caches/jetbrains/mps/lang/test/editor/generated @@ -1,3 +1,3 @@ - + diff --git a/plugins/mps-testing/languages/languageDesign/test/source_gen.caches/jetbrains/mps/lang/test/generated b/plugins/mps-testing/languages/languageDesign/test/source_gen.caches/jetbrains/mps/lang/test/generated index d66bc44f6fa3..b87865ac4dbc 100644 --- a/plugins/mps-testing/languages/languageDesign/test/source_gen.caches/jetbrains/mps/lang/test/generated +++ b/plugins/mps-testing/languages/languageDesign/test/source_gen.caches/jetbrains/mps/lang/test/generated @@ -1,3 +1,3 @@ - + diff --git a/plugins/mpsdevkit/languages/pluginSolutions/lang.migration/models/jetbrains/mps/lang/migration/pluginSolution/plugin.mps b/plugins/mpsdevkit/languages/pluginSolutions/lang.migration/models/jetbrains/mps/lang/migration/pluginSolution/plugin.mps index d004e1e18627..810bf7bece33 100644 --- a/plugins/mpsdevkit/languages/pluginSolutions/lang.migration/models/jetbrains/mps/lang/migration/pluginSolution/plugin.mps +++ b/plugins/mpsdevkit/languages/pluginSolutions/lang.migration/models/jetbrains/mps/lang/migration/pluginSolution/plugin.mps @@ -2269,7 +2269,7 @@ - + @@ -5029,7 +5029,7 @@ - + @@ -5614,7 +5614,7 @@ - + @@ -6600,7 +6600,7 @@ - + diff --git a/plugins/mpsdevkit/languages/pluginSolutions/lang.migration/source_gen.caches/jetbrains/mps/lang/migration/pluginSolution/plugin/generated b/plugins/mpsdevkit/languages/pluginSolutions/lang.migration/source_gen.caches/jetbrains/mps/lang/migration/pluginSolution/plugin/generated index 3733bdffcfef..ba62b5ec0ab3 100644 --- a/plugins/mpsdevkit/languages/pluginSolutions/lang.migration/source_gen.caches/jetbrains/mps/lang/migration/pluginSolution/plugin/generated +++ b/plugins/mpsdevkit/languages/pluginSolutions/lang.migration/source_gen.caches/jetbrains/mps/lang/migration/pluginSolution/plugin/generated @@ -1,3 +1,3 @@ - + diff --git a/workbench/mps-workbench/jetbrains.mps.ide/models/actions.mps b/workbench/mps-workbench/jetbrains.mps.ide/models/actions.mps index 253c65ac1424..df608942af71 100644 --- a/workbench/mps-workbench/jetbrains.mps.ide/models/actions.mps +++ b/workbench/mps-workbench/jetbrains.mps.ide/models/actions.mps @@ -522,7 +522,7 @@ - + @@ -42207,7 +42207,7 @@ - + diff --git a/workbench/mps-workbench/jetbrains.mps.ide/source_gen.caches/jetbrains/mps/ide/actions/dependencies b/workbench/mps-workbench/jetbrains.mps.ide/source_gen.caches/jetbrains/mps/ide/actions/dependencies index 1aa4341813d4..997d81733e00 100644 --- a/workbench/mps-workbench/jetbrains.mps.ide/source_gen.caches/jetbrains/mps/ide/actions/dependencies +++ b/workbench/mps-workbench/jetbrains.mps.ide/source_gen.caches/jetbrains/mps/ide/actions/dependencies @@ -2,160 +2,160 @@ - + - + + + - - - - - - + - - - - + + + + + + + - + + + + + + - - - - - - - - - + - + + + + - - - - - - - - - - + + + + + + + + + - - + + + - - - - - - - - - - - + + - - + + + + + + + + + + + - - - - - - - + - + + + + + + + - - + + - - - - - - - - + - - + + + + + - + + + + + - - - - - - - - - - - + + + + + - + + + + + + + @@ -165,590 +165,590 @@ + + - + + - - - - + + - - - + + - + + + + + + + - - - - - - - - + + + - - - - + - - - - - - - - - - + + + + - - - - + + + - - - - - - + + + + + + + + + + + + + + + - - - - - + + + + - - - - - - - + + + + + + + + + - - + + - - - - - - + + - + + + + - - - - - - - - + + + - + + - - - + + + + + + + - + + - - + + + - + + - - - - - - + + + - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - + + - + + + + + + - - + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - + + + - - + + + + + + + - - - + + + + + + + + + + + + + - - - - - - - + + + + + + + - - - - - + + + + + - - - - - - - + + + + + + + - + + - - - - - + + - - - - + + + + + + - + + - - - - - + - - - - - + + + + + + + + - - - - - - - - - - + + + + + + + + + + - - + + - - + + - - - - - - - + - - - + + + + + + + + + - - + + - - - + - + + + - - - - - + - - + + + + + + - + + - - - - - - - + - - - - - + + + + + + + + - + + + - - - - - - - - - + + - - - + + + - - - + + - - + + + + - - + + + + + + + + - + + + - - - - - - + - + - - - - - - - - - - - + + + + + + + + + + + + + - + + - + + + + + - - - - - - - - - - - - - - - - - - - - + + + + + - - - - + + + + + + + + + + + + + + + - - + + + + - - + + + - - - - - + + + + - + + + - - - - - + - + - - + + - - - - - - - - + + + + + + + + - - + + @@ -772,102 +772,102 @@ - - - - - - - - + + + + + + + + - + + - - - + + + + - - + + + - - - - - - + + + - - - - - - - - + + + + + + + + - - + + - - + + - - + + - - - - - - + - - + + + + + + + @@ -877,55 +877,55 @@ - - + + + + + - + + + + + - - - - - - - - - - + + - + + + + - - - - + + - - - - - - - - - - + - - + + + + + + + + + + + @@ -934,182 +934,182 @@ - - - - - - - - - - - + + + + - - - - + + + - + + + + + + + - - - - - - + + + + + - - - + + + + + - + + - - + + + + + - - + + + - - - - - - - + + + - + + + + + + + + + - + + + + + + + + - - - + - - - - - - + - - + + + + + + + + + - - - - - - + + - - - - - - - - + + + + - - + + + + + - - - - - - - - - - - + - - - - - - - - - - - + + + + + + - - - + - - + + + - + + + + + + + - - + + - + + - - + + - - - - - - + + + + + - - - - - + + + + + @@ -1118,543 +1118,543 @@ - - + + - - - - - - - + + - - - - + + - - - - - - + + + + + + + - - + + + + + + - + + + - - + + - - + + - + - + + + + - - - - - - - - + - - - - - - - - - + + + + + - - - + + + + + + + + + + + - - + + + + - - - - + - - - - - + - - - - + + - + + + + + + + + - - - + + + + - - - - + - - + + + + - - - + + + + - - - - - - + + + + + + + + - - - + + + + - - - - - - - + - - + - + + + + + + + + + + + + + + + + + + + - - - + + - - - + - - - - - - - - - - - - - - - + + + + - - + + - - - + + + + + - - - - + + + + + + + + + + + + - - - - - - - - - - - + + - - - - + + + - + + + + - - - - - + + - - - + + + - - + - - + + - - + + + + + + - - - - + - + - - - - - - - + + + - + + + + - - + + + - - - - - - - - - - - - - - - - + + - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - - - - - - - + + + - - - - - - + + + - - - - - - - + + + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + - - - - - - + + + + + + + + - - - + + + - - - - - - - - - - - - - - - - - - - - + - + + + + + + + + + - - - - - - + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + + + + - + + + + + + - - - - - - - - + - + + + + + + + - - + + + - - - - - + + - - + + + + + + + + + + + + - - + + + + + + + + + + + + + + + + + + + - - - - + + + + + + + - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + - - - - + + - + + - - - - - + + + - + + @@ -1668,104 +1668,104 @@ - - + + - - + + - + - - + - - + + + - - - + - + + + - - - + - + + + - - - - - - - - - - - - - + - - - - - - - - - - - + + + + + - - + + - - + + + + + + + + + + - + + + + + + + + + + + + + - - - + @@ -1774,43 +1774,42 @@ - - + + - - + + - - - - - - - - - - - - - - + + + + - + + + + + + + + - + + + @@ -1820,164 +1819,162 @@ - - + + - - - - + + + + - - - - - - - - - - - - - - + + + - + + + + + + + + + + + - - - - - - - - - - - + - - - + + + + + + + + + - - - - + + + + + + + + + + + - - - - - - - - - - + + + + - - + - - - - - - + + - + + + + + - - - - - - - + + + + + + + - - - + + + + + + - - + + + + - + - - - - + + - - - - - - - - - - - + - + + + + + + + + + + + - - + + @@ -1985,403 +1982,403 @@ - - - - - - - - - - - - + + + + + - + + + + + + + + - - - - - - - - - - - - - - + + + - + + + + + + + + + + + + - - - - - - - - - - - + + + + + - + + + + + + + + + + + + + + - + + + + + + + + - - - - - - - - - - + + + - - - - - - - + + + + - - - - - - + + + + + + + + + + - - + + + + + + - + + + + + - + - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - + - + + + + + + + + + + - - - - - - - - - - - - - - + - + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - + + + + + + + - - - - - + + + + + + + + + - - + + - - - - - - - - + + + + + + - - - + + + + + + + + + + + - - - - + - - - - - - + + + - - + + + - - - - + + - - - - + + + + + + + + + - - - + - - - - - - + + + + - - + + + - - + + - - - + + + + + + + + - - - + - - - - - + - - - + + + + + + + + + - + + - - - + + - - - - + - - - - - - - + + + - - - - + + - - - - - - + + + + + + + + - + + + + + + + - - - - - - - - - - - - - + - - - + + + - - - + + + + + + + + + + - - + + @@ -2389,56 +2386,56 @@ - + + - - - - - - - - - - - - - - - + + - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - - - - - - - + + + + + + + + + @@ -2447,16 +2444,16 @@ - - + + - - + + @@ -2468,211 +2465,211 @@ - - + - - + + + - - - - - - - - - + - - + + + + + + + + + + - - - - - - - - - - - - - + + + + + - + - + + + + + + + + - + + - - - + - - + - + + + + - - - - - - + - - + + + + + + + - - - - - - - - - - + + + - + + + + + + + + - - - - - - - - - + - + + + + + + + + + + + - - + + - - - - - + + + + + - - - - + + + - - + + - + - - - - - - + + + + + - - + + - - + + + - + - - - - - - + + + + - + + - - - - - + + + + + @@ -2680,57 +2677,57 @@ - - - - - - - - - - - + + - + + + + - - + + + + + + - + + + + + + + + - - - + - - - - - - + - + + + - + + - - - - + - + - - + + + + @@ -2738,481 +2735,481 @@ - - - - - + - + + + + + - - - - - + - - + + + + + + + + + + - - + + - - - - - - - - + + + + - + + + - - - - - + + - - - - - + + + + + + - + + + + + - - - - - - - - - - + + + - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - + + + + + + - + - + + + + + - - - - - - - - + - - - - + - + + + + - - + - - - + + + + - - + + - - + + - - - - - - - + - + + + + + + + - + + + + - - + + + - - - - - - - - - - - + - - - - + + - - - - - - - + + + + + + + - + + - - + + + + + + + + + - - - + + + - - - - - - - - - - + - - - - - - - - - - - - - - + + - - - - + + + + - + - + + + + + + + + + + + + + + + + + - + + + - - - - - - + + + + + + - + + + + - - - - - + + + + - - + + + - - - + - + - - - - + + + + + - - - - - - - - - - + + + + + + + + + + - + + - - - - - - - - - - + - + + + + + + + + + + - + - - - - - - - - - - - - - + + + + + + + + + + + + + - - + + + + - - - - - + + + - - + - - + + + + + + - - - - - - - + + + + + + + + - - - - + + + - - - - - - - - + + + - - - + - - - - - - - + + - + + - + + + + + + + + + + + - - - + - - - - - + - + + + + + - - + + - - + + @@ -3220,134 +3217,133 @@ - - - + + + - - + + + + - - - - - - - - - - - - + - - + + + + + + + + + + - - - - + + + + + + - + - - - + - + - + + + + + - - + + - - - - + - - + + + + + + + + - - - - + + + + + - - - + + + + + + + + - - - - - - - - - - - - - - + - - - - - - + - - + + + + + + + - - - - - + + + + + @@ -3356,16 +3352,16 @@ - - + + - + @@ -3373,44 +3369,44 @@ - + + - - - - - - - - + - - - - + + + + - - - - - - - - - + + + + - - - - - + + + + + + + + + + + + + + + + diff --git a/workbench/mps-workbench/jetbrains.mps.ide/source_gen.caches/jetbrains/mps/ide/actions/generated b/workbench/mps-workbench/jetbrains.mps.ide/source_gen.caches/jetbrains/mps/ide/actions/generated index e69de29bb2d1..52fc479c9279 100644 --- a/workbench/mps-workbench/jetbrains.mps.ide/source_gen.caches/jetbrains/mps/ide/actions/generated +++ b/workbench/mps-workbench/jetbrains.mps.ide/source_gen.caches/jetbrains/mps/ide/actions/generated @@ -0,0 +1,3 @@ + + + diff --git a/workbench/mps-workbench/jetbrains.mps.ide/source_gen/jetbrains/mps/ide/actions/trace.info b/workbench/mps-workbench/jetbrains.mps.ide/source_gen/jetbrains/mps/ide/actions/trace.info index e69de29bb2d1..6ba8317d08ae 100644 --- a/workbench/mps-workbench/jetbrains.mps.ide/source_gen/jetbrains/mps/ide/actions/trace.info +++ b/workbench/mps-workbench/jetbrains.mps.ide/source_gen/jetbrains/mps/ide/actions/trace.info @@ -0,0 +1,14141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +