5htp-core 0.4.8 → 0.4.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (187) hide show
  1. package/package.json +5 -1
  2. package/src/client/assets/css/components/table.less +2 -0
  3. package/src/client/components/Form.ts +1 -1
  4. package/src/client/components/button.tsx +2 -1
  5. package/src/client/components/containers/Popover/index.tsx +2 -2
  6. package/src/client/components/dropdown/index.tsx +16 -6
  7. package/src/client/components/input/Slider/index.tsx +0 -2
  8. package/src/client/components/inputv3/Rte/Editor.tsx +271 -0
  9. package/src/client/components/inputv3/Rte/ToolbarPlugin/BlockFormat.tsx +220 -0
  10. package/src/client/components/inputv3/Rte/ToolbarPlugin/ElementFormat.tsx +107 -0
  11. package/src/client/components/inputv3/Rte/ToolbarPlugin/index.tsx +768 -0
  12. package/src/client/components/inputv3/Rte/appSettings.ts +36 -0
  13. package/src/client/components/inputv3/Rte/context/FlashMessageContext.tsx +68 -0
  14. package/src/client/components/inputv3/Rte/context/SettingsContext.tsx +71 -0
  15. package/src/client/components/inputv3/Rte/context/SharedAutocompleteContext.tsx +71 -0
  16. package/src/client/components/inputv3/Rte/context/SharedHistoryContext.tsx +35 -0
  17. package/src/client/components/inputv3/Rte/currentEditor.ts +42 -0
  18. package/src/client/components/inputv3/Rte/hooks/useFlashMessage.tsx +16 -0
  19. package/src/client/components/inputv3/Rte/hooks/useReport.ts +67 -0
  20. package/src/client/components/inputv3/Rte/images/emoji/1F600.png +0 -0
  21. package/src/client/components/inputv3/Rte/images/emoji/1F641.png +0 -0
  22. package/src/client/components/inputv3/Rte/images/emoji/1F642.png +0 -0
  23. package/src/client/components/inputv3/Rte/images/emoji/2764.png +0 -0
  24. package/src/client/components/inputv3/Rte/images/emoji/LICENSE.md +5 -0
  25. package/src/client/components/inputv3/Rte/images/icons/draggable-block-menu.svg +1 -0
  26. package/src/client/components/inputv3/Rte/images/icons/prettier-error.svg +1 -0
  27. package/src/client/components/inputv3/Rte/images/icons/prettier.svg +1 -0
  28. package/src/client/components/inputv3/Rte/images/image/LICENSE.md +5 -0
  29. package/src/client/components/inputv3/Rte/images/image-broken.svg +4 -0
  30. package/src/client/components/inputv3/Rte/images/logo.svg +1 -0
  31. package/src/client/components/inputv3/Rte/index.tsx +63 -79
  32. package/src/client/components/inputv3/Rte/nodes/AutocompleteNode.tsx +119 -0
  33. package/src/client/components/inputv3/Rte/nodes/EmojiNode.tsx +102 -0
  34. package/src/client/components/inputv3/Rte/nodes/EquationComponent.tsx +141 -0
  35. package/src/client/components/inputv3/Rte/nodes/EquationNode.tsx +174 -0
  36. package/src/client/components/inputv3/Rte/nodes/FigmaNode.tsx +135 -0
  37. package/src/client/components/inputv3/Rte/nodes/ImageComponent.tsx +468 -0
  38. package/src/client/components/inputv3/Rte/nodes/ImageNode.css +43 -0
  39. package/src/client/components/inputv3/Rte/nodes/ImageNode.tsx +266 -0
  40. package/src/client/components/inputv3/Rte/nodes/InlineImageNode/InlineImageComponent.tsx +402 -0
  41. package/src/client/components/inputv3/Rte/nodes/InlineImageNode/InlineImageNode.css +94 -0
  42. package/src/client/components/inputv3/Rte/nodes/InlineImageNode/InlineImageNode.tsx +294 -0
  43. package/src/client/components/inputv3/Rte/nodes/KeywordNode.ts +67 -0
  44. package/src/client/components/inputv3/Rte/nodes/LayoutContainerNode.ts +137 -0
  45. package/src/client/components/inputv3/Rte/nodes/LayoutItemNode.ts +71 -0
  46. package/src/client/components/inputv3/Rte/nodes/MentionNode.ts +130 -0
  47. package/src/client/components/inputv3/Rte/nodes/PageBreakNode/index.css +62 -0
  48. package/src/client/components/inputv3/Rte/nodes/PageBreakNode/index.tsx +170 -0
  49. package/src/client/components/inputv3/Rte/nodes/PlaygroundNodes.ts +76 -0
  50. package/src/client/components/inputv3/Rte/nodes/PollComponent.tsx +249 -0
  51. package/src/client/components/inputv3/Rte/nodes/PollNode.css +187 -0
  52. package/src/client/components/inputv3/Rte/nodes/PollNode.tsx +209 -0
  53. package/src/client/components/inputv3/Rte/nodes/StickyComponent.tsx +261 -0
  54. package/src/client/components/inputv3/Rte/nodes/StickyNode.css +37 -0
  55. package/src/client/components/inputv3/Rte/nodes/StickyNode.tsx +150 -0
  56. package/src/client/components/inputv3/Rte/nodes/TweetNode.tsx +223 -0
  57. package/src/client/components/inputv3/Rte/nodes/YouTubeNode.tsx +184 -0
  58. package/src/client/components/inputv3/Rte/plugins/ActionsPlugin/index.tsx +334 -0
  59. package/src/client/components/inputv3/Rte/plugins/AutoEmbedPlugin/index.tsx +352 -0
  60. package/src/client/components/inputv3/Rte/plugins/AutoLinkPlugin/index.tsx +32 -0
  61. package/src/client/components/inputv3/Rte/plugins/AutocompletePlugin/index.tsx +2529 -0
  62. package/src/client/components/inputv3/Rte/plugins/CodeActionMenuPlugin/components/CopyButton/index.tsx +70 -0
  63. package/src/client/components/inputv3/Rte/plugins/CodeActionMenuPlugin/components/PrettierButton/index.css +14 -0
  64. package/src/client/components/inputv3/Rte/plugins/CodeActionMenuPlugin/components/PrettierButton/index.tsx +156 -0
  65. package/src/client/components/inputv3/Rte/plugins/CodeActionMenuPlugin/index.css +54 -0
  66. package/src/client/components/inputv3/Rte/plugins/CodeActionMenuPlugin/index.tsx +190 -0
  67. package/src/client/components/inputv3/Rte/plugins/CodeActionMenuPlugin/utils.ts +33 -0
  68. package/src/client/components/inputv3/Rte/plugins/CodeHighlightPlugin/index.ts +21 -0
  69. package/src/client/components/inputv3/Rte/plugins/CollapsiblePlugin/Collapsible.css +57 -0
  70. package/src/client/components/inputv3/Rte/plugins/CollapsiblePlugin/CollapsibleContainerNode.ts +168 -0
  71. package/src/client/components/inputv3/Rte/plugins/CollapsiblePlugin/CollapsibleContentNode.ts +127 -0
  72. package/src/client/components/inputv3/Rte/plugins/CollapsiblePlugin/CollapsibleTitleNode.ts +152 -0
  73. package/src/client/components/inputv3/Rte/plugins/CollapsiblePlugin/CollapsibleUtils.ts +17 -0
  74. package/src/client/components/inputv3/Rte/plugins/CollapsiblePlugin/index.ts +284 -0
  75. package/src/client/components/inputv3/Rte/plugins/ComponentPickerPlugin/index.tsx +370 -0
  76. package/src/client/components/inputv3/Rte/plugins/ContextMenuPlugin/index.tsx +270 -0
  77. package/src/client/components/inputv3/Rte/plugins/DocsPlugin/index.tsx +20 -0
  78. package/src/client/components/inputv3/Rte/plugins/DragDropPastePlugin/index.ts +51 -0
  79. package/src/client/components/inputv3/Rte/plugins/DraggableBlockPlugin/index.css +36 -0
  80. package/src/client/components/inputv3/Rte/plugins/DraggableBlockPlugin/index.tsx +43 -0
  81. package/src/client/components/inputv3/Rte/plugins/EmojiPickerPlugin/index.tsx +198 -0
  82. package/src/client/components/inputv3/Rte/plugins/EmojisPlugin/index.ts +75 -0
  83. package/src/client/components/inputv3/Rte/plugins/EquationsPlugin/index.tsx +82 -0
  84. package/src/client/components/inputv3/Rte/plugins/FigmaPlugin/index.tsx +40 -0
  85. package/src/client/components/inputv3/Rte/plugins/FloatingLinkEditorPlugin/index.css +41 -0
  86. package/src/client/components/inputv3/Rte/plugins/FloatingLinkEditorPlugin/index.tsx +393 -0
  87. package/src/client/components/inputv3/Rte/plugins/FloatingTextFormatToolbarPlugin/index.css +141 -0
  88. package/src/client/components/inputv3/Rte/plugins/FloatingTextFormatToolbarPlugin/index.tsx +388 -0
  89. package/src/client/components/inputv3/Rte/plugins/ImagesPlugin/index.tsx +350 -0
  90. package/src/client/components/inputv3/Rte/plugins/InlineImagePlugin/index.tsx +336 -0
  91. package/src/client/components/inputv3/Rte/plugins/KeywordsPlugin/index.ts +56 -0
  92. package/src/client/components/inputv3/Rte/plugins/LayoutPlugin/InsertLayoutDialog.tsx +58 -0
  93. package/src/client/components/inputv3/Rte/plugins/LayoutPlugin/LayoutPlugin.tsx +219 -0
  94. package/src/client/components/inputv3/Rte/plugins/LinkPlugin/index.tsx +34 -0
  95. package/src/client/components/inputv3/Rte/plugins/ListMaxIndentLevelPlugin/index.ts +85 -0
  96. package/src/client/components/inputv3/Rte/plugins/MarkdownShortcutPlugin/index.tsx +16 -0
  97. package/src/client/components/inputv3/Rte/plugins/MarkdownTransformers/index.ts +324 -0
  98. package/src/client/components/inputv3/Rte/plugins/MaxLengthPlugin/index.tsx +53 -0
  99. package/src/client/components/inputv3/Rte/plugins/MentionsPlugin/index.tsx +696 -0
  100. package/src/client/components/inputv3/Rte/plugins/PageBreakPlugin/index.tsx +57 -0
  101. package/src/client/components/inputv3/Rte/plugins/PasteLogPlugin/index.tsx +54 -0
  102. package/src/client/components/inputv3/Rte/plugins/PollPlugin/index.tsx +86 -0
  103. package/src/client/components/inputv3/Rte/plugins/SpeechToTextPlugin/index.ts +125 -0
  104. package/src/client/components/inputv3/Rte/plugins/StickyPlugin/index.ts +22 -0
  105. package/src/client/components/inputv3/Rte/plugins/TabFocusPlugin/index.tsx +65 -0
  106. package/src/client/components/inputv3/Rte/plugins/TableActionMenuPlugin/index.tsx +773 -0
  107. package/src/client/components/inputv3/Rte/plugins/TableCellResizer/index.css +12 -0
  108. package/src/client/components/inputv3/Rte/plugins/TableCellResizer/index.tsx +436 -0
  109. package/src/client/components/inputv3/Rte/plugins/TableHoverActionsPlugin/index.tsx +287 -0
  110. package/src/client/components/inputv3/Rte/plugins/TableOfContentsPlugin/index.css +95 -0
  111. package/src/client/components/inputv3/Rte/plugins/TableOfContentsPlugin/index.tsx +197 -0
  112. package/src/client/components/inputv3/Rte/plugins/TablePlugin.tsx +178 -0
  113. package/src/client/components/inputv3/Rte/plugins/TestRecorderPlugin/index.tsx +468 -0
  114. package/src/client/components/inputv3/Rte/plugins/TreeViewPlugin/index.tsx +26 -0
  115. package/src/client/components/inputv3/Rte/plugins/TwitterPlugin/index.ts +41 -0
  116. package/src/client/components/inputv3/Rte/plugins/TypingPerfPlugin/index.ts +117 -0
  117. package/src/client/components/inputv3/Rte/plugins/YouTubePlugin/index.ts +41 -0
  118. package/src/client/components/inputv3/Rte/shared/canUseDOM.ts +4 -0
  119. package/src/client/components/inputv3/Rte/shared/caretFromPoint.ts +40 -0
  120. package/src/client/components/inputv3/Rte/shared/environment.ts +56 -0
  121. package/src/client/components/inputv3/Rte/shared/invariant.ts +26 -0
  122. package/src/client/components/inputv3/Rte/shared/normalizeClassNames.ts +21 -0
  123. package/src/client/components/inputv3/Rte/shared/react-test-utils.ts +18 -0
  124. package/src/client/components/inputv3/Rte/shared/reactPatches.ts +22 -0
  125. package/src/client/components/inputv3/Rte/shared/simpleDiffWithCursor.ts +49 -0
  126. package/src/client/components/inputv3/Rte/shared/useLayoutEffect.ts +19 -0
  127. package/src/client/components/inputv3/Rte/shared/warnOnlyOnce.ts +20 -0
  128. package/src/client/components/inputv3/Rte/style.less +30 -60
  129. package/src/client/components/inputv3/Rte/themes/CommentEditorTheme.css +13 -0
  130. package/src/client/components/inputv3/Rte/themes/CommentEditorTheme.ts +20 -0
  131. package/src/client/components/inputv3/Rte/themes/PlaygroundEditorTheme.css +447 -0
  132. package/src/client/components/inputv3/Rte/themes/PlaygroundEditorTheme.ts +120 -0
  133. package/src/client/components/inputv3/Rte/themes/StickyEditorTheme.css +13 -0
  134. package/src/client/components/inputv3/Rte/themes/StickyEditorTheme.ts +20 -0
  135. package/src/client/components/inputv3/Rte/ui/ColorPicker.css +88 -0
  136. package/src/client/components/inputv3/Rte/ui/ColorPicker.tsx +365 -0
  137. package/src/client/components/inputv3/Rte/ui/ContentEditable.css +44 -0
  138. package/src/client/components/inputv3/Rte/ui/ContentEditable.tsx +36 -0
  139. package/src/client/components/inputv3/Rte/ui/DropDown.tsx +259 -0
  140. package/src/client/components/inputv3/Rte/ui/DropdownColorPicker.tsx +41 -0
  141. package/src/client/components/inputv3/Rte/ui/EquationEditor.css +38 -0
  142. package/src/client/components/inputv3/Rte/ui/EquationEditor.tsx +56 -0
  143. package/src/client/components/inputv3/Rte/ui/FileInput.tsx +38 -0
  144. package/src/client/components/inputv3/Rte/ui/FlashMessage.css +28 -0
  145. package/src/client/components/inputv3/Rte/ui/FlashMessage.tsx +29 -0
  146. package/src/client/components/inputv3/Rte/ui/ImageResizer.tsx +316 -0
  147. package/src/client/components/inputv3/Rte/ui/Input.css +32 -0
  148. package/src/client/components/inputv3/Rte/ui/KatexRenderer.tsx +54 -0
  149. package/src/client/components/inputv3/Rte/ui/Switch.tsx +36 -0
  150. package/src/client/components/inputv3/Rte/utils/docSerialization.ts +77 -0
  151. package/src/client/components/inputv3/Rte/utils/emoji-list.ts +16615 -0
  152. package/src/client/components/inputv3/Rte/utils/getDOMRangeRect.ts +27 -0
  153. package/src/client/components/inputv3/Rte/utils/getSelectedNode.ts +27 -0
  154. package/src/client/components/inputv3/Rte/utils/guard.ts +10 -0
  155. package/src/client/components/inputv3/Rte/utils/isMobileWidth.ts +7 -0
  156. package/src/client/components/inputv3/Rte/utils/joinClasses.ts +13 -0
  157. package/src/client/components/inputv3/Rte/utils/setFloatingElemPosition.ts +51 -0
  158. package/src/client/components/inputv3/Rte/utils/setFloatingElemPositionForLinkEditor.ts +46 -0
  159. package/src/client/components/inputv3/Rte/utils/swipe.ts +127 -0
  160. package/src/client/components/inputv3/Rte/utils/url.ts +38 -0
  161. package/src/client/components/inputv3/base.tsx +8 -5
  162. package/src/client/components/inputv3/file/index.tsx +11 -5
  163. package/src/common/data/rte/nodes.ts +60 -9
  164. package/src/common/validation/index.ts +21 -2
  165. package/src/common/validation/schema.ts +42 -10
  166. package/src/common/validation/validator.ts +12 -4
  167. package/src/common/validation/validators.ts +82 -53
  168. package/src/server/services/router/http/multipart.ts +0 -1
  169. package/src/server/services/schema/index.ts +24 -2
  170. package/src/server/services/schema/request.ts +3 -2
  171. package/src/server/services/schema/rte.ts +110 -0
  172. package/src/{common/data/rte/index.ts → server/utils/rte.ts} +27 -16
  173. package/src/client/components/inputv3/Rte/ExampleTheme.tsx +0 -42
  174. package/src/client/components/inputv3/Rte/ToolbarPlugin.tsx +0 -167
  175. package/src/client/components/inputv3/Rte/icons/LICENSE.md +0 -5
  176. package/src/client/components/inputv3/Rte/icons/arrow-clockwise.svg +0 -4
  177. package/src/client/components/inputv3/Rte/icons/arrow-counterclockwise.svg +0 -4
  178. package/src/client/components/inputv3/Rte/icons/journal-text.svg +0 -5
  179. package/src/client/components/inputv3/Rte/icons/justify.svg +0 -3
  180. package/src/client/components/inputv3/Rte/icons/text-center.svg +0 -3
  181. package/src/client/components/inputv3/Rte/icons/text-left.svg +0 -3
  182. package/src/client/components/inputv3/Rte/icons/text-paragraph.svg +0 -3
  183. package/src/client/components/inputv3/Rte/icons/text-right.svg +0 -3
  184. package/src/client/components/inputv3/Rte/icons/type-bold.svg +0 -3
  185. package/src/client/components/inputv3/Rte/icons/type-italic.svg +0 -3
  186. package/src/client/components/inputv3/Rte/icons/type-strikethrough.svg +0 -3
  187. package/src/client/components/inputv3/Rte/icons/type-underline.svg +0 -3
