├── .gitattributes
├── gitDocs
├── Splash.png
└── CWR_Example.png
├── VocabulateSrc
├── Resources
│ ├── vocab.ico
│ ├── 1872_Expression_F1142_fig18.jpg
│ ├── StopListCharacters.txt
│ └── StopListEN.txt
├── App.config
├── Properties
│ ├── Settings.settings
│ ├── Settings.Designer.cs
│ ├── AssemblyInfo.cs
│ ├── Resources.resx
│ └── Resources.Designer.cs
├── Splash.cs
├── Program.cs
├── StopWordRemover.cs
├── DictData.cs
├── _TwitterAwareTokenizerNET.cs
├── Splash.Designer.cs
├── Vocabulate.csproj
├── LoadDictionary.cs
├── CSVParser.cs
├── MainForm.Designer.cs
├── MainForm.cs
└── MainForm.resx
├── LICENSE
├── Vocabulate.sln
├── README.MD
├── Dictionary Files
└── 2019-07-30 - AEV_Dict.csv
└── .gitignore
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Auto detect text files and perform LF normalization
2 | * text=auto
3 |
--------------------------------------------------------------------------------
/gitDocs/Splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ryanboyd/Vocabulate/HEAD/gitDocs/Splash.png
--------------------------------------------------------------------------------
/gitDocs/CWR_Example.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ryanboyd/Vocabulate/HEAD/gitDocs/CWR_Example.png
--------------------------------------------------------------------------------
/VocabulateSrc/Resources/vocab.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ryanboyd/Vocabulate/HEAD/VocabulateSrc/Resources/vocab.ico
--------------------------------------------------------------------------------
/VocabulateSrc/Resources/1872_Expression_F1142_fig18.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ryanboyd/Vocabulate/HEAD/VocabulateSrc/Resources/1872_Expression_F1142_fig18.jpg
--------------------------------------------------------------------------------
/VocabulateSrc/App.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/VocabulateSrc/Properties/Settings.settings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/VocabulateSrc/Splash.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.ComponentModel;
4 | using System.Data;
5 | using System.Drawing;
6 | using System.Linq;
7 | using System.Text;
8 | using System.Threading.Tasks;
9 | using System.Windows.Forms;
10 |
11 | namespace Vocabulate
12 | {
13 | public partial class Splash : Form
14 | {
15 | public Splash()
16 | {
17 | InitializeComponent();
18 | }
19 |
20 | private void timer1_Tick(object sender, EventArgs e)
21 | {
22 | this.Close();
23 | }
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/VocabulateSrc/Resources/StopListCharacters.txt:
--------------------------------------------------------------------------------
1 | `
2 | ~
3 | !
4 | @
5 | #
6 | $
7 | %
8 | ^
9 | &
10 | *
11 | (
12 | )
13 | _
14 | +
15 | -
16 | =
17 | [
18 | ]
19 | \
20 | ;
21 | '
22 | ,
23 | .
24 | /
25 | {
26 | }
27 | |
28 | :
29 | "
30 | <
31 | >
32 | ?
33 | ..
34 | ...
35 | «
36 | ««
37 | »»
38 | “
39 | ”
40 | ‘
41 | ‘‘
42 | ’
43 | ’’
44 | 1
45 | 2
46 | 3
47 | 4
48 | 5
49 | 6
50 | 7
51 | 8
52 | 9
53 | 0
54 | 10
55 | 11
56 | 12
57 | 13
58 | 14
59 | 15
60 | 16
61 | 17
62 | 18
63 | 19
64 | 20
65 | 25
66 | 30
67 | 33
68 | 40
69 | 50
70 | 60
71 | 66
72 | 70
73 | 75
74 | 80
75 | 90
76 | 99
77 | 100
78 | 123
79 | 1000
80 | 10000
81 | 12345
82 | 100000
83 | 1000000
--------------------------------------------------------------------------------
/VocabulateSrc/Program.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Threading.Tasks;
5 | using System.Windows.Forms;
6 |
7 | namespace VocabulateApplication
8 | {
9 | static class Program
10 | {
11 | ///
12 | /// The main entry point for the application.
13 | ///
14 | [STAThread]
15 | static void Main()
16 | {
17 | Application.EnableVisualStyles();
18 | Application.SetCompatibleTextRenderingDefault(false);
19 |
20 | Application.Run(new Vocabulate.Splash());
21 |
22 | Application.Run(new VocabulateMainForm());
23 | }
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2019 Ryan L. Boyd
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
--------------------------------------------------------------------------------
/VocabulateSrc/StopWordRemover.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Text.RegularExpressions;
4 |
5 | namespace Vocabulate
6 | {
7 | class StopWordRemover
8 | {
9 |
10 | private HashSet StopWordsNoWildcards { get; set; }
11 | private Regex[] StopWordsWildCards { get; set; }
12 |
13 | public void BuildStopList(string StopListRawText)
14 | {
15 |
16 | StopWordsNoWildcards = new HashSet();
17 |
18 | string[] StopListArray = StopListRawText.ToLower().Split(new[] { "\r\n", "\r", "\n" }, StringSplitOptions.None);
19 | foreach(string StopWord in StopListArray)
20 | {
21 | StopWordsNoWildcards.Add(StopWord.Trim());
22 | }
23 | }
24 |
25 | public string[] ClearStopWords(string[] WordList)
26 | {
27 |
28 | for(int i = 0; i < WordList.Length; i++)
29 | {
30 | if (StopWordsNoWildcards.Contains(WordList[i])) WordList[i] = "";
31 | }
32 |
33 | return WordList;
34 |
35 | }
36 |
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/VocabulateSrc/Properties/Settings.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // This code was generated by a tool.
4 | // Runtime Version:4.0.30319.42000
5 | //
6 | // Changes to this file may cause incorrect behavior and will be lost if
7 | // the code is regenerated.
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace Vocabulate.Properties {
12 |
13 |
14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")]
16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
17 |
18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
19 |
20 | public static Settings Default {
21 | get {
22 | return defaultInstance;
23 | }
24 | }
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/Vocabulate.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio Version 16
4 | VisualStudioVersion = 16.0.30503.244
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Vocabulate", "VocabulateSrc\Vocabulate.csproj", "{FD197B2D-2C43-46CA-8910-E9BCF51EEAA4}"
7 | EndProject
8 | Global
9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
10 | Debug|Any CPU = Debug|Any CPU
11 | Release|Any CPU = Release|Any CPU
12 | EndGlobalSection
13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
14 | {FD197B2D-2C43-46CA-8910-E9BCF51EEAA4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
15 | {FD197B2D-2C43-46CA-8910-E9BCF51EEAA4}.Debug|Any CPU.Build.0 = Debug|Any CPU
16 | {FD197B2D-2C43-46CA-8910-E9BCF51EEAA4}.Release|Any CPU.ActiveCfg = Release|Any CPU
17 | {FD197B2D-2C43-46CA-8910-E9BCF51EEAA4}.Release|Any CPU.Build.0 = Release|Any CPU
18 | EndGlobalSection
19 | GlobalSection(SolutionProperties) = preSolution
20 | HideSolutionNode = FALSE
21 | EndGlobalSection
22 | GlobalSection(ExtensibilityGlobals) = postSolution
23 | SolutionGuid = {E1B2C7CE-1D6C-4E0C-BDF5-39AB197D5BC8}
24 | EndGlobalSection
25 | EndGlobal
26 |
--------------------------------------------------------------------------------
/VocabulateSrc/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | // General Information about an assembly is controlled through the following
6 | // set of attributes. Change these attribute values to modify the information
7 | // associated with an assembly.
8 | [assembly: AssemblyTitle("Vocabulate")]
9 | [assembly: AssemblyDescription("")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("Ryan L. Boyd, Ph.D.")]
12 | [assembly: AssemblyProduct("Vocabulate")]
13 | [assembly: AssemblyCopyright("Copyright © 2019")]
14 | [assembly: AssemblyTrademark("")]
15 | [assembly: AssemblyCulture("")]
16 |
17 | // Setting ComVisible to false makes the types in this assembly not visible
18 | // to COM components. If you need to access a type in this assembly from
19 | // COM, set the ComVisible attribute to true on that type.
20 | [assembly: ComVisible(false)]
21 |
22 | // The following GUID is for the ID of the typelib if this project is exposed to COM
23 | [assembly: Guid("fd197b2d-2c43-46ca-8910-e9bcf51eeaa4")]
24 |
25 | // Version information for an assembly consists of the following four values:
26 | //
27 | // Major Version
28 | // Minor Version
29 | // Build Number
30 | // Revision
31 | //
32 | // You can specify all the values or you can default the Build and Revision Numbers
33 | // by using the '*' as shown below:
34 | // [assembly: AssemblyVersion("1.0.*")]
35 | [assembly: AssemblyVersion("0.91.0.0")]
36 | [assembly: AssemblyFileVersion("0.91.0.0")]
37 |
--------------------------------------------------------------------------------
/VocabulateSrc/DictData.cs:
--------------------------------------------------------------------------------
1 |
2 | using System.Collections.Generic;
3 | using System.Text.RegularExpressions;
4 |
5 | namespace Vocabulate
6 | {
7 | public class DictionaryData
8 | {
9 |
10 | public string TextFileFolder { get; set; }
11 | public string OutputFileLocation { get; set; }
12 |
13 | public int NumCats { get; set; }
14 | public int MaxWords { get; set; }
15 |
16 | public string[] CatNames { get; set; }
17 | public bool RawWordCounts { get; set; }
18 |
19 | public string StopListRawText { get; set; }
20 |
21 | public char CSVDelimiter { get; set; }
22 | public char CSVQuote { get; set; }
23 |
24 | public bool OutputCapturedText { get; set; }
25 |
26 | public Dictionary CategoryOrder { get; set; }
27 |
28 | //yeah, we're going full inception with this variable. dictionary inside of a dictionary inside of a dictionary
29 | //while it might seem unnecessarily complicated (and it might be), it makes sense.
30 | //the first level simply differentiates the wildcard entries from the non-wildcard entries
31 | //The second level is purely to refer to the word length -- does each sub-entry include 1-word entries, 2-word entries, etc?
32 | //the third level contains the actual entries from the user's dictionary file
33 |
34 |
35 | //ConceptMap:
36 | //{Concept, [TopLevelCategories]}
37 |
38 | public Dictionary ConceptMap { get; set; }
39 |
40 | //FullDictionaryMap
41 |
42 | //WordList:
43 | //string length (in words)
44 | //{Word, Concept}
45 | //WildCardWordList:
46 | //string length (in words)
47 | //{Word, Concept}
48 |
49 |
50 |
51 | public Dictionary>> FullDictionaryMap { get; set; }
52 |
53 | //this dictionary simply maps the specific wildcard entries to arrays, this way we can iterate across them since we have to do a serial search
54 | //when we're using wildcards
55 | public Dictionary WildCardArrays { get; set; }
56 |
57 | //lastly, this contains the precompiled regexes mapped to their original strings
58 | public Dictionary PrecompiledWildcards { get; set; }
59 |
60 | public bool DictionaryLoaded { get; set; } = false;
61 |
62 |
63 | }
64 | }
65 |
--------------------------------------------------------------------------------
/README.MD:
--------------------------------------------------------------------------------
1 | # Vocabulate
2 |
3 | 
4 |
5 | This page contains the source code for Vocabulate, the software used for:
6 |
7 | Vine, V., Boyd, R. L., & Pennebaker, J. W. (2020). Natural emotion vocabularies as windows on distress and well-being. Nature Communications, 11(1), 4525. https://doi.org/10.1038/s41467-020-18349-0
8 |
9 | Note that the software can be compiled from the code on this page, or you can download and run the executable for the program from the [release page](https://github.com/ryanboyd/Vocabulate/releases).
10 |
11 | Note that this software is no longer in active development, although we plan to make the software slightly more obvious in the near future (e.g., with an instructional YouTube video). The functionality of Vocabulate has been folded into some more modern text analysis software named [BUTTER](https://www.butter.tools/) — you can get the same functionality from BUTTER using the "Concept-Category Diversity" plugin.
12 |
13 | # Interpreting Vocabulate Output
14 |
15 | * **WC: Word Count**
16 | * Total number of words
17 |
18 | * **TC_Raw: Token Count, Raw**
19 | * Total number of tokens. This is like word count, but separately includes things like punctuation, etc.
20 |
21 | * **TTR_Raw: Type-Token Ratio, Raw**
22 | * Type-Token ratio is just the number of unique tokens divided by the total number of tokens (a standard measure of vocabulary spread in linguistics). This is the TTR on the raw tokens
23 |
24 | * **TC_Clean: Token Count, Clean**
25 | * Token count after stop words are removed from text.
26 |
27 | * **TTR_Clean: Type-Token Ratio, Clean**
28 | * TTR, but calculated after stop words have been removed
29 |
30 | * **TC_NonDict: Token Count, Non-Dictionary Words**
31 | * Total number of tokens that were not captured by the loaded vocabulate dictionary
32 |
33 | * **TTR_NonDict: Type-Token Ratio of Non-Dictionary Words**
34 | * This is the TTR calculated on the vocabulary that is not captured by your dictionary. Can be thought of as a control variable: you may want to control for TTR in your statistical models but without cross-contamination from your dictionary words
35 |
36 | * **DictPercent: Percentage of Dictionary Words**
37 | * Total percent of your text that was captured by the loaded dictionary
38 |
39 | * **[CategoryName]_CWR: Concept-Word Ratio**
40 | * This the the number of unique concepts (e.g., happiness, joy, wonderment) from any given category (e.g., positive affect), divided by word count. This is the critical measure used in our publication. An example of how this measure would be calculated:
41 | 
42 |
43 | * **[CategoryName]_CCR: Concept-Category Ratio**
44 | * This is the total number of concepts for the category divided by the total number of times the category was invoked in a given text. For example, the concepts "happy, joy, wonderful" gives the positive emotion CCR score 100% (3/3). The concepts "happy, happy, happy" result in a positive CCR score of 33% (1 unique concept divided by 3 invocations of the positive emotion category). Note that this score is vastly more sensitive to tiny perturbations than the CWR score.
45 |
46 | * **[CategoryName]_Count**
47 | * Number of words belonging to the specified category found within the text.
48 |
49 | * **[CategoryName]_Unique**
50 | * Number of unique words belonging to the category found within the text. Dividing this score by Word Count then multiplying by 100 results in the CWR score. Diving this word by the "Count" variable from the same category results in the CCR score.
51 |
--------------------------------------------------------------------------------
/Dictionary Files/2019-07-30 - AEV_Dict.csv:
--------------------------------------------------------------------------------
1 | Concepts,Neg,Pos,AnxFear,Anger,Sadness,NegUndiff
2 | afraid,X,,X,,,
3 | aggravat*,X,,,X,,
4 | agitat*,X,,,,,
5 | agony,X,,,,,
6 | alarm*,X,,X,,,
7 | alone,X,,,,X,
8 | anger|angr*,X,,,X,,
9 | anguish*,X,,,,X,
10 | annoy*,X,,,X,,
11 | anxi*,X,,X,,,
12 | apath*,X,,,,X,
13 | appall*,X,,X,X,,
14 | apprehens*,X,,X,,,
15 | asham*,X,,,,,
16 | ashame*,X,,,,,
17 | aversi*,X,,,,,
18 | bitter,X,,,,X,
19 | contempt,X,,,X,,
20 | crushed,X,,,,X,
21 | depress*,X,,,,X,
22 | despair,X,,,,X,
23 | desperate*,X,,,,,
24 | despis*,X,,,X,,
25 | devastat*,X,,,,X,
26 | disappoint*,X,,,,X,
27 | discourage*,X,,,,X,
28 | disgust,X,,,,,
29 | dishearten*,X,,,,X,
30 | disillusion*,X,,,,X,
31 | dislike|disliked|dislikes|disliking,X,,,,,
32 | dismay*,X,,,,X,
33 | dissatisf*,X,,,,X,
34 | distraught,X,,,,,
35 | disturb*,X,,,,,
36 | doom,X,,X,,X,
37 | dread*,X,,X,,,
38 | embarrass*,X,,,,,
39 | envy|envie*|envious,X,,,,,
40 | fear|feared|fearful|fearing|fears,X,,X,,,
41 | frantic,X,,X,,,
42 | fright,X,,X,,,
43 | frustrat*,X,,,X,,
44 | fury|furious,X,,,X,,
45 | gloom,X,,,,X,
46 | grief|griev*,X,,,,X,
47 | guilt*,X,,,,,
48 | hate|hated|hateful|hater|hates|hating|hatred,X,,,X,,
49 | heartbreak*|heartbroke*,X,,,,X,
50 | helpless,X,,,,X,
51 | homesick,X,,,,X,
52 | hopeless,X,,,,X,
53 | horror*|horrif*,X,,X,,,
54 | hostil*,X,,,X,,
55 | humiliat*,X,,,,,
56 | hurt,X,,,,,
57 | insecur*,X,,,,,
58 | intimidat*,X,,,,,
59 | irrita*,X,,,X,,
60 | jealous*,X,,,,,
61 | lone*,X,,,,X,
62 | longing,X,,,,X,
63 | loss,X,,,,X,
64 | mad|maddening|madder|maddest,X,,,X,,
65 | melanchol*,X,,,,X,
66 | miss,X,,,,X,
67 | mourn,X,,,,X,
68 | nervous,X,,X,,,
69 | offend|offence|offens*,X,,,X,,
70 | outrag*,X,,,X,,
71 | panic,X,,X,,,
72 | paranoi*,X,,X,,,
73 | petrif*,X,,X,,,
74 | phobi*,X,,X,,,
75 | pity,X,,,,,
76 | rage,X,,,X,,
77 | regret*,X,,,,X,
78 | reluctan*,X,,,,,
79 | remorse*,X,,,,X,
80 | resent*,X,,,X,,
81 | restless,X,,,,,
82 | sad|sadde*|sadly|sadness,X,,,,X,
83 | scared|scare|scaring|scary,X,,X,,,
84 | shock*,X,,,,,
85 | solemn*,X,,,,X,
86 | sorrow,X,,,,X,
87 | startl*,X,,X,,,
88 | stunned,X,,,,,
89 | terror|terrifies|terrified|terrify*,X,,X,,,
90 | turmoil,X,,,,,
91 | unhapp*,X,,,,X,
92 | unlov*,X,,,,X,
93 | woe*,X,,,,X,
94 | worr*,X,,X,,,
95 | yearn*,X,,,,X,
96 | awful,,,,,,X
97 | bad,,,,,,X
98 | crap|crappy*,,,,,,X
99 | craz*,,,,,,X
100 | distress*,,,,,,X
101 | emotional,,,,,,X
102 | horribl*,,,,,,X
103 | numb|numbed|numbs|numbing|numbly|numbness*,,,,,,X
104 | overwhelm*,,,,,,X
105 | rotten,,,,,,X
106 | stress*,,,,,,X
107 | sucky,,,,,,X
108 | terribl*,,,,,,X
109 | unpleasant,,,,,,X
110 | upset*,,,,,,X
111 | admir*,,X,,,,
112 | ador*,,X,,,,
113 | affection*,,X,,,,
114 | amor*,,X,,,,
115 | amus*,,X,,,,
116 | appreciat*,,X,,,,
117 | cheer|cheery|cheeriness*|cheerily|cheerful*,,X,,,,
118 | cherish*,,X,,,,
119 | compassion*,,X,,,,
120 | confident*|confidence,,X,,,,
121 | content|contented*|contentment,,X,,,,
122 | curious*,,X,,,,
123 | delight*,,X,,,,
124 | eager*,,X,,,,
125 | ecsta*,,X,,,,
126 | elated*|elation,,X,,,,
127 | enjoy*,,X,,,,
128 | enraptur*,,X,,,,
129 | entertain*,,X,,,,
130 | enthrall*,,X,,,,
131 | enthus*,,X,,,,
132 | euphori*,,X,,,,
133 | excit*,,X,,,,
134 | exhil*,,X,,,,
135 | fond|fondly|fondness*,,X,,,,
136 | glad|gladly|gladness*,,X,,,,
137 | glee|gleeful*,,X,,,,
138 | gratef*|gratitude*,,X,,,,
139 | happy|happi*,,X,,,,
140 | hope|hopeful*|hopefulness,,X,,,,
141 | inspired*,,X,,,,
142 | interest*,,X,,,,
143 | joll*,,X,,,,
144 | joy*,,X,,,,
145 | keen*,,X,,,,
146 | love|loved|loves|loving*,,X,,,,
147 | merr*,,X,,,,
148 | optimis*,,X,,,,
149 | passion*,,X,,,,
150 | peace*,,X,,,,
151 | pleased|pleasant*|pleasur*,,X,,,,
152 | proud*|pride*,,X,,,,
153 | relief|reliev*,,X,,,,
154 | resolv*,,X,,,,
155 | satisf*,,X,,,,
156 | secur*,,X,,,,
157 | serene|serenit*,,X,,,,
158 | surpris*,,X,,,,
159 | thankf*,,X,,,,
160 | thrill*,,X,,,,
161 | tranquil*,,X,,,,
162 | triumph*,,X,,,,
163 | vigor|revigor*|invigor*|vigour,,X,,,,
164 |
--------------------------------------------------------------------------------
/VocabulateSrc/_TwitterAwareTokenizerNET.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Text.RegularExpressions;
4 |
5 | namespace nltk.tokenize.casual.NET
6 | {
7 |
8 |
9 | public class TwitterAwareTokenizer
10 | {
11 |
12 |
13 | private string URLS { get; set; } = @"(?:https?:(?:/{1,3}|[a-z0-9%])|[a-z0-9.\-]+[.](?:[a-z]{2,13})/)(?:[^\s()<>{}\[\]]+|\([^\s()]*?\([^\s()]+\)[^\s()]*?\)|\([^\s]+?\))+(?:\([^\s()]*?\([^\s()]+\)[^\s()]*?\)|\([^\s]+?\)|[^\s`!()\[\]{};:'"".,<>?«»“”‘’])|(?:[a-z0-9]+(?:[.\-][a-z0-9]+)*[.](?:[a-z]{2,13})\b/?(?!@))";
14 | private string EMOTICONS { get; set; } = @"(?:[<>]?[:;=8][\-o\*\']?[\)\]\(\[dDpP/\:\}\{@\|\\]|[\)\]\(\[dDpP/\:\}\{@\|\\][\-o\*\']?[:;=8][<>]?|<3)";
15 | private string PHONENUMBERS { get; set; } = @"(?:(?:\+?[01][*\-.\)]*)?(?:[\(]?\d{3}[*\-.\)]*)?\d{3}[*\-.\)]*\d{4})";
16 | private string HTMLTAGS { get; set; } = @"<[^>\s]+>";
17 | private string ASCII_ARROWS { get; set; } = @"[\-]+>|<[\-]+";
18 | private string TWITTER_USERNAMES { get; set; } = @"(?:@[\w_]+)";
19 | private string TWITTER_HASHTAG { get; set; } = @"(?:\#+[\w_]+[\w\'_\-]*[\w_]+)";
20 | private string EMAIL { get; set; } = @"[\w.+-]+@[\w-]+\.(?:[\w-]\.?)+[\w-]";
21 | private string REMAINING_WORD_TYPES { get; set; } = @"(?:[^\W\d_](?:[^\W\d_]|['\-_])+[^\W\d_])|(?:[+\-]?\d+[,/.:-]\d+[+\-]?)|(?:[\w_]+)|(?:\.(?:\s*\.){1,})|(?:\S)";
22 |
23 |
24 | private Regex WORD_RE;
25 | public Regex WORD_RE_ACCESS
26 | {
27 | get { return WORD_RE; }
28 | set { WORD_RE = value; }
29 |
30 | }
31 |
32 | private Regex HANG_RE { get; set; } = new Regex(@"([^a-zA-Z0-9])\1{3,}", RegexOptions.Compiled);
33 | private Regex EMOTICON_RE { get; set; }
34 | private Regex ENT_RE { get; set; } = new Regex(@"&(#?(x?))([^&;\s]+);");
35 |
36 | private Regex Reduce_Lengthening_Regex { get; set; } = new Regex(@"(.)\1{2,}", RegexOptions.Compiled);
37 |
38 |
39 | public void Initialize_Regex()
40 | {
41 | List All_Regex_List = new List();
42 | All_Regex_List.Add(URLS);
43 | All_Regex_List.Add(PHONENUMBERS);
44 | All_Regex_List.Add(EMOTICONS);
45 | All_Regex_List.Add(HTMLTAGS);
46 | All_Regex_List.Add(ASCII_ARROWS);
47 | All_Regex_List.Add(TWITTER_USERNAMES);
48 | All_Regex_List.Add(TWITTER_HASHTAG);
49 | All_Regex_List.Add(EMAIL);
50 | All_Regex_List.Add(REMAINING_WORD_TYPES);
51 |
52 | string[] AllRegexArray = All_Regex_List.ToArray();
53 |
54 | this.WORD_RE_ACCESS = new Regex(String.Join("|", AllRegexArray), RegexOptions.Compiled | RegexOptions.IgnoreCase);
55 | EMOTICON_RE = new Regex(EMOTICONS, RegexOptions.IgnoreCase);
56 |
57 | }
58 |
59 | private string reduce_lengthening(string text)
60 | {
61 | return Reduce_Lengthening_Regex.Replace(text, @"$1$1$1");
62 | }
63 |
64 |
65 |
66 | public string[] tokenize(string text, bool reduce_lengthening = true, bool preserve_case = false)
67 | {
68 |
69 | if (reduce_lengthening) text = this.reduce_lengthening(text);
70 |
71 | string safe_text = HANG_RE.Replace(text, @"$1$1$1");
72 |
73 | MatchCollection mc = WORD_RE.Matches(safe_text);
74 |
75 | string[] words = new string[mc.Count];
76 |
77 | for (int i = 0; i < words.Length; i++) words[i] = mc[i].Groups[0].Value;
78 |
79 | if (preserve_case == false)
80 | {
81 | for (uint i = 0; i < words.Length; i++)
82 | {
83 | if (EMOTICON_RE.Matches(words[i]).Count == 0)
84 | {
85 | words[i] = words[i].ToLower();
86 | }
87 | }
88 | }
89 |
90 | return words;
91 | }
92 |
93 |
94 | public string[] TokenizeWhitespace(string text)
95 | {
96 |
97 | return text.Trim().Split(new char[0], options: StringSplitOptions.RemoveEmptyEntries);
98 |
99 | }
100 |
101 |
102 |
103 |
104 | }
105 |
106 |
107 | }
108 |
109 |
--------------------------------------------------------------------------------
/VocabulateSrc/Splash.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace Vocabulate
2 | {
3 | partial class Splash
4 | {
5 | ///
6 | /// Required designer variable.
7 | ///
8 | private System.ComponentModel.IContainer components = null;
9 |
10 | ///
11 | /// Clean up any resources being used.
12 | ///
13 | /// true if managed resources should be disposed; otherwise, false.
14 | protected override void Dispose(bool disposing)
15 | {
16 | if (disposing && (components != null))
17 | {
18 | components.Dispose();
19 | }
20 | base.Dispose(disposing);
21 | }
22 |
23 | #region Windows Form Designer generated code
24 |
25 | ///
26 | /// Required method for Designer support - do not modify
27 | /// the contents of this method with the code editor.
28 | ///
29 | private void InitializeComponent()
30 | {
31 | this.components = new System.ComponentModel.Container();
32 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Splash));
33 | this.pictureBox1 = new System.Windows.Forms.PictureBox();
34 | this.label1 = new System.Windows.Forms.Label();
35 | this.label2 = new System.Windows.Forms.Label();
36 | this.timer1 = new System.Windows.Forms.Timer(this.components);
37 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
38 | this.SuspendLayout();
39 | //
40 | // pictureBox1
41 | //
42 | this.pictureBox1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None;
43 | this.pictureBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
44 | this.pictureBox1.ErrorImage = global::Vocabulate.Properties.Resources._1872_Expression_F1142_fig18;
45 | this.pictureBox1.Image = global::Vocabulate.Properties.Resources._1872_Expression_F1142_fig18;
46 | this.pictureBox1.Location = new System.Drawing.Point(28, 12);
47 | this.pictureBox1.Name = "pictureBox1";
48 | this.pictureBox1.Size = new System.Drawing.Size(344, 316);
49 | this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
50 | this.pictureBox1.TabIndex = 0;
51 | this.pictureBox1.TabStop = false;
52 | this.pictureBox1.UseWaitCursor = true;
53 | //
54 | // label1
55 | //
56 | this.label1.AutoSize = true;
57 | this.label1.BackColor = System.Drawing.Color.Transparent;
58 | this.label1.Font = new System.Drawing.Font("Calibri", 15.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
59 | this.label1.Location = new System.Drawing.Point(121, 337);
60 | this.label1.Name = "label1";
61 | this.label1.Size = new System.Drawing.Size(162, 26);
62 | this.label1.TabIndex = 1;
63 | this.label1.Text = "Vocabulate v0.91";
64 | this.label1.UseWaitCursor = true;
65 | //
66 | // label2
67 | //
68 | this.label2.AutoSize = true;
69 | this.label2.Font = new System.Drawing.Font("Calibri", 9.75F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic))), System.Drawing.GraphicsUnit.Point, ((byte)(0)));
70 | this.label2.Location = new System.Drawing.Point(139, 367);
71 | this.label2.Name = "label2";
72 | this.label2.Size = new System.Drawing.Size(126, 15);
73 | this.label2.TabIndex = 2;
74 | this.label2.Text = "by Ryan L. Boyd, Ph.D.";
75 | this.label2.UseWaitCursor = true;
76 | //
77 | // timer1
78 | //
79 | this.timer1.Enabled = true;
80 | this.timer1.Interval = 3000;
81 | this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
82 | //
83 | // Splash
84 | //
85 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
86 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
87 | this.BackColor = System.Drawing.Color.CadetBlue;
88 | this.ClientSize = new System.Drawing.Size(400, 400);
89 | this.ControlBox = false;
90 | this.Controls.Add(this.label2);
91 | this.Controls.Add(this.label1);
92 | this.Controls.Add(this.pictureBox1);
93 | this.DoubleBuffered = true;
94 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
95 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
96 | this.ImeMode = System.Windows.Forms.ImeMode.Off;
97 | this.MaximizeBox = false;
98 | this.MaximumSize = new System.Drawing.Size(400, 400);
99 | this.MinimizeBox = false;
100 | this.MinimumSize = new System.Drawing.Size(400, 400);
101 | this.Name = "Splash";
102 | this.ShowIcon = false;
103 | this.ShowInTaskbar = false;
104 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
105 | this.Text = "Splash";
106 | this.UseWaitCursor = true;
107 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
108 | this.ResumeLayout(false);
109 | this.PerformLayout();
110 |
111 | }
112 |
113 | #endregion
114 |
115 | private System.Windows.Forms.PictureBox pictureBox1;
116 | private System.Windows.Forms.Label label1;
117 | private System.Windows.Forms.Label label2;
118 | private System.Windows.Forms.Timer timer1;
119 | }
120 | }
--------------------------------------------------------------------------------
/VocabulateSrc/Vocabulate.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | AnyCPU
7 | {FD197B2D-2C43-46CA-8910-E9BCF51EEAA4}
8 | WinExe
9 | Properties
10 | Vocabulate
11 | Vocabulate
12 | v4.6.2
13 | 512
14 | true
15 |
16 | publish\
17 | true
18 | Disk
19 | false
20 | Foreground
21 | 7
22 | Days
23 | false
24 | false
25 | true
26 | 0
27 | 1.0.0.%2a
28 | false
29 | false
30 | true
31 |
32 |
33 | AnyCPU
34 | true
35 | full
36 | false
37 | bin\Debug\
38 | DEBUG;TRACE
39 | prompt
40 | 4
41 | false
42 |
43 |
44 | AnyCPU
45 | pdbonly
46 | true
47 | bin\Release\
48 | TRACE
49 | prompt
50 | 4
51 | false
52 |
53 |
54 | VocabulateApplication.Program
55 |
56 |
57 | Resources\vocab.ico
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 | Form
80 |
81 |
82 | MainForm.cs
83 |
84 |
85 |
86 |
87 | True
88 | True
89 | Resources.resx
90 |
91 |
92 | Form
93 |
94 |
95 | Splash.cs
96 |
97 |
98 |
99 |
100 | MainForm.cs
101 |
102 |
103 | ResXFileCodeGenerator
104 | Designer
105 | Resources.Designer.cs
106 |
107 |
108 | Splash.cs
109 |
110 |
111 | SettingsSingleFileGenerator
112 | Settings.Designer.cs
113 |
114 |
115 | True
116 | Settings.settings
117 | True
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 | False
133 | Microsoft .NET Framework 4.6.1 %28x86 and x64%29
134 | true
135 |
136 |
137 | False
138 | .NET Framework 3.5 SP1
139 | false
140 |
141 |
142 |
143 |
150 |
--------------------------------------------------------------------------------
/VocabulateSrc/Properties/Resources.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
121 |
122 | ..\Resources\StopListCharacters.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8
123 |
124 |
125 | ..\Resources\StopListEN.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252
126 |
127 |
128 | ..\Resources\vocab.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
129 |
130 |
131 | ..\Resources\1872_Expression_F1142_fig18.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
132 |
133 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | ## Ignore Visual Studio temporary files, build results, and
2 | ## files generated by popular Visual Studio add-ons.
3 | ##
4 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
5 |
6 | # User-specific files
7 | *.rsuser
8 | *.suo
9 | *.user
10 | *.userosscache
11 | *.sln.docstates
12 |
13 | # User-specific files (MonoDevelop/Xamarin Studio)
14 | *.userprefs
15 |
16 | # Build results
17 | [Dd]ebug/
18 | [Dd]ebugPublic/
19 | [Rr]elease/
20 | [Rr]eleases/
21 | x64/
22 | x86/
23 | bld/
24 | [Bb]in/
25 | [Oo]bj/
26 | [Ll]og/
27 |
28 | # Visual Studio 2015/2017 cache/options directory
29 | .vs/
30 | # Uncomment if you have tasks that create the project's static files in wwwroot
31 | #wwwroot/
32 |
33 | # Visual Studio 2017 auto generated files
34 | Generated\ Files/
35 |
36 | # MSTest test Results
37 | [Tt]est[Rr]esult*/
38 | [Bb]uild[Ll]og.*
39 |
40 | # NUNIT
41 | *.VisualState.xml
42 | TestResult.xml
43 |
44 | # Build Results of an ATL Project
45 | [Dd]ebugPS/
46 | [Rr]eleasePS/
47 | dlldata.c
48 |
49 | # Benchmark Results
50 | BenchmarkDotNet.Artifacts/
51 |
52 | # .NET Core
53 | project.lock.json
54 | project.fragment.lock.json
55 | artifacts/
56 |
57 | # StyleCop
58 | StyleCopReport.xml
59 |
60 | # Files built by Visual Studio
61 | *_i.c
62 | *_p.c
63 | *_h.h
64 | *.ilk
65 | *.meta
66 | *.obj
67 | *.iobj
68 | *.pch
69 | *.pdb
70 | *.ipdb
71 | *.pgc
72 | *.pgd
73 | *.rsp
74 | *.sbr
75 | *.tlb
76 | *.tli
77 | *.tlh
78 | *.tmp
79 | *.tmp_proj
80 | *_wpftmp.csproj
81 | *.log
82 | *.vspscc
83 | *.vssscc
84 | .builds
85 | *.pidb
86 | *.svclog
87 | *.scc
88 |
89 | # Chutzpah Test files
90 | _Chutzpah*
91 |
92 | # Visual C++ cache files
93 | ipch/
94 | *.aps
95 | *.ncb
96 | *.opendb
97 | *.opensdf
98 | *.sdf
99 | *.cachefile
100 | *.VC.db
101 | *.VC.VC.opendb
102 |
103 | # Visual Studio profiler
104 | *.psess
105 | *.vsp
106 | *.vspx
107 | *.sap
108 |
109 | # Visual Studio Trace Files
110 | *.e2e
111 |
112 | # TFS 2012 Local Workspace
113 | $tf/
114 |
115 | # Guidance Automation Toolkit
116 | *.gpState
117 |
118 | # ReSharper is a .NET coding add-in
119 | _ReSharper*/
120 | *.[Rr]e[Ss]harper
121 | *.DotSettings.user
122 |
123 | # JustCode is a .NET coding add-in
124 | .JustCode
125 |
126 | # TeamCity is a build add-in
127 | _TeamCity*
128 |
129 | # DotCover is a Code Coverage Tool
130 | *.dotCover
131 |
132 | # AxoCover is a Code Coverage Tool
133 | .axoCover/*
134 | !.axoCover/settings.json
135 |
136 | # Visual Studio code coverage results
137 | *.coverage
138 | *.coveragexml
139 |
140 | # NCrunch
141 | _NCrunch_*
142 | .*crunch*.local.xml
143 | nCrunchTemp_*
144 |
145 | # MightyMoose
146 | *.mm.*
147 | AutoTest.Net/
148 |
149 | # Web workbench (sass)
150 | .sass-cache/
151 |
152 | # Installshield output folder
153 | [Ee]xpress/
154 |
155 | # DocProject is a documentation generator add-in
156 | DocProject/buildhelp/
157 | DocProject/Help/*.HxT
158 | DocProject/Help/*.HxC
159 | DocProject/Help/*.hhc
160 | DocProject/Help/*.hhk
161 | DocProject/Help/*.hhp
162 | DocProject/Help/Html2
163 | DocProject/Help/html
164 |
165 | # Click-Once directory
166 | publish/
167 |
168 | # Publish Web Output
169 | *.[Pp]ublish.xml
170 | *.azurePubxml
171 | # Note: Comment the next line if you want to checkin your web deploy settings,
172 | # but database connection strings (with potential passwords) will be unencrypted
173 | *.pubxml
174 | *.publishproj
175 |
176 | # Microsoft Azure Web App publish settings. Comment the next line if you want to
177 | # checkin your Azure Web App publish settings, but sensitive information contained
178 | # in these scripts will be unencrypted
179 | PublishScripts/
180 |
181 | # NuGet Packages
182 | *.nupkg
183 | # The packages folder can be ignored because of Package Restore
184 | **/[Pp]ackages/*
185 | # except build/, which is used as an MSBuild target.
186 | !**/[Pp]ackages/build/
187 | # Uncomment if necessary however generally it will be regenerated when needed
188 | #!**/[Pp]ackages/repositories.config
189 | # NuGet v3's project.json files produces more ignorable files
190 | *.nuget.props
191 | *.nuget.targets
192 |
193 | # Microsoft Azure Build Output
194 | csx/
195 | *.build.csdef
196 |
197 | # Microsoft Azure Emulator
198 | ecf/
199 | rcf/
200 |
201 | # Windows Store app package directories and files
202 | AppPackages/
203 | BundleArtifacts/
204 | Package.StoreAssociation.xml
205 | _pkginfo.txt
206 | *.appx
207 |
208 | # Visual Studio cache files
209 | # files ending in .cache can be ignored
210 | *.[Cc]ache
211 | # but keep track of directories ending in .cache
212 | !*.[Cc]ache/
213 |
214 | # Others
215 | ClientBin/
216 | ~$*
217 | *~
218 | *.dbmdl
219 | *.dbproj.schemaview
220 | *.jfm
221 | *.pfx
222 | *.publishsettings
223 | orleans.codegen.cs
224 |
225 | # Including strong name files can present a security risk
226 | # (https://github.com/github/gitignore/pull/2483#issue-259490424)
227 | #*.snk
228 |
229 | # Since there are multiple workflows, uncomment next line to ignore bower_components
230 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
231 | #bower_components/
232 |
233 | # RIA/Silverlight projects
234 | Generated_Code/
235 |
236 | # Backup & report files from converting an old project file
237 | # to a newer Visual Studio version. Backup files are not needed,
238 | # because we have git ;-)
239 | _UpgradeReport_Files/
240 | Backup*/
241 | UpgradeLog*.XML
242 | UpgradeLog*.htm
243 | ServiceFabricBackup/
244 | *.rptproj.bak
245 |
246 | # SQL Server files
247 | *.mdf
248 | *.ldf
249 | *.ndf
250 |
251 | # Business Intelligence projects
252 | *.rdl.data
253 | *.bim.layout
254 | *.bim_*.settings
255 | *.rptproj.rsuser
256 |
257 | # Microsoft Fakes
258 | FakesAssemblies/
259 |
260 | # GhostDoc plugin setting file
261 | *.GhostDoc.xml
262 |
263 | # Node.js Tools for Visual Studio
264 | .ntvs_analysis.dat
265 | node_modules/
266 |
267 | # Visual Studio 6 build log
268 | *.plg
269 |
270 | # Visual Studio 6 workspace options file
271 | *.opt
272 |
273 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
274 | *.vbw
275 |
276 | # Visual Studio LightSwitch build output
277 | **/*.HTMLClient/GeneratedArtifacts
278 | **/*.DesktopClient/GeneratedArtifacts
279 | **/*.DesktopClient/ModelManifest.xml
280 | **/*.Server/GeneratedArtifacts
281 | **/*.Server/ModelManifest.xml
282 | _Pvt_Extensions
283 |
284 | # Paket dependency manager
285 | .paket/paket.exe
286 | paket-files/
287 |
288 | # FAKE - F# Make
289 | .fake/
290 |
291 | # JetBrains Rider
292 | .idea/
293 | *.sln.iml
294 |
295 | # CodeRush personal settings
296 | .cr/personal
297 |
298 | # Python Tools for Visual Studio (PTVS)
299 | __pycache__/
300 | *.pyc
301 |
302 | # Cake - Uncomment if you are using it
303 | # tools/**
304 | # !tools/packages.config
305 |
306 | # Tabs Studio
307 | *.tss
308 |
309 | # Telerik's JustMock configuration file
310 | *.jmconfig
311 |
312 | # BizTalk build output
313 | *.btp.cs
314 | *.btm.cs
315 | *.odx.cs
316 | *.xsd.cs
317 |
318 | # OpenCover UI analysis results
319 | OpenCover/
320 |
321 | # Azure Stream Analytics local run output
322 | ASALocalRun/
323 |
324 | # MSBuild Binary and Structured Log
325 | *.binlog
326 |
327 | # NVidia Nsight GPU debugger configuration file
328 | *.nvuser
329 |
330 | # MFractors (Xamarin productivity tool) working folder
331 | .mfractor/
332 |
333 | # Local History for Visual Studio
334 | .localhistory/
335 |
336 | # Dictionaries Folder
337 | VocabulateInstaller/
--------------------------------------------------------------------------------
/VocabulateSrc/LoadDictionary.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text.RegularExpressions;
5 | using System.IO;
6 | using System.Windows.Forms;
7 |
8 |
9 |
10 | namespace Vocabulate
11 | {
12 | class LoadDictionary
13 | {
14 |
15 | public DictionaryData LoadDictionaryFile(DictionaryData DictData, string InputFile, System.Text.Encoding SelectedEncoding, char CSVDelimiter, char CSVQuote)
16 | {
17 |
18 |
19 | //parse out the the dictionary file
20 | DictData.MaxWords = 0;
21 |
22 | //yeah, there's levels to this thing
23 | DictData.FullDictionaryMap = new Dictionary>>();
24 |
25 | DictData.FullDictionaryMap.Add("Wildcards", new Dictionary>());
26 | DictData.FullDictionaryMap.Add("Standards", new Dictionary>());
27 |
28 | DictData.WildCardArrays = new Dictionary();
29 | DictData.PrecompiledWildcards = new Dictionary();
30 |
31 |
32 | Dictionary> WildCardLists = new Dictionary>();
33 |
34 | DictData.ConceptMap = new Dictionary();
35 |
36 |
37 |
38 |
39 |
40 |
41 | using (var stream = File.OpenRead(InputFile))
42 | using (var reader = new StreamReader(stream, encoding: SelectedEncoding))
43 | {
44 | var data = Votabulate.CsvParser.ParseHeadAndTail(reader, CSVDelimiter, CSVQuote);
45 |
46 | var header = data.Item1;
47 | var lines = data.Item2;
48 |
49 |
50 |
51 | // ____ _ _ ____ _ _ ____ _ ___ _ _ _
52 | // | _ \ ___ _ __ _ _| | __ _| |_ ___ | _ \(_) ___| |_| _ \ __ _| |_ __ _ / _ \| |__ (_) ___ ___| |_
53 | // | |_) / _ \| '_ \| | | | |/ _` | __/ _ \ | | | | |/ __| __| | | |/ _` | __/ _` | | | | | '_ \| |/ _ \/ __| __|
54 | // | __/ (_) | |_) | |_| | | (_| | || __/ | |_| | | (__| |_| |_| | (_| | || (_| | | |_| | |_) | | __/ (__| |_
55 | // |_| \___/| .__/ \__,_|_|\__,_|\__\___| |____/|_|\___|\__|____/ \__,_|\__\__,_| \___/|_.__// |\___|\___|\__|
56 | // |_| |__/
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 | DictData.NumCats = header.Count - 1;
66 |
67 | //now that we know the number of categories, we can fill out the arrays
68 | DictData.CatNames = new string[DictData.NumCats];
69 | //DictData.CatValues = new string[DictData.NumCats];
70 |
71 | DictData.CategoryOrder = new Dictionary();
72 | //Map Out the Categories
73 | for (int i = 1; i < DictData.NumCats + 1; i++)
74 | {
75 | DictData.CatNames[i-1] = header[i];
76 | DictData.CategoryOrder.Add(i-1, header[i]);
77 | }
78 |
79 |
80 | foreach (var lineobject in lines)
81 | {
82 | string[] line = (string[])lineobject.ToArray();
83 |
84 | string[] WordsInLine = line[0].Trim().Split('|');
85 |
86 | string Concept = WordsInLine[0];
87 |
88 | //set the new item into our conceptmap dictionary
89 | string[] CategoriesArray = line.Skip(1).Take(line.Length - 1).ToArray();
90 |
91 |
92 | DictData.ConceptMap.Add(WordsInLine[0], new string[] { });
93 |
94 | //fill out the list of concepts associated with each word
95 | for (int i = 0; i < CategoriesArray.Length; i++)
96 | {
97 |
98 | if (!String.IsNullOrWhiteSpace(CategoriesArray[i].Trim()))
99 | {
100 | var obj = DictData.ConceptMap[Concept];
101 | Array.Resize(ref obj, obj.Length + 1);
102 | DictData.ConceptMap[Concept] = obj;
103 | DictData.ConceptMap[Concept][obj.Length - 1] = DictData.CatNames[i];
104 | }
105 | }
106 |
107 | //now we add the actual entries for each word in the row into our FullDictionary
108 | foreach (string WordToCode in WordsInLine)
109 | {
110 | string WordToCodeTrimmed = WordToCode.Trim();
111 |
112 | int Words_In_Entry = WordToCodeTrimmed.Split(' ').Length;
113 | if (Words_In_Entry > DictData.MaxWords) DictData.MaxWords = Words_In_Entry;
114 |
115 |
116 | if (WordToCodeTrimmed.Contains("*"))
117 | {
118 |
119 | if (DictData.FullDictionaryMap["Wildcards"].ContainsKey(Words_In_Entry))
120 | {
121 | DictData.FullDictionaryMap["Wildcards"][Words_In_Entry].Add(WordToCodeTrimmed.ToLower(), Concept);
122 | WildCardLists[Words_In_Entry].Add(WordToCodeTrimmed);
123 | }
124 | else
125 | {
126 | DictData.FullDictionaryMap["Wildcards"].Add(Words_In_Entry, new Dictionary { { WordToCodeTrimmed.ToLower(), Concept } });
127 | WildCardLists.Add(Words_In_Entry, new List());
128 | WildCardLists[Words_In_Entry].Add(WordToCodeTrimmed);
129 |
130 | }
131 |
132 |
133 | DictData.PrecompiledWildcards.Add(WordToCodeTrimmed.ToLower(), new Regex("^" + Regex.Escape(WordToCodeTrimmed.ToLower()).Replace("\\*", ".*"), RegexOptions.Compiled));
134 |
135 | }
136 | else
137 | {
138 | if (DictData.FullDictionaryMap["Standards"].ContainsKey(Words_In_Entry))
139 | {
140 | DictData.FullDictionaryMap["Standards"][Words_In_Entry].Add(WordToCodeTrimmed.ToLower(), Concept);
141 | }
142 | else
143 | {
144 | DictData.FullDictionaryMap["Standards"].Add(Words_In_Entry, new Dictionary { { WordToCodeTrimmed.ToLower(), Concept } });
145 | }
146 |
147 | }
148 |
149 | }
150 |
151 |
152 | }
153 |
154 | for (int i = DictData.MaxWords; i > 0; i--)
155 | {
156 | if (WildCardLists.ContainsKey(i)) DictData.WildCardArrays.Add(i, WildCardLists[i].ToArray());
157 | }
158 | WildCardLists.Clear();
159 | DictData.DictionaryLoaded = true;
160 |
161 |
162 | }
163 |
164 |
165 | return DictData;
166 |
167 |
168 | }
169 |
170 |
171 | }
172 | }
173 |
--------------------------------------------------------------------------------
/VocabulateSrc/Properties/Resources.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // This code was generated by a tool.
4 | // Runtime Version:4.0.30319.42000
5 | //
6 | // Changes to this file may cause incorrect behavior and will be lost if
7 | // the code is regenerated.
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace Vocabulate.Properties {
12 | using System;
13 |
14 |
15 | ///
16 | /// A strongly-typed resource class, for looking up localized strings, etc.
17 | ///
18 | // This class was auto-generated by the StronglyTypedResourceBuilder
19 | // class via a tool like ResGen or Visual Studio.
20 | // To add or remove a member, edit your .ResX file then rerun ResGen
21 | // with the /str option, or rebuild your VS project.
22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")]
23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
25 | internal class Resources {
26 |
27 | private static global::System.Resources.ResourceManager resourceMan;
28 |
29 | private static global::System.Globalization.CultureInfo resourceCulture;
30 |
31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
32 | internal Resources() {
33 | }
34 |
35 | ///
36 | /// Returns the cached ResourceManager instance used by this class.
37 | ///
38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
39 | internal static global::System.Resources.ResourceManager ResourceManager {
40 | get {
41 | if (object.ReferenceEquals(resourceMan, null)) {
42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Vocabulate.Properties.Resources", typeof(Resources).Assembly);
43 | resourceMan = temp;
44 | }
45 | return resourceMan;
46 | }
47 | }
48 |
49 | ///
50 | /// Overrides the current thread's CurrentUICulture property for all
51 | /// resource lookups using this strongly typed resource class.
52 | ///
53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
54 | internal static global::System.Globalization.CultureInfo Culture {
55 | get {
56 | return resourceCulture;
57 | }
58 | set {
59 | resourceCulture = value;
60 | }
61 | }
62 |
63 | ///
64 | /// Looks up a localized resource of type System.Drawing.Bitmap.
65 | ///
66 | internal static System.Drawing.Bitmap _1872_Expression_F1142_fig18 {
67 | get {
68 | object obj = ResourceManager.GetObject("_1872_Expression_F1142_fig18", resourceCulture);
69 | return ((System.Drawing.Bitmap)(obj));
70 | }
71 | }
72 |
73 | ///
74 | /// Looks up a localized string similar to `
75 | ///~
76 | ///!
77 | ///@
78 | ///#
79 | ///$
80 | ///%
81 | ///^
82 | ///&
83 | ///*
84 | ///(
85 | ///)
86 | ///_
87 | ///+
88 | ///-
89 | ///=
90 | ///[
91 | ///]
92 | ///\
93 | ///;
94 | ///'
95 | ///,
96 | ///.
97 | ////
98 | ///{
99 | ///}
100 | ///|
101 | ///:
102 | ///"
103 | ///<
104 | ///>
105 | ///?
106 | ///..
107 | ///...
108 | ///«
109 | ///««
110 | ///»»
111 | ///“
112 | ///”
113 | ///‘
114 | ///‘‘
115 | ///’
116 | ///’’
117 | ///1
118 | ///2
119 | ///3
120 | ///4
121 | ///5
122 | ///6
123 | ///7
124 | ///8
125 | ///9
126 | ///0
127 | ///10
128 | ///11
129 | ///12
130 | ///13
131 | ///14
132 | ///15
133 | ///16
134 | ///17
135 | ///18
136 | ///19
137 | ///20
138 | ///25
139 | ///30
140 | ///33
141 | ///40
142 | ///50
143 | ///60
144 | ///66
145 | ///70
146 | ///75
147 | ///80
148 | ///90
149 | ///99
150 | ///100
151 | ///123
152 | ///1000
153 | ///10000
154 | ///12345
155 | ///100000
156 | ///1000000.
157 | ///
158 | internal static string StopListCharacters {
159 | get {
160 | return ResourceManager.GetString("StopListCharacters", resourceCulture);
161 | }
162 | }
163 |
164 | ///
165 | /// Looks up a localized string similar to a
166 | ///about
167 | ///above
168 | ///absolutely
169 | ///across
170 | ///actually
171 | ///after
172 | ///again
173 | ///against
174 | ///ahead
175 | ///aint
176 | ///ain't
177 | ///all
178 | ///allot
179 | ///along
180 | ///alot
181 | ///also
182 | ///although
183 | ///am
184 | ///among
185 | ///amongst
186 | ///an
187 | ///and
188 | ///another
189 | ///any
190 | ///anybodies
191 | ///anybody
192 | ///anybody's
193 | ///anymore
194 | ///anyone
195 | ///anyone's
196 | ///anything
197 | ///anyway
198 | ///anyways
199 | ///anywhere
200 | ///apparently
201 | ///are
202 | ///arent
203 | ///aren't
204 | ///around
205 | ///as
206 | ///at
207 | ///atho
208 | ///atop
209 | ///away
210 | ///back
211 | ///basically
212 | ///be
213 | ///became
214 | ///because
215 | ///become
216 | ///becomes
217 | ///becoming
218 | ///been
219 | ///before
220 | ///behind
221 | ///being
222 | ///below
223 | ///beneath
224 | ///beside
225 | ///besides
226 | ///best
227 | ///between
228 | ///beyond
229 | ///billion
230 | ///billions
231 | ///billiont [rest of string was truncated]";.
232 | ///
233 | internal static string StopListEN {
234 | get {
235 | return ResourceManager.GetString("StopListEN", resourceCulture);
236 | }
237 | }
238 |
239 | ///
240 | /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
241 | ///
242 | internal static System.Drawing.Icon vocab {
243 | get {
244 | object obj = ResourceManager.GetObject("vocab", resourceCulture);
245 | return ((System.Drawing.Icon)(obj));
246 | }
247 | }
248 | }
249 | }
250 |
--------------------------------------------------------------------------------
/VocabulateSrc/Resources/StopListEN.txt:
--------------------------------------------------------------------------------
1 | a
2 | about
3 | above
4 | absolutely
5 | across
6 | actually
7 | after
8 | again
9 | against
10 | ahead
11 | aint
12 | ain't
13 | all
14 | allot
15 | along
16 | alot
17 | also
18 | although
19 | am
20 | among
21 | amongst
22 | an
23 | and
24 | another
25 | any
26 | anybodies
27 | anybody
28 | anybody's
29 | anymore
30 | anyone
31 | anyone's
32 | anything
33 | anyway
34 | anyways
35 | anywhere
36 | apparently
37 | are
38 | arent
39 | aren't
40 | around
41 | as
42 | at
43 | atho
44 | atop
45 | away
46 | back
47 | basically
48 | be
49 | became
50 | because
51 | become
52 | becomes
53 | becoming
54 | been
55 | before
56 | behind
57 | being
58 | below
59 | beneath
60 | beside
61 | besides
62 | best
63 | between
64 | beyond
65 | billion
66 | billions
67 | billionth
68 | billionths
69 | both
70 | bunch
71 | but
72 | by
73 | can
74 | cannot
75 | cant
76 | can't
77 | cetera
78 | clearly
79 | completely
80 | constantly
81 | could
82 | couldnt
83 | couldn't
84 | couldve
85 | could've
86 | couple
87 | cuz
88 | definitely
89 | despite
90 | did
91 | didnt
92 | didn't
93 | difference
94 | differences
95 | do
96 | does
97 | doesnt
98 | doesn't
99 | doing
100 | done
101 | dont
102 | don't
103 | double
104 | doubled
105 | doubles
106 | doubling
107 | doubly
108 | down
109 | dozen
110 | dozens
111 | dozenth
112 | during
113 | each
114 | eight
115 | eighteen
116 | eighteenfold
117 | eighteens
118 | eighteenth
119 | eighteenths
120 | eightfold
121 | eighth
122 | eighthly
123 | eighths
124 | eighties
125 | eightieth
126 | eightieths
127 | eights
128 | eighty
129 | eightyeight
130 | eightyfold
131 | eightysix
132 | either
133 | eleven
134 | else
135 | enough
136 | entire
137 | entirely
138 | entireness
139 | entireties
140 | entirety
141 | equal
142 | equaled
143 | equaling
144 | equally
145 | equals
146 | especially
147 | etc
148 | even
149 | eventually
150 | ever
151 | every
152 | everybody
153 | everybody's
154 | everyone
155 | everyone's
156 | everything
157 | everything's
158 | except
159 | extent
160 | extra
161 | extremely
162 | fairly
163 | few
164 | fewer
165 | fewest
166 | fewness
167 | fifteen
168 | fifteenfold
169 | fifteens
170 | fifteenth
171 | fifteenths
172 | fifth
173 | fifthly
174 | fifths
175 | fifties
176 | fiftieth
177 | fiftieths
178 | fifty
179 | fiftyfold
180 | fiftyfour
181 | fiftyish
182 | fiftyone
183 | first
184 | firstly
185 | firsts
186 | five
187 | for
188 | form
189 | four
190 | fours
191 | fourscore
192 | fourscorth
193 | foursomes
194 | fourteen
195 | fourteenfold
196 | fourteens
197 | fourteenth
198 | fourteenths
199 | fourth
200 | fourthly
201 | fourths
202 | fourtyfour
203 | fourty-four
204 | frequently
205 | from
206 | full
207 | fullblown
208 | fuller
209 | fullest
210 | fullness
211 | fully
212 | generally
213 | greater
214 | greatest
215 | had
216 | hadnt
217 | hadn't
218 | half
219 | has
220 | hasnt
221 | hasn't
222 | have
223 | havent
224 | haven't
225 | having
226 | he
227 | hed
228 | he'd
229 | her
230 | here
231 | heres
232 | here's
233 | hers
234 | herself
235 | hes
236 | he's
237 | highly
238 | him
239 | himself
240 | his
241 | hopefully
242 | how
243 | however
244 | hundred
245 | hundredfold
246 | hundreds
247 | hundredth
248 | hundredths
249 | i
250 | id
251 | i'd
252 | if
253 | i'll
254 | im
255 | i'm
256 | i'm
257 | immediately
258 | in
259 | infinite
260 | infinitely
261 | infiniteness
262 | infinitesimal
263 | infinitesimally
264 | infinitesimals
265 | infinities
266 | infinitival
267 | infinitive
268 | infinitives
269 | infinitude
270 | infinity
271 | inside
272 | insides
273 | instead
274 | into
275 | is
276 | isnt
277 | isn't
278 | it
279 | itd
280 | it'd
281 | item
282 | items
283 | itemset
284 | itemsets
285 | itll
286 | it'll
287 | its
288 | it's
289 | itself
290 | ive
291 | i've
292 | i've
293 | just
294 | lack
295 | lacked
296 | lacking
297 | lacks
298 | lately
299 | least
300 | less
301 | let
302 | lets
303 | let's
304 | loads
305 | lot
306 | lotof
307 | lots
308 | lotsa
309 | lotta
310 | main
311 | majority
312 | many
313 | may
314 | maybe
315 | me
316 | might
317 | mightve
318 | might've
319 | millionfold
320 | millions
321 | millionth
322 | millionths
323 | mine
324 | more
325 | most
326 | mostly
327 | much
328 | mucho
329 | must
330 | mustnt
331 | mustn't
332 | must'nt
333 | mustve
334 | must've
335 | my
336 | myself
337 | near
338 | nearly
339 | neednt
340 | needn't
341 | need'nt
342 | negate
343 | negated
344 | negates
345 | negating
346 | negative
347 | negativeness
348 | negatory
349 | neither
350 | never
351 | nine
352 | ninefold
353 | nines
354 | nineteen
355 | nineteenfold
356 | nineteens
357 | nineteenth
358 | nineteenthly
359 | nineteenths
360 | nineties
361 | ninetieth
362 | ninetieths
363 | ninety
364 | ninetyfold
365 | ninetyish
366 | ninetysix
367 | no
368 | nobodies
369 | nobody
370 | nobody's
371 | none
372 | nope
373 | nor
374 | not
375 | nothing
376 | now
377 | nowhere
378 | of
379 | off
380 | often
381 | on
382 | once
383 | one
384 | ones
385 | oneself
386 | only
387 | onto
388 | or
389 | other
390 | others
391 | otherwise
392 | ought
393 | oughta
394 | oughtnt
395 | oughtn't
396 | ought'nt
397 | oughtve
398 | ought've
399 | our
400 | ours
401 | ourselves
402 | out
403 | outside
404 | over
405 | own
406 | part
407 | partly
408 | perhaps
409 | piece
410 | pieced
411 | pieces
412 | piecing
413 | plenty
414 | plus
415 | primarily
416 | probably
417 | quarter
418 | quartered
419 | quartering
420 | quarters
421 | quick
422 | quicken
423 | quickened
424 | quickening
425 | quickenings
426 | quickens
427 | quicker
428 | quickest
429 | quicklier
430 | quickliest
431 | quickly
432 | quickness
433 | rarely
434 | rather
435 | really
436 | remaining
437 | rest
438 | same
439 | second
440 | section
441 | seriously
442 | seven
443 | sevenfold
444 | sevenfolded
445 | sevens
446 | seventeen
447 | seventeenfold
448 | seventeens
449 | seventeenth
450 | seventeenths
451 | seventh
452 | sevenths
453 | seventies
454 | seventieth
455 | seventieths
456 | seventy
457 | seventyeight
458 | seventyfifth
459 | seventyfive
460 | seventyfold
461 | seventyfour
462 | seventynine
463 | seventyone
464 | seventyseven
465 | seventysix
466 | seventythree
467 | seventytwo
468 | several
469 | shall
470 | shant
471 | shan't
472 | she
473 | she'd
474 | she'll
475 | shes
476 | she's
477 | should
478 | shouldnt
479 | shouldn't
480 | should'nt
481 | shouldve
482 | should've
483 | simply
484 | since
485 | single
486 | singled
487 | singleness
488 | singles
489 | singly
490 | six
491 | sixes
492 | sixfold
493 | sixteen
494 | sixteenfold
495 | sixteens
496 | sixteenth
497 | sixteenths
498 | sixth
499 | sixthly
500 | sixths
501 | sixties
502 | sixtieth
503 | sixtieths
504 | sixty
505 | sixtyeight
506 | sixtyeighth
507 | sixtyfifth
508 | sixtyfirst
509 | sixtyfive
510 | sixtyfold
511 | sixtyfour
512 | sixtyfourth
513 | sixtyish
514 | sixtyninth
515 | sixtyone
516 | sixtysecond
517 | sixtyseven
518 | sixtyseventh
519 | sixtysix
520 | sixtysixth
521 | sixtythird
522 | sixtythree
523 | sixtytwo
524 | so
525 | some
526 | somebodies
527 | somebody
528 | somebody's
529 | somehow
530 | someone
531 | someones
532 | someone's
533 | something
534 | somethings
535 | something's
536 | somewhat
537 | somewhere
538 | soon
539 | still
540 | stuff
541 | such
542 | ten
543 | tenth
544 | than
545 | that
546 | thatd
547 | that'd
548 | thatll
549 | that'll
550 | thats
551 | that's
552 | the
553 | thee
554 | their
555 | theirs
556 | them
557 | themselves
558 | then
559 | there
560 | theres
561 | there's
562 | these
563 | they
564 | theyd
565 | they'd
566 | theyll
567 | they'll
568 | theyre
569 | they're
570 | theyve
571 | they've
572 | thine
573 | thing
574 | thingamabob
575 | thingamabobs
576 | thingamajig
577 | thingamajigs
578 | things
579 | thingumabob
580 | thingumabobs
581 | thingumajig
582 | thingumajigs
583 | thingummies
584 | thingummy
585 | thingy
586 | third
587 | thirteen
588 | thirteenfold
589 | thirteens
590 | thirteenth
591 | thirteenthly
592 | thirteenths
593 | thirties
594 | thirtieth
595 | thirtieths
596 | thirty
597 | thirtyfive
598 | thirtyfold
599 | thirtyish
600 | thirtynine
601 | thirtysomething
602 | thirtythree
603 | this
604 | tho
605 | those
606 | thou
607 | though
608 | thousand
609 | thousandfold
610 | thousands
611 | thousand's
612 | thousandth
613 | thousandths
614 | thoust
615 | three
616 | through
617 | throughly
618 | throughs
619 | thru
620 | thy
621 | til
622 | till
623 | to
624 | ton
625 | tons
626 | too
627 | total
628 | totally
629 | toward
630 | towards
631 | trillion
632 | trillionaire
633 | trillionaires
634 | trillions
635 | trillionth
636 | trillionths
637 | triple
638 | tripled
639 | triples
640 | triplet
641 | triplets
642 | triplicate
643 | triplicated
644 | triplicates
645 | triplicating
646 | triplication
647 | triplications
648 | tripling
649 | triply
650 | truly
651 | twelfth
652 | twelfthly
653 | twelfths
654 | twelve
655 | twelvefold
656 | twelves
657 | twenties
658 | twentieth
659 | twentieths
660 | twenty
661 | twentyeight
662 | twentyfifth
663 | twentyfirst
664 | twentyfive
665 | twentyfives
666 | twentyfold
667 | twentyfour
668 | twentyfourth
669 | twentyone
670 | twentysecond
671 | twentysomething
672 | twentysomethings
673 | twentythird
674 | twentythree
675 | twentytwo
676 | twentytwos
677 | twice
678 | two
679 | uhuh
680 | under
681 | underneath
682 | unique
683 | unless
684 | until
685 | unto
686 | up
687 | upon
688 | us
689 | usually
690 | various
691 | very
692 | wanna
693 | was
694 | wasnt
695 | wasn't
696 | we
697 | we'd
698 | well
699 | we'll
700 | were
701 | we're
702 | weren't
703 | weve
704 | we've
705 | what
706 | whatever
707 | whats
708 | what's
709 | when
710 | whenever
711 | where
712 | whereas
713 | wheres
714 | where's
715 | whether
716 | which
717 | whichever
718 | while
719 | who
720 | whod
721 | who'd
722 | whole
723 | wholl
724 | who'll
725 | whom
726 | whose
727 | will
728 | with
729 | within
730 | without
731 | wont
732 | won't
733 | worst
734 | would
735 | wouldnt
736 | wouldn't
737 | wouldve
738 | would've
739 | x
740 | ya
741 | yall
742 | y'all
743 | ye
744 | yet
745 | you
746 | youd
747 | you'd
748 | youll
749 | you'll
750 | your
751 | youre
752 | you're
753 | yours
754 | youve
755 | you've
756 | zero
757 | zillion
758 | zillions
759 | zillionth
760 | zillionths
--------------------------------------------------------------------------------
/VocabulateSrc/CSVParser.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Text;
4 | using System.IO;
5 |
6 | namespace Votabulate
7 | {
8 |
9 |
10 | // https://www.codeproject.com/Tips/823670/Csharp-Light-and-Fast-CSV-Parser
11 | // This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)
12 | // Copyright 2014 Yuriy Magurdumov
13 |
14 | // Preamble
15 | // This License governs Your use of the Work.This License is intended to allow developers to use the Source Code and Executable Files provided as part of the Work in any application in any form.
16 |
17 |
18 | // The main points subject to the terms of the License are:
19 |
20 |
21 | // Source Code and Executable Files can be used in commercial applications;
22 | // Source Code and Executable Files can be redistributed; and
23 | // Source Code can be modified to create derivative works.
24 | // No claim of suitability, guarantee, or any warranty whatsoever is provided.The software is provided "as-is".
25 | //The Article(s) accompanying the Work may not be distributed or republished without the Author's consent
26 | //This License is entered between You, the individual or other entity reading or otherwise making use of the Work licensed pursuant to this License and the individual or other entity which offers the Work under the terms of this License ("Author").
27 |
28 | //License
29 | //THE WORK(AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CODE PROJECT OPEN LICENSE("LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW.ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
30 |
31 |
32 | //BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HEREIN, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE.THE AUTHOR GRANTS YOU THE RIGHTS CONTAINED HEREIN IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS. IF YOU DO NOT AGREE TO ACCEPT AND BE BOUND BY THE TERMS OF THIS LICENSE, YOU CANNOT MAKE ANY USE OF THE WORK.
33 |
34 |
35 | //Definitions.
36 | //"Articles" means, collectively, all articles written by Author which describes how the Source Code and Executable Files for the Work may be used by a user.
37 | //"Author" means the individual or entity that offers the Work under the terms of this License.
38 | //"Derivative Work" means a work based upon the Work or upon the Work and other pre-existing works.
39 | //"Executable Files" refer to the executables, binary files, configuration and any required data files included in the Work.
40 | //"Publisher" means the provider of the website, magazine, CD-ROM, DVD or other medium from or by which the Work is obtained by You.
41 | //"Source Code" refers to the collection of source code and configuration files used to create the Executable Files.
42 | //"Standard Version" refers to such a Work if it has not been modified, or has been modified in accordance with the consent of the Author, such consent being in the full discretion of the Author.
43 | //"Work" refers to the collection of files distributed by the Publisher, including the Source Code, Executable Files, binaries, data files, documentation, whitepapers and the Articles.
44 | //"You" is you, an individual or entity wishing to use the Work and exercise your rights under this License.
45 | //Fair Use/Fair Use Rights.Nothing in this License is intended to reduce, limit, or restrict any rights arising from fair use, fair dealing, first sale or other limitations on the exclusive rights of the copyright owner under copyright law or other applicable laws.
46 | //License Grant. Subject to the terms and conditions of this License, the Author hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below:
47 | //You may use the standard version of the Source Code or Executable Files in Your own applications.
48 | //You may apply bug fixes, portability fixes and other modifications obtained from the Public Domain or from the Author.A Work modified in such a way shall still be considered the standard version and will be subject to this License.
49 | //You may otherwise modify Your copy of this Work (excluding the Articles) in any way to create a Derivative Work, provided that You insert a prominent notice in each changed file stating how, when and where You changed that file.
50 | //You may distribute the standard version of the Executable Files and Source Code or Derivative Work in aggregate with other(possibly commercial) programs as part of a larger(possibly commercial) software distribution.
51 | //The Articles discussing the Work published in any form by the author may not be distributed or republished without the Author's consent. The author retains copyright to any such Articles. You may use the Executable Files and Source Code pursuant to this License but you may not repost or republish or otherwise distribute or make available the Articles, without the prior written consent of the Author.
52 | //Any subroutines or modules supplied by You and linked into the Source Code or Executable Files of this Work shall not be considered part of this Work and will not be subject to the terms of this License.
53 | //Patent License. Subject to the terms and conditions of this License, each Author hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, import, and otherwise transfer the Work.
54 | //Restrictions.The license granted in Section 3 above is expressly made subject to and limited by the following restrictions:
55 | //You agree not to remove any of the original copyright, patent, trademark, and attribution notices and associated disclaimers that may appear in the Source Code or Executable Files.
56 | //You agree not to advertise or in any way imply that this Work is a product of Your own.
57 | //The name of the Author may not be used to endorse or promote products derived from the Work without the prior written consent of the Author.
58 | //You agree not to sell, lease, or rent any part of the Work.This does not restrict you from including the Work or any part of the Work inside a larger software distribution that itself is being sold. The Work by itself, though, cannot be sold, leased or rented.
59 | //You may distribute the Executable Files and Source Code only under the terms of this License, and You must include a copy of, or the Uniform Resource Identifier for, this License with every copy of the Executable Files or Source Code You distribute and ensure that anyone receiving such Executable Files and Source Code agrees that the terms of this License apply to such Executable Files and/or Source Code.You may not offer or impose any terms on the Work that alter or restrict the terms of this License or the recipients' exercise of the rights granted hereunder. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties. You may not distribute the Executable Files or Source Code with any technological measures that control access or use of the Work in a manner inconsistent with the terms of this License.
60 | //You agree not to use the Work for illegal, immoral or improper purposes, or on pages containing illegal, immoral or improper material. The Work is subject to applicable export laws.You agree to comply with all such laws and regulations that may apply to the Work after Your receipt of the Work.
61 | //Representations, Warranties and Disclaimer.THIS WORK IS PROVIDED "AS IS", "WHERE IS" AND "AS AVAILABLE", WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES OR CONDITIONS OR GUARANTEES. YOU, THE USER, ASSUME ALL RISK IN ITS USE, INCLUDING COPYRIGHT INFRINGEMENT, PATENT INFRINGEMENT, SUITABILITY, ETC.AUTHOR EXPRESSLY DISCLAIMS ALL EXPRESS, IMPLIED OR STATUTORY WARRANTIES OR CONDITIONS, INCLUDING WITHOUT LIMITATION, WARRANTIES OR CONDITIONS OF MERCHANTABILITY, MERCHANTABLE QUALITY OR FITNESS FOR A PARTICULAR PURPOSE, OR ANY WARRANTY OF TITLE OR NON-INFRINGEMENT, OR THAT THE WORK (OR ANY PORTION THEREOF) IS CORRECT, USEFUL, BUG-FREE OR FREE OF VIRUSES.YOU MUST PASS THIS DISCLAIMER ON WHENEVER YOU DISTRIBUTE THE WORK OR DERIVATIVE WORKS.
62 | //Indemnity.You agree to defend, indemnify and hold harmless the Author and the Publisher from and against any claims, suits, losses, damages, liabilities, costs, and expenses (including reasonable legal or attorneys’ fees) resulting from or relating to any use of the Work by You.
63 | //Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL THE AUTHOR OR THE PUBLISHER BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK OR OTHERWISE, EVEN IF THE AUTHOR OR THE PUBLISHER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
64 | //Termination.
65 | //This License and the rights granted hereunder will terminate automatically upon any breach by You of any term of this License.Individuals or entities who have received Derivative Works from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses.Sections 1, 2, 6, 7, 8, 9, 10 and 11 will survive any termination of this License.
66 | //If You bring a copyright, trademark, patent or any other infringement claim against any contributor over infringements You claim are made by the Work, your License from such contributor to the Work ends automatically.
67 | //Subject to the above terms and conditions, this License is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, the Author reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above.
68 | //Publisher. The parties hereby confirm that the Publisher shall not, under any circumstances, be responsible for and shall not have any liability in respect of the subject matter of this License. The Publisher makes no warranty whatsoever in connection with the Work and shall not be liable to You or any party on any legal theory for any damages whatsoever, including without limitation any general, special, incidental or consequential damages arising in connection to this license. The Publisher reserves the right to cease making the Work available to You at any time without notice
69 | //Miscellaneous
70 | //This License shall be governed by the laws of the location of the head office of the Author or if the Author is an individual, the laws of location of the principal place of residence of the Author.
71 | //If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this License, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
72 | //No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent.
73 | //This License constitutes the entire agreement between the parties with respect to the Work licensed herein. There are no understandings, agreements or representations with respect to the Work not specified herein. The Author shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Author and You.
74 |
75 |
76 | public static class CsvParser
77 | {
78 | private static Tuple> HeadAndTail(this IEnumerable source)
79 | {
80 | if (source == null)
81 | throw new ArgumentNullException("source");
82 | var en = source.GetEnumerator();
83 | en.MoveNext();
84 | return Tuple.Create(en.Current, EnumerateTail(en));
85 | }
86 |
87 | private static IEnumerable EnumerateTail(IEnumerator en)
88 | {
89 | while (en.MoveNext()) yield return en.Current;
90 | }
91 |
92 | public static IEnumerable> Parse(string content, char delimiter, char qualifier)
93 | {
94 | using (var reader = new StringReader(content))
95 | return Parse(reader, delimiter, qualifier);
96 | }
97 |
98 | public static Tuple, IEnumerable>> ParseHeadAndTail(TextReader reader, char delimiter, char qualifier)
99 | {
100 | return HeadAndTail(Parse(reader, delimiter, qualifier));
101 | }
102 |
103 | public static IEnumerable> Parse(TextReader reader, char delimiter, char qualifier)
104 | {
105 | var inQuote = false;
106 | var record = new List();
107 | var sb = new StringBuilder();
108 |
109 | while (reader.Peek() != -1)
110 | {
111 | var readChar = (char)reader.Read();
112 |
113 | if (readChar == '\n' || (readChar == '\r' && (char)reader.Peek() == '\n'))
114 | {
115 | // If it's a \r\n combo consume the \n part and throw it away.
116 | if (readChar == '\r')
117 | reader.Read();
118 |
119 | if (inQuote)
120 | {
121 | if (readChar == '\r')
122 | sb.Append('\r');
123 | sb.Append('\n');
124 | }
125 | else
126 | {
127 | if (record.Count > 0 || sb.Length > 0)
128 | {
129 | record.Add(sb.ToString());
130 | sb.Clear();
131 | }
132 |
133 | if (record.Count > 0)
134 | yield return record;
135 |
136 | record = new List(record.Count);
137 | }
138 | }
139 | else if (sb.Length == 0 && !inQuote)
140 | {
141 | if (readChar == qualifier)
142 | inQuote = true;
143 | else if (readChar == delimiter)
144 | {
145 | record.Add(sb.ToString());
146 | sb.Clear();
147 | }
148 | else if (char.IsWhiteSpace(readChar))
149 | {
150 | // Ignore leading whitespace
151 | }
152 | else
153 | sb.Append(readChar);
154 | }
155 | else if (readChar == delimiter)
156 | {
157 | if (inQuote)
158 | sb.Append(delimiter);
159 | else
160 | {
161 | record.Add(sb.ToString());
162 | sb.Clear();
163 | }
164 | }
165 | else if (readChar == qualifier)
166 | {
167 | if (inQuote)
168 | {
169 | if ((char)reader.Peek() == qualifier)
170 | {
171 | reader.Read();
172 | sb.Append(qualifier);
173 | }
174 | else
175 | inQuote = false;
176 | }
177 | else
178 | sb.Append(readChar);
179 | }
180 | else
181 | sb.Append(readChar);
182 | }
183 |
184 | if (record.Count > 0 || sb.Length > 0)
185 | record.Add(sb.ToString());
186 |
187 | if (record.Count > 0)
188 | yield return record;
189 | }
190 | }
191 |
192 |
193 | //Using the Code
194 | //Here is an example of reading CSV file.The following code snippet parses out the first 5 records and prints them out to the Console in form of key/value pairs:
195 |
196 | //Hide Copy Code
197 | //const string fileName = @"C:\Temp\file.csv";
198 | //using (var stream = File.OpenRead(fileName))
199 | //using (var reader = new StreamReader(stream))
200 | //{
201 | // var data = CsvParser.ParseHeadAndTail(reader, ',', '"');
202 |
203 | // var header = data.Item1;
204 | // var lines = data.Item2;
205 |
206 | // foreach (var line in lines.Take(5))
207 | // {
208 | // for (var i = 0; i
6 | /// Required designer variable.
7 | ///
8 | private System.ComponentModel.IContainer components = null;
9 |
10 | ///
11 | /// Clean up any resources being used.
12 | ///
13 | /// true if managed resources should be disposed; otherwise, false.
14 | protected override void Dispose(bool disposing)
15 | {
16 | if (disposing && (components != null))
17 | {
18 | components.Dispose();
19 | }
20 | base.Dispose(disposing);
21 | }
22 |
23 | #region Windows Form Designer generated code
24 |
25 | ///
26 | /// Required method for Designer support - do not modify
27 | /// the contents of this method with the code editor.
28 | ///
29 | private void InitializeComponent()
30 | {
31 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(VocabulateMainForm));
32 | this.BgWorker = new System.ComponentModel.BackgroundWorker();
33 | this.ScanSubfolderCheckbox = new System.Windows.Forms.CheckBox();
34 | this.StartButton = new System.Windows.Forms.Button();
35 | this.FolderBrowser = new System.Windows.Forms.FolderBrowserDialog();
36 | this.FilenameLabel = new System.Windows.Forms.Label();
37 | this.saveFileDialog = new System.Windows.Forms.SaveFileDialog();
38 | this.EncodingDropdown = new System.Windows.Forms.ComboBox();
39 | this.label4 = new System.Windows.Forms.Label();
40 | this.RawWCCheckbox = new System.Windows.Forms.CheckBox();
41 | this.openFileDialog = new System.Windows.Forms.OpenFileDialog();
42 | this.LoadDictionaryButton = new System.Windows.Forms.Button();
43 | this.StopListLabel = new System.Windows.Forms.Label();
44 | this.StopListTextBox = new System.Windows.Forms.TextBox();
45 | this.CSVQuoteTextbox = new System.Windows.Forms.TextBox();
46 | this.CSVDelimiterTextbox = new System.Windows.Forms.TextBox();
47 | this.label42 = new System.Windows.Forms.Label();
48 | this.label41 = new System.Windows.Forms.Label();
49 | this.DictStructureTextBox = new System.Windows.Forms.TextBox();
50 | this.DictionaryStructureLabel = new System.Windows.Forms.Label();
51 | this.DictionarySettingsGroupBox = new System.Windows.Forms.GroupBox();
52 | this.label1 = new System.Windows.Forms.Label();
53 | this.OutputCapturedWordsCheckbox = new System.Windows.Forms.CheckBox();
54 | this.ProcessingGroupbox = new System.Windows.Forms.GroupBox();
55 | this.OutputInfoButton = new System.Windows.Forms.Button();
56 | this.DictionarySettingsGroupBox.SuspendLayout();
57 | this.ProcessingGroupbox.SuspendLayout();
58 | this.SuspendLayout();
59 | //
60 | // BgWorker
61 | //
62 | this.BgWorker.DoWork += new System.ComponentModel.DoWorkEventHandler(this.BgWorkerClean_DoWork);
63 | this.BgWorker.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(this.BgWorker_RunWorkerCompleted);
64 | //
65 | // ScanSubfolderCheckbox
66 | //
67 | this.ScanSubfolderCheckbox.AutoSize = true;
68 | this.ScanSubfolderCheckbox.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
69 | this.ScanSubfolderCheckbox.Location = new System.Drawing.Point(22, 78);
70 | this.ScanSubfolderCheckbox.Name = "ScanSubfolderCheckbox";
71 | this.ScanSubfolderCheckbox.Size = new System.Drawing.Size(108, 17);
72 | this.ScanSubfolderCheckbox.TabIndex = 2;
73 | this.ScanSubfolderCheckbox.Text = "Scan subfolders?";
74 | this.ScanSubfolderCheckbox.UseVisualStyleBackColor = true;
75 | //
76 | // StartButton
77 | //
78 | this.StartButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
79 | this.StartButton.Location = new System.Drawing.Point(22, 110);
80 | this.StartButton.Name = "StartButton";
81 | this.StartButton.Size = new System.Drawing.Size(114, 32);
82 | this.StartButton.TabIndex = 3;
83 | this.StartButton.Text = "Start";
84 | this.StartButton.UseVisualStyleBackColor = true;
85 | this.StartButton.Click += new System.EventHandler(this.StartButton_Click);
86 | //
87 | // FolderBrowser
88 | //
89 | this.FolderBrowser.RootFolder = System.Environment.SpecialFolder.MyComputer;
90 | this.FolderBrowser.ShowNewFolderButton = false;
91 | //
92 | // FilenameLabel
93 | //
94 | this.FilenameLabel.AutoEllipsis = true;
95 | this.FilenameLabel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
96 | this.FilenameLabel.Location = new System.Drawing.Point(13, 428);
97 | this.FilenameLabel.Name = "FilenameLabel";
98 | this.FilenameLabel.Size = new System.Drawing.Size(859, 25);
99 | this.FilenameLabel.TabIndex = 6;
100 | this.FilenameLabel.Text = "Waiting to analyze texts...";
101 | this.FilenameLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
102 | //
103 | // saveFileDialog
104 | //
105 | this.saveFileDialog.FileName = "VocabulateOutput.csv";
106 | this.saveFileDialog.Filter = "CSV Files|*.csv";
107 | this.saveFileDialog.Title = "Please choose where to save your output";
108 | //
109 | // EncodingDropdown
110 | //
111 | this.EncodingDropdown.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
112 | this.EncodingDropdown.Font = new System.Drawing.Font("Consolas", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
113 | this.EncodingDropdown.FormattingEnabled = true;
114 | this.EncodingDropdown.Location = new System.Drawing.Point(22, 53);
115 | this.EncodingDropdown.Name = "EncodingDropdown";
116 | this.EncodingDropdown.Size = new System.Drawing.Size(221, 23);
117 | this.EncodingDropdown.TabIndex = 9;
118 | //
119 | // label4
120 | //
121 | this.label4.AutoSize = true;
122 | this.label4.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Underline, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
123 | this.label4.Location = new System.Drawing.Point(33, 35);
124 | this.label4.Name = "label4";
125 | this.label4.Size = new System.Drawing.Size(198, 15);
126 | this.label4.TabIndex = 10;
127 | this.label4.Text = "Encoding of Dictionary && Text Files:";
128 | //
129 | // RawWCCheckbox
130 | //
131 | this.RawWCCheckbox.AutoSize = true;
132 | this.RawWCCheckbox.Checked = true;
133 | this.RawWCCheckbox.CheckState = System.Windows.Forms.CheckState.Checked;
134 | this.RawWCCheckbox.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
135 | this.RawWCCheckbox.Location = new System.Drawing.Point(22, 32);
136 | this.RawWCCheckbox.Name = "RawWCCheckbox";
137 | this.RawWCCheckbox.Size = new System.Drawing.Size(164, 17);
138 | this.RawWCCheckbox.TabIndex = 21;
139 | this.RawWCCheckbox.Text = "Output Raw Category Counts";
140 | this.RawWCCheckbox.UseVisualStyleBackColor = true;
141 | //
142 | // openFileDialog
143 | //
144 | this.openFileDialog.FileName = "DictionaryFile.csv";
145 | this.openFileDialog.Filter = "Dictionary Files|*.csv";
146 | this.openFileDialog.RestoreDirectory = true;
147 | //
148 | // LoadDictionaryButton
149 | //
150 | this.LoadDictionaryButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
151 | this.LoadDictionaryButton.Location = new System.Drawing.Point(68, 182);
152 | this.LoadDictionaryButton.Name = "LoadDictionaryButton";
153 | this.LoadDictionaryButton.Size = new System.Drawing.Size(129, 32);
154 | this.LoadDictionaryButton.TabIndex = 20;
155 | this.LoadDictionaryButton.Text = "Load Dictionary";
156 | this.LoadDictionaryButton.UseVisualStyleBackColor = true;
157 | this.LoadDictionaryButton.Click += new System.EventHandler(this.LoadDictionaryButton_Click);
158 | //
159 | // StopListLabel
160 | //
161 | this.StopListLabel.AutoSize = true;
162 | this.StopListLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Underline))), System.Drawing.GraphicsUnit.Point, ((byte)(0)));
163 | this.StopListLabel.ForeColor = System.Drawing.SystemColors.ControlText;
164 | this.StopListLabel.Location = new System.Drawing.Point(95, 9);
165 | this.StopListLabel.Name = "StopListLabel";
166 | this.StopListLabel.Size = new System.Drawing.Size(68, 16);
167 | this.StopListLabel.TabIndex = 21;
168 | this.StopListLabel.Text = "Stop List";
169 | //
170 | // StopListTextBox
171 | //
172 | this.StopListTextBox.AcceptsReturn = true;
173 | this.StopListTextBox.Font = new System.Drawing.Font("Consolas", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
174 | this.StopListTextBox.Location = new System.Drawing.Point(13, 32);
175 | this.StopListTextBox.MaxLength = 2147483647;
176 | this.StopListTextBox.Multiline = true;
177 | this.StopListTextBox.Name = "StopListTextBox";
178 | this.StopListTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Both;
179 | this.StopListTextBox.Size = new System.Drawing.Size(243, 381);
180 | this.StopListTextBox.TabIndex = 0;
181 | this.StopListTextBox.WordWrap = false;
182 | //
183 | // CSVQuoteTextbox
184 | //
185 | this.CSVQuoteTextbox.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
186 | this.CSVQuoteTextbox.Location = new System.Drawing.Point(144, 137);
187 | this.CSVQuoteTextbox.MaxLength = 1;
188 | this.CSVQuoteTextbox.Name = "CSVQuoteTextbox";
189 | this.CSVQuoteTextbox.Size = new System.Drawing.Size(65, 20);
190 | this.CSVQuoteTextbox.TabIndex = 25;
191 | this.CSVQuoteTextbox.Text = "\"";
192 | this.CSVQuoteTextbox.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
193 | //
194 | // CSVDelimiterTextbox
195 | //
196 | this.CSVDelimiterTextbox.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
197 | this.CSVDelimiterTextbox.Location = new System.Drawing.Point(57, 137);
198 | this.CSVDelimiterTextbox.MaxLength = 1;
199 | this.CSVDelimiterTextbox.Name = "CSVDelimiterTextbox";
200 | this.CSVDelimiterTextbox.Size = new System.Drawing.Size(65, 20);
201 | this.CSVDelimiterTextbox.TabIndex = 24;
202 | this.CSVDelimiterTextbox.Text = ",";
203 | this.CSVDelimiterTextbox.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
204 | //
205 | // label42
206 | //
207 | this.label42.AutoSize = true;
208 | this.label42.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
209 | this.label42.Location = new System.Drawing.Point(141, 119);
210 | this.label42.Name = "label42";
211 | this.label42.Size = new System.Drawing.Size(43, 15);
212 | this.label42.TabIndex = 23;
213 | this.label42.Text = "Quote:";
214 | //
215 | // label41
216 | //
217 | this.label41.AutoSize = true;
218 | this.label41.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
219 | this.label41.Location = new System.Drawing.Point(56, 119);
220 | this.label41.Name = "label41";
221 | this.label41.Size = new System.Drawing.Size(60, 15);
222 | this.label41.TabIndex = 22;
223 | this.label41.Text = "Delimiter:";
224 | //
225 | // DictStructureTextBox
226 | //
227 | this.DictStructureTextBox.AcceptsReturn = true;
228 | this.DictStructureTextBox.Font = new System.Drawing.Font("Consolas", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
229 | this.DictStructureTextBox.Location = new System.Drawing.Point(270, 32);
230 | this.DictStructureTextBox.MaxLength = 2147483647;
231 | this.DictStructureTextBox.Multiline = true;
232 | this.DictStructureTextBox.Name = "DictStructureTextBox";
233 | this.DictStructureTextBox.ReadOnly = true;
234 | this.DictStructureTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Both;
235 | this.DictStructureTextBox.Size = new System.Drawing.Size(313, 381);
236 | this.DictStructureTextBox.TabIndex = 26;
237 | this.DictStructureTextBox.WordWrap = false;
238 | //
239 | // DictionaryStructureLabel
240 | //
241 | this.DictionaryStructureLabel.AutoSize = true;
242 | this.DictionaryStructureLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Underline))), System.Drawing.GraphicsUnit.Point, ((byte)(0)));
243 | this.DictionaryStructureLabel.Location = new System.Drawing.Point(352, 9);
244 | this.DictionaryStructureLabel.Name = "DictionaryStructureLabel";
245 | this.DictionaryStructureLabel.Size = new System.Drawing.Size(143, 16);
246 | this.DictionaryStructureLabel.TabIndex = 27;
247 | this.DictionaryStructureLabel.Text = "Dictionary Structure";
248 | //
249 | // DictionarySettingsGroupBox
250 | //
251 | this.DictionarySettingsGroupBox.Controls.Add(this.label1);
252 | this.DictionarySettingsGroupBox.Controls.Add(this.CSVQuoteTextbox);
253 | this.DictionarySettingsGroupBox.Controls.Add(this.label4);
254 | this.DictionarySettingsGroupBox.Controls.Add(this.EncodingDropdown);
255 | this.DictionarySettingsGroupBox.Controls.Add(this.label41);
256 | this.DictionarySettingsGroupBox.Controls.Add(this.CSVDelimiterTextbox);
257 | this.DictionarySettingsGroupBox.Controls.Add(this.LoadDictionaryButton);
258 | this.DictionarySettingsGroupBox.Controls.Add(this.label42);
259 | this.DictionarySettingsGroupBox.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Underline))), System.Drawing.GraphicsUnit.Point, ((byte)(0)));
260 | this.DictionarySettingsGroupBox.Location = new System.Drawing.Point(602, 13);
261 | this.DictionarySettingsGroupBox.Name = "DictionarySettingsGroupBox";
262 | this.DictionarySettingsGroupBox.Size = new System.Drawing.Size(264, 231);
263 | this.DictionarySettingsGroupBox.TabIndex = 28;
264 | this.DictionarySettingsGroupBox.TabStop = false;
265 | this.DictionarySettingsGroupBox.Text = "Dictionary / File Settings";
266 | //
267 | // label1
268 | //
269 | this.label1.AutoSize = true;
270 | this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Underline, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
271 | this.label1.Location = new System.Drawing.Point(50, 97);
272 | this.label1.Name = "label1";
273 | this.label1.Size = new System.Drawing.Size(169, 15);
274 | this.label1.TabIndex = 26;
275 | this.label1.Text = "Dictionary File CSV Properties";
276 | //
277 | // OutputCapturedWordsCheckbox
278 | //
279 | this.OutputCapturedWordsCheckbox.AutoSize = true;
280 | this.OutputCapturedWordsCheckbox.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
281 | this.OutputCapturedWordsCheckbox.Location = new System.Drawing.Point(22, 55);
282 | this.OutputCapturedWordsCheckbox.Name = "OutputCapturedWordsCheckbox";
283 | this.OutputCapturedWordsCheckbox.Size = new System.Drawing.Size(169, 17);
284 | this.OutputCapturedWordsCheckbox.TabIndex = 29;
285 | this.OutputCapturedWordsCheckbox.Text = "Output Captured Text (Debug)";
286 | this.OutputCapturedWordsCheckbox.UseVisualStyleBackColor = true;
287 | //
288 | // ProcessingGroupbox
289 | //
290 | this.ProcessingGroupbox.Controls.Add(this.OutputInfoButton);
291 | this.ProcessingGroupbox.Controls.Add(this.OutputCapturedWordsCheckbox);
292 | this.ProcessingGroupbox.Controls.Add(this.StartButton);
293 | this.ProcessingGroupbox.Controls.Add(this.ScanSubfolderCheckbox);
294 | this.ProcessingGroupbox.Controls.Add(this.RawWCCheckbox);
295 | this.ProcessingGroupbox.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Underline))), System.Drawing.GraphicsUnit.Point, ((byte)(0)));
296 | this.ProcessingGroupbox.Location = new System.Drawing.Point(602, 256);
297 | this.ProcessingGroupbox.Name = "ProcessingGroupbox";
298 | this.ProcessingGroupbox.Size = new System.Drawing.Size(264, 157);
299 | this.ProcessingGroupbox.TabIndex = 30;
300 | this.ProcessingGroupbox.TabStop = false;
301 | this.ProcessingGroupbox.Text = "Processing Settings";
302 | //
303 | // OutputInfoButton
304 | //
305 | this.OutputInfoButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
306 | this.OutputInfoButton.Location = new System.Drawing.Point(143, 110);
307 | this.OutputInfoButton.Name = "OutputInfoButton";
308 | this.OutputInfoButton.Size = new System.Drawing.Size(115, 32);
309 | this.OutputInfoButton.TabIndex = 30;
310 | this.OutputInfoButton.Text = "Output Info";
311 | this.OutputInfoButton.UseVisualStyleBackColor = true;
312 | this.OutputInfoButton.Click += new System.EventHandler(this.OutputInfoButton_Click);
313 | //
314 | // VocabulateMainForm
315 | //
316 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
317 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
318 | this.BackColor = System.Drawing.Color.CadetBlue;
319 | this.ClientSize = new System.Drawing.Size(884, 461);
320 | this.Controls.Add(this.DictionarySettingsGroupBox);
321 | this.Controls.Add(this.DictionaryStructureLabel);
322 | this.Controls.Add(this.StopListTextBox);
323 | this.Controls.Add(this.StopListLabel);
324 | this.Controls.Add(this.FilenameLabel);
325 | this.Controls.Add(this.DictStructureTextBox);
326 | this.Controls.Add(this.ProcessingGroupbox);
327 | this.DoubleBuffered = true;
328 | this.ForeColor = System.Drawing.SystemColors.ControlText;
329 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
330 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
331 | this.MaximizeBox = false;
332 | this.MaximumSize = new System.Drawing.Size(900, 500);
333 | this.MinimumSize = new System.Drawing.Size(900, 500);
334 | this.Name = "VocabulateMainForm";
335 | this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide;
336 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
337 | this.Text = "Vocabulate";
338 | this.DictionarySettingsGroupBox.ResumeLayout(false);
339 | this.DictionarySettingsGroupBox.PerformLayout();
340 | this.ProcessingGroupbox.ResumeLayout(false);
341 | this.ProcessingGroupbox.PerformLayout();
342 | this.ResumeLayout(false);
343 | this.PerformLayout();
344 |
345 | }
346 |
347 | #endregion
348 | private System.ComponentModel.BackgroundWorker BgWorker;
349 | private System.Windows.Forms.CheckBox ScanSubfolderCheckbox;
350 | private System.Windows.Forms.Button StartButton;
351 | private System.Windows.Forms.FolderBrowserDialog FolderBrowser;
352 | private System.Windows.Forms.Label FilenameLabel;
353 | private System.Windows.Forms.SaveFileDialog saveFileDialog;
354 | private System.Windows.Forms.ComboBox EncodingDropdown;
355 | private System.Windows.Forms.Label label4;
356 | private System.Windows.Forms.OpenFileDialog openFileDialog;
357 | private System.Windows.Forms.Button LoadDictionaryButton;
358 | private System.Windows.Forms.CheckBox RawWCCheckbox;
359 | private System.Windows.Forms.Label StopListLabel;
360 | private System.Windows.Forms.TextBox StopListTextBox;
361 | private System.Windows.Forms.TextBox CSVQuoteTextbox;
362 | private System.Windows.Forms.TextBox CSVDelimiterTextbox;
363 | private System.Windows.Forms.Label label42;
364 | private System.Windows.Forms.Label label41;
365 | private System.Windows.Forms.TextBox DictStructureTextBox;
366 | private System.Windows.Forms.Label DictionaryStructureLabel;
367 | private System.Windows.Forms.GroupBox DictionarySettingsGroupBox;
368 | private System.Windows.Forms.Label label1;
369 | private System.Windows.Forms.CheckBox OutputCapturedWordsCheckbox;
370 | private System.Windows.Forms.GroupBox ProcessingGroupbox;
371 | private System.Windows.Forms.Button OutputInfoButton;
372 | }
373 | }
374 |
375 |
--------------------------------------------------------------------------------
/VocabulateSrc/MainForm.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.ComponentModel;
4 | using System.Data;
5 | using System.Linq;
6 | using System.Text;
7 | using System.Windows.Forms;
8 | using System.IO;
9 | using nltk.tokenize.casual.NET;
10 |
11 |
12 |
13 | namespace VocabulateApplication
14 | {
15 |
16 | public partial class VocabulateMainForm : Form
17 | {
18 |
19 |
20 | //initialize the space for our dictionary data
21 | Vocabulate.DictionaryData DictData = new Vocabulate.DictionaryData();
22 |
23 |
24 |
25 | //this is what runs at initialization
26 | public VocabulateMainForm()
27 | {
28 |
29 | InitializeComponent();
30 |
31 | foreach(var encoding in Encoding.GetEncodings())
32 | {
33 | EncodingDropdown.Items.Add(encoding.Name);
34 | }
35 |
36 | try
37 | {
38 | EncodingDropdown.SelectedIndex = EncodingDropdown.FindStringExact("utf-8");
39 | }
40 | catch
41 | {
42 | EncodingDropdown.SelectedIndex = EncodingDropdown.FindStringExact(Encoding.Default.BodyName);
43 | }
44 |
45 | //load stoplist
46 | StopListTextBox.Text = Vocabulate.Properties.Resources.StopListCharacters + Environment.NewLine + Vocabulate.Properties.Resources.StopListEN;
47 |
48 |
49 | }
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 | private void StartButton_Click(object sender, EventArgs e)
58 | {
59 |
60 | if (CSVDelimiterTextbox.Text.Length < 1) CSVDelimiterTextbox.Text = ",";
61 | if (CSVQuoteTextbox.Text.Length < 1) CSVQuoteTextbox.Text = "\"";
62 |
63 | //make sure that our dictionary is loaded before anything else
64 | if (DictData.DictionaryLoaded != true)
65 | {
66 | MessageBox.Show("You must first load a dictionary file before you can analyze your texts.", "Dictionary not loaded!", MessageBoxButtons.OK, MessageBoxIcon.Error);
67 | return;
68 | }
69 |
70 |
71 | FolderBrowser.Description = "Please choose the location of your .txt files to analyze";
72 | if (FolderBrowser.ShowDialog() != DialogResult.Cancel) {
73 |
74 | DictData.TextFileFolder = FolderBrowser.SelectedPath.ToString();
75 |
76 | if (DictData.TextFileFolder != "")
77 | {
78 |
79 | saveFileDialog.FileName = "Vocabulate_Output.csv";
80 |
81 | saveFileDialog.InitialDirectory = DictData.TextFileFolder;
82 | if (saveFileDialog.ShowDialog() != DialogResult.Cancel) {
83 |
84 |
85 | DictData.OutputFileLocation = saveFileDialog.FileName;
86 | DictData.RawWordCounts = RawWCCheckbox.Checked;
87 | DictData.StopListRawText = StopListTextBox.Text;
88 | DictData.CSVDelimiter = CSVDelimiterTextbox.Text[0];
89 | DictData.CSVQuote = CSVQuoteTextbox.Text[0];
90 | DictData.OutputCapturedText = OutputCapturedWordsCheckbox.Checked;
91 |
92 | if (DictData.OutputFileLocation != "") {
93 |
94 | StopListTextBox.Enabled = false;
95 | StartButton.Enabled = false;
96 | ScanSubfolderCheckbox.Enabled = false;
97 | EncodingDropdown.Enabled = false;
98 | LoadDictionaryButton.Enabled = false;
99 | RawWCCheckbox.Enabled = false;
100 | CSVDelimiterTextbox.Enabled = false;
101 | CSVQuoteTextbox.Enabled = false;
102 | OutputCapturedWordsCheckbox.Enabled = false;
103 |
104 | BgWorker.RunWorkerAsync(DictData);
105 | }
106 | }
107 | }
108 |
109 | }
110 |
111 |
112 |
113 | }
114 |
115 |
116 |
117 |
118 |
119 |
120 | private void BgWorkerClean_DoWork(object sender, DoWorkEventArgs e)
121 | {
122 |
123 |
124 | Vocabulate.DictionaryData DictData = (Vocabulate.DictionaryData)e.Argument;
125 | TwitterAwareTokenizer Tokenizer = new TwitterAwareTokenizer();
126 | Tokenizer.Initialize_Regex();
127 | Vocabulate.StopWordRemover StopList = new Vocabulate.StopWordRemover();
128 | StopList.BuildStopList(DictData.StopListRawText);
129 |
130 | //sets up how many columns we're using for output
131 | short OutputColumnsModifier = 2;
132 | if (DictData.RawWordCounts) OutputColumnsModifier = 4;
133 | short OutputCapturedText = 0;
134 | if (DictData.OutputCapturedText) OutputCapturedText = 1;
135 |
136 |
137 | //selects the text encoding based on user selection
138 | Encoding SelectedEncoding = null;
139 | this.Invoke((MethodInvoker)delegate ()
140 | {
141 | SelectedEncoding = Encoding.GetEncoding(EncodingDropdown.SelectedItem.ToString());
142 | });
143 |
144 |
145 |
146 | //get the list of files
147 | var SearchDepth = SearchOption.TopDirectoryOnly;
148 | if (ScanSubfolderCheckbox.Checked)
149 | {
150 | SearchDepth = SearchOption.AllDirectories;
151 | }
152 | var files = Directory.EnumerateFiles(DictData.TextFileFolder, "*.txt", SearchDepth);
153 |
154 | string CSVQuote = DictData.CSVQuote.ToString();
155 | string CSVDelimiter = DictData.CSVDelimiter.ToString();
156 |
157 | try {
158 |
159 | //open up the output file
160 | using (StreamWriter outputFile = new StreamWriter(new FileStream(DictData.OutputFileLocation, FileMode.Create), SelectedEncoding))
161 | {
162 |
163 | short NumberOfHeaderLeadingColumns = 9;
164 |
165 | //write the header row to the output file
166 | StringBuilder HeaderString = new StringBuilder();
167 | HeaderString.Append(CSVQuote + "Filename" + CSVQuote + CSVDelimiter +
168 | CSVQuote + "WC" + CSVQuote + CSVDelimiter +
169 | CSVQuote + "TC_Raw" + CSVQuote + CSVDelimiter +
170 | CSVQuote + "TTR_Raw" + CSVQuote + CSVDelimiter +
171 | CSVQuote + "TC_Clean" + CSVQuote + CSVDelimiter +
172 | CSVQuote + "TTR_Clean" + CSVQuote + CSVDelimiter +
173 | CSVQuote + "TC_NonDict" + CSVQuote + CSVDelimiter +
174 | CSVQuote + "TTR_NonDict" + CSVQuote + CSVDelimiter +
175 | CSVQuote + "DictPercent" + CSVQuote);
176 |
177 |
178 | //output headers for the Concept-constrained Concept-Word Ratio (CWR)
179 | for (int i = 0; i < DictData.NumCats; i++) HeaderString.Append(CSVDelimiter + CSVQuote +
180 | DictData.CatNames[i].Replace(CSVQuote, CSVQuote + CSVQuote) + "_CWR" +
181 | CSVQuote);
182 |
183 |
184 | //output headers for the Concept-Category Ratio (CCR)
185 | for (int i = 0; i < DictData.NumCats; i++) HeaderString.Append(CSVDelimiter + CSVQuote +
186 | DictData.CatNames[i].Replace(CSVQuote, CSVQuote + CSVQuote) + "_CCR" +
187 | CSVQuote);
188 |
189 | //if they want the raw category counts, then we add those to the header as well
190 | if(DictData.RawWordCounts)
191 | {
192 | for (int i = 0; i < DictData.NumCats; i++) HeaderString.Append(CSVDelimiter + CSVQuote +
193 | DictData.CatNames[i].Replace(CSVQuote, CSVQuote + CSVQuote) + "_Count" +
194 | CSVQuote);
195 | for (int i = 0; i < DictData.NumCats; i++) HeaderString.Append(CSVDelimiter + CSVQuote +
196 | DictData.CatNames[i].Replace(CSVQuote, CSVQuote + CSVQuote) + "_Unique" +
197 | CSVQuote);
198 | }
199 |
200 | if (DictData.OutputCapturedText) HeaderString.Append(CSVDelimiter + CSVQuote + "CapturedText" + CSVQuote);
201 |
202 | outputFile.WriteLine(HeaderString.ToString());
203 |
204 |
205 | foreach (string fileName in files)
206 | {
207 |
208 | //set up our variables to report
209 | string Filename_Clean = Path.GetFileName(fileName);
210 | Dictionary DictionaryResults = new Dictionary();
211 | foreach (string Concept in DictData.ConceptMap.Keys) DictionaryResults.Add(Concept, 0);
212 |
213 | //structure of DictionaryResults will look like this:
214 |
215 | //Concept -> Total
216 |
217 | //this will make it far easier to go through and calculate number of unique concepts divided by total number of words
218 | //at the top level categories down the road
219 |
220 |
221 |
222 |
223 |
224 | //for (int i = 0; i < DictData.NumCats; i++) DictionaryResults.Add(DictData.CatValues[i], 0);
225 |
226 | //report what we're working on
227 | FilenameLabel.Invoke((MethodInvoker)delegate
228 | {
229 | FilenameLabel.Text = "Analyzing: " + Filename_Clean;
230 | });
231 |
232 |
233 |
234 |
235 | //read in the text file, convert everything to lowercase
236 | string readText = File.ReadAllText(fileName, SelectedEncoding).ToLower();
237 |
238 |
239 |
240 | int NumberOfMatches = 0;
241 |
242 | int WordCount_WhitespaceTokenizer = Tokenizer.TokenizeWhitespace(readText.Trim()).Length;
243 |
244 | //splits everything out into words
245 | string[] Words = Tokenizer.tokenize(readText.Trim());
246 | Words = StopList.ClearStopWords(Words);
247 |
248 | int TotalStringLength_BeforeStopList = Words.Length;
249 | double TTR_Raw = (Words.Distinct().Count() / (double)TotalStringLength_BeforeStopList) * 100;
250 |
251 |
252 | Words = Words.Where(x => !string.IsNullOrWhiteSpace(x)).ToArray();
253 | int TotalStringLength_AfterStopList = Words.Length;
254 | double TTR_Clean = (Words.Distinct().Count() / (double)TotalStringLength_AfterStopList) * 100;
255 |
256 | StringBuilder CapturedText = new StringBuilder();
257 |
258 | List NonmatchedTokens = new List();
259 |
260 |
261 | // _ _ _____ _
262 | // / \ _ __ __ _| |_ _ _______ |_ _|____ _| |_
263 | // / _ \ | '_ \ / _` | | | | |_ / _ \ | |/ _ \ \/ / __|
264 | // / ___ \| | | | (_| | | |_| |/ / __/ | | __/> <| |_
265 | // /_/ \_\_| |_|\__,_|_|\__, /___\___| |_|\___/_/\_\\__|
266 | // |___/
267 |
268 |
269 | //iterate over all words in the text file
270 | for (int i = 0; i < TotalStringLength_AfterStopList; i++)
271 | {
272 |
273 |
274 | bool TokenMatched = false;
275 | //iterate over n-grams, starting with the largest possible n-gram (derived from the user's dictionary file)
276 | for (int NumberOfWords = DictData.MaxWords; NumberOfWords > 0; NumberOfWords--)
277 | {
278 |
279 |
280 |
281 | //make sure that we don't overextend past the array
282 | if (i + NumberOfWords - 1 >= TotalStringLength_AfterStopList) continue;
283 |
284 | //make the target string
285 |
286 | string TargetString;
287 |
288 | if (NumberOfWords > 1)
289 | {
290 | TargetString = String.Join(" ", Words.Skip(i).Take(NumberOfWords).ToArray());
291 | }
292 | else
293 | {
294 | TargetString = Words[i];
295 | }
296 |
297 |
298 | //look for an exact match
299 |
300 | if (DictData.FullDictionaryMap["Standards"].ContainsKey(NumberOfWords))
301 | {
302 | if (DictData.FullDictionaryMap["Standards"][NumberOfWords].ContainsKey(TargetString))
303 | {
304 |
305 | //add in the number of words found
306 | NumberOfMatches += NumberOfWords;
307 |
308 | //increment results
309 | DictionaryResults[DictData.FullDictionaryMap["Standards"][NumberOfWords][TargetString]] += 1;
310 |
311 |
312 | //manually increment the for loop so that we're not testing on words that have already been picked up
313 | i += NumberOfWords - 1;
314 | //break out of the lower level for loop back to moving on to new words altogether
315 | TokenMatched = true;
316 |
317 | if (DictData.OutputCapturedText) CapturedText.Append(TargetString.Replace(CSVQuote, CSVQuote + CSVQuote) + " ");
318 |
319 | break;
320 | }
321 | }
322 | //if there isn't an exact match, we have to go through the wildcards
323 | if (DictData.WildCardArrays.ContainsKey(NumberOfWords))
324 | {
325 | for (int j = 0; j < DictData.WildCardArrays[NumberOfWords].Length; j++)
326 | {
327 | if (DictData.PrecompiledWildcards[DictData.WildCardArrays[NumberOfWords][j]].Matches(TargetString).Count > 0)
328 | {
329 |
330 | //add in the number of words found
331 | NumberOfMatches += NumberOfWords;
332 |
333 | //increment results
334 | DictionaryResults[DictData.FullDictionaryMap["Wildcards"][NumberOfWords][DictData.WildCardArrays[NumberOfWords][j]]] += 1;
335 |
336 | //manually increment the for loop so that we're not testing on words that have already been picked up
337 | i += NumberOfWords - 1;
338 | //break out of the lower level for loop back to moving on to new words altogether
339 | TokenMatched = true;
340 |
341 | if (DictData.OutputCapturedText) CapturedText.Append(TargetString.Replace(CSVQuote, CSVQuote + CSVQuote) + " ");
342 |
343 | break;
344 |
345 | }
346 | }
347 | }
348 | }
349 |
350 | //this is what we do if we didn't find any match in our dictionary
351 | if (!TokenMatched) NonmatchedTokens.Add(Words[i]);
352 |
353 |
354 |
355 |
356 |
357 | }
358 |
359 |
360 |
361 |
362 |
363 |
364 |
365 | // __ __ _ _ ___ _ _
366 | // \ \ / / __(_) |_ ___ / _ \ _ _| |_ _ __ _ _| |_
367 | // \ \ /\ / / '__| | __/ _ \ | | | | | | | __| '_ \| | | | __|
368 | // \ V V /| | | | || __/ | |_| | |_| | |_| |_) | |_| | |_
369 | // \_/\_/ |_| |_|\__\___| \___/ \__,_|\__| .__/ \__,_|\__|
370 | // |_|
371 |
372 |
373 |
374 |
375 | string[] OutputString = new string[NumberOfHeaderLeadingColumns + (DictData.NumCats * OutputColumnsModifier) + OutputCapturedText];
376 |
377 | for (int i = 0; i < OutputString.Length; i++) OutputString[i] = "";
378 |
379 |
380 | OutputString[0] = CSVQuote + Filename_Clean + CSVQuote; //filename
381 | OutputString[1] = WordCount_WhitespaceTokenizer.ToString(); //WordCount
382 | OutputString[2] = TotalStringLength_BeforeStopList.ToString(); //total number of words
383 | if (TotalStringLength_BeforeStopList > 0) OutputString[3] = TTR_Raw.ToString(); //TTR_Raw
384 | OutputString[4] = TotalStringLength_AfterStopList.ToString(); //total number of tokens after stoplist processing
385 | if (TotalStringLength_AfterStopList > 0) OutputString[5] = TTR_Clean.ToString(); // TTR_Clean
386 | OutputString[6] = (TotalStringLength_AfterStopList - NumberOfMatches).ToString(); //number of non-dictionary tokens
387 | if (NonmatchedTokens.Count() > 0) OutputString[7] = (((double)NonmatchedTokens.Distinct().Count() / NonmatchedTokens.Count()) * 100).ToString(); //TTR for non-dictionary words
388 |
389 |
390 | //calculate and output the results
391 | if (TotalStringLength_BeforeStopList > 0)
392 | {
393 |
394 | OutputString[8] = (((double)NumberOfMatches / TotalStringLength_BeforeStopList) * 100).ToString(); //dictpercent
395 |
396 |
397 | //pull together the results here
398 | Dictionary CompiledResults = new Dictionary();
399 | foreach(string TopLevelCategory in DictData.CatNames)
400 | {
401 | CompiledResults.Add(TopLevelCategory, new ulong[2] { 0, 0 });
402 | }
403 |
404 | foreach(string ConceptKey in DictData.ConceptMap.Keys)
405 | {
406 | if(DictionaryResults[ConceptKey] > 0)
407 | {
408 | for (int i = 0; i < DictData.ConceptMap[ConceptKey].Length; i++)
409 | {
410 | //if the Concept was found in the text, increment the first index (i.e., the number of unique concepts) by 1
411 | CompiledResults[DictData.ConceptMap[ConceptKey][i]][0] += 1;
412 | //if the Concept was found in the text, add the number of times it occurred
413 | CompiledResults[DictData.ConceptMap[ConceptKey][i]][1] += DictionaryResults[ConceptKey];
414 | }
415 | }
416 | }
417 |
418 |
419 | //this is where we actually calulate and output the CWR scores
420 | for (int i = 0; i < DictData.CategoryOrder.Count; i++)
421 | {
422 |
423 | if (WordCount_WhitespaceTokenizer > 0)
424 | {
425 | OutputString[i + NumberOfHeaderLeadingColumns] = (((double)CompiledResults[DictData.CategoryOrder[i]][0] / WordCount_WhitespaceTokenizer) * 100.0).ToString();
426 | }
427 |
428 | }
429 |
430 | //this is where we actually calulate and output the CCR scores
431 | for (int i = 0; i < DictData.CategoryOrder.Count; i++)
432 | {
433 |
434 | if (CompiledResults[DictData.CategoryOrder[i]][0] > 0)
435 | {
436 | OutputString[i + NumberOfHeaderLeadingColumns + DictData.NumCats] = (((double)CompiledResults[DictData.CategoryOrder[i]][0] / CompiledResults[DictData.CategoryOrder[i]][1]) * 100.0).ToString();
437 | }
438 |
439 | }
440 |
441 | //this is if the user asked for the raw counts per category
442 | if (DictData.RawWordCounts)
443 | {
444 |
445 | for (int i = 0; i < DictData.CategoryOrder.Count; i++)
446 | {
447 |
448 | OutputString[i + NumberOfHeaderLeadingColumns + (DictData.NumCats * 2)] = CompiledResults[DictData.CategoryOrder[i]][1].ToString();
449 | OutputString[i + NumberOfHeaderLeadingColumns + (DictData.NumCats * 3)] = CompiledResults[DictData.CategoryOrder[i]][0].ToString();
450 |
451 | }
452 |
453 |
454 | }
455 |
456 |
457 |
458 | }
459 | else
460 | {
461 | OutputString[3] = "";
462 | for (int i = 0; i < DictData.NumCats; i++) OutputString[i + NumberOfHeaderLeadingColumns] = "";
463 | }
464 |
465 | //if we're outputting the captured strings, we do that here
466 | if(DictData.OutputCapturedText) OutputString[OutputString.Length - 1] = CSVQuote + CapturedText.ToString() + CSVQuote;
467 |
468 |
469 | outputFile.WriteLine(String.Join(CSVDelimiter, OutputString));
470 |
471 |
472 |
473 |
474 |
475 |
476 |
477 |
478 | }
479 |
480 |
481 | }
482 |
483 | }
484 | catch
485 | {
486 | MessageBox.Show("Vocabulate encountered an issue somewhere while trying to analyze your texts. The most common cause of this is trying to open your output file while Vocabulate is still running. Did any of your input files move, or is your output file being opened/modified by another application?", "Error while analyzing", MessageBoxButtons.OK, MessageBoxIcon.Error);
487 | }
488 |
489 |
490 | }
491 |
492 |
493 |
494 |
495 | //when the bgworker is done running, we want to re-enable user controls and let them know that it's finished
496 | private void BgWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
497 | {
498 | StartButton.Enabled = true;
499 | ScanSubfolderCheckbox.Enabled = true;
500 | EncodingDropdown.Enabled = true;
501 | StopListTextBox.Enabled = true;
502 | LoadDictionaryButton.Enabled = true;
503 | RawWCCheckbox.Enabled = true;
504 | CSVDelimiterTextbox.Enabled = true;
505 | CSVQuoteTextbox.Enabled = true;
506 | OutputCapturedWordsCheckbox.Enabled = true;
507 | FilenameLabel.Text = "Finished!";
508 | MessageBox.Show("Vocabulate has finished analyzing your texts.", "Analysis Complete", MessageBoxButtons.OK, MessageBoxIcon.Information);
509 | }
510 |
511 |
512 |
513 |
514 |
515 |
516 |
517 |
518 |
519 |
520 |
521 |
522 |
523 |
524 |
525 |
526 | // _ _ ____ _ _ _
527 | // | | ___ __ _ __| | | _ \(_) ___| |_(_) ___ _ __ __ _ _ __ _ _
528 | // | | / _ \ / _` |/ _` | | | | | |/ __| __| |/ _ \| '_ \ / _` | '__| | | |
529 | // | |__| (_) | (_| | (_| | | |_| | | (__| |_| | (_) | | | | (_| | | | |_| |
530 | // |_____\___/ \__,_|\__,_| |____/|_|\___|\__|_|\___/|_| |_|\__,_|_| \__, |
531 | // |___/
532 |
533 |
534 |
535 | private void LoadDictionaryButton_Click(object sender, EventArgs e)
536 | {
537 |
538 |
539 | DictData = new Vocabulate.DictionaryData();
540 |
541 | DictStructureTextBox.Text = "";
542 |
543 |
544 |
545 | openFileDialog.Title = "Please choose your dictionary file";
546 |
547 | if (openFileDialog.ShowDialog() != DialogResult.Cancel)
548 | {
549 |
550 | FolderBrowser.SelectedPath = System.IO.Path.GetDirectoryName(openFileDialog.FileName);
551 |
552 | //Load dictionary file now
553 | try
554 | {
555 | Encoding SelectedEncoding = null;
556 | SelectedEncoding = Encoding.GetEncoding(EncodingDropdown.SelectedItem.ToString());
557 |
558 | Vocabulate.LoadDictionary DictionaryLoader = new Vocabulate.LoadDictionary();
559 | DictData = DictionaryLoader.LoadDictionaryFile(DictData, openFileDialog.FileName, SelectedEncoding, CSVDelimiterTextbox.Text[0], CSVQuoteTextbox.Text[0]);
560 |
561 | //this is where we load up the dictionary preview
562 | StringBuilder DictPreview = new StringBuilder();
563 |
564 | DictPreview.AppendLine("TERM -> CONCEPT -> [CATEGORIES]");
565 | DictPreview.AppendLine("-------------------------------");
566 |
567 | foreach (string StemType in DictData.FullDictionaryMap.Keys) {
568 | foreach (int WordCountKey in DictData.FullDictionaryMap[StemType].Keys)
569 | {
570 |
571 | foreach(var Word in DictData.FullDictionaryMap[StemType][WordCountKey])
572 | {
573 |
574 | DictPreview.AppendLine(Word.Key + " -> " + Word.Value + " -> [" + string.Join(", ", DictData.ConceptMap[Word.Value]) + "]");
575 |
576 | }
577 |
578 | }
579 | }
580 |
581 |
582 | DictStructureTextBox.Text = DictPreview.ToString();
583 |
584 | MessageBox.Show("Your dictionary has been successfully loaded.", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information);
585 |
586 | }
587 | catch
588 | {
589 | MessageBox.Show("Vocabulate is having trouble loading your dictionary file. The most common causes of this problem are:" + Environment.NewLine + Environment.NewLine +
590 | "-> Your dictionary file is already being used by another application" + Environment.NewLine +
591 | "-> Your dictionary is formatted incorrectly" + Environment.NewLine +
592 | "-> You dictionary contains duplicate words (the same word appearing more than once)" + Environment.NewLine + Environment.NewLine +
593 | "Please check to make sure that none of these issues exist in your dictionary file.",
594 | "Dictionary Load Error",
595 | MessageBoxButtons.OK, MessageBoxIcon.Error);
596 | DictData.DictionaryLoaded = false;
597 | return;
598 | }
599 |
600 | }
601 | else
602 | {
603 | return;
604 | }
605 |
606 |
607 | }
608 |
609 | private void OutputInfoButton_Click(object sender, EventArgs e)
610 | {
611 | MessageBox.Show("Output Information" + Environment.NewLine +
612 | "----------------------------" + Environment.NewLine +
613 | "WC:\tWord Count" + Environment.NewLine +
614 | "TC:\tToken Count" + Environment.NewLine +
615 | "TTR:\tType/Token Ratio" + Environment.NewLine +
616 | "CWR:\tConcept/Word Ratio" + Environment.NewLine +
617 | "CCR:\tConcept/Category Ratio" + Environment.NewLine,
618 |
619 | "Output Information", MessageBoxButtons.OK, MessageBoxIcon.Question);
620 | }
621 | }
622 |
623 |
624 |
625 | }
626 |
--------------------------------------------------------------------------------
/VocabulateSrc/MainForm.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
121 | 17, 17
122 |
123 |
124 | 123, 17
125 |
126 |
127 | 252, 17
128 |
129 |
130 | 381, 17
131 |
132 |
133 |
134 |
135 | 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
205 | AAAAAAAAAAAAAAAAAAAAAAAAZ3DvAGdw7w9ncO+KZ3Dv9Wdw7/9ncO//Z3Dv/2dw7/9ncPD/anLo/3F6
206 | t/95gJn/gIeb/4CHm/95gJn/YWmQ/z9IhP84QoL/OUKC/zlCgv85QoL/OUKC/zlCgvU5QoKKOUKCDzlC
207 | ggAAAAAAAAAAAAAAAAAAAAAAAAAAAGdw7wBncO8KZ3Dvimdw7/lncO//Z3Dv/2dw7/9ncO//Z3Dw/2dv
208 | 6P96grr/i5Kg/4yTof+LkqD/i5Kg/4yTof+LkqH/anKU/zxFhP85QoL/OUKC/zlCgv85QoL/OUKC/zlC
209 | gvk5QoKKOUKCCjlCggAAAAAAAAAAAAAAAABncO8AZ3DvAWdw721ncO/1Z3Dv/2dw7/9ncO//Z3Dv/2hx
210 | 8f9gaeD/WWCd/4SLm/9wd4L/UVZe/0BFS/9ARUv/UVZf/3B3gv+Ei5v/RUtv/zQ9ef85QoP/OUKC/zlC
211 | gv85QoL/OUKC/zlCgvU5QoJtOUKCATlCggAAAAAAZ3DvAGdw7wBncO85Z3Dv4Wdw7/9ncO//Z3Dv/2dw
212 | 7/9ncPD/Ymvi/zY7cf9OU1//TVJZ/ycrLv8nKy7/Ky8y/ysvM/8nKy//Jysu/01SWv9HS1L/Gh84/zU+
213 | ev85QoP/OUKC/zlCgv85QoL/OUKC/zlCguE5QoI5OUKCADlCggBncO8AZ3DvCmdw76dncO//Z3Dv/2dw
214 | 7/9ncO//Z3Dv/2Zv7f8/RIf/Gx4p/z1BSf9eY2z/eoCN/4OKmP+FjZr/hY2a/4OKmP96gI3/XmRt/zc7
215 | QP8KDQ7/HyVE/zhBgf85QoL/OUKC/zlCgv85QoL/OUKC/zlCgqc5QoIKOUKCAGdw7wBncO9FZ3Dv72dw
216 | 7/9ncO//Z3Dv/2dw7/9ocfH/VVzA/yAjN/8bHSj/XGFt/4uSof+KkaD/iZCf/4mQn/+JkJ//iZCf/4qR
217 | oP+Mk6L/Vlxk/woNDf8MDxX/LTVm/zpDg/85QoL/OUKC/zlCgv85QoL/OUKC7zlCgkU5QoIAZ3DvBGdw
218 | 75dncO//Z3Dv/2dw7/9ncO//Z3Dv/2Zv7P83PHP/GRsl/x4hLP9tcoH/i5Kh/4mQn/+JkJ//iZCf/4mQ
219 | n/+JkJ//iZCf/4uSof9pb3n/DhER/wgLCv8bIDj/OEGA/zlCgv85QoL/OUKC/zlCgv85QoL/OUKClzlC
220 | ggRncO8iZ3Dv1Gdw7/9ncO//Z3Dv/2dw7/9ocfH/XGPR/yMmP/8ZHCb/HB8q/2VreP+LkqH/iZCf/4mQ
221 | n/+JkJ//iZCf/4mQn/+JkJ//i5Kh/2Blb/8LDg7/CQsL/w4SGv8xOXD/OUOD/zlCgv85QoL/OUKC/zlC
222 | gv85QoLUOUKCImdw71BncO/yZ3Dv/2dw7/9ncO//Z3Dv/2hx8v9LUqf/Gx4q/xodKP8eISz/ZGl2/4qR
223 | oP+JkJ//iZCf/4mQn/+JkJ//iZCf/4mQn/+KkaD/Vlpj/wwPD/8JDAz/CQwN/ycuV/86Q4T/OUKC/zlC
224 | gv85QoL/OUKC/zlCgvI5QoJQZ3DvfWdw7/1ncO//Z3Dv/2dw7/9ncO//Z3Dw/zpAfP8ZHCX/GRwn/zI1
225 | QP9scHz/hYya/4mRoP+GjZz/gomX/4KJl/+GjZz/ipGg/4GIlf9cYWr/JSgs/wgLC/8ICwr/HSI9/zlC
226 | gv85QoL/OUKC/zlCgv85QoL/OUKC/TlCgn1ncO+dZ3Dv/2dw7/9ncO//Z3Dv/2dw7/9kbef/LjJb/xkc
227 | Jf8bHin/TlFc/2tvev94fYn/h46c/1BXYf9XXWj/V11p/1FXYv+Hjpz/c3iE/2lteP9ITFP/Cw4O/wgL
228 | Cv8VGSr/N0B9/zlCgv85QoL/OUKC/zlCgv85QoL/OUKCnWdw76xncO//Z3Dv/2dw7/9ncO//aHHx/15m
229 | 2P8lKUT/GRwl/yYpNf9hZXD/a296/2xxfP97gY3/c3qH/4GIlv+BiJb/dHqH/3uBjf9scHv/a296/19j
230 | bf8YGx3/CAsK/xAUHv80PHb/OUKD/zlCgv85QoL/OUKC/zlCgv85QoKsZ3DvrGdw7/9ncO//Z3Dv/2hx
231 | 8P9jbOf/QUiR/xwfL/8ZGyb/NThE/2lteP9manX/V1tl/2Roc/96f4v/hYya/4WMmv96f4z/ZGhz/1db
232 | Zf9manX/aW14/yotMf8HCgn/DhEX/y41Z/85QoL/OUKC/zlCgv85QoL/OUKC/zlCgqxncO+dZ3Dv/2dw
233 | 7/9ncPD/YWrg/zk/ev8dITL/Gh0o/xkcJ/89QUz/a296/z9DTf8PFBv/LTE6/2drdv9ucn3/bnJ9/2dr
234 | dv8tMTr/DxQb/z9DTf9rb3r/NDc8/wkMDv8VGCD/HSEy/ykuU/83P3v/OUKD/zlCgv85QoL/OUKCnWdw
235 | 731ncO/9Z3Dv/2Zu6/87QX7/Gh0n/xodJ/8aHSj/GRwn/zc7Rf9qbnn/NzxF/wgNFP8jKDD/ZWl0/2pu
236 | ef9qbnn/ZWl0/yQoMf8IDRT/NztE/2puef8uMjj/ExYe/xodKP8aHSf/Gh0n/ycsT/84QYD/OUKC/zlC
237 | gv07RId9Z3DvUGdw7/JocfH/WWHK/yEkOf8ZHCf/Gh0o/xodKP8ZHCf/JCcy/1xga/9iZnH/SExW/1pe
238 | aP9rb3r/a296/2tvev9rb3r/Wl5p/0hMVv9iZnH/XF9q/yEkLv8ZHCf/Gh0o/xodKP8aHSf/HSAw/zM7
239 | cf85QoL/RU6e8lZfxlBncO8iZ3Dv1Ghx8v9OVq//Gx4r/xodKP8aHSj/Gh0o/xodKP8aHCj/LzI9/1pd
240 | aP9na3b/Z2t2/2Nncv9eYm3/XmJt/2Nncv9na3b/Z2t2/1pdaf8wMj7/Gh0o/xodKP8aHSj/Gh0o/xod
241 | KP8aHSn/LjVk/0dQo/9gad/Ua3T4Imdw7wRncO+XaHHy/1NbvP8dIDD/Gh0n/xodKP8aHSj/Gh0o/xod
242 | KP8ZHCf/ISQv/ysuOf8sLzr/Jyo1/yIlMP8iJTD/Jyo1/y0wO/8rLjn/ISQv/xocKP8aHSj/Gh0o/xod
243 | KP8aHSj/Gh0o/xseKv8+RYr/Ymvj/2hx8ZdmcO4EZ3DvAGdw70VncPDvY2vk/zQ5av8aHCf/GRwl/xkc
244 | Jv8aHSf/Gh0o/xodKP8aHSj/GRwn/xkcJ/8ZHCf/GRwn/xkcJ/8ZHCf/GRwn/xkcJ/8aHSj/Gh0o/xod
245 | KP8aHSf/GRwl/xkbJf8aHSf/MjZm/2Bo3f9ocfHvZ3DvRWdw7wBncO8AZ3DvCmdw76dncPD/YGjc/0ZM
246 | mf87QHv/QEWI/yYqR/8ZHCb/Gh0o/xodKP8aHSj/Gh0o/xodKP8aHSj/Gh0o/xodKP8aHSj/Gh0o/xod
247 | KP8aHSj/GRwm/yMmP/89Q4P/O0B8/0ZMmP9gaNz/aHHw/2dw76dncO8KZ3DvAGdw7wBncO8AZ3DvOWdw
248 | 7+FncPD/aHHx/2dw8P9ocfL/UFez/yEkOf8ZHCX/Gh0o/xodKP8aHSj/Gh0o/xodKP8aHSj/Gh0o/xod
249 | KP8aHSj/Gh0o/xkcJf8hJDn/TVSt/2hx8f9ncfD/aHHx/2dw8P9ncO/hZ3DvOWdw7wBncO8AAAAAAGdw
250 | 7wBncO8BZ3DvbWdw7/VncO//Z3Dv/2dw7/9ncO//T1ax/ycrSf8ZHCb/GRwm/xodJ/8aHSj/Gh0o/xod
251 | KP8aHSj/Gh0n/xkcJv8ZHCb/JytI/09Wsf9ncO//Z3Dv/2dw7/9ncO//Z3Dv9Wdw721ncO8BZ3DvAAAA
252 | AAAAAAAAAAAAAGdw7wBncO8KZ3Dvimdw7/lncO//Z3Dv/2dw7/9ocfH/XGTT/0BGif8pLU3/HiEy/xsd
253 | Kf8aHCf/Ghwn/xodKf8eITL/KS1N/0BFif9cZNP/aHHx/2dw7/9ncO//Z3Dv/2dw7/lncO+KZ3DvCmdw
254 | 7wAAAAAAAAAAAAAAAAAAAAAAAAAAAGdw7wBncO8PZ3Dvimdw7/VncO//Z3Dv/2dw7/9ocfH/Z3Dw/2Fp
255 | 3v9VXMD/S1Gm/0VMmP9FS5j/S1Gm/1VcwP9had//Z3Dw/2hx8f9ncO//Z3Dv/2dw7/9ncO/1Z3Dvimdw
256 | 7w9ncO8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGdw7wBncO8KZ3DvbWdw7+FncO//Z3Dv/2dw
257 | 7/9ncO//Z3Dw/2hx8v9ocfL/aHHy/2hx8v9ocfL/aHHy/2dw8P9ncO//Z3Dv/2dw7/9ncO//Z3Dv4Wdw
258 | 721ncO8KZ3DvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGdw7wBncO8CZ3DvOGdw
259 | 76dncO/vZ3Dv/2dw7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv72dw
260 | 76dncO84Z3DvAmdw7wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGdw
261 | 7wBncO8AZ3DvC2dw70VncO+XZ3Dv1Gdw7/JncO/9Z3Dv/2dw7/9ncO//Z3Dv/2dw7/1ncO/yZ3Dv1Gdw
262 | 75dncO9FZ3DvC2dw7wBncO8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
263 | AAAAAAAAAAAAAAAAAABncO8AZ3DvAGdw7wVncO8iZ3DvUGdw731ncO+dZ3DvrGdw76xncO+dZ3DvfWdw
264 | 71BncO8iZ3DvBWdw7wBncO8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/wAP//wAA//wA
265 | AD/4AAAf8AAAD+AAAAfAAAADwAAAA4AAAAGAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
266 | AAAAAAAAAAAAAAAAAAAAAAAAgAAAAYAAAAHAAAADwAAAA+AAAAfwAAAP+AAAH/wAAD//AAD//8AD/ygA
267 | AAAwAAAAYAAAAAEAIAAAAAAAACQAAMIOAADCDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
268 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ3DvAGdw7wJncO8RZ3DvKmdw
269 | 70hncO9jZ3Dvdmdw74BocfGAXGXUdjxGjGM5QoFIOUKCKjlCghE5QoICOUKCAAAAAAAAAAAAAAAAAAAA
270 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
271 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ3DvAGdw7wFncO8VZ3DvRmdw
272 | 74JncO+1Z3Dv2Gdw7+tncO/1Z3Dv+mhw8PxhauL8Rk+i+jlCgvU5QoLrOUKC2DlCgrU5QoKCOUKCRjlC
273 | ghU5QoIBOUKCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
274 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGdw7wBncO8CZ3DvJGdw
275 | 73BncO+/Z3Dv7mdw7/5ncO//Z3Dv/2dw7/9ncO//Z3Dw/2Fq4v9GUKP/OUKB/zlCgv85QoL/OUKC/zlC
276 | gv85QoL+OUKC7jlCgr85QoJwOUKCJDlCggI5QoIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
277 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABncO8AZ3DvAGdw
278 | 7xlncO9wZ3Dvzmdw7/pncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw7/9ocPD/YWvi/0ZPov85QoH/OUKC/zlC
279 | gv85QoL/OUKC/zlCgv85QoL/OUKC/zlCgv85QoL6OUKCzjlCgnA5QoIZOUKCADlCggAAAAAAAAAAAAAA
280 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGdw
281 | 7wBncO8FZ3DvRGdw77hncO/4Z3Dv/2dw7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw8P9hauL/Rk+i/zhB
282 | gf84QYL/OEGC/zlCgv85QoL/OUKC/zlCgv85QoL/OUKC/zlCgv85QoL/OUKC/zlCgvg5QoK4OUKCRDlC
283 | ggU5QoIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
284 | AABncO8AZ3DvAGdw7w1ncO9wZ3Dv4Wdw7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw7/9ncO//Z3Dw/2Fq
285 | 4v9JUqP/QUqE/0RNhv9FTob/QUqF/zxFg/84QYL/OUKC/zlCgv85QoL/OUKC/zlCgv85QoL/OUKC/zlC
286 | gv85QoL/OUKC4TlCgnA5QoINOUKCADlCggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
287 | AAAAAAAAAAAAAGdw7wBncO8AZ3DvFGdw74xncO/yZ3Dv/2dw7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw
288 | 7/9ncPD/aHHk/2hwrv9yeZb/fYSa/4CHnP+BiJz/fYSa/3J6lv9aYo3/P0iE/zhBgv85QoL/OUKC/zlC
289 | gv85QoL/OUKC/zlCgv85QoL/OUKC/zlCgvI5QoKMOUKCFDlCggA5QoIAAAAAAAAAAAAAAAAAAAAAAAAA
290 | AAAAAAAAAAAAAAAAAAAAAAAAZ3DvAGdw7wBncO8UZ3DvlWdw7/hncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw
291 | 7/9ncO//Z3Dv/2dw8P9rdOX/foa1/4iPnv+KkZ//ipGf/4qRn/+KkZ//ipGf/4qRn/+Ij5//cnmW/0NM
292 | hv84QYL/OUKC/zlCgv85QoL/OUKC/zlCgv85QoL/OUKC/zlCgv85QoL4OUKClTlCghQ5QoIAOUKCAAAA
293 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ3DvAGdw7w1ncO+MZ3Dv+Gdw7/9ncO//Z3Dv/2dw
294 | 7/9ncO//Z3Dv/2dw7/9ncO//Z3Dw/2Vu5P96grT/ipGe/4mQn/+KkaD/i5Kh/4uSof+LkqH/i5Kh/4qR
295 | oP+JkJ//ipGf/211lP88RYT/OUKC/zlCgv85QoL/OUKC/zlCgv85QoL/OUKC/zlCgv85QoL/OUKC+DlC
296 | gow5QoINOUKCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABncO8AZ3DvBGdw73BncO/yZ3Dv/2dw
297 | 7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw7/9ocfH/X2fd/1pgnP+FjZz/i5Kh/4SLmf9zeob/Ymhy/1le
298 | Z/9ZXmf/Ymhx/3N5hv+Ei5n/i5Kh/4aNnf9JUHf/NT17/zlCg/85QoL/OUKC/zlCgv85QoL/OUKC/zlC
299 | gv85QoL/OUKC/zlCgvI5QoJwOUKCBDlCggAAAAAAAAAAAAAAAAAAAAAAAAAAAGdw7wBncO8AZ3DvRWdw
300 | 7+FncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2hx8f9eZ9j/NDhq/11icP+Hjpz/X2Vv/y4z
301 | N/8UFxj/Cg0N/wgLCv8ICwr/Cg0N/xQXGf8uMzf/X2Vu/4eOnP9YXGf/Gh84/zM7df85QoP/OUKC/zlC
302 | gv85QoL/OUKC/zlCgv85QoL/OUKC/zlCgv85QoLhOUKCRTlCggA5QoIAAAAAAAAAAAAAAAAAZ3DvAGdw
303 | 7wBncO8ZZ3DvuGdw7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw7/9ncO//aHHw/2Bo3P8yNmT/IiUv/2lv
304 | e/9CRk3/Fxoc/x8jJf8uMjb/NzxA/zo/Q/86P0T/NzxA/y4yNv8fIyX/Fhob/0JGTf9ma3X/EhUW/xYb
305 | MP80PXf/OUKD/zlCgv85QoL/OUKC/zlCgv85QoL/OUKC/zlCgv85QoL/OUKCuDlCghk5QoIAOUKCAAAA
306 | AAAAAAAAZ3DvAGdw7wFncO9wZ3Dv+Gdw7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw7/9ncPD/ZG3p/zk/
307 | ef8ZHCb/KCs2/0BFTP9ARUv/a3F8/36Fk/+FjJr/iI+d/4iQnv+IkJ7/iI+d/4WMmv9/hZP/a3F8/0FG
308 | TP8+Q0n/GRwe/wgLCv8cIjz/N0B+/zlCgv85QoL/OUKC/zlCgv85QoL/OUKC/zlCgv85QoL/OUKC+DlC
309 | gnA5QoIBOUKCAAAAAABncO8AZ3DvAGdw7yRncO/OZ3Dv/2dw7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw
310 | 7/9ocfH/TFOp/x0gL/8ZHCf/HyIt/1RZY/+Hjpz/i5Kh/4qRoP+JkJ//iZCf/4mQn/+JkJ//iZCf/4mQ
311 | n/+KkaD/i5Kh/4ePnP9SWF//EBMU/wgLC/8LDhH/Jy5Z/zlCg/85QoL/OUKC/zlCgv85QoL/OUKC/zlC
312 | gv85QoL/OUKC/zlCgs45QoIkOUKCADlCggBncO8AZ3DvAGdw73BncO/6Z3Dv/2dw7/9ncO//Z3Dv/2dw
313 | 7/9ncO//Z3Dv/2dx8P9gaN7/Ky5T/xkcJv8ZHCf/Ky86/32Ekf+KkaD/iZCf/4mQn/+JkJ//iZCf/4mQ
314 | n/+JkJ//iZCf/4mQn/+JkJ//iZCf/4qRoP98go//HSEj/wgLC/8ICwv/Excm/zQ9d/85QoP/OUKC/zlC
315 | gv85QoL/OUKC/zlCgv85QoL/OUKC/zlCgvo5QoJwOUKCADlCggBncO8AZ3DvFWdw779ncO//Z3Dv/2dw
316 | 7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2hx8f9JT6H/Gx4q/xodKP8YGyb/NjlF/4SLmv+JkJ//iZCf/4mQ
317 | n/+JkJ//iZCf/4mQn/+JkJ//iZCf/4mQn/+JkJ//iZCf/4mQn/+Ei5n/KS0w/wcKCv8JDAz/CQwN/yYs
318 | VP85Q4P/OUKC/zlCgv85QoL/OUKC/zlCgv85QoL/OUKC/zlCgv85QoK/OUKCFTlCggBncO8AZ3DvRmdw
319 | 7+5ncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw7/9ncO//Z3Dw/2Rs5v8wNF//GRwl/xodKP8ZGyb/MzZD/4OK
320 | mP+JkJ//iZCf/4mQn/+JkJ//iZCf/4mQn/+JkJ//iZCf/4mQn/+JkJ//iZCf/4mQoP+CiZf/Jiot/wcK
321 | Cv8JDAz/CAsK/xUaLf82P3z/OUKC/zlCgv85QoL/OUKC/zlCgv85QoL/OUKC/zlCgv85QoLuOUKCRjlC
322 | ggBncO8BZ3DvgWdw7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw7/9ncO//aHHx/1dexP8gIzb/Gh0n/xod
323 | KP8ZHCf/KS04/3yDkP+KkaD/iZCf/4mQn/+JkJ//iZCf/4mQn/+JkJ//iZCf/4mQn/+JkJ//iZCf/4qR
324 | oP96gI7/Gx4h/wgLC/8JDAz/CQwL/wwPFP8uNmj/OkOD/zlCgv85QoL/OUKC/zlCgv85QoL/OUKC/zlC
325 | gv85QoL/OUKCgTlCggFncO8RZ3DvtWdw7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw7/9ncO//aHHx/0VK
326 | lf8aHSf/Gh0o/xodKP8ZHCf/Ky45/3l/jP+KkaD/iZCf/4mQn/+JkJ//iZCf/4mQn/+JkJ//iZCf/4mQ
327 | n/+JkJ//iZCf/4qRoP9xdoL/Fxoc/wgLC/8JDAz/CQwM/wkMDP8iKU3/OUOD/zlCgv85QoL/OUKC/zlC
328 | gv85QoL/OUKC/zlCgv85QoL/OUKCtTlCghFncO8qZ3Dv2Gdw7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw
329 | 7/9ncO//ZW7r/zQ4af8ZHCX/Gh0o/xodKP8aHSj/RUhU/3h9if+JkJ//iZCf/4mQn/+JkJ//iZCf/4mQ
330 | n/+JkJ//iZCf/4mQn/+JkJ//iZCf/4iPnv9jaHH/LzI3/woNDf8JDAz/CQwM/wgLCv8YHTL/OEF//zlC
331 | gv85QoL/OUKC/zlCgv85QoL/OUKC/zlCgv85QoL/OUKC2DlCgipncO9IZ3Dv62dw7/9ncO//Z3Dv/2dw
332 | 7/9ncO//Z3Dv/2dw7/9ocfD/X2fb/yYqR/8ZHCb/Gh0o/xkcJ/8lKDP/X2Jt/25yfv+DiZf/iZCf/4mQ
333 | n/+KkaD/goqX/4WMmv+FjJr/gomX/4qRoP+JkJ//ipGg/3yDkP9bYGn/WV1m/xcaHP8ICwv/CQwM/wkL
334 | C/8QFB7/Mzx2/zlCg/85QoL/OUKC/zlCgv85QoL/OUKC/zlCgv85QoL/OUKC6zlCgkhncO9jZ3Dv9Wdw
335 | 7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw7/9ocfL/Vl7D/x8iNP8aHSf/Gh0o/xkcJ/89QEv/am55/2pu
336 | ef91eob/iI+d/4mQnv9mbXj/LTM7/19lcP9fZXH/LjM8/2Zsef+JkJ//h46c/2xxfP9na3X/am55/zM3
337 | PP8ICwv/CQwM/wkMDP8LDxP/LTVo/zpDg/85QoL/OUKC/zlCgv85QoL/OUKC/zlCgv85QoL/OUKC9TlC
338 | gmNncO92Z3Dv+mdw7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw7/9ocfL/TFOp/xseKv8aHSj/Gh0o/x4h
339 | LP9WWWT/a296/2puef9rb3r/e4GN/4iQnv9PVWD/QEdQ/3mAjf96gI7/QUZR/09VYP+Jj57/eX+L/2lt
340 | eP9qbnn/a296/1FVXf8OERL/CQwM/wkMDP8JDA7/KC5Z/zpDhP85QoL/OUKC/zlCgv85QoL/OUKC/zlC
341 | gv85QoL/OUKC+jlCgnZncO+AZ3Dv/Gdw7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw7/9ncPD/QEaK/xkc
342 | Jv8aHSj/GRwn/ywvOv9laXT/am55/2puef9qbnn/bHB7/32Dj/+FjJr/iI+e/4qRoP+KkaD/iI+e/4WM
343 | m/99g5D/bHB7/2puef9qbnn/am55/2Rocv8fIiX/CAsL/wkMDP8ICwv/IidK/zpDg/85QoL/OUKC/zlC
344 | gv85QoL/OUKC/zlCgv85QoL/OUKC/DlCgoBncO+AZ3Dv/Gdw7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw
345 | 7/9VXsb/Ki9V/xkcJv8aHSj/GRwn/z1AS/9qbnn/am55/2tvev9obXf/aG13/2xxe/96gIz/h46c/4mQ
346 | oP+JkZ//h46c/3qAjP9scXz/aGx3/2hsd/9rb3r/am55/2puef8zNjz/CAsL/wkMDP8ICwr/HSI+/zlC
347 | g/85QoP/OUKC/zlCgv85QoL/OUKC/zlCgv85QoL/OUKC/DlCgoBncO92Z3Dv+mdw7/9ncO//Z3Dv/2dw
348 | 7/9ncO//Z3Dv/1FZuf8tM2H/HSAy/xodJ/8aHSj/Gh0o/0lMV/9rb3r/am55/1NXYf8rMDj/LjM7/1hd
349 | Z/9rb3r/cXaC/3uBjv97gY3/cnaC/2tvev9YXWf/LjM7/yovOP9TV2H/am55/2tve/9CRUz/CQwM/wkM
350 | DP8MDxH/Gh0t/ysxWv81PXb/OUKD/zlCgv85QoL/OUKC/zlCgv85QoL/OUKC+jlCgnZncO9jZ3Dv9Wdw
351 | 7/9ncO//Z3Dv/2dw7/9ncO7/S1Kn/yImP/8aHCf/Gh0n/xodKP8aHSj/Gx0p/01RW/9scHv/ZGhz/yEm
352 | Lv8IDRP/CA0U/ykuNv9na3b/am55/2puef9qbnn/am55/2drdv8pLjf/CA0U/wgNE/8hJS7/Y2hz/2xw
353 | e/9HS1L/Cg0N/wwPEf8WGSP/Gh0o/xodKP8fIzf/LjVj/zlCgf85QoL/OUKC/zlCgv85QoL/OUKC9TlC
354 | gmNncO9IZ3Dv62dw7/9ncO//Z3Dv/2hx8f9QV7L/ICM3/xkcJv8aHSj/Gh0o/xodKP8aHSj/Gh0o/0dL
355 | Vv9scHv/YWVw/xofJ/8IDRT/CA0U/yElLv9laXT/am55/2puef9qbnn/am55/2VpdP8hJi7/CA0U/wgN
356 | FP8aHyb/YWVw/2xwe/9AQ0r/DA8R/xYZI/8aHSj/Gh0o/xodKP8aHSf/HB8v/y82Z/85QoP/OUKC/zlC
357 | gv85QoL/OUKC6zlCg0hncO8qZ3Dv2Gdw7/9ncO//Z3Dw/2Fp4P8sMFb/GRwl/xodKP8aHSj/Gh0o/xod
358 | KP8aHSj/GRwn/zU5RP9pbXj/aW14/0FFTv8WGiL/GB0k/0hMVv9qbnn/am55/2puef9qbnn/am55/2pu
359 | ef9ITVf/GB0l/xYaIv9ARU7/aW14/2hsd/8uMTj/FRgh/xodKP8aHSj/Gh0o/xodKP8aHSj/Ghwn/yEl
360 | Pv82P3v/OUKC/zlCgv85QoH/PkiQ2EtUrSpncO8RZ3DvtWdw7/9ncO//aHHy/1FZt/8dIC//Gh0o/xod
361 | KP8aHSj/Gh0o/xodKP8aHSj/Gh0o/x8iLv9TV2L/a296/2lteP9dYWv/XmJt/2lteP9qbnn/am55/2pu
362 | ef9qbnn/am55/2puef9pbnj/XmNt/11hbP9pbXj/bG97/1NWYf8eICr/Gh0o/xodKP8aHSj/Gh0o/xod
363 | KP8aHSj/Gh0o/xseK/8vN2n/OUOD/zhBgf9CS5j/WmPRtW11/BFncO8BZ3DvgWdw7/9ncO//aHHy/0VM
364 | l/8aHSf/Gh0o/xodKP8aHSj/Gh0o/xodKP8aHSj/Gh0o/xkcJ/8pLDf/WFxn/2tuev9scHv/bHB7/2tv
365 | ev9rb3r/a296/2puef9qbnn/a296/2tvev9rb3r/bHB7/2xwe/9rb3r/WVxn/yksN/8ZHCf/Gh0o/xod
366 | KP8aHSj/Gh0o/xodKP8aHSj/Gh0o/xodJ/8rMVv/OUKC/0JLl/9eZ9n/aHHxgWlz9QFncO8AZ3DvRmdw
367 | 7+5ncO//aHHy/0VLlf8aHCb/Gh0o/xodKP8aHSj/Gh0o/xodKP8aHSj/Gh0o/xodKP8ZHCf/JCYy/z9C
368 | Tf9QU17/VVhj/1JWYf9MT1v/Q0dR/zs+Sv88Pkr/Q0ZR/0xPWv9TVmH/VVhj/1BUX/8/Qk3/JCcy/xkc
369 | J/8aHSj/Gh0o/xodKP8aHSj/Gh0o/xodKP8aHSj/Gh0o/xodJ/8pMFn/QkuZ/15n2v9ocPDuZ3DvRmdw
370 | 7wBncO8AZ3DvFWdw779ncO//aHHy/1BXtP8cHy7/Gh0n/xodKP8aHSj/Gh0o/xodKP8aHSj/Gh0o/xod
371 | KP8aHSj/GRwn/xkcJ/8bHin/HSAr/xwfKv8aHSj/GRwn/xkcJ/8ZHCf/GRwn/xodKP8cHyr/HSAr/xse
372 | Kf8ZHCf/GRwn/xodKP8aHSj/Gh0o/xodKP8aHSj/Gh0o/xodKP8aHSj/Gh0o/xodKf84P3z/Xmfb/2hw
373 | 8P9ncO+/Z3DvFWdw7wBncO8AZ3DvAGdw73BncO/6Z3Dw/2Jq4f8wNF7/GRwl/xodJ/8aHSj/Gh0o/xod
374 | J/8aHSj/Gh0o/xodKP8aHSj/Gh0o/xodKP8aHSj/Gh0o/xodKP8aHSj/Gh0o/xodKP8aHSj/Gh0o/xod
375 | KP8aHSj/Gh0o/xodKP8aHSj/Gh0o/xodKP8aHSj/Gh0o/xodKP8aHSj/Gh0o/xodKP8aHSf/GRwl/yww
376 | Vv9cZNP/aHHx/2dw7/pncO9wZ3DvAGdw7wBncO8AZ3DvAGdw7yRncO/OZ3Dv/2hx8f9ZYcv/MDRf/xwg
377 | Lv8aHSf/Gx4p/x0gMP8aHSn/Gh0o/xodKP8aHSj/Gh0o/xodKP8aHSj/Gh0o/xodKP8aHSj/Gh0o/xod
378 | KP8aHSj/Gh0o/xodKP8aHSj/Gh0o/xodKP8aHSj/Gh0o/xodKP8aHSj/Gh0o/xodKP8cHy7/Gx0q/xoc
379 | KP8dHy7/LzRf/1lgyf9ocfH/Z3Dv/2dw785ncO8kZ3DvAGdw7wAAAAAAZ3DvAGdw7wFncO9wZ3Dv+Gdw
380 | 7/9ocfH/Ymvi/1FZtv9HTpz/S1Km/1Nauv8wM1//GRwm/xodKP8aHSj/Gh0o/xodKP8aHSj/Gh0o/xod
381 | KP8aHSj/Gh0o/xodKP8aHSj/Gh0o/xodKP8aHSj/Gh0o/xodKP8aHSj/Gh0o/xodKP8aHSj/GRwm/ygs
382 | Tv9NVK7/TFKm/0dOnP9RWLX/Ymri/2hx8f9ncO//Z3Dv+Gdw73BncO8BZ3DvAAAAAAAAAAAAZ3DvAGdw
383 | 7wBncO8ZZ3DvuGdw7/9ncO//Z3Dw/2hx8v9ocfL/aHHy/2ly8/9YX8f/JilG/xkcJf8aHSj/Gh0o/xod
384 | KP8aHSj/Gh0o/xodKP8aHSj/Gh0o/xodKP8aHSj/Gh0o/xodKP8aHSj/Gh0o/xodKP8aHSj/Gh0o/xod
385 | KP8ZHCb/JShD/1Nbvv9ocfL/aHHy/2hx8v9ocfL/Z3Dw/2dw7/9ncO//Z3DvuGdw7xlncO8AZ3DvAAAA
386 | AAAAAAAAAAAAAGdw7wBncO8AZ3DvRWdw7+FncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw7/9ocPH/Ulq5/yUp
387 | Rf8ZHCX/Gh0o/xodKP8aHSj/Gh0o/xodKP8aHSj/Gh0o/xodKP8aHSj/Gh0o/xodKP8aHSj/Gh0o/xod
388 | KP8aHSj/Gh0o/xkcJf8lKUT/Ulm4/2dx8P9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw7/9ncO/hZ3DvRWdw
389 | 7wBncO8AAAAAAAAAAAAAAAAAAAAAAAAAAABncO8AZ3DvBGdw73BncO/yZ3Dv/2dw7/9ncO//Z3Dv/2dw
390 | 7/9ncO//Z3Hw/1dexf8vM17/Gx4q/xkcJv8aHSj/Gh0o/xodKP8aHSj/Gh0o/xodKP8aHSj/Gh0o/xod
391 | KP8aHSj/Gh0o/xodKP8ZHCb/Gx4p/y8zXf9XXsT/Z3Dw/2dw7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw
392 | 7/JncO9wZ3DvBGdw7wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ3DvAGdw7w1ncO+MZ3Dv+Gdw
393 | 7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2hx8f9hauD/Rk2Z/youUP8cHy3/GRwl/xkcJf8ZHCb/Gh0n/xod
394 | J/8aHSf/Gh0n/xkcJv8ZHCX/GRwl/x0fLf8qLlH/Rk2a/2Fq4P9ocfH/Z3Dv/2dw7/9ncO//Z3Dv/2dw
395 | 7/9ncO//Z3Dv+Gdw74xncO8NZ3DvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ3DvAGdw
396 | 7wBncO8UZ3DvlWdw7/hncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw7/9ncPD/aHHw/2Bp3f9PVrD/O0F9/y0x
397 | WP8lKEL/ICM4/x8iM/8fIjP/ICM4/yQnQv8sMFf/PEF+/09WsP9gaN3/aHHx/2dw8P9ncO//Z3Dv/2dw
398 | 7/9ncO//Z3Dv/2dw7/9ncO/4Z3DvlWdw7xRncO8AZ3DvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
399 | AAAAAAAAAAAAAGdw7wBncO8AZ3DvFGdw74xncO/yZ3Dv/2dw7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw
400 | 8P9ocfL/Z3Dv/2Ns5f9eZtf/WWDK/1Zdwv9WXcL/WGDK/15m1v9jbOX/Z3Dv/2hx8v9ncPD/Z3Dv/2dw
401 | 7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw7/JncO+MZ3DvFGdw7wBncO8AAAAAAAAAAAAAAAAAAAAAAAAA
402 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABncO8AZ3DvAGdw7w1ncO9wZ3Dv4Wdw7/9ncO//Z3Dv/2dw
403 | 7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw8P9ocfH/aHHx/2hx8v9ocfL/aHHx/2hx8f9ncPD/Z3Dv/2dw
404 | 7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv4Wdw73BncO8NZ3DvAGdw7wAAAAAAAAAAAAAA
405 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGdw7wBncO8FZ3DvRGdw
406 | 77hncO/4Z3Dv/2dw7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw
407 | 7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw7/hncO+4Z3DvRGdw7wVncO8AAAAAAAAA
408 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
409 | AABncO8AZ3DvAGdw7xlncO9wZ3Dvzmdw7/pncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw
410 | 7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw7/9ncO/6Z3Dvzmdw73BncO8ZZ3DvAGdw
411 | 7wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
412 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGdw7wBncO8CZ3DvJGdw73BncO+/Z3Dv7mdw7/5ncO//Z3Dv/2dw
413 | 7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw7/9ncO/+Z3Dv7mdw779ncO9wZ3DvJGdw
414 | 7wJncO8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
415 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ3DvAGdw7wFncO8VZ3DvRmdw
416 | 74JncO+1Z3Dv2Gdw7+tncO/1Z3Dv+mdw7/xncO/8Z3Dv+mdw7/VncO/rZ3Dv2Gdw77VncO+CZ3DvRmdw
417 | 7xVncO8BZ3DvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
418 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
419 | AAAAAAAAZ3DvAGdw7wJncO8RZ3DvKmdw70hncO9jZ3Dvdmdw74BncO+AZ3Dvdmdw72NncO9IZ3DvKmdw
420 | 7xFncO8CZ3DvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
421 | AAAAAAAAAAAAAAAAAAD//4AB//8AAP/8AAA//wAA//AAAA//AAD/4AAAB/8AAP+AAAAB/wAA/wAAAAD/
422 | AAD+AAAAAH8AAPwAAAAAPwAA+AAAAAAfAADwAAAAAA8AAPAAAAAADwAA4AAAAAAHAADAAAAAAAMAAMAA
423 | AAAAAwAAwAAAAAADAACAAAAAAAEAAIAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
424 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
425 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAQAAgAAAAAABAADAAAAAAAMAAMAAAAAAAwAAwAAAAAAD
426 | AADgAAAAAAcAAPAAAAAADwAA8AAAAAAPAAD4AAAAAB8AAPwAAAAAPwAA/gAAAAB/AAD/AAAAAP8AAP+A
427 | AAAB/wAA/+AAAAf/AAD/8AAAD/8AAP/8AAA//wAA//+AAf//AACJUE5HDQoaCgAAAA1JSERSAAABAAAA
428 | AQAIBgAAAFxyqGYAAHBCSURBVHja7f1HcCTrlucH/r7PVegIaJFInXm1ePVEPcmqHg6NNhzSjKRxxbHZ
429 | zKq2texVL2bXu9rWijNjpFnP0GaaM9NFYzW7qrtevVdP3Peu1qklNBAILdy/j4vjjnAgkZkQgQQQF/9r
430 | fhEZQAh3/875jvifcxTnGAls/uVfqOf8Sh3ojZ6F3evJsb/6a3vQNzrH6cNRF8c5XiF2CXnyWMeP9a7H
431 | atdjUs+lX5/Apn6mH5vUcyb1M/04/fpz5XCGcK4ATilSwp4WZCc+0o/9XYcXH27qcHa9Nq0UEqQFO0od
432 | Yerox0dv15H8rdn1eFuZnCuF04lzBXAKsIewpwXWQwQ7A2Tjn8njLFCIj2zqyAABeyuF5H3T1kAiqGmh
433 | 3y3sXaADtFNHIz6Sf3dSf9OJX9dnp0I5VwqnCOcK4IQQC316Z3cRIQ2AXHzkEeEuARWgHD8uxs8nP/M8
434 | K+xpK2D37v8yCyC9k+/e/dNKoYkogHrqZw3YAqrx40b8d6346MbvEZKyFM6VwcngXAG8IqR2+bTA+8iO
435 | nRb0MWAiPsYQwU9+5hHFkOzwGQZCv1u4d8cC4HAxgL3iAMmRKIMOAwuhhQh8FdhM/VyPj012KoZ2/B5p
436 | hXBuHbwinCuAY8SuXT7Z4TPs3NUngGlgCpiMj4n494nAJ2Z9sqNr9hb4vXAsWQD2VgiGgcWQuAKJQqgh
437 | CmAtPlaBlfi5KgOl0GFgIZxbB8eMcwUwZOwh9AEiwInATwKzwEz8czp+rsJOf363z67jj9grE3DSsHs8
438 | 3u1G9NkZN6giimAFWAKW459rDBRCG7EszpXBMeG0LKAzjV3mfRK0yyNCn+zw88Bc/HM2fr6MCHwufk0i
439 | 8MnOnuCs3qe0sKZjCyFi9rcQZbCFWAJLwFNgMf6ZWAg1xIpIgornbsKQcFYX1qlALPiJT5/482UGu/wF
440 | YCE+EqGvIEKfQZRFOioPo39P0vGFxELoI6Z/YhkkyuBxfDxhYB1sMYgbRIA5VwSHx6gvtmNBSvA9ROiL
441 | wDgi5Jfi4yKiANLmfVro9zLpv4vY7TLsVgZriAJ4BDyMjyVgA8k6tOPXnCuCQ+C7vvj2jZRvn+z2OSQ6
442 | P4MI+2XgCiL8M/Hvijwr9OfX/MVIAotpZVBHsgfLiAK4DzxAlMJy/LsWA6vgPFawT5wvxpcgJfhJQK+I
443 | mPLzwFXgGiL4F5BIfgWxCnzOhf6oSCuDHrLbV5EMwhNEEdwF7iExg3VEWSSBw3NF8BKcL8znICX4Sequ
444 | jATzFoDr8XEVUQTjiGIIGOTk4fz6DgtpN6GPCHgdcQOeIgrgTnw8RoKHWwxSiueK4Dk4X6C7sEvws8iO
445 | PoOY+DeBG8iOP4cIfhLB302vPcfxIE1bTjIJG0jm4D5wG7iFuAjLiMWQxAnOFcEunC/WGLtM/Sziw88i
446 | u/xriPBfiZ8bY5CrT0fwz/FqkSiChGOwiQQI7yNK4FvEOliKf9fm3DXYgfOFC2z+5V8kqbxkx59DfPvX
447 | EeG/igh+hUFQ79y3Pz1IYgVJ0LCKCP09RAl8g8QKFhlYBNHYX/21OcRnjRS+0ws43vUdxHcvMxD8N+Lj
448 | WvxcGVEOCQ33O33dTjESRRAiQr6FCP1d4Ov4SBTBFhJLiL7L1sB3ciGn8vg+kp+fQXb5t4A3ET9/np2m
449 | /rl/f3aQxAnSrsFTJD7wFfAlYh0sI3yDHt9RHsF3bkHH5r6LUHUnkbz9m8A7iMm/gKT5cpwL/llHWhG0
450 | kDThY8Ql+BxRBg8RslETCL9rbsF3ZmGnzP0M4stfRAT+HWTnv4Lk8Quc+/ijhnSMoIHwCO4jlsDniEJ4
451 | hMQHOnyH3IKRX+C70npFJJh3A3gXEf7E3C+xM513jtFDOn1YY+AWfA58Fj9eQjgG34m04Ugv9NSun0XM
452 | +svA28B7yK5/iYGf74769TjHNiyDQOEm4gZ8CXwKfIFwCNYZZAtGVgmM7IKPfX0P2dnnEHP/fUT4ryOB
453 | v8TcP/fzv3tIxwcaSEDwDqIEPkHcgkXEUuiPamxg5Bb9Ll9/HInuvwt8j8GuX0FSf+fm/jkSt6CLxAAS
454 | a+BjxC24hzANRzI2MFKLPxZ+D9nZ5xASz58gwn+Dwa6f5PPPcY4ECX8gsQZuI0rgI4RMtBj/rj9KSmAk
455 | FEAq0JcQeq4gAb7vI7v/FcTXz3Ae3T/H85FkCzpIbOA+YgV8iAQK7zMgEI1EgPDMC8KuQN8kstN/H/gB
456 | 4vfPI9H/dJXeOc7xIiQpwzqSKfgG+COiCG4jvIGRCBCeaQUQC7+LCPgcQuj5IaIAbiAKIcu5r3+OgyOJ
457 | DbQRgb+NKIA/IASiRURBhGdZCZxZoUhF+ctIeu894EdIpP9K/HzAeYT/HIdHkinoIqb/fSRD8AGSLXgQ
458 | P39mswRnUjBi4Q+QKP91xNz/EZLjv8DA5D+T53eOU4ckXVhHOhF9gSiBPyKpww2gexaVwJkSkFQRT+Lv
459 | vw78aXy8jkT5c5yb/OcYPhKXoIVkCb4Bfh8f3zCIC5ypoqIzIySpYF8O8fffAn6M7Pw3EaZfwHmU/xzH
460 | hyRL0EWYgrcQS+B3CHdgEVEQZyY4eCYEJRXsKyAm/nuI8P8QqdmvIDz+8yj/HlCo1ISOvR7Fo4ysRf7b
461 | /Qbnl3UXDFJPUEX6C/wBUQKfIi5CgzMSHDz1CiAl/CWExfc94KcIwecyEuw79/f3gLUWlCgAiYTKz/hp
462 | zDPhUYuy8etiRWAVqHO9uheSuMAWEgz8CPgNQh56iFCIT70SONVCk2L2lRBK7/cR4f8eUs5b5LyIZzBS
463 | SMWCrkTIAYyxhNbEh8UkAm7BqMFur5XCUQrXKhwFWmu01rhKoZSKlUISFpfXn+qV/WqQFBXVkXLijxEl
464 | 8CFCIU7qCE7tpTq1gpMS/goi/D9ChP99xA0oMMLBPmXVYAfXyXMaay1KIUa9AoMmNJZWFNLs92mFIZ3Q
465 | 0Ol1aYc92pGlGVo6NqQdGfrGYozFpMz9RGl4jsZXGl9rPK3IuR551yPvQMZzyfoeGccj57rkXIeMo7ed
466 | C2O232nbxLCASpSMHcnbBIPgYAMx/z9BlMAHiBKocoqVwKm8K7uE/zoS5f85QuudQ7r5jKzwQ7LTGsCi
467 | Ubhao4xD21pqvS5r7Rbr3TZrzTZrnR5b/YiNfkQ1jGh3uzQ7TTpRX5reRWCwxBt/bB3YZ2IAibugFTgW
468 | XOXgOJqsdin4HsWMR8H1KQQZxj2HycBhMp9hKpdn3M8wFgRkXI0xIdZabOI6pE2S0USiBJpIIPAz4NdI
469 | huAOp1gJnDoB2iX8N5Bg3y8Qbv8ckgUY2Ui/wYIxeAaU49IBlntdHtdrPKlu8bTW4nE/ZKXfZ6vdpt3s
470 | 0AlDImUwaDkiAxYcpUBbQiJi6d4XlJVYAMTmv1FYbYhUhEbjWg9HGbKuSyWbJR+4FDMOF5wMVytjXK2U
471 | WchnmM56BLhYYwjVKBsBwCBD0EKUwOfAr5Dg4G1OqRI4VbdkD+H/CSL87yKdfBJa78jCWEs3jHjU6vJF
472 | bZPb6+s8brRY7PSptzs0uz06Svx4D0UUG/FaKbAGay0aDVrHe/whuCkWdLxMlVIYY4kUREqhlMU1BrHx
473 | ldgoNhKrQWsKQcBYkGU2m+VyPsO18THeGB/jcj5L4IhFcKoW3fCR0IeXEEvgV8BvOaVK4NTciz3M/p8A
474 | /xEjI/xaTG4dYaxFG422lhCDNYZaZHna6vDl+iafrK5wr95ksx/S6LUJI0OERsd2usKCtWgVC+D2s7Ku
475 | EnM+sbqPdJNt6odS8fvZ1PNW3AYkq5C4GhpFoDU532cs8LlSyvP25ATvjFdYyOUpOj6usuAo3Di2ARY7
476 | GgmH3UrgHxElcOrcgVOhAFKpvjIi/D9Fdv73GQnhl31Yx4exEd0ooh5alltdPqtt8cXqEt9sVFnpdGmF
477 | IT2r8K3GOcOVDBJqsBil0a5HVimmtMv16TzvTU3zTrnCXDZL0XXwHQetFPYArsopR1oJfIJYAr9BlMAW
478 | pyRFeOKXelee/yqy8/8ZIvzzjIDwg6TcMNCJIpY6Xe5Ua3xU3eSLpWUetdv0I4hCRd8aUAbXgFZg9Sik
479 | 2yxWWSIDSrlY16OgLFcyGd6anuad8TFeKxeYzwYErovWJ74sh4VECTxFlMAvEUsgSRGeuBI40SudovcW
480 | kQq+P0WE//tIqi/h9Z8ZWAVYI4QbXBwLoQ2pR30eN9t8sb7JR6sbfLO5yUqnQ8+yTdKxceDNKlDWEO+H
481 | o4E4NqFRRBYiR2FsiI9mOpPlrbEK702N89ZUhcu5PAXXxVUao9S2m3FGVWFSP/AE4Qf8EskO3Ef4AydK
482 | G3ZP+OJoJKV3gQHDL9n5z5zwG4gDaDZ2ly1b/Yh79RofrSzzwfo6t7YaNLp9jJXg3OAEU8J+Jtf5S6AU
483 | BitZDklOoFGEWJY6LapP23y+ts7l5QLfn5rkB5OTXC0WyHgerqNjhuJJn8ShkNSvzDMYZNqLfz5C+APR
484 | SX25E9tg4pLeHCL8PwD+HEn5XeaMknwsIvxYRc2E3G80+MPyKr9dXuZOvclWtwMGXNR2QO27jpiSEMdH
485 | FFYr8oHL9UKeH8xM8JOZWW4US2Q8LeSok/7Chz/NhCz0AEkN/gNSTvwEaJ1UKfGJrMJUPf8Mwun/Z8ju
486 | f50zRu9VdpDfdoBuaHnQbPH7lRV+vbTC7eom1V6PCHBsEq/nXAHsgFgHCol7RBZQlrLnc6NS4hczs/x0
487 | eoaFco5AK0zCUbAxWepsXMs0bfgOEhD8D0gNwTIn1E/glV+52O/3kXr+d4D/HZLuu4mkAM+M8ANYZdHG
488 | otCs9SL+uLLC3z19wscbm9TbXSJjUMkCtfasLNYThwVUZDGuYtLP8M7YFH92ZZqfT04y7nsxU1JhdBxD
489 | ORumQaIEqkgp8T8C/x4hDa0BvVcdD3ilPnYq4l9BWnb/PD5eQ7r2nrmqPgdLaDVf1Wr8v+/e5X+694DP
490 | 1zdohiHKMhB+OBf+AyAR6lBBIwpZrNW5Xa2z0m9R8XwmMgHKMWgjrsEZWTVJQxsP6VDtI7GAGvGU4n/+
491 | kx/af/nbP76yL/TKFMCuiP81Biy/txBrwOes3MYU6t0+v1x+yv9w6xb/+GSR5U6PCIVvNPaMbEunFVYr
492 | HKtQ1oKyVMMut7dq3Kk30Z7PTDZDRrtYdaYyBOnR9BlkQ+wyUAL9V6kEXmUWIGnlNc+ggefrSF+/U73z
493 | m5hj56DQVmExhBietLv82weL/Lv7D3jcatBDSmkVFjMajLaThwIHUaYK6PUtn6yus9rqcb96gf/8ygIX
494 | szlxxZRBW30WLK2E9TqOyEAdUQAtpJdAi1eUGXglFkC8+wfANCL8v0Ai/wucmXSf2g5Zd6M+n2/W+O+/
495 | vcv/eu8hG60ORmmUThpvnGMYUDseSDuTRLZr3S4P16sstjvkcwEzno8PRFq4BmcAiUXsx0eEKIItoP3P
496 | f/LD6FVYAccueCmO/xjSt/8XiPl/BXEHTn26T6PRVrjutX6ff1xe5f/27W1+s7RGJwzFWT3VZzBaUIBV
497 | Lm0c7jW3eFSvknV9JnJ5Mq5zlvoXJTGxRAkkHYa2kHiAOW4lcKwKYA+//6dI0O91TnvE3wojzyqpajdY
498 | Vjod/u7RU/5fd+9xe30rbqmVjuzbnUG/cxwbFBqsxaqI9VaH+/U6WitmslnyrjtoY3a6b0diMLoMhtV2
499 | kCzBK4kHHHcMQCGBjjmkqu8HSJlvhVPu95O018ISYXjabPG3j57wvzx8zNNmG6sGef3tMz3FpzN6kBJk
500 | rEJZw71Gm//P7Qc0+yH/2cUFLuazaKXPQmhwdwl8Fek43EAYgy2OMcJ5bBZAKt8/hQj/LxCO/zyDIZ2n
501 | FkZZ6ZJrFfebTf7/dx/yvz5c5FGvLW25TvoLnmMHtIF2L2Kp0aYfWiaKASU/kKYopx+JJeAhm3LiClSR
502 | eMCxuQLHogBSpn8FyfH/DKH5XuUM+P3i0gtv/WGrxb+++4i/ffiEtV4XZeK01DlODSwKqy1WGTqh4XG7
503 | S9ta5gpZKr53VroaJzLjMXAFNpHsQPe4XIHjcgEUkvJLTP/vcQaCfongx902edru8K/vPODvHjxls9fl
504 | DOWav1OQTV4alIbKsNJr83cPn6JtxH998wqXczkcA1afakWwuzL2e8AKogQ6SL/BoS/AoVsAz0n5JY09
505 | ksk9pw9WeuFZrTGOYqnb5l/fuc/f3HvMWtg5pV/6HAlU6v+ugV4XHrRahGHEpUqWku9hcU7nzrPzNDSy
506 | MTuIK1BFlMCxpAaHuq5Tpn8Bqep7H2H6zSB+/6m9/klNPlpRD/v87f3H/M/37rPR656VvPI5QLI3AG7E
507 | Rr/L/3L/CX/z7VNW232cw/RHfPVIAucziOy8T6pCNpaxoWHYLkDy5WeRSb3vIQM88pyBTr4K6Ich//Bk
508 | if/fvYdsdPo4WqHNyHe0HR2ouC+DinCBzdDwb+49wncV/9XVK4xlfIyyONY5rVTtxArII7LzHtJRaB1x
509 | BYaaFRiaC7BHld8vED/mdJv+CRRExvD71TX+H9/e4f5WI2b2nZlCk3Mk2GYOiltXM4ZHjRYZpVgo5Ck6
510 | WhT66c0QpF0BjaQDN4jjAcPMCgzTAkgafCwggb83ETMm4AyIUAR8Vavzr27d5+uNeuwtnsod4hz7hsKV
511 | 4A5Peh3+vw/u4/ua//38BcYyftKZ4bQiiaXNILL0GOkb0EBKiodSKzCUXXnX7v86YgFc4pR39lFxK2os
512 | LLe6/Jt7j/hoZT3eQM6Ev3iOF0CmIihca/BNxONGh3/74Am/Wl5mvdMjsnGLstOp6NPxtEuITL1OXDk7
513 | rFjAkRXALrrv5fiL3uSs1PdbqIeGf1xc4jeLSxgTouNxG+c421BISXGkpB1paBV3qk1++fAxH64usR63
514 | aMOeaiWQ1NHcRGTrMnE6fRhKYBguQDrt9yYSuZxDeADHKvxJa63nfUjSl/65t1YpImP5dLPK3z56JAtC
515 | gWMsVsXjs88xOnAsTWv4tlqnvLKKqx3eH5+mnPX2NFPT8xL3QjIlWR4fG9KcmreQnoJLCC+gfdSPPpIC
516 | 2DXQ4xoS+b+C9PgfkumfNIKUohwptlGExtCJQjpRRM8YQmOx0iwOx9G4WuErTeBofMfD1QqFzMxLjHtr
517 | 4Wmzyd8/uM+taoOetbiAq9S5DTCCcKxMLdrsGb5er5F3PZRSvKvGmchkJd0bz2EIraUbyQCXvjH0TUQU
518 | d3KWYa0unpb1lXEcPB13LsbGreGHFkNKLOwSIltvI0pgA+hv/uVfHGnK0FEtgHSxz5uIjzLFkKP+TqxG
519 | usay0emy1GjwpNFksdNhudNlsx/S6YdE/T4ohecH5FyXcVczmfGZzuWYyWaYy+eYymTJui6RMSy2mvzt
520 | g8f8bmmDXr+P1nLf+thz8R9JKJQyhCgWW12+WG8AGmvh/clpcp5PtdNisdnkaaPLcqfLRrfPVq9Hs9+m
521 | R4gFXKvJeRnKXoaJwGMun2W+kGU+l2UiCAgcJYNgLOg4f3zENHLSRHcKkbF7SDfhJCB46OV66K+VCvzN
522 | IDz//xxJ/V1giJF/rRXtbsjtxhYfVzf4cr3G3Y0qK+0OXRPRjxQRDkobrJXAqFIOGIVDhOtAoGEqyHCh
523 | MsHlSp5LfoZuGPLZ5iafLG+y1gvRNsLoc7H/rsCiyGiH2WzAxXyOG+UiuD536w3u16qs1Vt0jcaiiIiw
524 | 1qCV7GnGGlDgKRfPajxtqRQzXK2UeL9U4r2Jca6WSpSDgMgaosGg9KN9ZWkd9gQZM/Y3SHvxZY7QTPQo
525 | FkDS4msOeAMpZRxqe6/IWD7b3OJXi0/4zeoqD6p1mv0IV0nXF2styhhcG6KMQuvYXTARiRUWhopQaer9
526 | Ll9vPcJ5ZMlpTWQtXQNaO7hxP/pTGgg6x7HA0IkMD+t9ntSb/G55FRNZujhYV6FthCKSMetxN6hkg0kI
527 | xcb06SloR7BZ7XNrs85v3UWuj5X5yeQUP7uwwM1KjsBlGAGldBuxG4jMPSQeMcYh04KH+lap3X8OafLx
528 | X8Q/5zlUc08bj8ZSmLgC/2mnyT89XuXfPXnKra0NGqFFWweN3aZ0RvHH2FjD6rhrl91+x4H5ZY3BWhnK
529 | YeO5HDKuL/7ss9VY8hxHhpVW4koRxVOWHWtxrCWCwXqw0gdSqcFQEhn6FKcQdTy4LJ4PESmLtoa81lys
530 | TPCfXpjjzy/MMJfL4cWksiOsMouQgp4icwX+TfxzkUNaAYe1AJLdfxbxSa4hqYrDdfixyfw3Qz+yfF7d
531 | 4m/uPeAfVpapdXo4VuEptZ2bNztKPwZR2nTmPlENwKA9d+riWxK/bBBkPMd3CWrbL9d2YKIble7rqLb7
532 | k6ejQjb1q8Ggl5i+ZyVm17WGr1c3WW40+bq+xX955TLvjBXJKOco5clJ0H0MkbkkHlDlkFbAganAqR5/
533 | SaOPnyEBwEMrgKSvTjMK+c3aOv/Pb+/ym8V16mFf3vD0UjbPcY5nYIFQWTJG0Q8jHjQaPG13yPsBs5kc
534 | vnOkiEBCEwZJA64gQ0Vah6EIH8YCSFcrvYY0+ahwQOF3rCKKizEU0Aojfru6zv94+z5frW7StxGuspxy
535 | uuY5zvEMFOBZTeRYCRhGhs+WNgh7CnNT8bOZcUqOg1WxO3rwt0+G61xFZPAuUifQ54Cm7IFU0a68/xWE
536 | nTSLuAMHei8xo8RP70URH69X+Z/uPuSLjXW6RPGFORf+c5xNbMehlING0zN9PttY4V/fuscHKxu0wnDg
537 | SxwcaRf8JiKLZcA9KDvwoBZAmvV3I/3BBz2TSFmUVfSt4Xajyb+5/5jP1rboRSbWJOfCf44RgoIehs83
538 | NwjuO2R9xffGJsjqQxXk7t6IbyADRzc5IC/goM5Iwvm/GH/ooXZ/ADfuwLPR7/MPj5/yh+VlemEfx5ze
539 | TuHnOMdhYGJrNrCKyPT5YmWF//n2Y76p1uhFErc7RAg6bQXcQGQyabl3oDfZF1KpvwkkAnmFIxT8WKXp
540 | WMNnG1X+w+IijbCPVQarX8lEpHOc45UhaT1g4/RCI4r4YHWVv3v4gAe1GpGJ29EdTIrShUJXEJmc4ICV
541 | ggdxAZJ6/3ngOoOCn0OFNEMMm60ev37wkAeN+rm/f47vCEQLbIZdPlhbpJxR+LhcKRUP06EoTca7jsjm
542 | EtI5aF876b6EN5X6G0cij1cRzXPoib59E/LlVpUPV5bBnu5mQec4x7CwzVWxsNTq883aOr9efsztevUw
543 | bkBilY8xkMtxwNuvFbBfCyDRNNOIqTHPoM/fodANLb9aXmI1DHGMc156e47vBBKCmrbQi2C5GfKo08as
544 | PsEozZVSAZlkYCVN+PK3TPoHziOy+QXCDeizDytgvwKcDv5dQbTMoXd/CzxstvhmZYPQJrTLc5xj9LHd
545 | ijBe8uu9kGbfsNHt8+HKIndqW/SMjdOI+7IJEitgHJHNAwUDX6oAUub/BNKN5MJBPmAvWGv5cqvKUrcv
546 | 5r85p+Ge47sHCzTCiPVWAydyWW13+Wx1jXv1Gm1jOAivDpHJC4iMTrBPN2A/FoCDBP9mEA2T1PsfeNtW
547 | VppwRDbii/V1WobzftuIQrTpcWOpgoXkefWivz9p2NR3Sp9G/Fz6SM7l/K4Letay2e7RjyBSsNJp8en6
548 | CvfrDbpGOhbuY/p8ws+ZQmR0BpHZl27SL1QAu5h/l+KjwhFKfi2War/Pg1oTa/po7GlvGH7sUPF/1kpX
549 | I2llxrNCvi1IDP52l9C9ctid55B8T+yu5+KnjbGY+BzOAcZa6j1DO+qjVYQxltVmm8/W1rhXq9MLTXzf
550 | X/g26QnDiZzuixn4siBgOvd/iYFmOYTIKoy2uBE8aXfY6vXB2oE/9J1eEFIOpZRMJtIqmUegtn8vfQ6s
551 | dDJWYIyJpxQr7AnUTCQFXCrpwa8SUruK76na+cfEi9harDXnCiCBUrRMRLvfpZTxsVba0a20m3y2btAo
552 | LhULBPqldzhJ088gsjqBBAN7vEC6XqYAkjedRYILh+/0a6VDq4disdWjE0UygTdeFKNe8ReLeNxI0qKV
553 | wnFdHMfBcRyymYBsLocXZPA8H6U0WoswJbt8ZAxhFBL2eoTdLr1uj26/RxiF8e4qSsFEISa2Drbp5mne
554 | uXrJF91V+uooaZyiHQetNUqJwDta43seQSaDn8ni+R5aOyitcJTe8R4miuj3e/S7XdqtFr1en16/RxhF
555 | RFGEMeaFDV5HFsrSJaIT9rDWB2PA0UQWVtodPl5fRinLlWIJTw/K4PeQ6DQx6CIisw+QSULP7XH/XAWw
556 | y/xf4KjBP2VQBozWVLs9wshgR/yGWzNw3owVgXFdh2zgUy5kKY+PUyxXyGWzBEGwLVz6BVNsbdJ40hhM
557 | FBFGEWEY0uv36XY7dDtd2s0anXaHTq9HLzJEBqIoIuyHmNBgjMEkW3BsbWgNjuOgtEZpjXYUjqNxHIeC
558 | 55LP5cgWiviZDIHv43kevu/jxq+R76yeM2xHlmwSBwjDkF6vR7PVol5vUK1tUduq0W23Cbt9adYSV8qN
559 | vKEQx/raYQTKi5mwchEja1htNvmjXUOhuFwq4RuDVopI73mh08HABeBroLr5l38RPa9ZyIssgCSwMB6/
560 | 2RRSBnwoj13FfOjQWpr9tpRJjjiki4yYvlnfo1QsMTU9zfTsDMViHsdxtv8usYDsAayhvf7Wxi5CZEws
561 | aH263S7dXpdeu0u/LUqi2+9jjEVpjRsLehAEBLksnh/g+y5+EJAJAnzPRSmFMWb7uyaffRjLzfM8crkc
562 | lbExjDH0w5BGvcHa8hLLy6vUanVMGG6fyyhDxR2poigSt0ilmt3Eg07XWw1+v9JHa4er+QIR0fMG1mpE
563 | RqcQmR1HmIHPdQNepAAS8s8MolEqHKXfX7xzGQUd0x/sQKMMBY52KBZLLFyYZ35ujkKxmFIMdluwDiNQ
564 | eykNpRQGi9Ya3/cJfI9SISvhOKVRSu9wF7Y/c9saS7LPJhWEFJ2fNv+PkonYPkdr0coSuJrMRIXxsTLz
565 | Fy+z+HSJpceP2KrXCM2o14bI9TRhBHGzUYgj/8ZImzGtWWt3+f3SE6LZOa4UCs/bhdPBwAuI7N5DZgjs
566 | uePu+T4p87+EMIzmGIz5OhQkah37g/q7kf3LBgGXL13i/fff48bNm5RKJTGGrdkhPIlQHTYOsvt1Sexd
567 | pf4DuQfGGKwxKMV2jEG0sxl8r3QUPwncsVPh7PW5B8EgbRgrJkTBFAt5rl+/ynvfe4/LV6+QCTKnf6z0
568 | UbA7Vrr9OGYCbl9jzUqnxR+ePuFevUHfxDMKrN19bZJxYnOI7JZ4QTbgeRZAWpPMIfPIjtbrP95htAV3
569 | u6/qaCGJymutyefzXLq0wKXLl8lmsyJ82EGkfMelGe7V2N0x8Zklsq+PS7Yitf+XHOQ7ps451jHb/3Ic
570 | xfjkOJl8gWw2z6N792g0GkRIoPAgbtJph07kwnXicxrEZpJNUjpcS/+M9U6Xj1aWsXaSq4UygXpmM01m
571 | CEwislshbhrKHm7AixRABkklzCOBwCO3+7ZKWirndBBHiUfLvFNKoZWmUqlw6epV5udmyASBaHPO25sd
572 | BMZYMkHA5StX8FyXB/fusVXfIorMyAh/Gtp1Y/dsb5nQkUw5tkqx2m7xydoqWMXlYpHMznWVbN5lRHYn
573 | EFlu7fW+z1MAiRkxGx9HMv+BpMMyroWi78uQhTguMCo31NGKsbEKV65dZ2ZmFt93twNZ58J/GFh8z2V+
574 | YR7Xdbh/7x4bGxtEJoIRWTMGMMriOZoXZOvERFLb3hmrrTafsoIBrpWKBFqjYxmze8vvFnvsuM+Y9Lv8
575 | /1kGGuSIV1wlHZaZCAJp8z0KsIM8falU4urVq8xMT+H77sCu/Q7EO48HMuDb91xmZme4cvUalXJlB8fg
576 | rMPEnJCM1kg3r+dcCUdjVRyEBSJrWW21+Xxtlbv1Ot3IphmDaQt+lhfEAfayABL2XwWJIg7F/FdKgTGE
577 | wEIuIOe5bHQScsxZhgh/oVjg0tWrTE1P43ke51S34cLzPaZnZ4miiP6tPvVG/YyvG4GykFEOGS/Y9zzR
578 | ZCONrGW13eLztRUcu4MxmHYDZhBZ9pFGITs+YS9VmqT/JuIXJ+b/0bZsBdpAqGAu6zOeCTB78d3PGhRk
579 | s1kuXrnC7Owcvu+f9DcaTVjwPJeZuVkuXLpEEARnf+0gQpVTmowb7F+hGRmJh4LQwkqrw8frSzxq1AnN
580 | NuXTUSK7M4gs79m9a8cTsYngIA0GppBI4r6qil4Gay3GkVRXRnvcyGewnpKRXWesG4iK2XPWWBytmJmd
581 | 4MKFWbKZ4EjpvHO8CDI5KhN4LMzPMTE2hrFWWuCe4eutFBQCRU5pbLS//jxWK4xOkqOWCMNqs8UfVtd4
582 | 2GjQt6Ai42hjc4gMTyEy7ex2A/ayAFyETjjFwHQYzhVOkVVem5ohh8Zx9JkLj1krAx+0VhSLJS4sXCKf
583 | z4tddo5jR6FY4MLlKwSZLP0wxJqzyyp1gPEgg3ZEwe0b2+nZeC4hio1mg98tP+Fxs4lRjupjE1d+CpHp
584 | ZzTMbgWQ+A6JAihwtAnCz/nuipvlApN+BotG6TOmAuLAjeu6zF24wNjExLZVcOBrwU6Cze7a+VHA3j0B
585 | jnLPFdNT0yxcvISxlugMK4C85zDp5zCqezAFkFwJC9rExWJKsdbp8rvFJ9xu1giVchEZThTAM7G83cKd
586 | 8P/HENMhzzD8/z0+ZDab4fWJSRZbj9h386NTgqQ0d3J8goX5C/iuRxIMPMg1AKHkdvs9Op0O7U6HMJRI
587 | sOt6BL5PPpPB9wO0o+OU4ilWlnHxjrJgrKHX69HpdOl0OoSRnJfjuGSDgGyQwfN9tFYHPydr8X2Py5cW
588 | eLL4mNXVNfKZDJ520AxjEvdxXyaFitk7E75P3g+ADlZblD2Yt51IzoBHlTAGHyvmFpzLhXzeV3pSw5hV
589 | BPYlCiDp/jOBFBIcuu33y1DSLj+cnuLDxSdsheHR3/AVwSLR17wfMDc7Rz5fOFTE31hLu9VibX2dp4tP
590 | 2ao36HY6RCbCYHFjQRkrFpmenmFyeppcNrvNw4dTODRVSUyn3emwtrbGysoymxtV2t0uYRShFDiuS9bz
591 | qRSLTM3MMDk5ST6fP9i5KMBEjI2VuXL5Iivr69TabUpBBt9xTrWSVFbIcNZKlG4ql8XxHEBLdexBl1KK
592 | LqySD7CK9XaXD1dWdGQnstcK5fFAMWGVSuJ523yAbQWwKwA4gaQQfI5JAXhK885YkavlIh+tVzlLyXKl
593 | FJVKhYmpKRxHH7iyMTIRaxvr3L17j6WlJaqbVcIw2tbNSVGYVool1+Xh4iIXLlzg+uUrTE5NnT7Bj2GM
594 | YX1tlQcPHvL4yRPq9Qa9bjcexZ4qFbbw1HMpLC4yNzvD9avXmJyc3K6O3A8soJVmYWGBW/cf8OjJIgpF
595 | MZvBO3rM+hihiJQCQqZ8j/FsgCLCWgeNw1HlQCWMQa1Yazf1Z2vWV1aVLxcLExmc7UBgUh78PAtgDFEE
596 | Q/f/E1hlmM16/GBmmltbdRpRP9Z+p50XYAk8l4mpSQql4sGcFyV1+YvLy3z1zdcsLi7S60pnJB2PjE4o
597 | wypmfXXDiG61SrPVprFZ5a2332Jmbh5HnyIyTNyhaHlpiS++/JLllVU6nQ6gUI6Og1QDxWYV9KOIjeom
598 | zVaTVrPF62+8wdzsLO4+lUDSKKVUKnFhbo7llTU6/R5aKXKBj+c4aNSpKzoTC9KQUzCXz1LwHOL6zdh3
599 | OeLqTxiDIE1FWm33U1byBjt2rVTKBVo7aSsjvYqSAGABiRwOJf33PGilyHqaH05OcblcwlqFOYU37BlY
600 | SzYbMDE9iXbVvoN1FksYRayurfHVV1/z9MlTer24+YVW250yVWqnjDuEoZWi1+vxeHGJTz/9lPXVlVNT
601 | Tm1ilbWxvsZnX3zO48VFOr1u/MVjwd8+t/i84mP7vJ4+5atvvmZ1fW2754Bc6uefo43vhWMVl+cWKBeK
602 | RMbQ6fVotDtiUZ10v8S9oCwOhvEgw1ShgKdlFqac8tGDmVbHjEESxqBxVlvt3Odr65W79XqhGxkPO5Cy
603 | 3QrAR2iDY4j/P/QAYIJIKzwcrhaL/GxmnpKbw1h1mPFIrxRaKYqFAqViiTAMD2ABKNqtFnfv3GFpaZEw
604 | DA90YVXc5GN1fYNvbt2i3W6dCldAKUW73eLbb2+xtLwignfA14dRxNLSEnfu3KHRaBwoxmGtZbxSoVQs
605 | orQispZOGFLvdOhEB7k/rwYWyGjFTC5Hycugh30Pd1WGa3AiY7Or7ebY52srpQeNht9OlYemFUDSTaQS
606 | H0Pg/z8fxiosmlyg+cncOG9PFvGUmC2n65bthOv5VMYnpH2Wklr2fZ2vMayurbO0tEyv1z/UZysF/TDk
607 | ydOnPH3y9KQvxfZ9evL4MY+fPKUfhtuuy0HSmEpBr99naWmJtbWdVsB+4Louc7OzBEEGa4UY0wlDmt0u
608 | 4SlLEboopjJZZvIBrnPM7q6xqMgoFJnQUllpdSofry1nHjdr24tWw44AYBYJ/uURd+DYHE0HQIGrNFcL
609 | Jf7jhQVmCjmUOd29AjzXpVQsiQ+eNM94GRR0ux0WnzyhVqsfWsPZ2H/udLssryzTajbjFtsnozIV0G21
610 | WVldpdXtDp5XB89QKGCrXufh4lNxIZ5tdPGC11qmKhUynoeNKy8Nlna/T63dptcP0ZE9MZ6WAhyrIYKc
611 | G3Gh5FD2HbSKONbtTiuMdjQoD8hHmPJqs5n9YHnN+fD/8t8q2CngDrLrlzhm/383Mg78eHqSP5+ZoeC5
612 | p84CSAgsxhi0dshmc1hr0UrvT/gstNptqrUa/TA8sl1ljGFrc5Otzc0TVZYKRaNeo7ZVJYyiI983Ywy1
613 | eo1Gq7lv3QrS2SiXy+E44k8nsECn16fZ69K35sTiJhHQwRBoWMjnmM8WyShHujAd92qXy+EoyClLyaIy
614 | G62G88elZbl26euIKIAiR2j+eRhopZnKePwfLl/gx5Nl/FPKDFQo8rksmeBgBT/WWjrtNr1el+32+UeA
615 | tZZGq0Wz3d7u03ci10Mp6vUG9XpjaHTcXq9Hp92OrYj9Xg8IAp9sJnjGpzbK0ur2qHbahCfYiNZTiuls
616 | hovFMhnHJVGXr6hPhFaQ0cYWMTZjlNJPu035ReqPEgugwFHbfx0QFumkc6NS5P944xo3xys4OOlg5Yki
617 | ETDH0WTzOXTs/++/NZWl3+9K//4hpDkt0I8M3X5fdpATukwWS7cfSov3IUXcw16PXrcz6JK7n++hLNpR
618 | lAp5nGc2D8ksdfp9Gu0OvTCMB6wc99UxJDw9ZS2TvsvVsSJjQQYcJy7meXV7rLU2sFCwSmViLhIwyPMn
619 | MYAcAwvg2DIAe10sC7jK4UdTk7S6ff4He59bG9W4geXJKoJkHJfSGtcPXti3/8XvIWPQ7BCsABA2obFi
620 | Ap9E/wFL3OcQ0EPay6wx2OiAO7UC5Sjy+dwzFkCKe0Sr38NaSzGTwTtuxqDVUgKPoux7vDZWYjafwZGu
621 | sElryFcBkW2lMlapIpBT4GC1AmyiADSSAiwgCuBQwz+PfM2AjKP5s7lpjGP5V98Ybm9uEbH/gNDxXEG1
622 | 7as57mG4UQrXC3BcbyiDMZVSuI7G91wR/hOKmiil8FwHR6uhyZLjuri+h1ZaMgr7epW0QXc9XzgV0fP+
623 | CjphiOp2yQU+gfaO7dpYNArDpO/xWqnChUIGVwOI7/+K71lS41NEZDxh+JrdCiCPZAJ2RlNeIayFjOfw
624 | z2Zn8HH5V7fv8M36Ol0rBRQqGYz0CkO60rdQYhWuPvjOoZQik8kQ+MGRr428H2QyGfL5nLgiJzReXaEo
625 | 5HJkMhkarfYQghuQyWTJZvPitR7gdaBiKrF64Z9FcXYgaXM+TMZgMlchAlwVMZUJeG2swlw2h+tEso5O
626 | JhCZtPnLIjK+TfHXcQow0RA5BgHAE1EA8qGarOvxi7lp/s+v3+QHU5PktCKKhySAQp1APGe7f/8hXlvI
627 | 5hgrFHC1PrTuT/SO1ppSqUS5VNl/KvIYYK2lWCxRKpdRztH8WQu4WjOWL5LP5g5xcYg5GepFfyJ1RFg6
628 | ocQE+sNiDFpFhKaHEH2uFHO8PT7ObC5Au5HMP7BJ489Xfr8UgyB/jtjC/7/+xz/dZrFoJO+f4xgLgA7y
629 | bbGQ0ZqfjY/zf3rtNX4xP8O0C67pYbFo9CvP60r/+sN9aCbIMDM7SzaXP1LeXmtF4PvMzcyQz+fjEeGv
630 | 9joMLoglny8wNz0Vtz8/9NtgjSWbzTI9M002m5Hnj/GrG2tphyGNTofuEBiDycyLiufz2tg4b4yPMZ31
631 | 8B3YHgB4sgyXxMrPkeL4pF0AD9EQx0oAOggs4HgO74+XCbxrjHkuf1xa43G7S2iSVlDHv/q3uelHWCaO
632 | 6zA9M83s9ATtTovooIGuFKamJplfWDgV7ce0VswvXOTh4iKPHz85lHKTKUWa2ZkpZudm8TxJsx7ovQ74
633 | sVKcJIxBulDUWgKDh4ACXFcxk81xPZdjKu/ju3F1n5XpPSdisu7EnjKezgKkf3k68m8I9973PN6sjBFc
634 | 1VR8l883qtzf6rDaCwmNQQN9Qqkj0AqNQg8xhZhM/DGRDNw81I6rFMVikauXr7FVrbO2sTlQJ+p5L1Gp
635 | 2YFyx0qlEm+++RblUmnQknwf3z95PxsHoGQIRaJA0s/v/7olFlGxUOTdt96hUWuwuVlFaxUL2N7fTb7P
636 | oIZdAROVClevXqNYLB1YiSg0ykhNwX7FLPn0hDFoLRQzGYJ4vPl2UxElj5UF4pFqItQKozQuihnfYb6U
637 | Z76YI+e4JHa1SaKRp0Oa9pTx3Qog4AQDgC+CpzXXy2Uca8l5HuPFJsu1JouNDiv9CBNqCbBEkn45nqIi
638 | S9jvH2qXE86A5sLCAt1ej8+/+ILNra19VbxZYr+/WOBPvvcO83NzSdXngb+/in3lZJy3Jd1PXm+nKw9q
639 | WczOzPCDH/yAP/zxj9SS83quYtOxwhEFNFYu8+ZbbzF/4YKURR/w8qr4OnVbrUMRkizCE9BK4WQzaDsg
640 | Vylj8axU6prt721RvmbKd7hcKDKXL1HUGvSpnnSVBAID9lAAOn7sxz9PhQuwG9pRLIxV6CqLXe0zpl0u
641 | FsrUWm0WOy1Wuj1qfUNvyAUg22E/a+l1WvEiODislXTVlatXcRzNrTt3WFtbpxf2t6f1Dj4zeaDI+gHj
642 | kxO89eabLFy4IJbBQdoQKJlX6Doaz/cIggDXdXEcDViiyNDrh/S6ffr9PlEUYQ54Da21zM/N8qMf/ZBv
643 | vvqKldU1ev2e0G/twBZIzktrB993mZqY5LWbN1m4eBHXdQ/t0RlrqdUbmOhwQmgUtHryfUvZLJ52tp+3
644 | 1hJYhac0XuAyk/WYy2YYDzJkPV/+hvC0T3/aU8aT3T4hAvm7njtV0ChyyuH18gTaaj5eXcF0u2RLPpOF
645 | gGYIG80GTxtNlvp9msbIsM6jDzXaJgN1Ot1DLbK0Ge46DpevXmVsfJwHDx6yur5GbatKpyuKQMaKazK+
646 | T7FUYmZqiouXL1Mul7cDpAMj+tn3T39x19F4nkM2kyWbyxD4Po7jxjn2WMgtGAsmMnR7PTpt6U/Y6/dS
647 | sYq9r2F6LLnSioX5ecrFIg8f3Gd5ZZV6rUa719uuynO0JuN5lMplJiYnuHzpMmOVClofrRuOMYZ2t3uE
648 | inqZu9fp99FaUSCDq2Wcuu9qZgKfhWyJyaxPJuviuAasITIGbTUaB3Pyfv7zkMhzogCSfKnazQT0eKUM
649 | wAPCgsHgabheLoO1fLS2zlqnheNA2VUUvQJjGQ9vq8G9ZouOsYdO3W1/bJwmMtbS7fbo9ftkstkDvUda
650 | MJVSOCjGx8Ypl8ps1WvUqps02x36femP6Hsu+WyWUqlMsVTad7usRBE4joPv++SzAbkgwA+CeMeHZE57
651 | +po4CNXZz2bIZQI6vRzNVot2u003UUzwQtdAxSZ9uVTmrbfe4dLFGlvVLRrtllBwlcJ1HYpBhsr4BPl8
652 | frus+iipDIvUEPR6PQ7pGw1GqCtoxTGBvO9TdH0uZXLcGCtQyQqTz0oLXpJ6OauOEh5+ZdhTxtO0ttOv
653 | AGJYwHc01ysVAD5eg7VuB2sNSjuUcjkuR4p6O2TJ9I58a9IdasIopNPpUC6Xj1yGa61FOw5jY2OMxYMu
654 | bErQZICqPZBfLow4TS6XI5eVwiX3ALP0EoJMkMngeh7ZbJZWq02j0dwOgO4nPOA4DuXKGOXKGMaY7Rl4
655 | SqttRTGs9ufKQrvVIuwPp7mssZZ2vwfAmO+xUMgwHngx8flUi8YLLxM7ZRx4thbg1Pr/u2FR+I7D9UoF
656 | rRSfrK2x0mnLQiMiFzgUfBcn6jOUZRFHf6Moot1ubwvKYRfw9msT4Y77C+ikDM4+z6x//hVxHIdcNku+
657 | kCWbycRDVw7pAFmDozW5TAbf8wl8n2azSbvd3tWH/wUWQapgyk3NTUiyB8PqY2CBWrNB3wypu7S1GBTd
658 | sI+LpRS4EuBTp35vfBmSOMAzFkDCFHI4QRbgQZDU1PmO5lqlDErx8eoqK+02Rmk8Db6n0G19qIELe36m
659 | UhgT0WrWMTba7gZ0mIu1M+AnJvC2qB5YLiye51EoFCgUCmQ8Jy4QOuy1Je5PK/ud72rcfJaM71L3HGqN
660 | Fv1+/6WKabcC2/11hsVhiCysbW5Kj8Xtb30EKEnzKSDjSBwF5Z5+oXjpWT0r42kXIP3LMwVfa64Ui6AU
661 | Hy2vsNpp4ShN4LjbZvRQCENxV99Go07YD3F9f3iL4ghfL5PJUCoVyeVyaK3RBxxS8oLTjb9bPMI6CFBa
662 | 43g+9Xqdbrd7KoYgR1HIxuYWvbA/tPsh1amaoo7X0FkXf8EzMp62AHYfZwYW8FyPK4UCWMNHqyustboE
663 | rg+qHRN5hgNjDM1mm063S9H3eUVkxD2htSaTyVAul8hkpEw5yYkPE2lrxfM88trBdR1qtTqtVudEx5gp
664 | pajXGuKWGTuUMXNJitVViqzjDb9x58lgTxl3n/NHZw4aQ+A6XCuX0cAHK0950rK4RM/mzI74Se1exFa1
665 | TqlQ5FXKfzoQqJQlm/Mpl0tkg0BsumPqeLMjg2EtvlZ4ySguVaPZasZZgldvPCpgo1mj1esO4jJDOF+L
666 | RTsQBMMrdT4FeEa+j23wx0nB05qLlRI9ZVhvRbhOA0z36G+cQEG72WZzbZ1LCxeEFPSKVkgSOHMch3wh
667 | z9hYGd/3UK+2OlouQ+wSjI1VUFrRaDQwZqia9qWfHz9gaWmZZrMV79TDUMnyeldpfM8fFQtgT+xW2UNy
668 | lk8WGau4WSzx/uw045lgqEtSIdz8RrNJt9t7pcU4Kp5IXCgUGB8bw/NcUQqv7BvshFXgBz5jY2MUi8WY
669 | zPOKPjs+61azxWa1ShiFKK2Gko8XKoHC1w4ZLzjxgqsh4hn51rt+YRkFJaA0Ge1xpVhkJusdqLfEy2HR
670 | WLrtNrWtLV6lx+Q6Ug8wPlbB91wZDY16JYb3XkKgEMvDd13GKxWKxfz2iLPjXUKSPlVKsV7doNFsxJNw
671 | hnUvFMpaMlrhOSMTANxTxtNrxyDNlE4tn3HfUIDS5FyfcjYTR3GHByeehrO+uclxN+NJzH7XcagUC0xU
672 | SviOQluLg0K/AvM/nbPfoQisRVmDsgbP0YxVKpSKBRxnODvxi7+UIYwillfWqNUbMKTdX05SvLqSqwhe
673 | xQV+dXhGxtPqOv3Ls33GMYkmcGA8lztSF569oeh2e2xtbtLttI/dRBSfv0CpVHphQ9IoiojiMdxDPVul
674 | MFEkTMj+86caua5LuVymUCjgHLM7oJSMWltdX6fbG176TyBpz5wb4CsXdUq6Ux/5pPaQ8bQCiICQEbAA
675 | bPx/XykmfB8h2SUBqqPdTOnmKtzvWq1GrVY7vvOwFsfRFAp5SqUirpuMI3v2HIyFBw8f8snnn7OyurZ9
676 | rlYNuvceSAmqpBeizJ9f2djg088/5/6jR0TPiTsoZHJSuVQin8vFiuiYPEqt2Kxusr6+cQwWupLhtb6P
677 | e5qmMB8dBpHx7ZFE6SxABPTTvzyrsFoaaDhaM+a7OLHAWukXcqSTS6bdKq1oddpsVjeZmJRZgYepo3/u
678 | 51iL1pAvZCmV8njeC3xRpdiq1fjjJ59y/9FDLs1d4LWbN7h+4waFQh6jUjyIF9TK7GgcgrRBr9cb3Lp7
679 | j69v3ebJk8dcvnSJ8tg443EdRjrppqyR5pKuS6lYoB/2abcTC2mIUqoU/ciwvLFJrXU8Q1K10mQzHso5
680 | E4U++0GyyScyDgwUwO5fnu0zjolwWikmgywlx2eTvgwa2d6VjgglHYJqVXEDcvnC8L5+rEiyuSylUhHP
681 | 96SI5jm2WRiG3Llzm3sPHrCysUF1c4tHTx5z/9Ej3n37DS5cvIjv+y8U/u3TQgS/2+vz+OFDPv/yS769
682 | e5fN6hZhGBEZw8WLC3z//e/hO+6e11IpyAQBpVKJfr9Pr9fHcYanBGQiUZ3l5WXCQ9b/v+wqBFqT9bxR
683 | 4gDsKePJHUx+2UNMhOS5M3n6Kv7mDopKkKeSK3K/1cJRCmXNUFpAg5jIW9Utals1srn80HYipRRBEFAq
684 | FgmCTMw23Pt2KKVYX1vl66+/plrdAisdb1c2N9j8pM7DJw9587WbvPPOu0xNTKL084evJu3H1lfX+PjT
685 | L/j6m69ZXV2j0++RtBGrbdX49quvuDQ3x9zchee+l9aKfD5Pv99nfX19e67iMGCMZbNaZX1jQ1qiHwN9
686 | LdAOWddHKefEui4PEYk8h4iMJwpgezCISf3yzMcBtot0lKLgwUTWx0GL8A9xio610Oj0WdusMz45ReD7
687 | QzAXLZ7nUiwWpKIP6Se5m8xsFaAVnU6Xr2/f4cGTp0RJA5S4mrDf6/N0cYX1tSp37j3i+z/4E964eZNC
688 | Lo8jcyHQWhNFEShNq9Xh9q1b/PGjj3j49Cmdbje2RsBaibL3o5AHTxf59s5dxicmZU7iHtdTAa6CsWKR
689 | XqfD2mYV1/Nw4j78B7/WA/ek2+2ysr5Js9PbjlMMEwrLmK/IaYtjNYajDz49BdhTxtMuQB/oMrAAzj4U
690 | ZF2X8cDHic2CYfLWlYIwilhbWWFhboZgzDvyTqS1Jp/PUyjkpZw3Wfh7/G1kLWvrqzx6+IBOp4OxFken
691 | JxYrrIF2p8v9B49YXV3h/t27/PhHf8rC3AWSlL2xlidPHvO7Dz7g229v0Wy1B0teQWTstlKxQKfb4fHD
692 | B6xfu8qF+fkXXX5c12F8bIxaq02z2SKfzx0qEJMuva43Gjx++pRev7fd7GWYC1YBedfDd/SROkGfMiQW
693 | QBeR9WeyAH2gk/7lWYe1lpznMpcN8HTc+HLIKR2loNlqUt2qEpmj+6NBkCGfL+DoFzfHlHOxVMYmeOe9
694 | 97h27RqlUvGZ3VBabiuMNbRaHT797As+/vjT7eCcsZZWq8Unn37Kx59/QS0t/DGSgZtaK4qFAjeuXeOd
695 | d99lbHxiX+eUyQTMTE8DUKvViMLDXSelFGEYsra6SqPeiHsnDH+xaqCQzRO4PuZsG8Np7CnjaRcg/cuR
696 | OGsLBI7DTNYn62g6fTVkVqAUx0Rhn431daZnpsnlZKrNwTMCFtd1KRXzZDP7DNhZyGUyvP3WW8zOX+DL
697 | L7/k229vsbS8QrvTwRi7PY5cK4UxlsmxMlcuXSSTkeEbCshmMly+dIkvv73F2saGBBzjz086AGWyGebn
698 | 53jt5g3eeuMNJsbGYiX1fPEb7NqKUrHA7Mw09+7fZ6tWo1wq4bjOwaRXQbvTYXFpmXanPdwbuX0X5Frl
699 | gwBXKyLMMLpKngbsKeO7FUAL8RFGQgGAlHROZzOUggxr3T5KmeHWBiiITMTm1ha1Wp1MJnvgyLG1CsdR
700 | FApZ8rmMDJJ4CbZbkViJ2k9NjPGzn/wpVy9f5MtvbnH71m3W1jfodnpxi3RF4HvcuHGDi5cvoz0XrHQi
701 | dl2XhYULvHnzOh98VKPTD7fJL4EfMD1e5trNm7z51hvMzcySSQakvuR7DlwRmaswOTFOo17j4eOnWCyl
702 | UgnX2WejjdgVWatusVKtEUbm2ELUGUeRdzVWhfFHjwQXwCCy3SKtAMb+6q/t5l/+hUV8gxaiIRKm0JlX
703 | fNYaykGGSi6Pra3jDK0/UPozoNlssb6+zthYBd/3D7T7J8M+S0nzz4PatDJAANd1uXTpEpOT01y+MM+t
704 | 23e4fecuG9UaYRgyMzPDzZs3KBaL20VEybcsFYu89tprPHz6lAePnuA4DuOVMlevXePt16Rtd76QP/Qs
705 | Qgt4vs/8/DzVWp1qtYq1lkq5jOvsryi13+uxvLRMo14/tpVpraXs+uQdB6tA25EQ/oQF2EFkvAvYf/H3
706 | v9mRBegBTaDNCAUCrbWU/QzTmRzWLmHU8CuglZJc/Mb6Bs25Obzt/PH+VqnvOZSKBQLfP3SGYjC7AArZ
707 | DG++/jpzMzNcurjAV9/eZm19nTfeeJ2FCxdwE9JS6vWu6zJ/YZ433nyDyBgmKuO8/tpNrly5yuRYJe7c
708 | y6FXhQawhnwux8WFCzSbDbZqNVCKSrGE6714JoAxlmq9zvLqKt24YedxoeR75D3pji9uzLF+3KtAEgBs
709 | IzK+beXvVgANoE6sIU76Ww/nzBVF3+NiNsBXMgrqODw6paDWqLG+uUmhWCDQzkt70yVxgkI2Sz6bET7v
710 | IQyvpCqP1KsdrZkYG6dQLDI7P8fmZpWJsTEKuSx7xraVJZvL8vabbzA3NcVYucLkxASe5wvb7whSEJOS
711 | t8ebTU+MsTkzzf1Hj9ncEu5CqVQSxbnrYxI3oh+GLK2ssl7dxBzD0rQoaZeOoZjxyPkeyh69ucgpQWLh
712 | 1xEZf0YBJESgVvxHnfjfZ74NqgUySnExn6Ho+1R74dADgQm6vR7r6+vMzs4QeC+fG6CUwvd9CoU8Wims
713 | MbLTHuH7pSm/AL7vMzszw9TkJBqFE/dI3P0R1koKcmpyksnxcVylt6soh7UDJp/pOJr5+TnWNqtUt2ps
714 | xaPEKuUKnru3hdZutVhZWaHd7gyn58duxMHKDJpKkMHz3O1hJmcciWx3ENlukWICph2c5I8aiLYYibMH
715 | 8KxlNp+nks9zrIaNhc2NDbaqm/FEnRfM/YvHhBULRaHpIgI4bFJLelDIi/rlWTuwSBztbEfwDzoibD9Q
716 | SlPI55mfm8N1XPphyFatxlZtS0hJqe+ejExbX99gaWkZY82xmOQqtg5LbkAlyGKOqb3aCcEgMt1gsLkD
717 | z/YDSLREEgg88zBYQmAqm2E2k0EdZ1DHQr/dZX11g14/mQm/B+KKviDwyOUDtD6+Md/agjbx8QIOhAYc
718 | q9AmdicSHtAxfC8FeEozOz7GeKkgDMOwz+bWFptbW0RG6NoKheM4dPpdHi0/pdFpy7U7hutkrcIqTSHn
719 | Us56o+D3p/Fc2d7LAqgxMBPOPBSKCJjMZbmYy+AdowWgFVhjWFteZmurFvfI2wMWHMcln8/juscfZd5v
720 | q+dX1RJaxSSmXCbD3MwMnucLSyXsU93aFFJVFIlbZC0bm5s8jqnOx3eNLI6FQuCTC7xjvgKvHIl7X2Mv
721 | C2Dsr/468RPawBYSKRwJQlDSJjuvNRfzebLeMaqAeH5gs9VmfW1thzm7G0EQkM1mX9jgY1Rh4u1VOw6V
722 | cplKpYxWGoWi3w/ZrFbZ2toijELCsM+Tp4s0m8dD/El9KwJtGQt8AscdleCfnJjIchOR7TYQ/Yu//82e
723 | LcE6QDU+OoxAJkDFDR5d4FJljEqugIl76Q19r4vf0piIlaVFWq3mnk0WXUeTzfh4jjNC3aYODq0UuVyW
724 | ifG4wSlIrX9fBn1Ua3U2Nms8fPCQfjiksV/PgbWQdVwmgoAR2Pd2nBrPyvWeLoBF0gM1YJNYU3DGlYD0
725 | itdY7XAxW2DC94ngWFI8olIVVisarSbLS4sStIpVQBKQ81yXrO9JiuVMX93DId3VyHddxssl8vkcVgxx
726 | UA5hZFjfrPLtndts1JvYYy7MN0qR9zKMZ/PHkmY8IaQt+01EtnukZHq3AugjkcIqoxIHUBBqS2gs0xmf
727 | haKPrzWhsRxnlrcf9lleWqTZasoTNjV5Nwgk8q+OJ8h2pqAgn8/FjEBnxy/qtRqPHj2WOYTHHJlwsVQy
728 | DoWMP/SCsRNG4v9XEdneUeynn/PHm4jPcLx21ytA0gDIAIELN8olKq4nEfHjvM8Wtmp1lhcXSRpnJeWx
729 | QcaXUt/vuvDHcF2PSqVCNpMZkA6UZW19nXpTFOhxFuVK0ZjLdNbD00cjPZ1ChIgsb7LHpr6tAFKBwCaw
730 | jgQMznxhkCU1ClXB1VKZSuBLDOA4b7RShL2I5acrtJodtHJi4o9HEHjnwr8NhdYupXyRUj4nXZuUotlu
731 | sbK5Qc9Er2RDzrguk7kCWtnRKP0RJAzfLUSmm6QCgPB8C2Ad2EB8hzOtANJQKBYKBWb9AKM53p7+Fqyx
732 | 1Gt1VpaXRRFpjR/4uO7ITWQ7ErTWZLMZysUSnuthjGFjfYNGq3Xsvj+IEJR9j3I2LuUeHd1sEBneQGT6
733 | +RZAjIQzvAmsEWsMznggMI0x1+XS2DjKd7fTUccCBShFt9NhZWmJdquF57kEvj+UCbajA+lD6DgOpXKZ
734 | IAjotFtsbGzQ74evhIfuKpjyHAqeQmnFcAvGTwxpi34Nkelnanz2UgB9hDG0igQNznwcII3Acbg2nqfg
735 | 2GMfZmsAo2B9c4OV1RW06+B7Lnpk1OnRIXF/i6ugkMuQz2fYbNTZqjeO2UWLmZHWwdUOkwWZAWBHarUT
736 | IjK8isj0M92+9HNelCiAKrvSBmcdjlZcKeWZ971jH/qQWK/9fo+N9XWiMNp/A4zvEKSa0ZIJAhxHU61W
737 | 6YfR8U5dtmynZ/Ouw1ghh9JKCEmjsdqTtH6VgQJ4Rr3tkIBdgcBVxHQYjXRgDGMts0HA9fEpJBN/fFAx
738 | x99EhkatRr/blYYf5wHAZ2ARfoTjOHR7Uu9/nIHSpEOGowxzWZ+Kl9muxDzulOMrQhLPW0Nk+ZkAIOxt
739 | ASSBg3VgGTEhRiYOoJWi7Hhcq1TIaPdYrcxkrrx0w/HIZAJQI1NjPnQorSgVChTz+VejI5XCdTST+RxZ
740 | 7cbksGNOD78aJBt5A5HhdZ4T0NfPeXFiOiwjKYSR6RQM4GuPa6UC07nc0AYF7YVkRqFWilKlRK6Qi/vz
741 | nWNPWEu5VGRybGx7NuFxQSHNLgquy0Q2j+MNMjMjcIeSWN4WIsNVnuPKP6MAYjcgRGiDS4j2GIm6gASO
742 | 1sznAq6UC+h4rPQw5wUksNYSGSs7W6lENpc9csOPUYYFcrncdnHQcdyT3Z84mckyls2MGi8j4f+vIzJc
743 | A8Ld5j88Pw6emA9L8ZG4AWceOt7yJwOXG+UCWceN20EN/7NkAVs816NYKBB4npAPRijRPFTEgcBKqYTn
744 | HXN8BnC1Yiqfi/v/jcz+BgeQ3+cpgLQGecoIuQEWsNqScT1eK1WYzRWwOMfmcyqlyeWyFPN5XOWgjN2e
745 | 9nOOZ6G1plQskovnFhwbrKLo+czkMgSjVZKdNv+f8hILXr/kTarAIhJJHKk2YUopLpWL3Cjm8DDHEvlN
746 | zErXD8gXiueW/0uQWEylUol8Ln+s241WlqlsholsJjbIRubuJO2/1hDZrfKCzXtPBbArDvA0fqORcQNA
747 | bveE53Jzokwpm8Eck1me9PwPgsyoFZkMHaIwFdlMlkwme6wyGbia2VyWvOdhRsv/T8z/RUR2n+v/w4u5
748 | cEk6cBl4wks0yVmE5yrenJhgPpfFsc4x+OZCKsn6Hhn/OJuRjQ6MicgGPtlscCzvrwCrFGXXZTbvoR1Q
749 | 1ozKqk5b7k8Q2X1hPY9+yZt1kUKCxwiZYGSahQK4SnMln+f1chHf00PeceJ8v7F4jn5uu+tz7IbF910Z
750 | FDL0d5b/ecBMPstYIY/W8eCv0UjPJl29VhGZ3eAlMz6eqwBSbsBW/GZPEDrh6LgBFoqOy/tTU4xnhx8J
751 | TuIKSmk8zxv6+48ilFJ43vFUTKqYWZD3HC4WY/KPkfszQuy/OiKrjxHZfa75Dy8vhzEInXAJeIRUFI2M
752 | G2CVwnUUr1fKXCnmpRYdIaAMYznY+DMcx0E7znkIYJ9wXWdXd6DhIOnINBkETJUKeNqRzsPHSjl6ZUjM
753 | /01EVpcQ2X2hxf4yBZCwAteBh4hP8dI3PStQFpQDs1mf781OkfO9mBQ0rE8QReI6zqjsMMcKq9iOyGt1
754 | HB2TFJ7WXC4UKXsBVql4Cu5I3Jtks15GZHWdfRTyvVAB7HIDHsZHlRGxAiwWZSDnuHx/bJKFQoYQcC3D
755 | 9QlfRbP9c7wUyioqnstcuXgsFsYJIh38S+T0peY/7K8iPqkqWgbuIwGGERkeKp06rYJLhRw/mJomax2s
756 | VUNoFjKwJOwhR2p/t3GEUcTPgVaKi+U845mRs8iSgP0qIqOJpf7SeN1LFUBsBfQRk+IBoxQMVErMTqAQ
757 | uPxoeoIL+QI9wDlit5Bk6WqliCLzCnjtIwAru7QxltAMrzl3Momo7LlcKZfJeC4jMPc2jXTw7wEiq/2X
758 | 7f6w/544yQc8QjTMBiPWKERZeK08xo9np/CIhtYGSWtNFIXS2nq0CCdDR9xFjTDs0+/3h2I0KStdmQxw
759 | uVTkYq6Ao5wRkv3tON0GIpuPOMAGvV8FkJCCVoC7CMOoyYgEAwWKcd/np7NTLBSLRNHRV59SYv53Ol06
760 | nc5Jn+CZQafTjq/X0e5BolCstYy7Wa6Ml8kEjrA+7ci0uDCILD5FZHOFAzTz3ZcCSLkBG8C9+NhkhKwA
761 | FRN33hwf4xfz8/iuxkFhjMIeYqKwQioPQ2NodXs0Oh2sVkTYUZo8M3RYFNVGk0arzVC2aSvG/uWxLPOl
762 | LEYdA+Hz5JDs/psM5HKDfZr/cLC2mEma4SlwB+Eaj0zbcIslsoaxwOdns3NcKhTpGjDWxPOFD/Ge1mCV
763 | pd1qUt3cILJmO+ZwjudBsby6xma1emTxt0CkLOOBx41KiYLrS5zhpE9xeEgs80VEJp9ywDT9vhVAbAUk
764 | nIC7iL8xUsQgJx5H/XqlwJ9NTZNznLhr4OFOz1rpBtRstVhZXaXb7Z7HAV4Epeh2O6yurNJqto78dhbw
765 | leJqucB8voiORurap4k/9xGZXAd6+9394eCNsdPBwNsI22hkrACs7BiFwOHnC7PcrJRxrYNVh8sISPcf
766 | RRhGrK2uU93cQqHjycTnSCCMSTlW1jd49OQpYRQdXlnG2QRtYTIIuDY2QdZzMSOQuEoh2f2XEFk8UPAv
767 | wUFXdpJvXIk/9D4x4YARsAKScYEaxY1ykZ/Pz1DMuVhzNP1msayurvHk8RL9Tv9cAaRgFRgtPzv9Pnce
768 | POLx0jKRPRw9VzhX0twz62iuV0rMFksoHWH1aOxTiKwlBL37iCyucAh+zoEUwC5m4H3gFqNmBcTIeg4/
769 | mZ3i7fEKWX20whRrLVuNBl9++y3LayujtQ8NCRZYWVnhm2+/pdU6uvnvKMtsPsP1SomsMlh7PE1fTgjp
770 | 3f8WqY34IOY/HG42TtIubBn4Fok8VhkRKyCBUopLhRx/fmGO6ZzUpgs7+OCLSCtNr9/n3sMHfPH1V9Sb
771 | jdRsgJG5ZAdD6vSttdQbDb7+5hsePnpMP+wfmj1t45rfsuvw2niFsXyA1dEh3+1UItmEq4jsfYvI4qHy
772 | pgdWACkrIP0FRs4KUBhyjsP70zO8NzeN77hSOHJAv1QpRRAE5PMFGu0OH372FV99fYt2p4tRFqNG5pLt
773 | G0aB0QqjAQ39bpevvr3FHz//gnavy1ipSDYIDu0CeEpzuVjiSqmA78SsP+Vw7LPgXtHlY7D779iAD7r7
774 | c4Qrkv4S3yARyE1GyQqwFo1lPhPwn1y4yBuVAsa1cKB4gNBag1yOmzduMFYqs7i8wq9+93u+vHWbTj+C
775 | QwYYzzRico4FumHIV7fv8OvffsDi4ipjpTJvv/46lXL5cPUTGiazPq+NVyhkAgaVWCNhASSb7yYic99w
776 | xM33UKtvlxVwF/iaQ+QgTzOkFMXiqYh3KwX+k4ULzHkB+gAevDEGpWQOwcL8Ba5fvYrjOTxYfMq/++Wv
777 | +PyLr+h1w+9calDFSq/X6/HZ51/yd7/8NY+ePMV1XK5dvc7FmQs40eFm9OZdhzfGS8yUA6TZ70hd2zQX
778 | 52tE9qoccveHo9lEaRLC10gkcoMR4QUoNCiN1Yq85/Cz+Tl+PDdB1vVQVkkfOaOx1nnBe0hEut/tEHjw
779 | 9ls3mZ6cxFrF4ydP+bd//x/45W9+x1q1KgrHxNWJcU5sVOqH4l6fGGWJlAVj2arW+e0fPuDf/vt/4OGj
780 | RSJjmZyc4N23Xkd7mmZ3/9RpG0f9fQWXi3lemxiXGQyjYfIPTnPAxr2NyNyRyXiHLor+l7/9I//8Jz9M
781 | ZixqoARMAxUgw1m/+iptOiqyrqYcZHlUa7LS7hNpKfFVL7AunbjfvDGGiwtzXLl2mXanx+rqGt1uj2a7
782 | xePFRdbW1vCDDLlsDtf1QEuVolJnN26dVD8m1k3SfKPZ6XDv7kP+/S//kQ8+/oS1zS2UVRQLOX7wvfd4
783 | /+23ePT0CV/evr1vLoBCozTM5jL8aH6eqXwujvif1au3JwzS4fc28Fvgj4gl0Dns7g9w1MZrSUZgEfgK
784 | uArMADlGQQkkJ2kjXAVvlcf5z65dZrPzDfcafYwCpZ6fr06EwBhLo9Ul8DJ8/5232Fhf54uvv6Xb79Ns
785 | tfnkq695srjKa9ev8e7bbzIzPUk+X8B33TM7RETFrEprLWFkaLTaLK2t8dmXn3P79n1W1zfoRxFKK3zP
786 | 4ebVS3zv7TfJBD6tVocoNPueoqwwVByX92YmuFDMjZbYC5Je/6uI3/8VInNHrpg6UluUlBWQOMZ5YAoY
787 | Z6AAzvz9sAq0Be0oJrMZetbwsFqnFWleRC5PFIDWmvHxcRYWFhgrl/A9j/XNTer1hvDVraXZarG0vMKD
788 | Rw9YW9+g2+/FMQSFox10anqNIo6PKbud2x6ooaSsKb0y1M5Y2MsO+fKD3Td+3u7+pPj3ChmDvkPojaHe
789 | arG8ssrtu/f54KOP+afff8Cde/fZajQw1qK1xnMcFuZn+dmf/ojrly/T6/f46tYtHjx5ijX2pTrAYslq
790 | zfcmp3hrehzfM2BHrttPhPj6XwP/BHyEBP8ORPvdC8NovZpmB34FXAZmESugwAgoAI20DNfAuO/zn15c
791 | YKPT5W/uPaERgoPd01RNnjPW0u506fZ6FHIZrl+9QqvVodvusrS6Rt8YQNHt91le3WC9WuOr23eYmZxk
792 | fmaG6alJpianqBQLFAp5PNdFa40TDzbd+dEWE190EdWBO0EyBHVbcAf/3xbrWLHo1OuTv1Jq0D8v+Qzi
793 | ZhsGS7fXo16vU6vVWFvf4MnqOstLSyyvrtLsdOiH0mVBxV9BKZgeH+enP/g+N6/fwHE92rU69Xbrpdua
794 | jem+rmO5MVbijdlpcq6G0au1tAxibV8iMnYo1t9eOLICGPurv7abf/kXSY3AA+Bz4CJiBQSAzwgogQQK
795 | y3wuy39x5Rq1do9/ePqUthGBkQ6ze8HSajWlxl2VyAY+b7/xGt1+n1/95rcsrq5h43iCxdLvh2xt1anV
796 | G9x98JBsJkOlUmG8XKRULFIul5gaH6eYz5PL5cllM/iuh6MdVBI/0DrelWM3JbZGrLWxBWG3lcL2t0y5
797 | G3bwJCZMPbaGfhTR7/fpdLo0Wm0ajTqbG5usVavUGw3qtRobmxs02j2MNdspvwQGcFFMjY3zsx//KW+/
798 | 9RZBEIBStNtN6rUtjDEvXDUW8BRcrRT53tw044GLxmAOUbp9ipEu+LmFyNYDYs7/UXd/GI4FkCiBHjKP
799 | 7BtEAcwhFkCZkeq/JEUmN4s5/qvXrrIV9fhgaY0wksLzvUxWay3NeoN2s7ltsueyAd9/7x0cpfj3//Qb
800 | lldXYyEZvIE1lsgYms02zUabJ0+fohQEQUAhnycIfAI/IBsE5DMZioU8uXyeIMjieR6B7+N6GtdVuI6L
801 | 1g5KKbRWoiBS39FYi4mEMhtZgzGGfj8kDEN63Yhur0+v26HZbLDVqItF0+3R7fXpdDq0mi06vVjgkbhH
802 | ku9PBzMt8Vy+iQn+/Kc/40/ee5dMPrPtctQbTbZqdcTWeJ5vJcM9LhTy/MnMHLO5DJYeEQplFUf0bE8L
803 | EtO/gTT5/ByRrTWGYPonGOb0hSRH+Rj4DFgAJpBYQJaRUQCAlh3s7bEK/81r12kb+GJli8hGsAezT7oC
804 | dajXG0RRiKM1GihkM/zJe2/jBR6//Mdf83hpmdBYlE5fKrvNSUj6ZLbaHVrtQZpM4gQaz3VwXRftuGil
805 | 0I6DTrIJWm27MhIS2H074iamVj7LWIs1suObyBBZi4lEIfTDCGOiQZpyEH4YIA47oJR8llVYa9CO4tL0
806 | FH/285/z5ptvks1mULFVEoV9qvUWrXaPlKey/RHJvAatYD6b5QezE1wq5BHDX6WiHyOBxLVeRsz+zxDZ
807 | GirXZmgKILYCEnPlNvAJYgWU4s8ZKVfAAoHW/HhikvCm5v/OLe6srBMN3OYBlCKKIrZqW3S7PfLZzLYv
808 | nctkeP+dNykV8vzy17/h1v2HtNqd7aCfTRztF5nD1hJGEWEUQbf3wu+89z92fucD3yT1/Ke2IwzWkgl8
809 | Xrt2mf/oJz/h+vVrOI4DyLh0pRTdTo/NrS2iMNr+imrX+2ksc5kMP5id5UqlhKv1IB4xOkib/ncQWbod
810 | /3vf3X72g2HPX0rSgkvAF8A8MIkEBF1GJCuQhu84/HxqHGuu8N+Hfb7Z3NpzFwqjkHpti26vSz6b2fG7
811 | jOdy88Y1SpUK//T7P/Lhp5+xVd1CaTXUCjb13H8cH6wVa6JcKvPD773Lz37wJ0xPT4MSF0Rt8wWg3W6x
812 | vrZGGIZovbN1kkUWz2yQ4YfTs1yrlPCcKPb5hz3X8USRcGuaSI3/p4gsLTGEtN9uDNVZ2kUOiuL3LyMB
813 | wTyiBEbnViGmtOPAhVyOQpBlpdlgo9eTkgEti9YxFmsMjudy4cIFiqXSrotg0WgK+TwX5xcoFUt0e11a
814 | 7TZRGEr78l0Xzlp7KinEu8OIge9z9eICf/bTH/OzH/6AqbGx7cyBijl8Nr4CiytrfPDRJ1RrW0IXToKq
815 | VjIts9ksP5qd48bEOJ4DVhP/j1FaVckm+hT4EPg1Ev0/UK+//WLo0ZJYCRikViBCMgFjDBiCIxQQFKh4
816 | 5NR8Pkc5k2W53aLa72OshAS0VRgsVmtmZmaYGBvbZgkm7wCSHst4PrPT08zOzZLL+PQ7XXq9HpGRwByk
817 | 8u+nTgHEvAel8T2Xmckxvv/eu/yzn/+cd16/SS4Its92m3KgQGlFL4y4+/AxX3zzDe24g7KKhdtTigv5
818 | LD+cneb6eBnfM3FVpk690UggPYPjS0T4P2QIjL/n4bhmVqdzl58hFOExRAFUGEElYIGMq/n5zAw+8D/e
819 | v83nyzW6RBhHERlFr9tjfW2N3pVLeG5uz/cx1uC6iisLc0xXyty4dInPv/ySu48es1bdotvtn9ohI8oq
820 | sr7P2FiFK5cWePuNm1xZuEixUNhOPcIuxRVH+/r9Pmtr0jdx+/1QZJTiYinLe7NTXCoW8HTCZTjpsx06
821 | kqh/HWnw8TEiOwnf/1hu+rHkS1KuQIhoNIWkBMfjn0k8YKSgAE8rpgtZZoIc1W7EertFN2HSRRFZ32P+
822 | wgXyudxz30Rh0Sgygc/E2BgXFy4wNzNDNp8DFCbsE4bhjhWhSKLtDF84bFKXoKQpyi7GoHY0hUKBhekp
823 | 3n3zDX784x/xJ+++w6W5WXJBMBizuIflYuPkxka1xh8/+oSnS8vbf1t04OZYke9fmOFiMY+rXKRI+zgG
824 | h544kuK6x8Af2Gn6H7ra72U4LgsgnRXYQBoXTCABwQKSHRi5gGCCrOPwvalJtOuRcSx/WF2j2jdEylKt
825 | NdjY3GJ8fLcbINjBzovpspVyWQTs0kVWV9d4+OghDx4/ZWltjWq1KlZBnBjaYR0c4epu79axUklzApPU
826 | YhC4TFQqTE9Pc3Fhgavzc0xPTZLNZtExzyDdRClJC+44X6WIIsvq2jprm5tExuIoGPc83h4v8fr0BOWs
827 | LwVSZjdTYmSQmP5rCN33Q0RmjsXvT+PYFEDqxJJioc8QJVBBeAHjCJ9j9O6nhcDRvD9RJMs1SoHL71dW
828 | WWx22Ko3WV1e49LCPLlcdpvv/8K3sxZHa4q5HLmFBRbm5nj37SZLKyssLa+wvLrG0soKG5ub9PohUWQk
829 | fx/HDA5qFOxkBFocrUSglSLre0yOV5iemWFmapILM9NMTk5SLJYIXHe/9TspKHq9Lo+fPGFra4uMo5kv
830 | 5Xh3rMTlSpmc5wGOkHxGo9XEbqQn+95GqvwS03/oUf/dOFYFkKIJNxAK44dILKCICP+IsQR3IoPDGxNl
831 | XO8qFS/gdyvLPG62WF9dpl6vk81mD/R+yoLnOLhKE1QqjJVKXL98iVa7Q7VWo1rdYmNjk7VajWp1k9X1
832 | DXrdHpGJMMZiTELLjf3oWDOomLWjEIagjgt7XMchyARMFwtMTExRrpQZr1SYGCtTLJXI57O4nhcrB8DE
833 | tQcxsWd/2sCytbXF4uIigTW8NTXBmxPjTOdclGOJFGAVKtJ7kqzOOHb7/R/GxwNEZoZC930RjtsCSLsC
834 | W4iGK8dHDlECeUaEu7kbBoWrHK4Xi+iFOQLP8tl6lWqnQ3Vjk/GJcbSz/1y/im1xFTvVrlY4QUAuCJgo
835 | l4kuXKDf79Hp9QnDPo1Gk2a7TaPdptVu0W536PUjwrBP2OtiIoPWSpiDjoPr+fieTybjk8sGFAoF8rks
836 | hSAg42fwfA/P83D0wAdPrIsBK9BuK5TnIW1hRKFhfX2NTLfJz+ZnuFQukfc9tLJSbh07EkqNZC/lhD37
837 | BAn6/QGRkS2O2fRPcOwKAJ6pFfiKgRLIImShLCMYFEyEwNOaa6UyjlX4+NxrtvFqdTrdNtls7oD2j93r
838 | I1AKXEfjOhkyQYACJsfGiJByY6wVfr6R3d/G1oAUDA2INEpJcw3tqG1KsvuCSQY7iYpqX+eilNp2fcJe
839 | m1xzi+8VSxR9b/szbRJw3OOcRwSGQXftLxDh/4ohc/1fhleiAFIn3EZymp8iFOEikhqcZsSowrvhOYpL
840 | 5RKhBr2yylqzAbUmNpM/lrM2sXA7ST+BZMc2RsaTWrafgxSdP677NUnjzsRVOCaYRoN8s0XG84Q1OLpL
841 | II10e69vgA8QmXjKK+6u/cpM712pwW58ATwGiiBghDMDylpcCyXfx3U01WaNCNBjZXDd7fSa/Dj6JUiC
842 | dgolZcrWyrDSpKIoKchXdlDsr+KBpttPSZHR8LsSiYIx3Q71B4/ora4SKrDaGc2bvxNpnv83SLrvNwjn
843 | v8Yr8PvTeKW+93OUgI8ogXz8eDSVgFJYrXC1ouJn8DRUWw16uTw6lxUjW2npPnTE0382qzBIn6kd/7Hr
844 | 8a5/x5TdYSNSUr8XrqzRePAA0+/Gnz2Spn4a6cladxDB/zWiCIZe6LMfvHK/O24pnjZ/fof4P/eRaOjo
845 | zBbYA1JFqLhRHuPdXJHC2hpuuyfVf8p+J+YGGhVhWy0aTxeJWs2T/jqvConwJxH/PyBr/xteQb7/eTiR
846 | wNvYX/110uRwDWE7/Q7pc/YIqYKKGGElYBRkHIcbhTxvAbnqFtg4yn1Kab7DgkLhhBHNpRXa62uITIw8
847 | knRfUuH3EbLmv0RkoPsv/v43J5LjPLHIe6wEkulCnyKtjj9GUiIjM2DkebBYPM/lSi7L690OhWYDpZP6
848 | /9GCRZReYtx0VzdpPnwCnRbWjmR6bzd2p/t+i6z5JaB9UsIPrzYL8LwL04wvjIfEAIT6BRcQrsBIcgRA
849 | BMPXmovW4NVbfJHJ0HH9kTN9FMRzFaHf2KJ5/y6mtonCHHjW4hlExGCazyeI3/8xsuabnPBGd6LCtSso
850 | 2EEsAhBeQD7+OTJTHZ8HhSJnDL5VNHyXnh4tnWfjzsRRq0njzl06S4+wUS9u8aVHeT5ixKAq9lMk4PcB
851 | Q27seRSc+EpLKYE+O5VABikcSnoIjOwqQUnDi1wYgjI0XY9Qe1h1drvcJXkHjYNViqjTpnX3Aa0nDzD9
852 | PlZplEq6qI6kFZAIf+Li/hrx++8h6b5jq/A7CE5cAcCelkCLuMQesQRGWgkky9+xlkI/wmjYDFxC5ZzZ
853 | E06YgUYZbLtN+8FDGo8eEXbbcZoxyfaOvPB/BvwKEf67SArwVAg/nBIFADs6CfWRi5cwor4TSiCBay3l
854 | XohvLC3PoX9G3QGFxloIW02aDx7QfPiAqNPatgxGUuwFzxP+O0jF34mk+56HU7W6dimBVnwkbcWyiBJI
855 | +gqO5BqygGcMhTDEjwwdrWk7QuU9zWIjXXpENyvAmoh+rUb93l2ajx5ge20ZWMLIin/SC7PFoPw9Ef7b
856 | nELhh1MqRJt/+RcKyQZUgOvAnwI/B95FmokkFYSn8vsPAwroKXji+tzKZmkW8ph4eg52wOA9DRg0D3HA
857 | hET9Lu2NDdoPH9NfXSYyXVAj1w92xyVgkOdPhP/XwO85pTt/glN7R3YpgavAj4CfAu8jKcICI64EsJa+
858 | gYeR4Stf0ygX8Qsl8AKp2jslpKFEAYT9LqZep7u0QnNpmbC5hTImbtw7mgxvdk7wecIg1fcBEvCrckqF
859 | H075HUkpgRKiBL6PKIHvIePHioxgq/EE0oPP0rER91otvuh2aWbzeFNTuKUijp+Jef8Kq6RqLz0ec7sm
860 | ILEW7IuJRjY9KnD77559UbptmTEG0+vSbdTprq3SWdvA1GrQ62B1BOi4wmkkFUCa3vsIye//BmnqkUT7
861 | T63wwxm4I7EScBElcAkR/p8Cf4JMIi4zqq3FYiigG0XcrTf4bHOTdU8TVMYIyhM4xSJuPof2PflbO1AA
862 | Wuntqb/aDn63e7w3xK36tdqmIqd6fsYR+/STBtuPCFttuvUavY11+lvrRM0WUa8fz/lL3jV9FiOFJHW9
863 | heT1P2JA8nnIKUr1vQhn4q6klEABMf/fA34M/BC4hrgJSSXhyKJnIu42mny8usJGt4vOZNHZHF6xLEch
864 | h5MJ0EGA1Rqj2U64wT4CcInBoGJ6mpGxXVppGVTa6xG2W4SNOv1ag7DWpN+qE3YaEPUkBnA2ltRRYYAe
865 | Yt7fZVDY8yniBjQ4A8IPZ+huxUrAQejBc8BbiBL4EXATaTg62j0FjKJDyINmk0+Xl1lutbDWkZZenovO
866 | BDiZAIIcTjbAyWbQQQbHC9Cei/LcuOOOXB69a0KwjYePGBNieh1st4/t9Oh120SdHqbdJuq1ibotbC+E
867 | 0MRtANWOVmUjjCTS30WGd9xCfP2ksGeROHN1FoQfzpigxEpAIynBSeB1JEPwp/HjGQb1A2fq3PYFq0AZ
868 | etbyoFbno5VlVlrN2E4Xxp1SCpSDcjTKdVDaAe3InEGtZUqwkn/bNMfAWogiaRxqIqwJITLYyBBFEdYY
869 | ZN6ZGTT9THp+q6STyZlY84e++gx4/ctIGe/v4yMZ290GzFkRfjijQrL5l3+hkd1+HEkT/gCxBN5GXISk
870 | 6/CZPL/9oG8M9+o1PlxeZq3Txu7D+xn4/BLts+kx5BYw5ljmiowAEn+/jpj4XyA7/x+RNN8GJ1jSexSc
871 | KiLQfvEvf/tHGxOGuoi/VWNQQuwhysFNnd/IrWkXKHs+vutS6/Voh/svq7U2wphIfCUr7cokpWhHlaRz
872 | WMT90+iy09//FaIA7iCdfHpnUfjhjCoA2KEEeggBYwvR0P34vNKlxaPHHFQaV2vKgY/reNT7PdpRCDZ8
873 | aYFNkjrcmQWwp3bi8AkhbfKvIBN7fosI/8dIpP+Vte8+LpxZBQDPVBK2kBuyhRQUJefnMZhFOFKr2wKO
874 | UpQDH8/R1LpdOlEvdgdefKrPCro6F/4BEjp6DcnvJ8y+f0LM/0XizlVnWfjhjCsA2LOcOFECSX/BxBpI
875 | XIKRswZcpSj7ogTq/Yh29J3osnMcSKL8HSTKf5udJv+38fNnLtj3PIyUIKSYg8kA0tcQwtD3gBtIlmD0
876 | phNb6RvQNYY7tS0+Xltlvd2OaTh2pE71GGGQDaOBRPlvI6b+R4jgL8a/O9Mm/26ceQsgjV3VhE0kcLNJ
877 | fOMQSdjtEpx9JRifhasVpSAg47nUez2aYTfJ+J/0NzzNSHz9DhLNv4tQeX+N+PxfIqW9Tc4IuecgOPuL
878 | /zmIU4VJHcEcwhN4H2ERXmdgDSTpwpG5FmEUcrfR5MPlJdY6HezonNowkUT4+wx2/TsIm+8TJLe/yIDP
879 | fyaj/C/DSK+MFHswizAFLyNcgfcQJuElZFpxllEqKrKKyITcbTT4aHWV5VbrpL/RaUNSxNNGLMSHyE7/
880 | KRLke8DA1z/zgb4XYTQW/AsQK4EkNlAEZpF4wLvAO/HjecRS8BkJFqFCWUM3Zgx+uLrCaruBtWbU6/Jf
881 | hsTc7yE7+1PE1/8cifTfRsz9JJ1sR1n44Tu0ElLWQAYpHrqIuAXvINbAFWCKgVswEmnDnjHcjxmDq53O
882 | KJzSYZBE9xNzfxWZzvMlIvzfIOm+KhILGOldP43v3GqIYwMu0lVoEnED3kQUwevAAuIu5BiB+ICylr4x
883 | 3K7X+HhlhbVO94z2GT4U0n5+CzHrHyMC/zkyjvshwuNPgnwj6es/D2d2YR8FqaIiH9nxZ5CGI28hyiBx
884 | C5L4wBlWBELu7ZuQb7dqfLq2JrUDJhrVJh2wU/ATPz8x979Cdv57SOCvgbgEI5HXPyhG8u7vFym3IEAa
885 | i8wh/QXeiI9r8XNlBoHCMyk1Cugaw+2tKp+urbLebmBGKO4ZIzH1kwDfFhLJv4tQeb+OHy/Gv+vyHTL3
886 | 98JI3f3DInYLkmxBhYEieB0hE11FgocVJIZwJmMESWehW1tVPltfZ63dGRV3IO3jdxBffgnZ5b9FTP5E
887 | 8KsMovvfKXN/L5ypBXycSGULXEQRjCFCfxVRAjeRQOEsO12Ds5M1sANLQBiDa6y3W2eZMZhE9dOm/hIS
888 | 4LuFCP+9+LnN+G9CvgPR/f3ibCzcV4hdacPEIphBOAQ3kfjAFcRKGEeChen04am/pokSuFur88nqMiut
889 | Bkop7Nkghib+fZLOayEMvkVE8G8jwv8A8fGriOB/J9J6B8WpX6wnhV2KIIPEAaaRLMH1+LiKBAvHEY5B
890 | wMA9gFN+fRPG4EcrS6y2TzVjMBHaxMzvIrn6DSS4dw9h8d1BovwrDKpCzwX/BTi1d/y0YJdrECCCPoEI
891 | /lUkVnAF6UQ0hVgMWQZWwSmOFahYCTT4+HQyBhPfPtnt28iOvop05rmP+Pb3EEWwjiiGLuem/r5wShfm
892 | 6UNKESTlxTkkFjCDkIouI4rgUvzcGKIskqDhKVQGgyrCB7U6H62usLLNGDyxMYxpoU+CenXEh19G8vb3
893 | ERP/UfzcJuIK9OLXnQv+PnGKFuPZQYpHkMQJiogbMIsogEuIUriAkI0qDEadp5UBnJJ7cIKMwbR5nxb6
894 | BrLbryG7/SNE+B8iQb0NRDEk/v13Mo9/VJyKxXdWkVIEiVWQRWIFk4gyuIDEDBbif0+wtzJIZxJO5J68
895 | QsagTf2M2Fvo1xEhfxwfT+J/ryG+fZvBbn8u+EfAuQIYAmJFAAOrwEeoxiVE6KeRmMFc/DNRBmVEGSSZ
896 | hKRrkWan/f0K7lOKMVir88nqKuudjrQHPzxjMC2YhsEuHzKI4DcQoU6E/ikS0X+KBPPWkcKdZvyafvw+
897 | nAv+0XGuAIaMVKwgqTlIRpuXkN0/sQ5m4p/T7HQTCgw4BolCeJ7LMPT7t4MxuL7GerOGUS/tsG73eJwI
898 | eyLwSa6+wU7zfgUR/GUGu3wVEfo2g4Ce4dy3HzrOFcAxYg9lkKQUCwwUQmIhTCGKYDJ+roRYETlEIWTi
899 | 90joyOnjRfyDA99jYQwabm9t8un6un0OYzDJx5tdRxgfHUSAW8juXUN287X4WGWww1fj3zcYpO7Ohf4V
900 | 4FwBvCLschMcRJCTuEGegVIYQxTARPy4kvqZKIQMYllkGLQ/30sh7FYOux+nkfLNldXW0rHG3t7ash+v
901 | rZmNdstasFhrUDoR9j5ilneQnbrDQOCrSHQ++bkeH5sMhL3JwJ8PiX16ODfvXxXOFcAJYZd1kCiEZKhJ
902 | Lj7SiqGCxAxKSNahkPqZRxRBogySI7EY0m5EWkmkkdrNlQEbKYi6xoR3a7Xwk9WV/kqr2Qf6KKfHYB5D
903 | A4nGJz9riE9fZaegt+Kjy2CHTwT+fJc/IZwrgFOAlHWQ5hokRxJUzDBwBZLHWXbGDbKpvwl4VimklUHa
904 | GkjTa9M+ex/ohVHYu9todj9cWeqstTtti2qz059P/t1hYPp3GATtotSRfNb5Ln8KcK4ATin2UAqJpeDs
905 | euzvOnbv/mmhT1sBL7AAdghsiFVhZMLwbqPR/2h1tb/caiUWQHIkf2t2PT4X9lOOcwVwhpBSCjC4d4kw
906 | 612Pd8cBYN8xgB2PDSirsLZrjHlQr9mPVlfMSrtllMVatLE7X38u7GcI5wpgRLBLOaRx1Hu8Q5i7xnC7
907 | XucX/92/OhfyEcD/BixNujD4VvdmAAAAAElFTkSuQmCC
908 |
909 |
910 |
--------------------------------------------------------------------------------