@@ -0,0 +1,2529 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ */
8
+
9
+ import type {BaseSelection, NodeKey} from 'lexical';
10
+
11
+ import {useLexicalComposerContext} from '@lexical/react/LexicalComposerContext';
12
+ import {$isAtNodeEnd} from '@lexical/selection';
13
+ import {mergeRegister} from '@lexical/utils';
14
+ import {
15
+ $createTextNode,
16
+ $getNodeByKey,
17
+ $getSelection,
18
+ $isRangeSelection,
19
+ $isTextNode,
20
+ $setSelection,
21
+ COMMAND_PRIORITY_LOW,
22
+ KEY_ARROW_RIGHT_COMMAND,
23
+ KEY_TAB_COMMAND,
24
+ } from 'lexical';
25
+ import {useCallback, useEffect} from 'react';
26
+
27
+ import {useSharedAutocompleteContext} from '../../context/SharedAutocompleteContext';
28
+ import {
29
+ $createAutocompleteNode,
30
+ AutocompleteNode,
31
+ } from '../../nodes/AutocompleteNode';
32
+ import {addSwipeRightListener} from '../../utils/swipe';
33
+
34
+ type SearchPromise = {
35
+ dismiss: () => void;
36
+ promise: Promise<null | string>;
37
+ };
38
+
39
+ export const uuid = Math.random()
40
+ .toString(36)
41
+ .replace(/[^a-z]+/g, '')
42
+ .substr(0, 5);
43
+
44
+ // TODO lookup should be custom
45
+ function $search(selection: null | BaseSelection): [boolean, string] {
46
+ if (!$isRangeSelection(selection) || !selection.isCollapsed()) {
47
+ return [false, ''];
48
+ }
49
+ const node = selection.getNodes()[0];
50
+ const anchor = selection.anchor;
51
+ // Check siblings?
52
+ if (!$isTextNode(node) || !node.isSimpleText() || !$isAtNodeEnd(anchor)) {
53
+ return [false, ''];
54
+ }
55
+ const word = [];
56
+ const text = node.getTextContent();
57
+ let i = node.getTextContentSize();
58
+ let c;
59
+ while (i-- && i >= 0 && (c = text[i]) !== ' ') {
60
+ word.push(c);
61
+ }
62
+ if (word.length === 0) {
63
+ return [false, ''];
64
+ }
65
+ return [true, word.reverse().join('')];
66
+ }
67
+
68
+ // TODO query should be custom
69
+ function useQuery(): (searchText: string) => SearchPromise {
70
+ return useCallback((searchText: string) => {
71
+ const server = new AutocompleteServer();
72
+ console.time('query');
73
+ const response = server.query(searchText);
74
+ console.timeEnd('query');
75
+ return response;
76
+ }, []);
77
+ }
78
+
79
+ export default function AutocompletePlugin(): JSX.Element | null {
80
+ const [editor] = useLexicalComposerContext();
81
+ const [, setSuggestion] = useSharedAutocompleteContext();
82
+ const query = useQuery();
83
+
84
+ useEffect(() => {
85
+ let autocompleteNodeKey: null | NodeKey = null;
86
+ let lastMatch: null | string = null;
87
+ let lastSuggestion: null | string = null;
88
+ let searchPromise: null | SearchPromise = null;
89
+ function $clearSuggestion() {
90
+ const autocompleteNode =
91
+ autocompleteNodeKey !== null
92
+ ? $getNodeByKey(autocompleteNodeKey)
93
+ : null;
94
+ if (autocompleteNode !== null && autocompleteNode.isAttached()) {
95
+ autocompleteNode.remove();
96
+ autocompleteNodeKey = null;
97
+ }
98
+ if (searchPromise !== null) {
99
+ searchPromise.dismiss();
100
+ searchPromise = null;
101
+ }
102
+ lastMatch = null;
103
+ lastSuggestion = null;
104
+ setSuggestion(null);
105
+ }
106
+ function updateAsyncSuggestion(
107
+ refSearchPromise: SearchPromise,
108
+ newSuggestion: null | string,
109
+ ) {
110
+ if (searchPromise !== refSearchPromise || newSuggestion === null) {
111
+ // Outdated or no suggestion
112
+ return;
113
+ }
114
+ editor.update(
115
+ () => {
116
+ const selection = $getSelection();
117
+ const [hasMatch, match] = $search(selection);
118
+ if (
119
+ !hasMatch ||
120
+ match !== lastMatch ||
121
+ !$isRangeSelection(selection)
122
+ ) {
123
+ // Outdated
124
+ return;
125
+ }
126
+ const selectionCopy = selection.clone();
127
+ const node = $createAutocompleteNode(uuid);
128
+ autocompleteNodeKey = node.getKey();
129
+ selection.insertNodes([node]);
130
+ $setSelection(selectionCopy);
131
+ lastSuggestion = newSuggestion;
132
+ setSuggestion(newSuggestion);
133
+ },
134
+ {tag: 'history-merge'},
135
+ );
136
+ }
137
+
138
+ function $handleAutocompleteNodeTransform(node: AutocompleteNode) {
139
+ const key = node.getKey();
140
+ if (node.__uuid === uuid && key !== autocompleteNodeKey) {
141
+ // Max one Autocomplete node per session
142
+ $clearSuggestion();
143
+ }
144
+ }
145
+ function handleUpdate() {
146
+ editor.update(() => {
147
+ const selection = $getSelection();
148
+ const [hasMatch, match] = $search(selection);
149
+ if (!hasMatch) {
150
+ $clearSuggestion();
151
+ return;
152
+ }
153
+ if (match === lastMatch) {
154
+ return;
155
+ }
156
+ $clearSuggestion();
157
+ searchPromise = query(match);
158
+ searchPromise.promise
159
+ .then((newSuggestion) => {
160
+ if (searchPromise !== null) {
161
+ updateAsyncSuggestion(searchPromise, newSuggestion);
162
+ }
163
+ })
164
+ .catch((e) => {
165
+ console.error(e);
166
+ });
167
+ lastMatch = match;
168
+ });
169
+ }
170
+ function $handleAutocompleteIntent(): boolean {
171
+ if (lastSuggestion === null || autocompleteNodeKey === null) {
172
+ return false;
173
+ }
174
+ const autocompleteNode = $getNodeByKey(autocompleteNodeKey);
175
+ if (autocompleteNode === null) {
176
+ return false;
177
+ }
178
+ const textNode = $createTextNode(lastSuggestion);
179
+ autocompleteNode.replace(textNode);
180
+ textNode.selectNext();
181
+ $clearSuggestion();
182
+ return true;
183
+ }
184
+ function $handleKeypressCommand(e: Event) {
185
+ if ($handleAutocompleteIntent()) {
186
+ e.preventDefault();
187
+ return true;
188
+ }
189
+ return false;
190
+ }
191
+ function handleSwipeRight(_force: number, e: TouchEvent) {
192
+ editor.update(() => {
193
+ if ($handleAutocompleteIntent()) {
194
+ e.preventDefault();
195
+ }
196
+ });
197
+ }
198
+ function unmountSuggestion() {
199
+ editor.update(() => {
200
+ $clearSuggestion();
201
+ });
202
+ }
203
+
204
+ const rootElem = editor.getRootElement();
205
+
206
+ return mergeRegister(
207
+ editor.registerNodeTransform(
208
+ AutocompleteNode,
209
+ $handleAutocompleteNodeTransform,
210
+ ),
211
+ editor.registerUpdateListener(handleUpdate),
212
+ editor.registerCommand(
213
+ KEY_TAB_COMMAND,
214
+ $handleKeypressCommand,
215
+ COMMAND_PRIORITY_LOW,
216
+ ),
217
+ editor.registerCommand(
218
+ KEY_ARROW_RIGHT_COMMAND,
219
+ $handleKeypressCommand,
220
+ COMMAND_PRIORITY_LOW,
221
+ ),
222
+ ...(rootElem !== null
223
+ ? [addSwipeRightListener(rootElem, handleSwipeRight)]
224
+ : []),
225
+ unmountSuggestion,
226
+ );
227
+ }, [editor, query, setSuggestion]);
228
+
229
+ return null;
230
+ }
231
+
232
+ /*
233
+ * Simulate an asynchronous autocomplete server (typical in more common use cases like GMail where
234
+ * the data is not static).
235
+ */
236
+ class AutocompleteServer {
237
+ DATABASE = DICTIONARY;
238
+ LATENCY = 200;
239
+
240
+ query = (searchText: string): SearchPromise => {
241
+ let isDismissed = false;
242
+
243
+ const dismiss = () => {
244
+ isDismissed = true;
245
+ };
246
+ const promise: Promise<null | string> = new Promise((resolve, reject) => {
247
+ setTimeout(() => {
248
+ if (isDismissed) {
249
+ // TODO cache result
250
+ return reject('Dismissed');
251
+ }
252
+ const searchTextLength = searchText.length;
253
+ if (searchText === '' || searchTextLength < 4) {
254
+ return resolve(null);
255
+ }
256
+ const char0 = searchText.charCodeAt(0);
257
+ const isCapitalized = char0 >= 65 && char0 <= 90;
258
+ const caseInsensitiveSearchText = isCapitalized
259
+ ? String.fromCharCode(char0 + 32) + searchText.substring(1)
260
+ : searchText;
261
+ const match = this.DATABASE.find(
262
+ (dictionaryWord) =>
263
+ dictionaryWord.startsWith(caseInsensitiveSearchText) ?? null,
264
+ );
265
+ if (match === undefined) {
266
+ return resolve(null);
267
+ }
268
+ const matchCapitalized = isCapitalized
269
+ ? String.fromCharCode(match.charCodeAt(0) - 32) + match.substring(1)
270
+ : match;
271
+ const autocompleteChunk = matchCapitalized.substring(searchTextLength);
272
+ if (autocompleteChunk === '') {
273
+ return resolve(null);
274
+ }
275
+ return resolve(autocompleteChunk);
276
+ }, this.LATENCY);
277
+ });
278
+
279
+ return {
280
+ dismiss,
281
+ promise,
282
+ };
283
+ };
284
+ }
285
+
286
+ // https://raw.githubusercontent.com/first20hours/google-10000-english/master/google-10000-english-usa-no-swears-long.txt
287
+ const DICTIONARY = [
288
+ 'information',
289
+ 'available',
290
+ 'copyright',
291
+ 'university',
292
+ 'management',
293
+ 'international',
294
+ 'development',
295
+ 'education',
296
+ 'community',
297
+ 'technology',
298
+ 'following',
299
+ 'resources',
300
+ 'including',
301
+ 'directory',
302
+ 'government',
303
+ 'department',
304
+ 'description',
305
+ 'insurance',
306
+ 'different',
307
+ 'categories',
308
+ 'conditions',
309
+ 'accessories',
310
+ 'september',
311
+ 'questions',
312
+ 'application',
313
+ 'financial',
314
+ 'equipment',
315
+ 'performance',
316
+ 'experience',
317
+ 'important',
318
+ 'activities',
319
+ 'additional',
320
+ 'something',
321
+ 'professional',
322
+ 'committee',
323
+ 'washington',
324
+ 'california',
325
+ 'reference',
326
+ 'companies',
327
+ 'computers',
328
+ 'president',
329
+ 'australia',
330
+ 'discussion',
331
+ 'entertainment',
332
+ 'agreement',
333
+ 'marketing',
334
+ 'association',
335
+ 'collection',
336
+ 'solutions',
337
+ 'electronics',
338
+ 'technical',
339
+ 'microsoft',
340
+ 'conference',
341
+ 'environment',
342
+ 'statement',
343
+ 'downloads',
344
+ 'applications',
345
+ 'requirements',
346
+ 'individual',
347
+ 'subscribe',
348
+ 'everything',
349
+ 'production',
350
+ 'commercial',
351
+ 'advertising',
352
+ 'treatment',
353
+ 'newsletter',
354
+ 'knowledge',
355
+ 'currently',
356
+ 'construction',
357
+ 'registered',
358
+ 'protection',
359
+ 'engineering',
360
+ 'published',
361
+ 'corporate',
362
+ 'customers',
363
+ 'materials',
364
+ 'countries',
365
+ 'standards',
366
+ 'political',
367
+ 'advertise',
368
+ 'environmental',
369
+ 'availability',
370
+ 'employment',
371
+ 'commission',
372
+ 'administration',
373
+ 'institute',
374
+ 'sponsored',
375
+ 'electronic',
376
+ 'condition',
377
+ 'effective',
378
+ 'organization',
379
+ 'selection',
380
+ 'corporation',
381
+ 'executive',
382
+ 'necessary',
383
+ 'according',
384
+ 'particular',
385
+ 'facilities',
386
+ 'opportunities',
387
+ 'appropriate',
388
+ 'statistics',
389
+ 'investment',
390
+ 'christmas',
391
+ 'registration',
392
+ 'furniture',
393
+ 'wednesday',
394
+ 'structure',
395
+ 'distribution',
396
+ 'industrial',
397
+ 'potential',
398
+ 'responsible',
399
+ 'communications',
400
+ 'associated',
401
+ 'foundation',
402
+ 'documents',
403
+ 'communication',
404
+ 'independent',
405
+ 'operating',
406
+ 'developed',
407
+ 'telephone',
408
+ 'population',
409
+ 'navigation',
410
+ 'operations',
411
+ 'therefore',
412
+ 'christian',
413
+ 'understand',
414
+ 'publications',
415
+ 'worldwide',
416
+ 'connection',
417
+ 'publisher',
418
+ 'introduction',
419
+ 'properties',
420
+ 'accommodation',
421
+ 'excellent',
422
+ 'opportunity',
423
+ 'assessment',
424
+ 'especially',
425
+ 'interface',
426
+ 'operation',
427
+ 'restaurants',
428
+ 'beautiful',
429
+ 'locations',
430
+ 'significant',
431
+ 'technologies',
432
+ 'manufacturer',
433
+ 'providing',
434
+ 'authority',
435
+ 'considered',
436
+ 'programme',
437
+ 'enterprise',
438
+ 'educational',
439
+ 'employees',
440
+ 'alternative',
441
+ 'processing',
442
+ 'responsibility',
443
+ 'resolution',
444
+ 'publication',
445
+ 'relations',
446
+ 'photography',
447
+ 'components',
448
+ 'assistance',
449
+ 'completed',
450
+ 'organizations',
451
+ 'otherwise',
452
+ 'transportation',
453
+ 'disclaimer',
454
+ 'membership',
455
+ 'recommended',
456
+ 'background',
457
+ 'character',
458
+ 'maintenance',
459
+ 'functions',
460
+ 'trademarks',
461
+ 'phentermine',
462
+ 'submitted',
463
+ 'television',
464
+ 'interested',
465
+ 'throughout',
466
+ 'established',
467
+ 'programming',
468
+ 'regarding',
469
+ 'instructions',
470
+ 'increased',
471
+ 'understanding',
472
+ 'beginning',
473
+ 'associates',
474
+ 'instruments',
475
+ 'businesses',
476
+ 'specified',
477
+ 'restaurant',
478
+ 'procedures',
479
+ 'relationship',
480
+ 'traditional',
481
+ 'sometimes',
482
+ 'themselves',
483
+ 'transport',
484
+ 'interesting',
485
+ 'evaluation',
486
+ 'implementation',
487
+ 'galleries',
488
+ 'references',
489
+ 'presented',
490
+ 'literature',
491
+ 'respective',
492
+ 'definition',
493
+ 'secretary',
494
+ 'networking',
495
+ 'australian',
496
+ 'magazines',
497
+ 'francisco',
498
+ 'individuals',
499
+ 'guidelines',
500
+ 'installation',
501
+ 'described',
502
+ 'attention',
503
+ 'difference',
504
+ 'regulations',
505
+ 'certificate',
506
+ 'directions',
507
+ 'documentation',
508
+ 'automotive',
509
+ 'successful',
510
+ 'communities',
511
+ 'situation',
512
+ 'publishing',
513
+ 'emergency',
514
+ 'developing',
515
+ 'determine',
516
+ 'temperature',
517
+ 'announcements',
518
+ 'historical',
519
+ 'ringtones',
520
+ 'difficult',
521
+ 'scientific',
522
+ 'satellite',
523
+ 'particularly',
524
+ 'functional',
525
+ 'monitoring',
526
+ 'architecture',
527
+ 'recommend',
528
+ 'dictionary',
529
+ 'accounting',
530
+ 'manufacturing',
531
+ 'professor',
532
+ 'generally',
533
+ 'continued',
534
+ 'techniques',
535
+ 'permission',
536
+ 'generation',
537
+ 'component',
538
+ 'guarantee',
539
+ 'processes',
540
+ 'interests',
541
+ 'paperback',
542
+ 'classifieds',
543
+ 'supported',
544
+ 'competition',
545
+ 'providers',
546
+ 'characters',
547
+ 'thousands',
548
+ 'apartments',
549
+ 'generated',
550
+ 'administrative',
551
+ 'practices',
552
+ 'reporting',
553
+ 'essential',
554
+ 'affiliate',
555
+ 'immediately',
556
+ 'designated',
557
+ 'integrated',
558
+ 'configuration',
559
+ 'comprehensive',
560
+ 'universal',
561
+ 'presentation',
562
+ 'languages',
563
+ 'compliance',
564
+ 'improvement',
565
+ 'pennsylvania',
566
+ 'challenge',
567
+ 'acceptance',
568
+ 'strategies',
569
+ 'affiliates',
570
+ 'multimedia',
571
+ 'certified',
572
+ 'computing',
573
+ 'interactive',
574
+ 'procedure',
575
+ 'leadership',
576
+ 'religious',
577
+ 'breakfast',
578
+ 'developer',
579
+ 'approximately',
580
+ 'recommendations',
581
+ 'comparison',
582
+ 'automatically',
583
+ 'minnesota',
584
+ 'adventure',
585
+ 'institutions',
586
+ 'assistant',
587
+ 'advertisement',
588
+ 'headlines',
589
+ 'yesterday',
590
+ 'determined',
591
+ 'wholesale',
592
+ 'extension',
593
+ 'statements',
594
+ 'completely',
595
+ 'electrical',
596
+ 'applicable',
597
+ 'manufacturers',
598
+ 'classical',
599
+ 'dedicated',
600
+ 'direction',
601
+ 'basketball',
602
+ 'wisconsin',
603
+ 'personnel',
604
+ 'identified',
605
+ 'professionals',
606
+ 'advantage',
607
+ 'newsletters',
608
+ 'estimated',
609
+ 'anonymous',
610
+ 'miscellaneous',
611
+ 'integration',
612
+ 'interview',
613
+ 'framework',
614
+ 'installed',
615
+ 'massachusetts',
616
+ 'associate',
617
+ 'frequently',
618
+ 'discussions',
619
+ 'laboratory',
620
+ 'destination',
621
+ 'intelligence',
622
+ 'specifications',
623
+ 'tripadvisor',
624
+ 'residential',
625
+ 'decisions',
626
+ 'industries',
627
+ 'partnership',
628
+ 'editorial',
629
+ 'expression',
630
+ 'provisions',
631
+ 'principles',
632
+ 'suggestions',
633
+ 'replacement',
634
+ 'strategic',
635
+ 'economics',
636
+ 'compatible',
637
+ 'apartment',
638
+ 'netherlands',
639
+ 'consulting',
640
+ 'recreation',
641
+ 'participants',
642
+ 'favorites',
643
+ 'translation',
644
+ 'estimates',
645
+ 'protected',
646
+ 'philadelphia',
647
+ 'officials',
648
+ 'contained',
649
+ 'legislation',
650
+ 'parameters',
651
+ 'relationships',
652
+ 'tennessee',
653
+ 'representative',
654
+ 'frequency',
655
+ 'introduced',
656
+ 'departments',
657
+ 'residents',
658
+ 'displayed',
659
+ 'performed',
660
+ 'administrator',
661
+ 'addresses',
662
+ 'permanent',
663
+ 'agriculture',
664
+ 'constitutes',
665
+ 'portfolio',
666
+ 'practical',
667
+ 'delivered',
668
+ 'collectibles',
669
+ 'infrastructure',
670
+ 'exclusive',
671
+ 'originally',
672
+ 'utilities',
673
+ 'philosophy',
674
+ 'regulation',
675
+ 'reduction',
676
+ 'nutrition',
677
+ 'recording',
678
+ 'secondary',
679
+ 'wonderful',
680
+ 'announced',
681
+ 'prevention',
682
+ 'mentioned',
683
+ 'automatic',
684
+ 'healthcare',
685
+ 'maintained',
686
+ 'increasing',
687
+ 'connected',
688
+ 'directors',
689
+ 'participation',
690
+ 'containing',
691
+ 'combination',
692
+ 'amendment',
693
+ 'guaranteed',
694
+ 'libraries',
695
+ 'distributed',
696
+ 'singapore',
697
+ 'enterprises',
698
+ 'convention',
699
+ 'principal',
700
+ 'certification',
701
+ 'previously',
702
+ 'buildings',
703
+ 'household',
704
+ 'batteries',
705
+ 'positions',
706
+ 'subscription',
707
+ 'contemporary',
708
+ 'panasonic',
709
+ 'permalink',
710
+ 'signature',
711
+ 'provision',
712
+ 'certainly',
713
+ 'newspaper',
714
+ 'liability',
715
+ 'trademark',
716
+ 'trackback',
717
+ 'americans',
718
+ 'promotion',
719
+ 'conversion',
720
+ 'reasonable',
721
+ 'broadband',
722
+ 'influence',
723
+ 'importance',
724
+ 'webmaster',
725
+ 'prescription',
726
+ 'specifically',
727
+ 'represent',
728
+ 'conservation',
729
+ 'louisiana',
730
+ 'javascript',
731
+ 'marketplace',
732
+ 'evolution',
733
+ 'certificates',
734
+ 'objectives',
735
+ 'suggested',
736
+ 'concerned',
737
+ 'structures',
738
+ 'encyclopedia',
739
+ 'continuing',
740
+ 'interracial',
741
+ 'competitive',
742
+ 'suppliers',
743
+ 'preparation',
744
+ 'receiving',
745
+ 'accordance',
746
+ 'discussed',
747
+ 'elizabeth',
748
+ 'reservations',
749
+ 'playstation',
750
+ 'instruction',
751
+ 'annotation',
752
+ 'differences',
753
+ 'establish',
754
+ 'expressed',
755
+ 'paragraph',
756
+ 'mathematics',
757
+ 'compensation',
758
+ 'conducted',
759
+ 'percentage',
760
+ 'mississippi',
761
+ 'requested',
762
+ 'connecticut',
763
+ 'personals',
764
+ 'immediate',
765
+ 'agricultural',
766
+ 'supporting',
767
+ 'collections',
768
+ 'participate',
769
+ 'specialist',
770
+ 'experienced',
771
+ 'investigation',
772
+ 'institution',
773
+ 'searching',
774
+ 'proceedings',
775
+ 'transmission',
776
+ 'characteristics',
777
+ 'experiences',
778
+ 'extremely',
779
+ 'verzeichnis',
780
+ 'contracts',
781
+ 'concerning',
782
+ 'developers',
783
+ 'equivalent',
784
+ 'chemistry',
785
+ 'neighborhood',
786
+ 'variables',
787
+ 'continues',
788
+ 'curriculum',
789
+ 'psychology',
790
+ 'responses',
791
+ 'circumstances',
792
+ 'identification',
793
+ 'appliances',
794
+ 'elementary',
795
+ 'unlimited',
796
+ 'printable',
797
+ 'enforcement',
798
+ 'hardcover',
799
+ 'celebrity',
800
+ 'chocolate',
801
+ 'hampshire',
802
+ 'bluetooth',
803
+ 'controlled',
804
+ 'requirement',
805
+ 'authorities',
806
+ 'representatives',
807
+ 'pregnancy',
808
+ 'biography',
809
+ 'attractions',
810
+ 'transactions',
811
+ 'authorized',
812
+ 'retirement',
813
+ 'financing',
814
+ 'efficiency',
815
+ 'efficient',
816
+ 'commitment',
817
+ 'specialty',
818
+ 'interviews',
819
+ 'qualified',
820
+ 'discovery',
821
+ 'classified',
822
+ 'confidence',
823
+ 'lifestyle',
824
+ 'consistent',
825
+ 'clearance',
826
+ 'connections',
827
+ 'inventory',
828
+ 'converter',
829
+ 'organisation',
830
+ 'objective',
831
+ 'indicated',
832
+ 'securities',
833
+ 'volunteer',
834
+ 'democratic',
835
+ 'switzerland',
836
+ 'parameter',
837
+ 'processor',
838
+ 'dimensions',
839
+ 'contribute',
840
+ 'challenges',
841
+ 'recognition',
842
+ 'submission',
843
+ 'encourage',
844
+ 'regulatory',
845
+ 'inspection',
846
+ 'consumers',
847
+ 'territory',
848
+ 'transaction',
849
+ 'manchester',
850
+ 'contributions',
851
+ 'continuous',
852
+ 'resulting',
853
+ 'cambridge',
854
+ 'initiative',
855
+ 'execution',
856
+ 'disability',
857
+ 'increases',
858
+ 'contractor',
859
+ 'examination',
860
+ 'indicates',
861
+ 'committed',
862
+ 'extensive',
863
+ 'affordable',
864
+ 'candidate',
865
+ 'databases',
866
+ 'outstanding',
867
+ 'perspective',
868
+ 'messenger',
869
+ 'tournament',
870
+ 'consideration',
871
+ 'discounts',
872
+ 'catalogue',
873
+ 'publishers',
874
+ 'caribbean',
875
+ 'reservation',
876
+ 'remaining',
877
+ 'depending',
878
+ 'expansion',
879
+ 'purchased',
880
+ 'performing',
881
+ 'collected',
882
+ 'absolutely',
883
+ 'featuring',
884
+ 'implement',
885
+ 'scheduled',
886
+ 'calculator',
887
+ 'significantly',
888
+ 'temporary',
889
+ 'sufficient',
890
+ 'awareness',
891
+ 'vancouver',
892
+ 'contribution',
893
+ 'measurement',
894
+ 'constitution',
895
+ 'packaging',
896
+ 'consultation',
897
+ 'northwest',
898
+ 'classroom',
899
+ 'democracy',
900
+ 'wallpaper',
901
+ 'merchandise',
902
+ 'resistance',
903
+ 'baltimore',
904
+ 'candidates',
905
+ 'charlotte',
906
+ 'biological',
907
+ 'transition',
908
+ 'preferences',
909
+ 'instrument',
910
+ 'classification',
911
+ 'physician',
912
+ 'hollywood',
913
+ 'wikipedia',
914
+ 'spiritual',
915
+ 'photographs',
916
+ 'relatively',
917
+ 'satisfaction',
918
+ 'represents',
919
+ 'pittsburgh',
920
+ 'preferred',
921
+ 'intellectual',
922
+ 'comfortable',
923
+ 'interaction',
924
+ 'listening',
925
+ 'effectively',
926
+ 'experimental',
927
+ 'revolution',
928
+ 'consolidation',
929
+ 'landscape',
930
+ 'dependent',
931
+ 'mechanical',
932
+ 'consultants',
933
+ 'applicant',
934
+ 'cooperation',
935
+ 'acquisition',
936
+ 'implemented',
937
+ 'directories',
938
+ 'recognized',
939
+ 'notification',
940
+ 'licensing',
941
+ 'textbooks',
942
+ 'diversity',
943
+ 'cleveland',
944
+ 'investments',
945
+ 'accessibility',
946
+ 'sensitive',
947
+ 'templates',
948
+ 'completion',
949
+ 'universities',
950
+ 'technique',
951
+ 'contractors',
952
+ 'subscriptions',
953
+ 'calculate',
954
+ 'alexander',
955
+ 'broadcast',
956
+ 'converted',
957
+ 'anniversary',
958
+ 'improvements',
959
+ 'specification',
960
+ 'accessible',
961
+ 'accessory',
962
+ 'typically',
963
+ 'representation',
964
+ 'arrangements',
965
+ 'conferences',
966
+ 'uniprotkb',
967
+ 'consumption',
968
+ 'birmingham',
969
+ 'afternoon',
970
+ 'consultant',
971
+ 'controller',
972
+ 'ownership',
973
+ 'committees',
974
+ 'legislative',
975
+ 'researchers',
976
+ 'unsubscribe',
977
+ 'molecular',
978
+ 'residence',
979
+ 'attorneys',
980
+ 'operators',
981
+ 'sustainable',
982
+ 'philippines',
983
+ 'statistical',
984
+ 'innovation',
985
+ 'employers',
986
+ 'definitions',
987
+ 'elections',
988
+ 'stainless',
989
+ 'newspapers',
990
+ 'hospitals',
991
+ 'exception',
992
+ 'successfully',
993
+ 'indonesia',
994
+ 'primarily',
995
+ 'capabilities',
996
+ 'recommendation',
997
+ 'recruitment',
998
+ 'organized',
999
+ 'improving',
1000
+ 'expensive',
1001
+ 'organisations',
1002
+ 'explained',
1003
+ 'programmes',
1004
+ 'expertise',
1005
+ 'mechanism',
1006
+ 'jewellery',
1007
+ 'eventually',
1008
+ 'agreements',
1009
+ 'considering',
1010
+ 'innovative',
1011
+ 'conclusion',
1012
+ 'disorders',
1013
+ 'collaboration',
1014
+ 'detection',
1015
+ 'formation',
1016
+ 'engineers',
1017
+ 'proposals',
1018
+ 'moderator',
1019
+ 'tutorials',
1020
+ 'settlement',
1021
+ 'collectables',
1022
+ 'fantastic',
1023
+ 'governments',
1024
+ 'purchasing',
1025
+ 'appointed',
1026
+ 'operational',
1027
+ 'corresponding',
1028
+ 'descriptions',
1029
+ 'determination',
1030
+ 'animation',
1031
+ 'productions',
1032
+ 'telecommunications',
1033
+ 'instructor',
1034
+ 'approaches',
1035
+ 'highlights',
1036
+ 'designers',
1037
+ 'melbourne',
1038
+ 'scientists',
1039
+ 'blackjack',
1040
+ 'argentina',
1041
+ 'possibility',
1042
+ 'commissioner',
1043
+ 'dangerous',
1044
+ 'reliability',
1045
+ 'unfortunately',
1046
+ 'respectively',
1047
+ 'volunteers',
1048
+ 'attachment',
1049
+ 'appointment',
1050
+ 'workshops',
1051
+ 'hurricane',
1052
+ 'represented',
1053
+ 'mortgages',
1054
+ 'responsibilities',
1055
+ 'carefully',
1056
+ 'productivity',
1057
+ 'investors',
1058
+ 'underground',
1059
+ 'diagnosis',
1060
+ 'principle',
1061
+ 'vacations',
1062
+ 'calculated',
1063
+ 'appearance',
1064
+ 'incorporated',
1065
+ 'notebooks',
1066
+ 'algorithm',
1067
+ 'valentine',
1068
+ 'involving',
1069
+ 'investing',
1070
+ 'christopher',
1071
+ 'admission',
1072
+ 'terrorism',
1073
+ 'parliament',
1074
+ 'situations',
1075
+ 'allocated',
1076
+ 'corrections',
1077
+ 'structural',
1078
+ 'municipal',
1079
+ 'describes',
1080
+ 'disabilities',
1081
+ 'substance',
1082
+ 'prohibited',
1083
+ 'addressed',
1084
+ 'simulation',
1085
+ 'initiatives',
1086
+ 'concentration',
1087
+ 'interpretation',
1088
+ 'bankruptcy',
1089
+ 'optimization',
1090
+ 'substances',
1091
+ 'discovered',
1092
+ 'restrictions',
1093
+ 'participating',
1094
+ 'exhibition',
1095
+ 'composition',
1096
+ 'nationwide',
1097
+ 'definitely',
1098
+ 'existence',
1099
+ 'commentary',
1100
+ 'limousines',
1101
+ 'developments',
1102
+ 'immigration',
1103
+ 'destinations',
1104
+ 'necessarily',
1105
+ 'attribute',
1106
+ 'apparently',
1107
+ 'surrounding',
1108
+ 'mountains',
1109
+ 'popularity',
1110
+ 'postposted',
1111
+ 'coordinator',
1112
+ 'obviously',
1113
+ 'fundamental',
1114
+ 'substantial',
1115
+ 'progressive',
1116
+ 'championship',
1117
+ 'sacramento',
1118
+ 'impossible',
1119
+ 'depression',
1120
+ 'testimonials',
1121
+ 'memorabilia',
1122
+ 'cartridge',
1123
+ 'explanation',
1124
+ 'cincinnati',
1125
+ 'subsection',
1126
+ 'electricity',
1127
+ 'permitted',
1128
+ 'workplace',
1129
+ 'confirmed',
1130
+ 'wallpapers',
1131
+ 'infection',
1132
+ 'eligibility',
1133
+ 'involvement',
1134
+ 'placement',
1135
+ 'observations',
1136
+ 'vbulletin',
1137
+ 'subsequent',
1138
+ 'motorcycle',
1139
+ 'disclosure',
1140
+ 'establishment',
1141
+ 'presentations',
1142
+ 'undergraduate',
1143
+ 'occupation',
1144
+ 'donations',
1145
+ 'associations',
1146
+ 'citysearch',
1147
+ 'radiation',
1148
+ 'seriously',
1149
+ 'elsewhere',
1150
+ 'pollution',
1151
+ 'conservative',
1152
+ 'guestbook',
1153
+ 'effectiveness',
1154
+ 'demonstrate',
1155
+ 'atmosphere',
1156
+ 'experiment',
1157
+ 'purchases',
1158
+ 'federation',
1159
+ 'assignment',
1160
+ 'chemicals',
1161
+ 'everybody',
1162
+ 'nashville',
1163
+ 'counseling',
1164
+ 'acceptable',
1165
+ 'satisfied',
1166
+ 'measurements',
1167
+ 'milwaukee',
1168
+ 'medication',
1169
+ 'warehouse',
1170
+ 'shareware',
1171
+ 'violation',
1172
+ 'configure',
1173
+ 'stability',
1174
+ 'southwest',
1175
+ 'institutional',
1176
+ 'expectations',
1177
+ 'independence',
1178
+ 'metabolism',
1179
+ 'personally',
1180
+ 'excellence',
1181
+ 'somewhere',
1182
+ 'attributes',
1183
+ 'recognize',
1184
+ 'screening',
1185
+ 'thumbnail',
1186
+ 'forgotten',
1187
+ 'intelligent',
1188
+ 'edinburgh',
1189
+ 'obligation',
1190
+ 'regardless',
1191
+ 'restricted',
1192
+ 'republican',
1193
+ 'merchants',
1194
+ 'attendance',
1195
+ 'arguments',
1196
+ 'amsterdam',
1197
+ 'adventures',
1198
+ 'announcement',
1199
+ 'appreciate',
1200
+ 'regularly',
1201
+ 'mechanisms',
1202
+ 'customize',
1203
+ 'tradition',
1204
+ 'indicators',
1205
+ 'emissions',
1206
+ 'physicians',
1207
+ 'complaint',
1208
+ 'experiments',
1209
+ 'afghanistan',
1210
+ 'scholarship',
1211
+ 'governance',
1212
+ 'supplements',
1213
+ 'camcorder',
1214
+ 'implementing',
1215
+ 'ourselves',
1216
+ 'conversation',
1217
+ 'capability',
1218
+ 'producing',
1219
+ 'precision',
1220
+ 'contributed',
1221
+ 'reproduction',
1222
+ 'ingredients',
1223
+ 'franchise',
1224
+ 'complaints',
1225
+ 'promotions',
1226
+ 'rehabilitation',
1227
+ 'maintaining',
1228
+ 'environments',
1229
+ 'reception',
1230
+ 'correctly',
1231
+ 'consequences',
1232
+ 'geography',
1233
+ 'appearing',
1234
+ 'integrity',
1235
+ 'discrimination',
1236
+ 'processed',
1237
+ 'implications',
1238
+ 'functionality',
1239
+ 'intermediate',
1240
+ 'emotional',
1241
+ 'platforms',
1242
+ 'overnight',
1243
+ 'geographic',
1244
+ 'preliminary',
1245
+ 'districts',
1246
+ 'introduce',
1247
+ 'promotional',
1248
+ 'chevrolet',
1249
+ 'specialists',
1250
+ 'generator',
1251
+ 'suspension',
1252
+ 'correction',
1253
+ 'authentication',
1254
+ 'communicate',
1255
+ 'supplement',
1256
+ 'showtimes',
1257
+ 'promoting',
1258
+ 'machinery',
1259
+ 'bandwidth',
1260
+ 'probability',
1261
+ 'dimension',
1262
+ 'schedules',
1263
+ 'admissions',
1264
+ 'quarterly',
1265
+ 'illustrated',
1266
+ 'continental',
1267
+ 'alternate',
1268
+ 'achievement',
1269
+ 'limitations',
1270
+ 'automated',
1271
+ 'passenger',
1272
+ 'convenient',
1273
+ 'orientation',
1274
+ 'childhood',
1275
+ 'flexibility',
1276
+ 'jurisdiction',
1277
+ 'displaying',
1278
+ 'encouraged',
1279
+ 'cartridges',
1280
+ 'declaration',
1281
+ 'automation',
1282
+ 'advantages',
1283
+ 'preparing',
1284
+ 'recipient',
1285
+ 'extensions',
1286
+ 'athletics',
1287
+ 'southeast',
1288
+ 'alternatives',
1289
+ 'determining',
1290
+ 'personalized',
1291
+ 'conditioning',
1292
+ 'partnerships',
1293
+ 'destruction',
1294
+ 'increasingly',
1295
+ 'migration',
1296
+ 'basically',
1297
+ 'conventional',
1298
+ 'applicants',
1299
+ 'occupational',
1300
+ 'adjustment',
1301
+ 'treatments',
1302
+ 'camcorders',
1303
+ 'difficulty',
1304
+ 'collective',
1305
+ 'coalition',
1306
+ 'enrollment',
1307
+ 'producers',
1308
+ 'collector',
1309
+ 'interfaces',
1310
+ 'advertisers',
1311
+ 'representing',
1312
+ 'observation',
1313
+ 'restoration',
1314
+ 'convenience',
1315
+ 'returning',
1316
+ 'opposition',
1317
+ 'container',
1318
+ 'defendant',
1319
+ 'confirmation',
1320
+ 'supervisor',
1321
+ 'peripherals',
1322
+ 'bestsellers',
1323
+ 'departure',
1324
+ 'minneapolis',
1325
+ 'interactions',
1326
+ 'intervention',
1327
+ 'attraction',
1328
+ 'modification',
1329
+ 'customized',
1330
+ 'understood',
1331
+ 'assurance',
1332
+ 'happening',
1333
+ 'amendments',
1334
+ 'metropolitan',
1335
+ 'compilation',
1336
+ 'verification',
1337
+ 'attractive',
1338
+ 'recordings',
1339
+ 'jefferson',
1340
+ 'gardening',
1341
+ 'obligations',
1342
+ 'orchestra',
1343
+ 'polyphonic',
1344
+ 'outsourcing',
1345
+ 'adjustable',
1346
+ 'allocation',
1347
+ 'discipline',
1348
+ 'demonstrated',
1349
+ 'identifying',
1350
+ 'alphabetical',
1351
+ 'dispatched',
1352
+ 'installing',
1353
+ 'voluntary',
1354
+ 'photographer',
1355
+ 'messaging',
1356
+ 'constructed',
1357
+ 'additions',
1358
+ 'requiring',
1359
+ 'engagement',
1360
+ 'refinance',
1361
+ 'calendars',
1362
+ 'arrangement',
1363
+ 'conclusions',
1364
+ 'bibliography',
1365
+ 'compatibility',
1366
+ 'furthermore',
1367
+ 'cooperative',
1368
+ 'measuring',
1369
+ 'jacksonville',
1370
+ 'headquarters',
1371
+ 'transfers',
1372
+ 'transformation',
1373
+ 'attachments',
1374
+ 'administrators',
1375
+ 'personality',
1376
+ 'facilitate',
1377
+ 'subscriber',
1378
+ 'priorities',
1379
+ 'bookstore',
1380
+ 'parenting',
1381
+ 'incredible',
1382
+ 'commonwealth',
1383
+ 'pharmaceutical',
1384
+ 'manhattan',
1385
+ 'workforce',
1386
+ 'organizational',
1387
+ 'portuguese',
1388
+ 'everywhere',
1389
+ 'discharge',
1390
+ 'halloween',
1391
+ 'hazardous',
1392
+ 'methodology',
1393
+ 'housewares',
1394
+ 'reputation',
1395
+ 'resistant',
1396
+ 'democrats',
1397
+ 'recycling',
1398
+ 'qualifications',
1399
+ 'slideshow',
1400
+ 'variation',
1401
+ 'transferred',
1402
+ 'photograph',
1403
+ 'distributor',
1404
+ 'underlying',
1405
+ 'wrestling',
1406
+ 'photoshop',
1407
+ 'gathering',
1408
+ 'projection',
1409
+ 'mathematical',
1410
+ 'specialized',
1411
+ 'diagnostic',
1412
+ 'indianapolis',
1413
+ 'corporations',
1414
+ 'criticism',
1415
+ 'automobile',
1416
+ 'confidential',
1417
+ 'statutory',
1418
+ 'accommodations',
1419
+ 'northeast',
1420
+ 'downloaded',
1421
+ 'paintings',
1422
+ 'injection',
1423
+ 'yorkshire',
1424
+ 'populations',
1425
+ 'protective',
1426
+ 'initially',
1427
+ 'indicator',
1428
+ 'eliminate',
1429
+ 'sunglasses',
1430
+ 'preference',
1431
+ 'threshold',
1432
+ 'venezuela',
1433
+ 'exploration',
1434
+ 'sequences',
1435
+ 'astronomy',
1436
+ 'translate',
1437
+ 'announces',
1438
+ 'compression',
1439
+ 'establishing',
1440
+ 'constitutional',
1441
+ 'perfectly',
1442
+ 'instantly',
1443
+ 'litigation',
1444
+ 'submissions',
1445
+ 'broadcasting',
1446
+ 'horizontal',
1447
+ 'terrorist',
1448
+ 'informational',
1449
+ 'ecommerce',
1450
+ 'suffering',
1451
+ 'prospective',
1452
+ 'ultimately',
1453
+ 'artificial',
1454
+ 'spectacular',
1455
+ 'coordination',
1456
+ 'connector',
1457
+ 'affiliated',
1458
+ 'activation',
1459
+ 'naturally',
1460
+ 'subscribers',
1461
+ 'mitsubishi',
1462
+ 'underwear',
1463
+ 'potentially',
1464
+ 'constraints',
1465
+ 'inclusive',
1466
+ 'dimensional',
1467
+ 'considerable',
1468
+ 'selecting',
1469
+ 'processors',
1470
+ 'pantyhose',
1471
+ 'difficulties',
1472
+ 'complexity',
1473
+ 'constantly',
1474
+ 'barcelona',
1475
+ 'presidential',
1476
+ 'documentary',
1477
+ 'territories',
1478
+ 'palestinian',
1479
+ 'legislature',
1480
+ 'hospitality',
1481
+ 'procurement',
1482
+ 'theoretical',
1483
+ 'exercises',
1484
+ 'surveillance',
1485
+ 'protocols',
1486
+ 'highlight',
1487
+ 'substitute',
1488
+ 'inclusion',
1489
+ 'hopefully',
1490
+ 'brilliant',
1491
+ 'evaluated',
1492
+ 'assignments',
1493
+ 'termination',
1494
+ 'households',
1495
+ 'authentic',
1496
+ 'montgomery',
1497
+ 'architectural',
1498
+ 'louisville',
1499
+ 'macintosh',
1500
+ 'movements',
1501
+ 'amenities',
1502
+ 'virtually',
1503
+ 'authorization',
1504
+ 'projector',
1505
+ 'comparative',
1506
+ 'psychological',
1507
+ 'surprised',
1508
+ 'genealogy',
1509
+ 'expenditure',
1510
+ 'liverpool',
1511
+ 'connectivity',
1512
+ 'algorithms',
1513
+ 'similarly',
1514
+ 'collaborative',
1515
+ 'excluding',
1516
+ 'commander',
1517
+ 'suggestion',
1518
+ 'spotlight',
1519
+ 'investigate',
1520
+ 'connecting',
1521
+ 'logistics',
1522
+ 'proportion',
1523
+ 'significance',
1524
+ 'symposium',
1525
+ 'essentials',
1526
+ 'protecting',
1527
+ 'transmitted',
1528
+ 'screenshots',
1529
+ 'intensive',
1530
+ 'switching',
1531
+ 'correspondence',
1532
+ 'supervision',
1533
+ 'expenditures',
1534
+ 'separation',
1535
+ 'testimony',
1536
+ 'celebrities',
1537
+ 'mandatory',
1538
+ 'boundaries',
1539
+ 'syndication',
1540
+ 'celebration',
1541
+ 'filtering',
1542
+ 'luxembourg',
1543
+ 'offensive',
1544
+ 'deployment',
1545
+ 'colleagues',
1546
+ 'separated',
1547
+ 'directive',
1548
+ 'governing',
1549
+ 'retailers',
1550
+ 'occasionally',
1551
+ 'attending',
1552
+ 'recruiting',
1553
+ 'instructional',
1554
+ 'traveling',
1555
+ 'permissions',
1556
+ 'biotechnology',
1557
+ 'prescribed',
1558
+ 'catherine',
1559
+ 'reproduced',
1560
+ 'calculation',
1561
+ 'consolidated',
1562
+ 'occasions',
1563
+ 'equations',
1564
+ 'exceptional',
1565
+ 'respondents',
1566
+ 'considerations',
1567
+ 'queensland',
1568
+ 'musicians',
1569
+ 'composite',
1570
+ 'unavailable',
1571
+ 'essentially',
1572
+ 'designing',
1573
+ 'assessments',
1574
+ 'brunswick',
1575
+ 'sensitivity',
1576
+ 'preservation',
1577
+ 'streaming',
1578
+ 'intensity',
1579
+ 'technological',
1580
+ 'syndicate',
1581
+ 'antivirus',
1582
+ 'addressing',
1583
+ 'discounted',
1584
+ 'bangladesh',
1585
+ 'constitute',
1586
+ 'concluded',
1587
+ 'desperate',
1588
+ 'demonstration',
1589
+ 'governmental',
1590
+ 'manufactured',
1591
+ 'graduation',
1592
+ 'variations',
1593
+ 'addiction',
1594
+ 'springfield',
1595
+ 'synthesis',
1596
+ 'undefined',
1597
+ 'unemployment',
1598
+ 'enhancement',
1599
+ 'newcastle',
1600
+ 'performances',
1601
+ 'societies',
1602
+ 'brazilian',
1603
+ 'identical',
1604
+ 'petroleum',
1605
+ 'norwegian',
1606
+ 'retention',
1607
+ 'exchanges',
1608
+ 'soundtrack',
1609
+ 'wondering',
1610
+ 'profession',
1611
+ 'separately',
1612
+ 'physiology',
1613
+ 'collecting',
1614
+ 'participant',
1615
+ 'scholarships',
1616
+ 'recreational',
1617
+ 'dominican',
1618
+ 'friendship',
1619
+ 'expanding',
1620
+ 'provincial',
1621
+ 'investigations',
1622
+ 'medications',
1623
+ 'rochester',
1624
+ 'advertiser',
1625
+ 'encryption',
1626
+ 'downloadable',
1627
+ 'sophisticated',
1628
+ 'possession',
1629
+ 'laboratories',
1630
+ 'vegetables',
1631
+ 'thumbnails',
1632
+ 'stockings',
1633
+ 'respondent',
1634
+ 'destroyed',
1635
+ 'manufacture',
1636
+ 'wordpress',
1637
+ 'vulnerability',
1638
+ 'accountability',
1639
+ 'celebrate',
1640
+ 'accredited',
1641
+ 'appliance',
1642
+ 'compressed',
1643
+ 'scheduling',
1644
+ 'perspectives',
1645
+ 'mortality',
1646
+ 'christians',
1647
+ 'therapeutic',
1648
+ 'impressive',
1649
+ 'accordingly',
1650
+ 'architect',
1651
+ 'challenging',
1652
+ 'microwave',
1653
+ 'accidents',
1654
+ 'relocation',
1655
+ 'contributors',
1656
+ 'violations',
1657
+ 'temperatures',
1658
+ 'competitions',
1659
+ 'discretion',
1660
+ 'cosmetics',
1661
+ 'repository',
1662
+ 'concentrations',
1663
+ 'christianity',
1664
+ 'negotiations',
1665
+ 'realistic',
1666
+ 'generating',
1667
+ 'christina',
1668
+ 'congressional',
1669
+ 'photographic',
1670
+ 'modifications',
1671
+ 'millennium',
1672
+ 'achieving',
1673
+ 'fisheries',
1674
+ 'exceptions',
1675
+ 'reactions',
1676
+ 'macromedia',
1677
+ 'companion',
1678
+ 'divisions',
1679
+ 'additionally',
1680
+ 'fellowship',
1681
+ 'victorian',
1682
+ 'copyrights',
1683
+ 'lithuania',
1684
+ 'mastercard',
1685
+ 'chronicles',
1686
+ 'obtaining',
1687
+ 'distribute',
1688
+ 'decorative',
1689
+ 'enlargement',
1690
+ 'campaigns',
1691
+ 'conjunction',
1692
+ 'instances',
1693
+ 'indigenous',
1694
+ 'validation',
1695
+ 'corruption',
1696
+ 'incentives',
1697
+ 'cholesterol',
1698
+ 'differential',
1699
+ 'scientist',
1700
+ 'starsmerchant',
1701
+ 'arthritis',
1702
+ 'nevertheless',
1703
+ 'practitioners',
1704
+ 'transcript',
1705
+ 'inflation',
1706
+ 'compounds',
1707
+ 'contracting',
1708
+ 'structured',
1709
+ 'reasonably',
1710
+ 'graduates',
1711
+ 'recommends',
1712
+ 'controlling',
1713
+ 'distributors',
1714
+ 'arlington',
1715
+ 'particles',
1716
+ 'extraordinary',
1717
+ 'indicating',
1718
+ 'coordinate',
1719
+ 'exclusively',
1720
+ 'limitation',
1721
+ 'widescreen',
1722
+ 'illustration',
1723
+ 'construct',
1724
+ 'inquiries',
1725
+ 'inspiration',
1726
+ 'affecting',
1727
+ 'downloading',
1728
+ 'aggregate',
1729
+ 'forecasts',
1730
+ 'complicated',
1731
+ 'shopzilla',
1732
+ 'decorating',
1733
+ 'expressions',
1734
+ 'shakespeare',
1735
+ 'connectors',
1736
+ 'conflicts',
1737
+ 'travelers',
1738
+ 'offerings',
1739
+ 'incorrect',
1740
+ 'furnishings',
1741
+ 'guatemala',
1742
+ 'perception',
1743
+ 'renaissance',
1744
+ 'pathology',
1745
+ 'ordinance',
1746
+ 'photographers',
1747
+ 'infections',
1748
+ 'configured',
1749
+ 'festivals',
1750
+ 'possibilities',
1751
+ 'contributing',
1752
+ 'analytical',
1753
+ 'circulation',
1754
+ 'assumption',
1755
+ 'jerusalem',
1756
+ 'transexuales',
1757
+ 'invention',
1758
+ 'technician',
1759
+ 'executives',
1760
+ 'enquiries',
1761
+ 'cognitive',
1762
+ 'exploring',
1763
+ 'registrar',
1764
+ 'supporters',
1765
+ 'withdrawal',
1766
+ 'predicted',
1767
+ 'saskatchewan',
1768
+ 'cancellation',
1769
+ 'ministers',
1770
+ 'veterinary',
1771
+ 'prostores',
1772
+ 'relevance',
1773
+ 'incentive',
1774
+ 'butterfly',
1775
+ 'mechanics',
1776
+ 'numerical',
1777
+ 'reflection',
1778
+ 'accompanied',
1779
+ 'invitation',
1780
+ 'princeton',
1781
+ 'spirituality',
1782
+ 'meanwhile',
1783
+ 'proprietary',
1784
+ 'childrens',
1785
+ 'thumbzilla',
1786
+ 'porcelain',
1787
+ 'pichunter',
1788
+ 'translated',
1789
+ 'columnists',
1790
+ 'consensus',
1791
+ 'delivering',
1792
+ 'journalism',
1793
+ 'intention',
1794
+ 'undertaken',
1795
+ 'statewide',
1796
+ 'semiconductor',
1797
+ 'illustrations',
1798
+ 'happiness',
1799
+ 'substantially',
1800
+ 'identifier',
1801
+ 'calculations',
1802
+ 'conducting',
1803
+ 'accomplished',
1804
+ 'calculators',
1805
+ 'impression',
1806
+ 'correlation',
1807
+ 'fragrance',
1808
+ 'neighbors',
1809
+ 'transparent',
1810
+ 'charleston',
1811
+ 'champions',
1812
+ 'selections',
1813
+ 'projectors',
1814
+ 'inappropriate',
1815
+ 'comparing',
1816
+ 'vocational',
1817
+ 'pharmacies',
1818
+ 'introducing',
1819
+ 'appreciated',
1820
+ 'albuquerque',
1821
+ 'distinguished',
1822
+ 'projected',
1823
+ 'assumptions',
1824
+ 'shareholders',
1825
+ 'developmental',
1826
+ 'regulated',
1827
+ 'anticipated',
1828
+ 'completing',
1829
+ 'comparable',
1830
+ 'confusion',
1831
+ 'copyrighted',
1832
+ 'warranties',
1833
+ 'documented',
1834
+ 'paperbacks',
1835
+ 'keyboards',
1836
+ 'vulnerable',
1837
+ 'reflected',
1838
+ 'respiratory',
1839
+ 'notifications',
1840
+ 'transexual',
1841
+ 'mainstream',
1842
+ 'evaluating',
1843
+ 'subcommittee',
1844
+ 'maternity',
1845
+ 'journalists',
1846
+ 'foundations',
1847
+ 'volleyball',
1848
+ 'liabilities',
1849
+ 'decreased',
1850
+ 'tolerance',
1851
+ 'creativity',
1852
+ 'describing',
1853
+ 'lightning',
1854
+ 'quotations',
1855
+ 'inspector',
1856
+ 'bookmarks',
1857
+ 'behavioral',
1858
+ 'riverside',
1859
+ 'bathrooms',
1860
+ 'abilities',
1861
+ 'initiated',
1862
+ 'nonprofit',
1863
+ 'lancaster',
1864
+ 'suspended',
1865
+ 'containers',
1866
+ 'attitudes',
1867
+ 'simultaneously',
1868
+ 'integrate',
1869
+ 'sociology',
1870
+ 'screenshot',
1871
+ 'exhibitions',
1872
+ 'confident',
1873
+ 'retrieved',
1874
+ 'officially',
1875
+ 'consortium',
1876
+ 'recipients',
1877
+ 'delicious',
1878
+ 'traditions',
1879
+ 'periodically',
1880
+ 'hungarian',
1881
+ 'referring',
1882
+ 'transform',
1883
+ 'educators',
1884
+ 'vegetable',
1885
+ 'humanities',
1886
+ 'independently',
1887
+ 'alignment',
1888
+ 'henderson',
1889
+ 'britannica',
1890
+ 'competitors',
1891
+ 'visibility',
1892
+ 'consciousness',
1893
+ 'encounter',
1894
+ 'resolutions',
1895
+ 'accessing',
1896
+ 'attempted',
1897
+ 'witnesses',
1898
+ 'administered',
1899
+ 'strengthen',
1900
+ 'frederick',
1901
+ 'aggressive',
1902
+ 'advertisements',
1903
+ 'sublimedirectory',
1904
+ 'disturbed',
1905
+ 'determines',
1906
+ 'sculpture',
1907
+ 'motivation',
1908
+ 'pharmacology',
1909
+ 'passengers',
1910
+ 'quantities',
1911
+ 'petersburg',
1912
+ 'consistently',
1913
+ 'powerpoint',
1914
+ 'obituaries',
1915
+ 'punishment',
1916
+ 'appreciation',
1917
+ 'subsequently',
1918
+ 'providence',
1919
+ 'restriction',
1920
+ 'incorporate',
1921
+ 'backgrounds',
1922
+ 'treasurer',
1923
+ 'lightweight',
1924
+ 'transcription',
1925
+ 'complications',
1926
+ 'scripting',
1927
+ 'remembered',
1928
+ 'synthetic',
1929
+ 'testament',
1930
+ 'specifics',
1931
+ 'partially',
1932
+ 'wilderness',
1933
+ 'generations',
1934
+ 'tournaments',
1935
+ 'sponsorship',
1936
+ 'headphones',
1937
+ 'proceeding',
1938
+ 'volkswagen',
1939
+ 'uncertainty',
1940
+ 'breakdown',
1941
+ 'reconstruction',
1942
+ 'subsidiary',
1943
+ 'strengths',
1944
+ 'encouraging',
1945
+ 'furnished',
1946
+ 'terrorists',
1947
+ 'comparisons',
1948
+ 'beneficial',
1949
+ 'distributions',
1950
+ 'viewpicture',
1951
+ 'threatened',
1952
+ 'republicans',
1953
+ 'discusses',
1954
+ 'responded',
1955
+ 'abstracts',
1956
+ 'prediction',
1957
+ 'pharmaceuticals',
1958
+ 'thesaurus',
1959
+ 'individually',
1960
+ 'battlefield',
1961
+ 'literally',
1962
+ 'ecological',
1963
+ 'appraisal',
1964
+ 'consisting',
1965
+ 'submitting',
1966
+ 'citations',
1967
+ 'geographical',
1968
+ 'mozambique',
1969
+ 'disclaimers',
1970
+ 'championships',
1971
+ 'sheffield',
1972
+ 'finishing',
1973
+ 'wellington',
1974
+ 'prospects',
1975
+ 'bulgarian',
1976
+ 'aboriginal',
1977
+ 'remarkable',
1978
+ 'preventing',
1979
+ 'productive',
1980
+ 'boulevard',
1981
+ 'compliant',
1982
+ 'penalties',
1983
+ 'imagination',
1984
+ 'refurbished',
1985
+ 'activated',
1986
+ 'conferencing',
1987
+ 'armstrong',
1988
+ 'politicians',
1989
+ 'trackbacks',
1990
+ 'accommodate',
1991
+ 'christine',
1992
+ 'accepting',
1993
+ 'precipitation',
1994
+ 'isolation',
1995
+ 'sustained',
1996
+ 'approximate',
1997
+ 'programmer',
1998
+ 'greetings',
1999
+ 'inherited',
2000
+ 'incomplete',
2001
+ 'chronicle',
2002
+ 'legitimate',
2003
+ 'biographies',
2004
+ 'investigator',
2005
+ 'plaintiff',
2006
+ 'prisoners',
2007
+ 'mediterranean',
2008
+ 'nightlife',
2009
+ 'architects',
2010
+ 'entrepreneur',
2011
+ 'freelance',
2012
+ 'excessive',
2013
+ 'screensaver',
2014
+ 'valuation',
2015
+ 'unexpected',
2016
+ 'cigarette',
2017
+ 'characteristic',
2018
+ 'metallica',
2019
+ 'consequently',
2020
+ 'appointments',
2021
+ 'narrative',
2022
+ 'academics',
2023
+ 'quantitative',
2024
+ 'screensavers',
2025
+ 'subdivision',
2026
+ 'distinction',
2027
+ 'livestock',
2028
+ 'exemption',
2029
+ 'sustainability',
2030
+ 'formatting',
2031
+ 'nutritional',
2032
+ 'nicaragua',
2033
+ 'affiliation',
2034
+ 'relatives',
2035
+ 'satisfactory',
2036
+ 'revolutionary',
2037
+ 'bracelets',
2038
+ 'telephony',
2039
+ 'breathing',
2040
+ 'thickness',
2041
+ 'adjustments',
2042
+ 'graphical',
2043
+ 'discussing',
2044
+ 'aerospace',
2045
+ 'meaningful',
2046
+ 'maintains',
2047
+ 'shortcuts',
2048
+ 'voyeurweb',
2049
+ 'extending',
2050
+ 'specifies',
2051
+ 'accreditation',
2052
+ 'blackberry',
2053
+ 'meditation',
2054
+ 'microphone',
2055
+ 'macedonia',
2056
+ 'combining',
2057
+ 'instrumental',
2058
+ 'organizing',
2059
+ 'moderators',
2060
+ 'kazakhstan',
2061
+ 'standings',
2062
+ 'partition',
2063
+ 'invisible',
2064
+ 'translations',
2065
+ 'commodity',
2066
+ 'kilometers',
2067
+ 'thanksgiving',
2068
+ 'guarantees',
2069
+ 'indication',
2070
+ 'congratulations',
2071
+ 'cigarettes',
2072
+ 'controllers',
2073
+ 'consultancy',
2074
+ 'conventions',
2075
+ 'coordinates',
2076
+ 'responding',
2077
+ 'physically',
2078
+ 'stakeholders',
2079
+ 'hydrocodone',
2080
+ 'consecutive',
2081
+ 'attempting',
2082
+ 'representations',
2083
+ 'competing',
2084
+ 'peninsula',
2085
+ 'accurately',
2086
+ 'considers',
2087
+ 'ministries',
2088
+ 'vacancies',
2089
+ 'parliamentary',
2090
+ 'acknowledge',
2091
+ 'thoroughly',
2092
+ 'nottingham',
2093
+ 'identifies',
2094
+ 'questionnaire',
2095
+ 'qualification',
2096
+ 'modelling',
2097
+ 'miniature',
2098
+ 'interstate',
2099
+ 'consequence',
2100
+ 'systematic',
2101
+ 'perceived',
2102
+ 'madagascar',
2103
+ 'presenting',
2104
+ 'troubleshooting',
2105
+ 'uzbekistan',
2106
+ 'centuries',
2107
+ 'magnitude',
2108
+ 'richardson',
2109
+ 'fragrances',
2110
+ 'vocabulary',
2111
+ 'earthquake',
2112
+ 'fundraising',
2113
+ 'geological',
2114
+ 'assessing',
2115
+ 'introduces',
2116
+ 'webmasters',
2117
+ 'computational',
2118
+ 'acdbentity',
2119
+ 'participated',
2120
+ 'handhelds',
2121
+ 'answering',
2122
+ 'impressed',
2123
+ 'conspiracy',
2124
+ 'organizer',
2125
+ 'combinations',
2126
+ 'preceding',
2127
+ 'cumulative',
2128
+ 'amplifier',
2129
+ 'arbitrary',
2130
+ 'prominent',
2131
+ 'lexington',
2132
+ 'contacted',
2133
+ 'recorders',
2134
+ 'occasional',
2135
+ 'innovations',
2136
+ 'postcards',
2137
+ 'reviewing',
2138
+ 'explicitly',
2139
+ 'transsexual',
2140
+ 'citizenship',
2141
+ 'informative',
2142
+ 'girlfriend',
2143
+ 'bloomberg',
2144
+ 'hierarchy',
2145
+ 'influenced',
2146
+ 'abandoned',
2147
+ 'complement',
2148
+ 'mauritius',
2149
+ 'checklist',
2150
+ 'requesting',
2151
+ 'lauderdale',
2152
+ 'scenarios',
2153
+ 'extraction',
2154
+ 'elevation',
2155
+ 'utilization',
2156
+ 'beverages',
2157
+ 'calibration',
2158
+ 'efficiently',
2159
+ 'entertaining',
2160
+ 'prerequisite',
2161
+ 'hypothesis',
2162
+ 'medicines',
2163
+ 'regression',
2164
+ 'enhancements',
2165
+ 'renewable',
2166
+ 'intersection',
2167
+ 'passwords',
2168
+ 'consistency',
2169
+ 'collectors',
2170
+ 'azerbaijan',
2171
+ 'astrology',
2172
+ 'occurring',
2173
+ 'supplemental',
2174
+ 'travelling',
2175
+ 'induction',
2176
+ 'precisely',
2177
+ 'spreading',
2178
+ 'provinces',
2179
+ 'widespread',
2180
+ 'incidence',
2181
+ 'incidents',
2182
+ 'enhancing',
2183
+ 'interference',
2184
+ 'palestine',
2185
+ 'listprice',
2186
+ 'atmospheric',
2187
+ 'knowledgestorm',
2188
+ 'referenced',
2189
+ 'publicity',
2190
+ 'proposition',
2191
+ 'allowance',
2192
+ 'designation',
2193
+ 'duplicate',
2194
+ 'criterion',
2195
+ 'civilization',
2196
+ 'vietnamese',
2197
+ 'tremendous',
2198
+ 'corrected',
2199
+ 'encountered',
2200
+ 'internationally',
2201
+ 'surrounded',
2202
+ 'creatures',
2203
+ 'commented',
2204
+ 'accomplish',
2205
+ 'vegetarian',
2206
+ 'newfoundland',
2207
+ 'investigated',
2208
+ 'ambassador',
2209
+ 'stephanie',
2210
+ 'contacting',
2211
+ 'vegetation',
2212
+ 'findarticles',
2213
+ 'specially',
2214
+ 'infectious',
2215
+ 'continuity',
2216
+ 'phenomenon',
2217
+ 'conscious',
2218
+ 'referrals',
2219
+ 'differently',
2220
+ 'integrating',
2221
+ 'revisions',
2222
+ 'reasoning',
2223
+ 'charitable',
2224
+ 'annotated',
2225
+ 'convinced',
2226
+ 'burlington',
2227
+ 'replacing',
2228
+ 'researcher',
2229
+ 'watershed',
2230
+ 'occupations',
2231
+ 'acknowledged',
2232
+ 'equilibrium',
2233
+ 'characterized',
2234
+ 'privilege',
2235
+ 'qualifying',
2236
+ 'estimation',
2237
+ 'pediatric',
2238
+ 'techrepublic',
2239
+ 'institutes',
2240
+ 'brochures',
2241
+ 'traveller',
2242
+ 'appropriations',
2243
+ 'suspected',
2244
+ 'benchmark',
2245
+ 'beginners',
2246
+ 'instructors',
2247
+ 'highlighted',
2248
+ 'stationery',
2249
+ 'unauthorized',
2250
+ 'competent',
2251
+ 'contributor',
2252
+ 'demonstrates',
2253
+ 'gradually',
2254
+ 'desirable',
2255
+ 'journalist',
2256
+ 'afterwards',
2257
+ 'religions',
2258
+ 'explosion',
2259
+ 'signatures',
2260
+ 'disciplines',
2261
+ 'daughters',
2262
+ 'conversations',
2263
+ 'simplified',
2264
+ 'motherboard',
2265
+ 'bibliographic',
2266
+ 'champagne',
2267
+ 'deviation',
2268
+ 'superintendent',
2269
+ 'housewives',
2270
+ 'influences',
2271
+ 'inspections',
2272
+ 'irrigation',
2273
+ 'hydraulic',
2274
+ 'robertson',
2275
+ 'penetration',
2276
+ 'conviction',
2277
+ 'omissions',
2278
+ 'retrieval',
2279
+ 'qualities',
2280
+ 'prototype',
2281
+ 'importantly',
2282
+ 'apparatus',
2283
+ 'explaining',
2284
+ 'nomination',
2285
+ 'empirical',
2286
+ 'dependence',
2287
+ 'sexuality',
2288
+ 'polyester',
2289
+ 'commitments',
2290
+ 'suggesting',
2291
+ 'remainder',
2292
+ 'privileges',
2293
+ 'televisions',
2294
+ 'specializing',
2295
+ 'commodities',
2296
+ 'motorcycles',
2297
+ 'concentrate',
2298
+ 'reproductive',
2299
+ 'molecules',
2300
+ 'refrigerator',
2301
+ 'intervals',
2302
+ 'sentences',
2303
+ 'exclusion',
2304
+ 'workstation',
2305
+ 'holocaust',
2306
+ 'receivers',
2307
+ 'disposition',
2308
+ 'navigator',
2309
+ 'investigators',
2310
+ 'marijuana',
2311
+ 'cathedral',
2312
+ 'fairfield',
2313
+ 'fascinating',
2314
+ 'landscapes',
2315
+ 'lafayette',
2316
+ 'computation',
2317
+ 'cardiovascular',
2318
+ 'salvation',
2319
+ 'predictions',
2320
+ 'accompanying',
2321
+ 'selective',
2322
+ 'arbitration',
2323
+ 'configuring',
2324
+ 'editorials',
2325
+ 'sacrifice',
2326
+ 'removable',
2327
+ 'convergence',
2328
+ 'gibraltar',
2329
+ 'anthropology',
2330
+ 'malpractice',
2331
+ 'reporters',
2332
+ 'necessity',
2333
+ 'rendering',
2334
+ 'hepatitis',
2335
+ 'nationally',
2336
+ 'waterproof',
2337
+ 'specialties',
2338
+ 'humanitarian',
2339
+ 'invitations',
2340
+ 'functioning',
2341
+ 'economies',
2342
+ 'alexandria',
2343
+ 'bacterial',
2344
+ 'undertake',
2345
+ 'continuously',
2346
+ 'achievements',
2347
+ 'convertible',
2348
+ 'secretariat',
2349
+ 'paragraphs',
2350
+ 'adolescent',
2351
+ 'nominations',
2352
+ 'cancelled',
2353
+ 'introductory',
2354
+ 'reservoir',
2355
+ 'occurrence',
2356
+ 'worcester',
2357
+ 'demographic',
2358
+ 'disciplinary',
2359
+ 'respected',
2360
+ 'portraits',
2361
+ 'interpreted',
2362
+ 'evaluations',
2363
+ 'elimination',
2364
+ 'hypothetical',
2365
+ 'immigrants',
2366
+ 'complimentary',
2367
+ 'helicopter',
2368
+ 'performer',
2369
+ 'commissions',
2370
+ 'powerseller',
2371
+ 'graduated',
2372
+ 'surprising',
2373
+ 'unnecessary',
2374
+ 'dramatically',
2375
+ 'yugoslavia',
2376
+ 'characterization',
2377
+ 'likelihood',
2378
+ 'fundamentals',
2379
+ 'contamination',
2380
+ 'endangered',
2381
+ 'compromise',
2382
+ 'expiration',
2383
+ 'namespace',
2384
+ 'peripheral',
2385
+ 'negotiation',
2386
+ 'opponents',
2387
+ 'nominated',
2388
+ 'confidentiality',
2389
+ 'electoral',
2390
+ 'changelog',
2391
+ 'alternatively',
2392
+ 'greensboro',
2393
+ 'controversial',
2394
+ 'recovered',
2395
+ 'upgrading',
2396
+ 'frontpage',
2397
+ 'demanding',
2398
+ 'defensive',
2399
+ 'forbidden',
2400
+ 'programmers',
2401
+ 'monitored',
2402
+ 'installations',
2403
+ 'deutschland',
2404
+ 'practitioner',
2405
+ 'motivated',
2406
+ 'smithsonian',
2407
+ 'examining',
2408
+ 'revelation',
2409
+ 'delegation',
2410
+ 'dictionaries',
2411
+ 'greenhouse',
2412
+ 'transparency',
2413
+ 'currencies',
2414
+ 'survivors',
2415
+ 'positioning',
2416
+ 'descending',
2417
+ 'temporarily',
2418
+ 'frequencies',
2419
+ 'reflections',
2420
+ 'municipality',
2421
+ 'detective',
2422
+ 'experiencing',
2423
+ 'fireplace',
2424
+ 'endorsement',
2425
+ 'psychiatry',
2426
+ 'persistent',
2427
+ 'summaries',
2428
+ 'looksmart',
2429
+ 'magnificent',
2430
+ 'colleague',
2431
+ 'adaptation',
2432
+ 'paintball',
2433
+ 'enclosure',
2434
+ 'supervisors',
2435
+ 'westminster',
2436
+ 'distances',
2437
+ 'absorption',
2438
+ 'treasures',
2439
+ 'transcripts',
2440
+ 'disappointed',
2441
+ 'continually',
2442
+ 'communist',
2443
+ 'collectible',
2444
+ 'entrepreneurs',
2445
+ 'creations',
2446
+ 'acquisitions',
2447
+ 'biodiversity',
2448
+ 'excitement',
2449
+ 'presently',
2450
+ 'mysterious',
2451
+ 'librarian',
2452
+ 'subsidiaries',
2453
+ 'stockholm',
2454
+ 'indonesian',
2455
+ 'therapist',
2456
+ 'promising',
2457
+ 'relaxation',
2458
+ 'thereafter',
2459
+ 'commissioners',
2460
+ 'forwarding',
2461
+ 'nightmare',
2462
+ 'reductions',
2463
+ 'southampton',
2464
+ 'organisms',
2465
+ 'telescope',
2466
+ 'portsmouth',
2467
+ 'advancement',
2468
+ 'harassment',
2469
+ 'generators',
2470
+ 'generates',
2471
+ 'replication',
2472
+ 'inexpensive',
2473
+ 'receptors',
2474
+ 'interventions',
2475
+ 'huntington',
2476
+ 'internship',
2477
+ 'aluminium',
2478
+ 'snowboard',
2479
+ 'beastality',
2480
+ 'evanescence',
2481
+ 'coordinated',
2482
+ 'shipments',
2483
+ 'antarctica',
2484
+ 'chancellor',
2485
+ 'controversy',
2486
+ 'legendary',
2487
+ 'beautifully',
2488
+ 'antibodies',
2489
+ 'examinations',
2490
+ 'immunology',
2491
+ 'departmental',
2492
+ 'terminology',
2493
+ 'gentleman',
2494
+ 'reproduce',
2495
+ 'convicted',
2496
+ 'roommates',
2497
+ 'threatening',
2498
+ 'spokesman',
2499
+ 'activists',
2500
+ 'frankfurt',
2501
+ 'encourages',
2502
+ 'assembled',
2503
+ 'restructuring',
2504
+ 'terminals',
2505
+ 'simulations',
2506
+ 'sufficiently',
2507
+ 'conditional',
2508
+ 'crossword',
2509
+ 'conceptual',
2510
+ 'liechtenstein',
2511
+ 'translator',
2512
+ 'automobiles',
2513
+ 'continent',
2514
+ 'longitude',
2515
+ 'challenged',
2516
+ 'telecharger',
2517
+ 'insertion',
2518
+ 'instrumentation',
2519
+ 'constraint',
2520
+ 'groundwater',
2521
+ 'strengthening',
2522
+ 'insulation',
2523
+ 'infringement',
2524
+ 'subjective',
2525
+ 'swaziland',
2526
+ 'varieties',
2527
+ 'mediawiki',
2528
+ 'configurations',
2529
+ ];