diff --git a/plugins/tntsearch/.eslintrc b/plugins/tntsearch/.eslintrc new file mode 100644 index 0000000..79ecb4a --- /dev/null +++ b/plugins/tntsearch/.eslintrc @@ -0,0 +1,15 @@ +{ + "root": true, + "extends": "defaults/configurations/airbnb/es6", + + "rules": { + "no-empty-label": 0, + "space-after-keywords": "off", + "space-return-throw-case": "off", + + "no-param-reassign": 0, + "indent": [2, 4, { "SwitchCase": 1 }], + "no-labels": 2, + "keyword-spacing": [2, {"before": true, "after": true}] + } +} \ No newline at end of file diff --git a/plugins/tntsearch/.gitignore b/plugins/tntsearch/.gitignore new file mode 100644 index 0000000..a0f2b01 --- /dev/null +++ b/plugins/tntsearch/.gitignore @@ -0,0 +1,2 @@ +/node_modules +/.idea diff --git a/plugins/tntsearch/CHANGELOG.md b/plugins/tntsearch/CHANGELOG.md new file mode 100644 index 0000000..94bdf5d --- /dev/null +++ b/plugins/tntsearch/CHANGELOG.md @@ -0,0 +1,220 @@ +# v3.4.0 +## 03/06/2023 + +1. [](#improved) + * Updated TNTSearch library to `2.9.0` + * Enable Fuzy search [#123](https://github.com/trilbymedia/grav-plugin-tntsearch/pull/123) + * Add configuration for Levenshtein distance for fuzzy search [#124](https://github.com/trilbymedia/grav-plugin-tntsearch/pull/124) + * Added French translation [#100](https://github.com/trilbymedia/grav-plugin-tntsearch/issues/100) + * Added missing stemmers [#115](https://github.com/trilbymedia/grav-plugin-tntsearch/pull/115) [#116](https://github.com/trilbymedia/grav-plugin-tntsearch/pull/116) + +# v3.3.1 +## 02/25/2021 + +1. [](#improved) + * Upgraded to TNTSearch version `2.6.0` + * Added German (de) language [#103](https://github.com/trilbymedia/grav-plugin-tntsearch/pull/103) +1. [](#bugfix) + * Fixed `query` truncation when containing a hash (`#`) and preventing proper search results [#110](https://github.com/trilbymedia/grav-plugin-tntsearch/pull/110) + * Fixed `q` query parameter not working [#111](https://github.com/trilbymedia/grav-plugin-tntsearch/pull/111) + * Fix default stemmer and description [#105](https://github.com/trilbymedia/grav-plugin-tntsearch/pull/105) + * Fixed PHP 8 compatibility issues + +# v3.3.0 +## 12/02/2020 + +1. [](#improved) + * Upgraded to TNTSearch version `2.5.0` + * Pass phpstan level 7 tests +1. [](#bugfix) + * Fixed FlexPages events for add+delete + * Fixed running scheduled index job [#104](https://github.com/trilbymedia/grav-plugin-tntsearch/pull/104) + +# v3.2.1 +## 09/04/2020 + +1. [](#bugfix) + * Fixed bad `require("history")...` JS warning [#101](https://github.com/trilbymedia/grav-plugin-tntsearch/issues/101) + +# v3.2.0 +## 06/08/2020 + +1. [](#new) + * Added support for CLI `bin/plugin index` to index only a single language (`--language=en`) +1. [](#improved) + * Renamed CLI classes to avoid class name conflicts +1. [](#bugfix) + * Fixed non-routable and non-published pages showing up in search results + * Fixed indexing in multi-language sites + * Use CLI command directly in scheduler command to work [#95](https://github.com/trilbymedia/grav-plugin-tntsearch/issues/95) + +# v3.1.1 +## 02/12/2020 + +1. [](#improved) + * Search with JS disabled [#75](https://github.com/trilbymedia/grav-plugin-tntsearch/pull/75) + * Added RU 🇷🇺 language [#74](https://github.com/trilbymedia/grav-plugin-tntsearch/pull/74) + * Various JS dependency updates & recompiled production JS +1. [](#bugfix) + * Added missing `search_object_type` to blueprint + +# v3.1.0 +## 02/11/2020 + +1. [](#new) + * Require Grav v1.6.21 + * Upgraded to TNTSearch version 2.2 (PHP 7.4 fixes) +1. [](#improved) + * Code cleanup +1. [](#bugfix) + * Fixed Grav initialization in CLI + * Work around inconsistencies in page content if page template uses `grav.page` instead of `page` + +# v3.0.1 +## 02/03/2020 + +1. [](#bugfix) + * Fixed an issue indexing via Admin with Grav 1.7 + +# v3.0.0 +## 04/14/2019 + +1. [](#new) + * Added new Grav Scheduler integration + * Added new Multi-Language Support +1. [](#improved) + * Switched to latest TNTSearch version 2.0 (PHP 7.1+) + * Added a new `onFlexObjecSave()` event + * Simplified indexing logic + * Code cleanup + * Minor CSS improvements for search field + * Implemented a unified indexer process that always uses the CLI command for consistency + * Use Grav YAML handler +1. [](#bugfix) + * Use custom search object in query [#63](https://github.com/trilbymedia/grav-plugin-tntsearch/issues/63) + * Fixed issue with Ajax results escaping + * Fixed issues when updating search index + * Set the db index file as a property of `GravTNTSearch` to allow for better overriding + * Put better type checking around `onTNTSearchIndex()` example that indexes `page.header.author` + +# v2.0.4 +## 09/21/2018 + +1. [](#new) + * Added new `tntsearch: index: true|false` page header option to skip specific pages +1. [](#bugfix) + * Skip indexing of pages with `redirect` set in page header [#21](https://github.com/trilbymedia/grav-plugin-tntsearch/issues/21) + +# v2.0.3 +## 08/16/2018 + +1. [](#new) + * New option to allow disabling of page events, manual updates will be required to pick up changes +1. [](#bugfix) + * Don't remove the X button if `built_in_css` is `false` + +# v2.0.2 +## 07/20/2018 + +1. [](#bugfix) + * Ensure that credentials are passed in when searching via `fetch` + * Compressed JS for better performance + +# v2.0.1 +## 05/21/2018 + +1. [](#bugfix) + * Potential fix for history conflicts. + +# v2.0.0 +## 05/11/2018 + +1. [](#new) + * Refactored TNTSearch to allow core classes to be extensible by other plugins + * Added `phrases` search support [#32](https://github.com/trilbymedia/grav-plugin-tntsearch/pull/32) +1. [](#improved) + * Defaulted TNTSearch to search **all pages** out of the box. This should be tweaked though + * Added auto-focus to search input [#28](https://github.com/trilbymedia/grav-plugin-tntsearch/pull/28) + * Added option to control `powered by` [#34](https://github.com/trilbymedia/grav-plugin-tntsearch/pull/34) + * Added a timer on CLI index command + * Exposing `GravTNTSearch` to the browser for JS manipulation + * Dispatching `tntsearch:start` and `tntsearch:done` events when starting/rendering results + * README.md typo fixes +1. [](#bugfix) + * Implemented options as default values that were being ignored + * Fixed missing `break` in foreach [#33](https://github.com/trilbymedia/grav-plugin-tntsearch/pull/33) + * Add missing `use` statement [#41](https://github.com/trilbymedia/grav-plugin-tntsearch/pull/41) + +# v1.2.5 +## 03/07/2018 + +1. [](#improved) + * Only update the a page on save if it exists in the current filter and is therefore eligible to be indexed\ + * Removed Admin dependency, it works fine without admin too, just need to use CLI + +# v1.2.4 +## 02/14/2018 + +1. [](#bugfix) + * Fix issue with admin saving 'string' for filter [#25](https://github.com/trilbymedia/grav-plugin-tntsearch/issues/25) + +# v1.2.3 +## 02/14/2018 + +1. [](#bugfix) + * Missing comma in Admin JS breaking quick-tray reindexing + +# v1.2.2 +## 02/09/2018 + +1. [](#improved) + * Updated TNTSearch to use version `1.3.1` of TNTSearch library for PHP 7.2 compatibility [#24](https://github.com/trilbymedia/grav-plugin-tntsearch/issues/24) +1. [](#bugfix) + * Fixed URI `hash` getting unintentionally removed by TNTSearch [#15](https://github.com/trilbymedia/grav-plugin-tntsearch/pull/15) + * Fixed issue with param separator needed for Windows [#16](https://github.com/trilbymedia/grav-plugin-tntsearch/pull/16) + * Fixed placeholder format in blueprint [#18](https://github.com/trilbymedia/grav-plugin-tntsearch/pull/18) + +# v1.2.1 +## 01/16/2018 + +1. [](#new) + * Added `onTNTSearchReIndex()` that you can fire from any plugin to reindex everything +1. [](#bugfix) + * Fixed an XSS exploit in query + +# v1.2.0 +## 10/29/2017 + +1. [](#new) + * Reworked JS to VanillaJS [#12](https://github.com/trilbymedia/grav-plugin-tntsearch/pull/12) + * Implemented live URI / history refresh when typing in the field + * Added new 'auto' setting for search_type that automatically detects 'basic' or 'boolean'. + * It is now possible to force a search_type mode whether it's `basic` or `boolean` + * Updated to TNTSearch Library to v1.1.0 +1. [](#improved) + * Allow the ability to pass a `placeholder` to the `partials/tntsearch.html.twig` template + * Moved 'fuzzy' option as independent option +1. [](#bugfix) + * Fixed JS issue when at login page + * Fixed results showing on load for drop-downs, instead of in_page only view [#10](https://github.com/trilbymedia/grav-plugin-tntsearch/issues/10) + +# v1.1.0 +## 08/22/2017 + +1. [](#new) + * Extensible output JSON support via new `onTTNTSearchQuery()` event. + * Added a 'powered-by' link that can be disabled via configuration + * Improved docs by including instructions on how to use CLI to index. + +# v1.0.1 +## 08/22/2017 + +1. [](#new) + * Changed cartoon bomb icon with more friendly version (binoculars) [#4](https://github.com/trilbymedia/grav-plugin-tntsearch/issues/4) + * Added the ability to disable CSS and JS independently [#3](https://github.com/trilbymedia/grav-plugin-tntsearch/issues/3) + +# v1.0.0 +## 08/16/2017 + +1. [](#new) + * Initial release... diff --git a/plugins/tntsearch/LICENSE b/plugins/tntsearch/LICENSE new file mode 100644 index 0000000..fa236f8 --- /dev/null +++ b/plugins/tntsearch/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2017 Trilby Media, LLC + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/plugins/tntsearch/README.md b/plugins/tntsearch/README.md new file mode 100644 index 0000000..e9541ce --- /dev/null +++ b/plugins/tntsearch/README.md @@ -0,0 +1,373 @@ +# TNTSearch Plugin + +The **TNTSearch** Plugin is for [Grav CMS](http://github.com/getgrav/grav). Powerful indexed-based full text search engine powered by the [TNTSearch library](https://github.com/teamtnt/tntsearch) that provides fast Ajax-based Grav content searches. This plugin is highly flexible allowing indexes of arbitrary content data as well as custom Twig templates to provide the opportunity to index modular and other dynamic page types. TNTSearch provides CLI as well as Admin based administration and re-indexing, as well as a built-in Ajax-powered front-end search tool. + +> NOTE: TNTSearch version 3.0.0 now requires Grav 1.6.0 or newer to function as it makes use of new functionality not available in previous versions. + +![](assets/tntsearch-ajax.gif) + +## Installation + +Installing the Tnt Search plugin can be done in one of two ways. The GPM (Grav Package Manager) installation method enables you to quickly and easily install the plugin with a simple terminal command, while the manual method enables you to do so via a zip file. + +### GPM Installation (Preferred) + +The simplest way to install this plugin is via the [Grav Package Manager (GPM)](http://learn.getgrav.org/advanced/grav-gpm) through your system's terminal (also called the command line). From the root of your Grav install type: + + bin/gpm install tntsearch + +This will install the Tnt Search plugin into your `/user/plugins` directory within Grav. Its files can be found under `/your/site/grav/user/plugins/tntsearch`. + +## Requirements + +Other than standard Grav requirements, this plugin does have some extra requirements. Due to the complex nature of a search engine, TNTSearch utilizes a flat-file database to store its wordlist as well as the mapping for content. This is handled automatically by the plugin, but you do need to ensure you have the following installed on your server: + +* **SQLite3** Database +* **PHP pdo** Extension +* **PHP pdo_sqlite** Driver +* **PHP pdo_mysql** Driver (only required because library references some MySQL constants, MySQL db is not used) + +| PHP by default comes with **PDO** and the vast majority of linux-based systems already come with SQLite. + +### Installation of SQLite on Mac systems + +SQLite actually comes pre-installed on your Mac, but you can upgrade it to the latest version with Homebrew: + +Install [Homebrew](https://brew.sh/) + +```shell +$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" +``` + +Install SQLite with Homebrew + +```shell +$ brew install sqlite +``` + +### Installation of SQLite on Windows systems + +Download the appropriate version of SQLite from the [SQLite Downloads Page](https://www.sqlite.org/download.html). + +Extract the downloaded ZIP file and run the `sqlite3.exe` executable. + + +## Configuration + +Before configuring this plugin, you should copy the `user/plugins/tntsearch/tntsearch.yaml` to `user/config/plugins/tntsearch.yaml` and only edit that copy. + +Here is the default configuration and an explanation of available options: + +```yaml +enabled: true +search_route: '/search' +query_route: '/s' +built_in_css: true +built_in_js: true +built_in_search_page: true +enable_admin_page_events: true +search_type: auto +fuzzy: false +distance: 2 +phrases: true +stemmer: 'no' +display_route: true +display_hits: true +display_time: true +live_uri_update: true +limit: 20 +min: 3 +snippet: 300 +index_page_by_default: true +scheduled_index: + enabled: false + at: '0 */3 * * *' + logs: 'logs/tntsearch-index.out' +filter: + items: + - root@.descendants +powered_by: true +search_object_type: Grav +``` + +The configuration options are as follows: + +* `enabled` - enable or disable the plugin instantly +* `search_route` - the route used for the built-in search page +* `query_route` - the route used by the search form to query the search engine +* `built_in_css` - enable or disable the built-in css styling +* `built_in_js` - enable or disable the built-in javascript +* `built_in_search_page` - enable or disable the built-in search page +* `enable_admin_page_events` - enable or disable the page events which occur `on-save` to add/update/remove page in index +* `search_type` - can be one of these types: + * `basic` - standard string matching + * `boolean` - supports `or` or `minus`. e.g. `foo -bar` + * `auto` - automatically detects whether to use `basic` or `boolean` +* `fuzzy` - matches if the words are 'close' but not necessarily exact matches +* `distance` - Levenshtein distance of fuzzy search. It represents the amount of characters which need to be changed, removed, or added in a word in order it to match the search keyword. Increasing the distance produces more search results but decreases the accuracy of the search. +* `phrases` - automatically handle phrases support +* `stemmer` - can be one of these types: + * `no` - no stemmer + * `arabic` - Arabic language + * `croatian` - Croatian language + * `german` - German language + * `italian` - Italian language + * `porter` - Porter stemmer for English language + * `portuguese` - Portuguese language + * `russian` - Russian language + * `ukrainian` - Ukrainian language +* `display_route` - display the route in the search results +* `display_hits` - display the number of hits in the search results +* `display_time` - display the execution time in the search results +* `live_uri_update` - when `built_in_js` is enabled, live updates the URI bar in the `search_route` page +* `limit` - maximum amount of results to be shown +* `min` - mininum amount of characters typed before performing search +* `snippet` - amount of characters for previewing a result item +* `index_page_by_default` - should all pages be indexed by default unless frontmatter overrides +* `scheduled_index` - New scheduled index job. Disabled by default, when enabled defaulted to run every 3 hours, and output results to `logs/tntsearch-index.out` +* `filter` - a [Page Collections filter](https://learn.getgrav.org/content/collections#summary-of-collection-options) that lets you pick specific pages to index via a collection query +* `powered_by` - Display the **powered-by TNTSearch** text +* `search_object_type` - Allows custom classes to override the default **Grav Page** support. This allows completely custom searching capabilities for any data type. + +## Usage + +TNTSearch relies on your content being indexed into the SQLite index database before any search queries can be made. This is very similar to other search engines such as ElasticSearch, Solr, Lucene, etc, but it uses a relatively simply PHP search engine library [TNTSearch library](https://github.com/teamtnt/tntsearch) to achieve this with little setup and no hassles. + +### Indexing + +The first step after installation of the plugin, is to index your content. There are several ways you can accomplish this. + +#### CLI Indexing + +First if you are able to access the CLI or just choose not to use the admin plugin, you can use the built-in CLI command: + +```shell +$ bin/plugin tntsearch index +``` + +This will scan all your pages and index the content. You should see some output like this: + +```shell +Re-indexing Search + +Added 1 / +Added 2 /blog/classic-modern-architecture +Added 3 /blog/daring-fireball-link +Added 4 /blog/focus-and-blur +Added 5 /blog/just-some-text-today +Added 6 /blog/london-industry +Added 7 /blog/random-thoughts +Added 8 /blog/sunshine-in-the-hills +Added 9 /blog/the-urban-jungle +Total rows 9 +Done. +``` + +This indicates a successful indexing of your content. + +#### Admin Plugin Indexing + +If you are using the admin plugin you can index your content directly from the plugin. TNTSearch adds a new **quick-tray** icon that lets you create a new index or re-index all your content quickly and conveniently with a single click. + +![](assets/tntsearch-quicktray.png) + +Alternatively you can navigate to the TNTSearch configuration section and click the `Index Content` button: + +![](assets/tntsearch-config.png) + +#### Skipping Indexing + +> NOTE: That any page that uses a `redirect` page header attribute will be skipped during indexing. + +You can explicitly skip a page that is in the index filter by adding this YAML to the page header: + +``` +tntsearch: + index: false +``` + +#### Multi-Language Support + +With the new 3.0 version of TNTSearch, support has been added for multiple languages (Grav 1.6 required). Internally, this means that rather that store the index as `user:://data/tntsearch/grav.index`, multiple indexes are created per language configured in Grav. For example if you have set the supported languages to `['en', 'fr', 'de']`, then when you perform an index, you will get three files: `en.index`, `fr.index`, and `de.index`. When querying the appropriate **active language** determines which index is queried. For example, performing the search on a page called `/fr/search` will result in the `fr.index` database to be used, and French results to be returned. + +Note Indexing will take longer depending on the number of languages you support as TNTSearch has to index each page in each language. + +> NOTE: While accented characters is supported in this release, there is currently no support in the underlying TNTSearch library to match non-accented characters to accented ones, so exact matches are required. + +#### Scheduler Support + +One of the great new features of Grav 1.6 is the built in **Scheduler** that allows plugin-provided functionality to be run periodically. TNTSearch is a great use-case for this capability as it allows an indexing job to be scheduled to be run every few hours without the need to manually keep things in sync. There are a few options that allow you to configure this capability. + +First note, that this scheduler functionality is disable by default, so you first have to enable the scheduler functionality in the TNTSearch plugin settings. After that you can configure how often the indexing job should run. The default is every 3 hours. Lastly, you can configure where any indexing output is logged to. + +#### Admin Page CrUD Events + +Once you have an index, TNTSearch makes use of admin events to **C**reate, **U**pdate, and **D**elete index entries when you edit pages. If your index ever looks like it's out of sync, you can simply reindex your whole site. + +#### Customizing the Search Index + +##### Adding Custom Fields + +By default the TNTSearch plugin will index the `title` and `content` of your page. This usually suffices for most cases, but there are situations where you might want to index more fields. The plugin provides an example of this by listening to the `onTNTSearchIndex` event: + +```php +public static function getSubscribedEvents() +{ + return [ + 'onTNTSearchIndex' => ['onTNTSearchIndex', 0] + ]; +} + +public function onTNTSearchIndex(Event $e) +{ + $fields = $e['fields']; + $page = $e['page']; + + if (isset($page->header()->author)) { + $fields->author = $page->header()->author; + } +} +``` + +This allows you to add an author to the indexed fields if it is set in the page frontmatter. You can add your own custom fields with a very simple plugin that listens to this event. + +##### Providing Custom Render Templates + +The TNTSearch plugin generally uses the rendered content to index with. However, there are situations where your page is actually a modular page, or built from other pages where there is no actual content on the page, or the content is not representative of the page as a whole. To combat this situation you can provide custom templates in your theme that TNTSearch can use to render the content before indexing. + +For example, say we have a homepage that is built from a few modular sub-pages with a little content below it, it's called `home.md`, so uses a `home.html.twig` file in your theme's `templates/` folder. You can create a simplified version of this template and save it as `templates/tntsearch/home.html.twig`. For this example this template looks like this: + +```twig +{% for module in page.collection() %} +

+ {{ module.content|raw }} +

+{% endfor %} + +{{ page.content|raw }} +``` + +As you can see this simply ensures the module pages as defined in the page's collection are displayed, then the actual page content is displayed. + +To instruct TNTSearch to index with this template rather than just using the Page content by itself, you just need to add an entry in the `home.md` frontmatter: + +```yaml +tntsearch: + template: 'tntsearch/home' +``` + +### Searching + +TNTSearch plugin for Grav comes with a built-in query page that is accessible via the `/search` route by default. This search page is a simple input field that will perform an Ajax query **as-you-type**. Because TNTSearch is so fast, you get a real-time search response in a similar fashion to a Google search. Also the results are returned already highlighted for matching terms. + +You can also test searching with the CLI: + +```json +$ bin/plugin tntsearch query ipsum + +{ + "number_of_hits": 3, + "execution_time": "2.101 ms", + "hits": [ + { + "link": "\/blog\/classic-modern-architecture", + "title": "Classic Modern Architecture", + "content": "...sed a odio. Curabitur ut lectus tortor. Sed ipsum<\/em> eros, egestas ut eleifend non, elementum vitae eros. Mauris felis diam, pellentesque vel lacinia ac, dictum a nunc.\nLorem ipsum<\/em> dolor sit amet, consectetur adipiscing elit. Donec ultricies tristique nulla et mattis. Phasellus id massa eget..." + }, + { + "link": "\/blog\/focus-and-blur", + "title": "Focus and Blur", + "content": "...sed a odio. Curabitur ut lectus tortor. Sed ipsum<\/em> eros, egestas ut eleifend non, elementum vitae eros. Mauris felis diam, pellentesque vel lacinia ac, dictum a nunc.\nLorem ipsum<\/em> dolor sit amet, consectetur adipiscing elit. Donec ultricies tristique nulla et mattis. Phasellus id massa eget..." + }, + { + "link": "\/blog\/london-industry", + "title": "London Industry at Night", + "content": "...sed a odio. Curabitur ut lectus tortor. Sed ipsum<\/em> eros, egestas ut eleifend non, elementum vitae eros. Mauris felis diam, pellentesque vel lacinia ac, dictum a nunc.\nLorem ipsum<\/em> dolor sit amet, consectetur adipiscing elit. Donec ultricies tristique nulla et mattis. Phasellus id massa eget..." + } + ] +} +``` + +### Customizing the Search Page + +If a physical Grav page is found for the `/search` route, TNTSearch will use that rather than the page provided by the plugin. This allows you to easily add content to your search page as you need. +If you wish to customize the actual HTML output, simply copy the `templates/search.html.twig` from the plugin to your theme and customize it. + +The actual input field can also be modified as needed by copy and editing the `templates/partials/tntsearch.html.twig` file to your theme and modify it. + +### Customizing Query Data + +By default the TNTSearch plugin for Grav, the response JSON is sent with the following structure: + +```json +{ + "number_of_hits": 3, + "execution_time": "1.000 ms", + "hits": [ + { + "link": "/page-a", + "title": "Title A", + "content": "highlighted-summary" + }, + { + "link": "/page-b", + "title": "Title B", + "content": "highlighted-summary" + }, + { + "link": "/page-c", + "title": "Title C", + "content": "highlighted-summary" + } + ] +} +``` + +There are instances where this output is not desirable or needs to be changed. TNTSearch actually provides a plugin event to allow you to manipulate this format. An example of this can be seen below: + +```php +public static function getSubscribedEvents() { + return [ + 'onTNTSearchQuery' => ['onTNTSearchQuery', 1000], + ]; +} + +public function onTNTSearchQuery(Event $e) +{ + $query = $this->grav['uri']->param('q'); + + if ($query) { + $page = $e['page']; + $query = $e['query']; + $options = $e['options']; + $fields = $e['fields']; + + $fields->results[] = $page->route(); + $e->stopPropagation(); + } +} +``` + +The important things to note are the `1000` order-value to ensure this event runs before the default event in the `tntsearch.php` plugin file. The actual event method simply sets a result array on fields to with a route, resulting in: + +```json +{ + "number_of_hits": 3, + "execution_time": "1.000 ms", + "results": ['/page-a', '/page-b', '/page-c'] +} +``` + +### Dropdown Search Field + +TNTSearch plugin can also be used to render the search as a drop-down rather than in a standard page. To do this you need to `embed` the search partial and override it to fit your needs. You could simply add this to your theme wherever you want to have an Ajax drop-down search box: + +```twig +{% embed 'partials/tntsearch.html.twig' with { limit: 10, snippet: 150, min: 3, search_type: 'auto', dropdown: true } %}{% endembed %} +``` + +Here we embed the default partial, but override the `options` by passing them in the `with` statement. It is important to notice that the `dropdown: true` is required to be set in order to be interpreted as dropdown. + +## Credits + +This plugin would not of been possible without the amazing [TNTSearch library](https://github.com/teamtnt/tntsearch) for PHP. Make sure you **star** that project on GitHub. diff --git a/plugins/tntsearch/app/history.js b/plugins/tntsearch/app/history.js new file mode 100644 index 0000000..ee3abb7 --- /dev/null +++ b/plugins/tntsearch/app/history.js @@ -0,0 +1,3 @@ +import { createBrowserHistory } from 'history'; +const history = createBrowserHistory(); +export default history; diff --git a/plugins/tntsearch/app/main.js b/plugins/tntsearch/app/main.js new file mode 100644 index 0000000..dda0af4 --- /dev/null +++ b/plugins/tntsearch/app/main.js @@ -0,0 +1,61 @@ +// polyfills +import 'babel-polyfill'; + +import domready from 'domready'; +import search from './search'; + +const GravTNTSearch = () => { + /* const uri = new URI(global.location.href, true); + history.replace({ + search: global.location.search, + hash: global.location.hash, + state: { + historyValue: uri.query.q || '', + type: 'tntsearch', + }, + });*/ + + const searchForms = document.querySelectorAll('form.tntsearch-form'); + [...searchForms].forEach((form) => { + const input = form.querySelector('.tntsearch-field'); + const clear = form.querySelector('.tntsearch-clear'); + const results = form.querySelector('.tntsearch-results'); + if (!input || !results) { return false; } + + form.addEventListener('submit', (event) => event.preventDefault()); + input.addEventListener('focus', () => search(input, results)); + input.addEventListener('input', () => { + if (clear) { + clear.style.display = ''; + } + search.cancel(); + search({ input, results }); + }); + + if (clear) { + clear.addEventListener('click', () => { + if (clear) { + clear.style.display = 'none'; + } + input.value = ''; + search.cancel(); + search({ input, results }); + }); + } + + return this; + }); + + document.addEventListener('click', (event) => { + [...searchForms].forEach((form) => { + if (!form.querySelector('.tntsearch-dropdown')) { return; } + if (!form.contains(event.target)) { + form.querySelector('.tntsearch-results').style.display = 'none'; + } + }); + }); +}; + +domready(GravTNTSearch); + +window.GravTNTSearch = GravTNTSearch; diff --git a/plugins/tntsearch/app/search.js b/plugins/tntsearch/app/search.js new file mode 100644 index 0000000..ecd6a01 --- /dev/null +++ b/plugins/tntsearch/app/search.js @@ -0,0 +1,107 @@ +import throttle from 'lodash/throttle'; +import URI from 'url-parse'; +import qs from 'querystringify'; +import history from './history'; + +export const DEFAULTS = { + uri: '', + limit: 20, + snippet: 300, + min: 3, + search_type: 'auto', + in_page: false, + live_update: true, +}; + +const historyPush = ({ value = false, params = false } = {}) => { + const uri = new URI(global.location.href, true); + + if (params === false) { + delete uri.query.q; + } else { + uri.query.q = params; + } + + const querystring = qs.stringify(uri.query, '?'); + + history.push(`${uri.pathname}${querystring}`, { + historyValue: value, type: 'tntsearch', + }); +}; + +const throttling = throttle(async ({ input, results, historyValue = false } = {}) => { + if (!input || !results) { return false; } + + const value = historyValue || input.value.trim(); + const clear = input.nextElementSibling; + const data = Object.assign({}, DEFAULTS, JSON.parse(input.dataset.tntsearch || '{}')); + + if (!value) { + results.style.display = 'none'; + + if (data.in_page) { + clear.style.display = 'none'; + + if (historyValue === false && data.live_update) { + historyPush({ value }); + } + } + + return false; + } + + if (value.length < data.min) { + return false; + } + + if (data.in_page) { + clear.style.display = ''; + } + + const params = { + q: encodeURIComponent(value), + l: data.limit, + sl: data.snippet, + search_type: data.search_type, + ajax: true, + }; + + const startEvent = new Event('tntsearch:start'); + const query = Object.keys(params) + .map(k => `${k}=${params[k]}`) + .join('&'); + + input.dispatchEvent(startEvent); + fetch(`${data.uri}?${query}`, { credentials: 'same-origin' }) + .then((response) => response.text()) + .then((response) => { + if (data.in_page && data.live_update && !historyValue) { + historyPush({ value, params: params.q }); + } + return response; + }) + .then((response) => { + const doneEvent = new Event('tntsearch:done'); + results.style.display = ''; + results.innerHTML = response; + input.dispatchEvent(doneEvent); + + return response; + }); + + return this; +}, 350, { leading: false }); + +history.listen((location) => { + if (location.state && location.state.type === 'tntsearch') { + location.state.input = document.querySelector('.tntsearch-field-inpage'); + location.state.results = document.querySelector('.tntsearch-results-inpage'); + + if (location.state.input && location.state.results) { + location.state.input.value = location.state.historyValue; + throttling({ ...location.state }); + } + } +}); + +export default throttling; diff --git a/plugins/tntsearch/assets/admin/tntsearch.css b/plugins/tntsearch/assets/admin/tntsearch.css new file mode 100644 index 0000000..37d2444 --- /dev/null +++ b/plugins/tntsearch/assets/admin/tntsearch.css @@ -0,0 +1,34 @@ +.index-status { + border: 1px solid transparent; +} +.index-status span { + padding: 0.3rem 0.7rem; + border-radius: 4px; + line-height: 1.7; + vertical-align: middle; + display: inline-block; +} +.index-status .error { + background: #ddd; + color: #c00; +} +.index-status .success { + border: 1px solid #ddd; + color: #999; +} +#admin-main .admin-block .index-status .button.critical { + background: #c00; + color: #fff; +} + +#admin-main .admin-block .index-status .button.reindex { + background: #0079BA; + color: #fff; +} + +.tntsearch-error-details { + padding: .2rem .5rem; + margin: 1rem 0; + border-radius: 3px; + display: none; +} \ No newline at end of file diff --git a/plugins/tntsearch/assets/admin/tntsearch.js b/plugins/tntsearch/assets/admin/tntsearch.js new file mode 100644 index 0000000..a7eb556 --- /dev/null +++ b/plugins/tntsearch/assets/admin/tntsearch.js @@ -0,0 +1,78 @@ +((function($) { + $(document).ready(function() { + var Request, Toastr = null; + if (typeof Grav !== 'undefined' && Grav && Grav.default && Grav.default.Utils) { + Request = Grav.default.Utils.request; + Toastr = Grav.default.Utils.toastr; + } + var indexer = $('#tntsearch-index, #admin-nav-quick-tray .tntsearch-reindex'), + current = null, currentTray = null; + if (!indexer.length) { return; } + + indexer.on('click', function(e) { + e.preventDefault(); + var target = $(e.target), + isTray = target.closest('#admin-nav-quick-tray').length, + status = indexer.siblings('.tntsearch-status'), + errorDetails = indexer.siblings('.tntsearch-error-details'); + current = status.clone(true); + + console.log(isTray); + if (isTray) { + target = target.is('i') ? target.parent() : target; + currentTray = target.find('i').attr('class'); + target.find('i').attr('class', 'fa fa-fw fa-circle-o-notch fa-spin'); + } + + errorDetails + .hide() + .empty(); + + status + .removeClass('error success') + .empty() + .html(''); + + $.ajax({ + type: 'POST', + url: GravAdmin.config.base_url_relative + '.json/task' + GravAdmin.config.param_sep + 'reindexTNTSearch', + data: { 'admin-nonce': GravAdmin.config.admin_nonce } + }).done(function(done) { + if (done.status === 'success') { + indexer.removeClass('critical').addClass('reindex'); + status.removeClass('error').addClass('success'); + Toastr.success(done.message); + } else { + indexer.removeClass('reindex').addClass('critical'); + status.removeClass('success').addClass('error'); + var error = done.message; + if (done.details) { + error += '
' + done.details; + errorDetails + .text(done.details) + .show(); + + status.replaceWith(current); + } + + Toastr.error(error); + } + + status.html(done.message); + }).fail(function(error) { + if (error.responseJSON && error.responseJSON.error) { + indexer.removeClass('reindex').addClass('critical'); + errorDetails + .text(error.responseJSON.error.message) + .show(); + + status.replaceWith(current); + } + }).always(function() { + target.find('i').attr('class', currentTray); + current = null; + currentTray = null; + }); + }) + }); +})(jQuery)); diff --git a/plugins/tntsearch/assets/tntsearch-ajax.gif b/plugins/tntsearch/assets/tntsearch-ajax.gif new file mode 100644 index 0000000..7d69522 Binary files /dev/null and b/plugins/tntsearch/assets/tntsearch-ajax.gif differ diff --git a/plugins/tntsearch/assets/tntsearch-config.png b/plugins/tntsearch/assets/tntsearch-config.png new file mode 100644 index 0000000..21c521b Binary files /dev/null and b/plugins/tntsearch/assets/tntsearch-config.png differ diff --git a/plugins/tntsearch/assets/tntsearch-quicktray.png b/plugins/tntsearch/assets/tntsearch-quicktray.png new file mode 100644 index 0000000..1ab33ad Binary files /dev/null and b/plugins/tntsearch/assets/tntsearch-quicktray.png differ diff --git a/plugins/tntsearch/assets/tntsearch.css b/plugins/tntsearch/assets/tntsearch.css new file mode 100644 index 0000000..3438fa4 --- /dev/null +++ b/plugins/tntsearch/assets/tntsearch.css @@ -0,0 +1,71 @@ +.tntsearch-form .form-input { + height: 2.4rem; + padding-left: 1rem; +} + +#tntsearch-wrapper { + position: relative; +} + +.tntsearch-clear { + border-radius: 100%; + padding: 0 1rem; + line-height: 1; + position: absolute; + right: 0; + font-size: 2rem; + top: 0; + cursor: pointer; +} + +.tntsearch-field-inpage { + width: 100%; +} + +.tntsearch-dropdown ~ .tntsearch-results { + position: relative; + margin-bottom: 0; +} + +.tntsearch-dropdown ~ .tntsearch-results .row { + position: absolute; + top: 0; + right: 0; + width: 400px; + background: #fff; + box-shadow: 0 2px 20px rgba(0,0,0, 0.1); + padding: 10px; + z-index: 2; +} + +.tntsearch-results .info { + color: #999; + font-size: 90%; +} + +.tntsearch-results .title { + margin-bottom: 10px; +} + +.tntsearch-results .route { + margin-top: 0; + margin-bottom: 10px; +} + +.tntsearch-results .row > p { + margin-top: 0; +} + +.tntsearch-results em { + font-style: normal; + background-color: #ffff33; +} + +.tntsearch-powered-by { + text-align: center; + font-size: 14px; +} + +.tntsearch-dropdown ~ .tntsearch-powered-by { + display: none; +} diff --git a/plugins/tntsearch/assets/tntsearch.js b/plugins/tntsearch/assets/tntsearch.js new file mode 100644 index 0000000..7360a5f --- /dev/null +++ b/plugins/tntsearch/assets/tntsearch.js @@ -0,0 +1 @@ +!function(t){function n(e){if(r[e])return r[e].exports;var o=r[e]={i:e,l:!1,exports:{}};return t[e].call(o.exports,o,o.exports,n),o.l=!0,o.exports}var r={};n.m=t,n.c=r,n.d=function(t,r,e){n.o(t,r)||Object.defineProperty(t,r,{configurable:!1,enumerable:!0,get:e})},n.n=function(t){var r=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(r,"a",r),r},n.o=function(t,n){return Object.prototype.hasOwnProperty.call(t,n)},n.p="",n(n.s=135)}([function(t,n,r){var e=r(2),o=r(18),i=r(11),u=r(12),a=r(19),c=function(t,n,r){var s,f,l,h,p=t&c.F,v=t&c.G,d=t&c.S,y=t&c.P,g=t&c.B,m=v?e:d?e[n]||(e[n]={}):(e[n]||{}).prototype,b=v?o:o[n]||(o[n]={}),w=b.prototype||(b.prototype={});v&&(r=n);for(s in r)f=!p&&m&&void 0!==m[s],l=(f?m:r)[s],h=g&&f?a(l,e):y&&"function"==typeof l?a(Function.call,l):l,m&&u(m,s,l,t&c.U),b[s]!=l&&i(b,s,h),y&&w[s]!=l&&(w[s]=l)};e.core=o,c.F=1,c.G=2,c.S=4,c.P=8,c.B=16,c.W=32,c.U=64,c.R=128,t.exports=c},function(t,n,r){var e=r(4);t.exports=function(t){if(!e(t))throw TypeError(t+" is not an object!");return t}},function(t,n){var r=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=r)},function(t,n){t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,n){t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},function(t,n,r){var e=r(48)("wks"),o=r(33),i=r(2).Symbol,u="function"==typeof i;(t.exports=function(t){return e[t]||(e[t]=u&&i[t]||(u?i:o)("Symbol."+t))}).store=e},function(t,n,r){var e=r(21),o=Math.min;t.exports=function(t){return t>0?o(e(t),9007199254740991):0}},function(t,n,r){t.exports=!r(3)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(t,n,r){var e=r(1),o=r(96),i=r(23),u=Object.defineProperty;n.f=r(7)?Object.defineProperty:function(t,n,r){if(e(t),n=i(n,!0),e(r),o)try{return u(t,n,r)}catch(t){}if("get"in r||"set"in r)throw TypeError("Accessors not supported!");return"value"in r&&(t[n]=r.value),t}},function(t,n,r){var e=r(24);t.exports=function(t){return Object(e(t))}},function(t,n){t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},function(t,n,r){var e=r(8),o=r(32);t.exports=r(7)?function(t,n,r){return e.f(t,n,o(1,r))}:function(t,n,r){return t[n]=r,t}},function(t,n,r){var e=r(2),o=r(11),i=r(14),u=r(33)("src"),a=r(139),c=(""+a).split("toString");r(18).inspectSource=function(t){return a.call(t)},(t.exports=function(t,n,r,a){var s="function"==typeof r;s&&(i(r,"name")||o(r,"name",n)),t[n]!==r&&(s&&(i(r,u)||o(r,u,t[n]?""+t[n]:c.join(String(n)))),t===e?t[n]=r:a?t[n]?t[n]=r:o(t,n,r):(delete t[n],o(t,n,r)))})(Function.prototype,"toString",function(){return"function"==typeof this&&this[u]||a.call(this)})},function(t,n,r){var e=r(0),o=r(3),i=r(24),u=/"/g,a=function(t,n,r,e){var o=String(i(t)),a="<"+n;return""!==r&&(a+=" "+r+'="'+String(e).replace(u,""")+'"'),a+">"+o+""};t.exports=function(t,n){var r={};r[t]=n(a),e(e.P+e.F*o(function(){var n=""[t]('"');return n!==n.toLowerCase()||n.split('"').length>3}),"String",r)}},function(t,n){var r={}.hasOwnProperty;t.exports=function(t,n){return r.call(t,n)}},function(t,n,r){var e=r(49),o=r(24);t.exports=function(t){return e(o(t))}},function(t,n,r){var e=r(50),o=r(32),i=r(15),u=r(23),a=r(14),c=r(96),s=Object.getOwnPropertyDescriptor;n.f=r(7)?s:function(t,n){if(t=i(t),n=u(n,!0),c)try{return s(t,n)}catch(t){}if(a(t,n))return o(!e.f.call(t,n),t[n])}},function(t,n,r){var e=r(14),o=r(9),i=r(69)("IE_PROTO"),u=Object.prototype;t.exports=Object.getPrototypeOf||function(t){return t=o(t),e(t,i)?t[i]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?u:null}},function(t,n){var r=t.exports={version:"2.6.11"};"number"==typeof __e&&(__e=r)},function(t,n,r){var e=r(10);t.exports=function(t,n,r){if(e(t),void 0===n)return t;switch(r){case 1:return function(r){return t.call(n,r)};case 2:return function(r,e){return t.call(n,r,e)};case 3:return function(r,e,o){return t.call(n,r,e,o)}}return function(){return t.apply(n,arguments)}}},function(t,n){var r={}.toString;t.exports=function(t){return r.call(t).slice(8,-1)}},function(t,n){var r=Math.ceil,e=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?e:r)(t)}},function(t,n,r){"use strict";var e=r(3);t.exports=function(t,n){return!!t&&e(function(){n?t.call(null,function(){},1):t.call(null)})}},function(t,n,r){var e=r(4);t.exports=function(t,n){if(!e(t))return t;var r,o;if(n&&"function"==typeof(r=t.toString)&&!e(o=r.call(t)))return o;if("function"==typeof(r=t.valueOf)&&!e(o=r.call(t)))return o;if(!n&&"function"==typeof(r=t.toString)&&!e(o=r.call(t)))return o;throw TypeError("Can't convert object to primitive value")}},function(t,n){t.exports=function(t){if(void 0==t)throw TypeError("Can't call method on "+t);return t}},function(t,n,r){var e=r(0),o=r(18),i=r(3);t.exports=function(t,n){var r=(o.Object||{})[t]||Object[t],u={};u[t]=n(r),e(e.S+e.F*i(function(){r(1)}),"Object",u)}},function(t,n,r){var e=r(19),o=r(49),i=r(9),u=r(6),a=r(85);t.exports=function(t,n){var r=1==t,c=2==t,s=3==t,f=4==t,l=6==t,h=5==t||l,p=n||a;return function(n,a,v){for(var d,y,g=i(n),m=o(g),b=e(a,v,3),w=u(m.length),x=0,S=r?p(n,w):c?p(n,0):void 0;w>x;x++)if((h||x in m)&&(d=m[x],y=b(d,x,g),t))if(r)S[x]=y;else if(y)switch(t){case 3:return!0;case 5:return d;case 6:return x;case 2:S.push(d)}else if(f)return!1;return l?-1:s||f?f:S}}},function(t,n,r){"use strict";if(r(7)){var e=r(29),o=r(2),i=r(3),u=r(0),a=r(63),c=r(93),s=r(19),f=r(39),l=r(32),h=r(11),p=r(41),v=r(21),d=r(6),y=r(124),g=r(35),m=r(23),b=r(14),w=r(45),x=r(4),S=r(9),_=r(82),E=r(36),O=r(17),P=r(37).f,A=r(84),j=r(33),M=r(5),T=r(26),F=r(53),N=r(52),I=r(87),L=r(47),k=r(58),R=r(38),D=r(86),U=r(113),C=r(8),B=r(16),V=C.f,W=B.f,G=o.RangeError,q=o.TypeError,H=o.Uint8Array,z=Array.prototype,Y=c.ArrayBuffer,$=c.DataView,J=T(0),K=T(2),X=T(3),Z=T(4),Q=T(5),tt=T(6),nt=F(!0),rt=F(!1),et=I.values,ot=I.keys,it=I.entries,ut=z.lastIndexOf,at=z.reduce,ct=z.reduceRight,st=z.join,ft=z.sort,lt=z.slice,ht=z.toString,pt=z.toLocaleString,vt=M("iterator"),dt=M("toStringTag"),yt=j("typed_constructor"),gt=j("def_constructor"),mt=a.CONSTR,bt=a.TYPED,wt=a.VIEW,xt=T(1,function(t,n){return Pt(N(t,t[gt]),n)}),St=i(function(){return 1===new H(new Uint16Array([1]).buffer)[0]}),_t=!!H&&!!H.prototype.set&&i(function(){new H(1).set({})}),Et=function(t,n){var r=v(t);if(r<0||r%n)throw G("Wrong offset!");return r},Ot=function(t){if(x(t)&&bt in t)return t;throw q(t+" is not a typed array!")},Pt=function(t,n){if(!(x(t)&&yt in t))throw q("It is not a typed array constructor!");return new t(n)},At=function(t,n){return jt(N(t,t[gt]),n)},jt=function(t,n){for(var r=0,e=n.length,o=Pt(t,e);e>r;)o[r]=n[r++];return o},Mt=function(t,n,r){V(t,n,{get:function(){return this._d[r]}})},Tt=function(t){var n,r,e,o,i,u,a=S(t),c=arguments.length,f=c>1?arguments[1]:void 0,l=void 0!==f,h=A(a);if(void 0!=h&&!_(h)){for(u=h.call(a),e=[],n=0;!(i=u.next()).done;n++)e.push(i.value);a=e}for(l&&c>2&&(f=s(f,arguments[2],2)),n=0,r=d(a.length),o=Pt(this,r);r>n;n++)o[n]=l?f(a[n],n):a[n];return o},Ft=function(){for(var t=0,n=arguments.length,r=Pt(this,n);n>t;)r[t]=arguments[t++];return r},Nt=!!H&&i(function(){pt.call(new H(1))}),It=function(){return pt.apply(Nt?lt.call(Ot(this)):Ot(this),arguments)},Lt={copyWithin:function(t,n){return U.call(Ot(this),t,n,arguments.length>2?arguments[2]:void 0)},every:function(t){return Z(Ot(this),t,arguments.length>1?arguments[1]:void 0)},fill:function(t){return D.apply(Ot(this),arguments)},filter:function(t){return At(this,K(Ot(this),t,arguments.length>1?arguments[1]:void 0))},find:function(t){return Q(Ot(this),t,arguments.length>1?arguments[1]:void 0)},findIndex:function(t){return tt(Ot(this),t,arguments.length>1?arguments[1]:void 0)},forEach:function(t){J(Ot(this),t,arguments.length>1?arguments[1]:void 0)},indexOf:function(t){return rt(Ot(this),t,arguments.length>1?arguments[1]:void 0)},includes:function(t){return nt(Ot(this),t,arguments.length>1?arguments[1]:void 0)},join:function(t){return st.apply(Ot(this),arguments)},lastIndexOf:function(t){return ut.apply(Ot(this),arguments)},map:function(t){return xt(Ot(this),t,arguments.length>1?arguments[1]:void 0)},reduce:function(t){return at.apply(Ot(this),arguments)},reduceRight:function(t){return ct.apply(Ot(this),arguments)},reverse:function(){for(var t,n=this,r=Ot(n).length,e=Math.floor(r/2),o=0;o1?arguments[1]:void 0)},sort:function(t){return ft.call(Ot(this),t)},subarray:function(t,n){var r=Ot(this),e=r.length,o=g(t,e);return new(N(r,r[gt]))(r.buffer,r.byteOffset+o*r.BYTES_PER_ELEMENT,d((void 0===n?e:g(n,e))-o))}},kt=function(t,n){return At(this,lt.call(Ot(this),t,n))},Rt=function(t){Ot(this);var n=Et(arguments[1],1),r=this.length,e=S(t),o=d(e.length),i=0;if(o+n>r)throw G("Wrong length!");for(;i255?255:255&e),o.v[p](r*n+o.o,e,St)},M=function(t,n){V(t,n,{get:function(){return A(this,n)},set:function(t){return j(this,n,t)},enumerable:!0})};b?(v=r(function(t,r,e,o){f(t,v,s,"_d");var i,u,a,c,l=0,p=0;if(x(r)){if(!(r instanceof Y||"ArrayBuffer"==(c=w(r))||"SharedArrayBuffer"==c))return bt in r?jt(v,r):Tt.call(v,r);i=r,p=Et(e,n);var g=r.byteLength;if(void 0===o){if(g%n)throw G("Wrong length!");if((u=g-p)<0)throw G("Wrong length!")}else if((u=d(o)*n)+p>g)throw G("Wrong length!");a=u/n}else a=y(r),u=a*n,i=new Y(u);for(h(t,"_d",{b:i,o:p,l:u,e:a,v:new $(i)});ldocument.F=Object<\/script>"),t.close(),c=t.F;e--;)delete c.prototype[i[e]];return c()};t.exports=Object.create||function(t,n){var r;return null!==t?(a.prototype=e(t),r=new a,a.prototype=null,r[u]=t):r=c(),void 0===n?r:o(r,n)}},function(t,n,r){var e=r(98),o=r(70).concat("length","prototype");n.f=Object.getOwnPropertyNames||function(t){return e(t,o)}},function(t,n,r){"use strict";var e=r(2),o=r(8),i=r(7),u=r(5)("species");t.exports=function(t){var n=e[t];i&&n&&!n[u]&&o.f(n,u,{configurable:!0,get:function(){return this}})}},function(t,n){t.exports=function(t,n,r,e){if(!(t instanceof n)||void 0!==e&&e in t)throw TypeError(r+": incorrect invocation!");return t}},function(t,n,r){var e=r(19),o=r(111),i=r(82),u=r(1),a=r(6),c=r(84),s={},f={},n=t.exports=function(t,n,r,l,h){var p,v,d,y,g=h?function(){return t}:c(t),m=e(r,l,n?2:1),b=0;if("function"!=typeof g)throw TypeError(t+" is not iterable!");if(i(g)){for(p=a(t.length);p>b;b++)if((y=n?m(u(v=t[b])[0],v[1]):m(t[b]))===s||y===f)return y}else for(d=g.call(t);!(v=d.next()).done;)if((y=o(d,m,v.value,n))===s||y===f)return y};n.BREAK=s,n.RETURN=f},function(t,n,r){var e=r(12);t.exports=function(t,n,r){for(var o in n)e(t,o,n[o],r);return t}},function(t,n,r){var e=r(4);t.exports=function(t,n){if(!e(t)||t._t!==n)throw TypeError("Incompatible receiver, "+n+" required!");return t}},function(t,n){var r;r=function(){return this}();try{r=r||Function("return this")()||(0,eval)("this")}catch(t){"object"==typeof window&&(r=window)}t.exports=r},function(t,n,r){var e=r(8).f,o=r(14),i=r(5)("toStringTag");t.exports=function(t,n,r){t&&!o(t=r?t:t.prototype,i)&&e(t,i,{configurable:!0,value:n})}},function(t,n,r){var e=r(20),o=r(5)("toStringTag"),i="Arguments"==e(function(){return arguments}()),u=function(t,n){try{return t[n]}catch(t){}};t.exports=function(t){var n,r,a;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(r=u(n=Object(t),o))?r:i?e(n):"Object"==(a=e(n))&&"function"==typeof n.callee?"Arguments":a}},function(t,n,r){var e=r(0),o=r(24),i=r(3),u=r(73),a="["+u+"]",c="​…",s=RegExp("^"+a+a+"*"),f=RegExp(a+a+"*$"),l=function(t,n,r){var o={},a=i(function(){return!!u[t]()||c[t]()!=c}),s=o[t]=a?n(h):u[t];r&&(o[r]=s),e(e.P+e.F*a,"String",o)},h=l.trim=function(t,n){return t=String(o(t)),1&n&&(t=t.replace(s,"")),2&n&&(t=t.replace(f,"")),t};t.exports=l},function(t,n){t.exports={}},function(t,n,r){var e=r(18),o=r(2),i=o["__core-js_shared__"]||(o["__core-js_shared__"]={});(t.exports=function(t,n){return i[t]||(i[t]=void 0!==n?n:{})})("versions",[]).push({version:e.version,mode:r(29)?"pure":"global",copyright:"© 2019 Denis Pushkarev (zloirock.ru)"})},function(t,n,r){var e=r(20);t.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==e(t)?t.split(""):Object(t)}},function(t,n){n.f={}.propertyIsEnumerable},function(t,n,r){"use strict";var e=r(1);t.exports=function(){var t=e(this),n="";return t.global&&(n+="g"),t.ignoreCase&&(n+="i"),t.multiline&&(n+="m"),t.unicode&&(n+="u"),t.sticky&&(n+="y"),n}},function(t,n,r){var e=r(1),o=r(10),i=r(5)("species");t.exports=function(t,n){var r,u=e(t).constructor;return void 0===u||void 0==(r=e(u)[i])?n:o(r)}},function(t,n,r){var e=r(15),o=r(6),i=r(35);t.exports=function(t){return function(n,r,u){var a,c=e(n),s=o(c.length),f=i(u,s);if(t&&r!=r){for(;s>f;)if((a=c[f++])!=a)return!0}else for(;s>f;f++)if((t||f in c)&&c[f]===r)return t||f||0;return!t&&-1}}},function(t,n){n.f=Object.getOwnPropertySymbols},function(t,n,r){var e=r(20);t.exports=Array.isArray||function(t){return"Array"==e(t)}},function(t,n,r){var e=r(21),o=r(24);t.exports=function(t){return function(n,r){var i,u,a=String(o(n)),c=e(r),s=a.length;return c<0||c>=s?t?"":void 0:(i=a.charCodeAt(c),i<55296||i>56319||c+1===s||(u=a.charCodeAt(c+1))<56320||u>57343?t?a.charAt(c):i:t?a.slice(c,c+2):u-56320+(i-55296<<10)+65536)}}},function(t,n,r){var e=r(4),o=r(20),i=r(5)("match");t.exports=function(t){var n;return e(t)&&(void 0!==(n=t[i])?!!n:"RegExp"==o(t))}},function(t,n,r){var e=r(5)("iterator"),o=!1;try{var i=[7][e]();i.return=function(){o=!0},Array.from(i,function(){throw 2})}catch(t){}t.exports=function(t,n){if(!n&&!o)return!1;var r=!1;try{var i=[7],u=i[e]();u.next=function(){return{done:r=!0}},i[e]=function(){return u},t(i)}catch(t){}return r}},function(t,n,r){"use strict";var e=r(45),o=RegExp.prototype.exec;t.exports=function(t,n){var r=t.exec;if("function"==typeof r){var i=r.call(t,n);if("object"!=typeof i)throw new TypeError("RegExp exec method returned something other than an Object or null");return i}if("RegExp"!==e(t))throw new TypeError("RegExp#exec called on incompatible receiver");return o.call(t,n)}},function(t,n,r){"use strict";r(115);var e=r(12),o=r(11),i=r(3),u=r(24),a=r(5),c=r(88),s=a("species"),f=!i(function(){var t=/./;return t.exec=function(){var t=[];return t.groups={a:"7"},t},"7"!=="".replace(t,"$")}),l=function(){var t=/(?:)/,n=t.exec;t.exec=function(){return n.apply(this,arguments)};var r="ab".split(t);return 2===r.length&&"a"===r[0]&&"b"===r[1]}();t.exports=function(t,n,r){var h=a(t),p=!i(function(){var n={};return n[h]=function(){return 7},7!=""[t](n)}),v=p?!i(function(){var n=!1,r=/a/;return r.exec=function(){return n=!0,null},"split"===t&&(r.constructor={},r.constructor[s]=function(){return r}),r[h](""),!n}):void 0;if(!p||!v||"replace"===t&&!f||"split"===t&&!l){var d=/./[h],y=r(u,h,""[t],function(t,n,r,e,o){return n.exec===c?p&&!o?{done:!0,value:d.call(n,r,e)}:{done:!0,value:t.call(r,n,e)}:{done:!1}}),g=y[0],m=y[1];e(String.prototype,t,g),o(RegExp.prototype,h,2==n?function(t,n){return m.call(t,this,n)}:function(t){return m.call(t,this)})}}},function(t,n,r){var e=r(2),o=e.navigator;t.exports=o&&o.userAgent||""},function(t,n,r){"use strict";var e=r(2),o=r(0),i=r(12),u=r(41),a=r(30),c=r(40),s=r(39),f=r(4),l=r(3),h=r(58),p=r(44),v=r(74);t.exports=function(t,n,r,d,y,g){var m=e[t],b=m,w=y?"set":"add",x=b&&b.prototype,S={},_=function(t){var n=x[t];i(x,t,"delete"==t?function(t){return!(g&&!f(t))&&n.call(this,0===t?0:t)}:"has"==t?function(t){return!(g&&!f(t))&&n.call(this,0===t?0:t)}:"get"==t?function(t){return g&&!f(t)?void 0:n.call(this,0===t?0:t)}:"add"==t?function(t){return n.call(this,0===t?0:t),this}:function(t,r){return n.call(this,0===t?0:t,r),this})};if("function"==typeof b&&(g||x.forEach&&!l(function(){(new b).entries().next()}))){var E=new b,O=E[w](g?{}:-0,1)!=E,P=l(function(){E.has(1)}),A=h(function(t){new b(t)}),j=!g&&l(function(){for(var t=new b,n=5;n--;)t[w](n,n);return!t.has(-0)});A||(b=n(function(n,r){s(n,b,t);var e=v(new m,n,b);return void 0!=r&&c(r,y,e[w],e),e}),b.prototype=x,x.constructor=b),(P||j)&&(_("delete"),_("has"),y&&_("get")),(j||O)&&_(w),g&&x.clear&&delete x.clear}else b=d.getConstructor(n,t,y,w),u(b.prototype,r),a.NEED=!0;return p(b,t),S[t]=b,o(o.G+o.W+o.F*(b!=m),S),g||d.setStrong(b,t,y),b}},function(t,n,r){for(var e,o=r(2),i=r(11),u=r(33),a=u("typed_array"),c=u("view"),s=!(!o.ArrayBuffer||!o.DataView),f=s,l=0,h="Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array".split(",");l<9;)(e=o[h[l++]])?(i(e.prototype,a,!0),i(e.prototype,c,!0)):f=!1;t.exports={ABV:s,CONSTR:f,TYPED:a,VIEW:c}},function(t,n,r){"use strict";t.exports=r(29)||!r(3)(function(){var t=Math.random();__defineSetter__.call(null,t,function(){}),delete r(2)[t]})},function(t,n,r){"use strict";var e=r(0);t.exports=function(t){e(e.S,t,{of:function(){for(var t=arguments.length,n=new Array(t);t--;)n[t]=arguments[t];return new this(n)}})}},function(t,n,r){"use strict";var e=r(0),o=r(10),i=r(19),u=r(40);t.exports=function(t){e(e.S,t,{from:function(t){var n,r,e,a,c=arguments[1];return o(this),n=void 0!==c,n&&o(c),void 0==t?new this:(r=[],n?(e=0,a=i(c,arguments[2],2),u(t,!1,function(t){r.push(a(t,e++))})):u(t,!1,r.push,r),new this(r))}})}},function(t,n,r){var e=r(4),o=r(2).document,i=e(o)&&e(o.createElement);t.exports=function(t){return i?o.createElement(t):{}}},function(t,n,r){var e=r(2),o=r(18),i=r(29),u=r(97),a=r(8).f;t.exports=function(t){var n=o.Symbol||(o.Symbol=i?{}:e.Symbol||{});"_"==t.charAt(0)||t in n||a(n,t,{value:u.f(t)})}},function(t,n,r){var e=r(48)("keys"),o=r(33);t.exports=function(t){return e[t]||(e[t]=o(t))}},function(t,n){t.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(t,n,r){var e=r(2).document;t.exports=e&&e.documentElement},function(t,n,r){var e=r(4),o=r(1),i=function(t,n){if(o(t),!e(n)&&null!==n)throw TypeError(n+": can't set as prototype!")};t.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(t,n,e){try{e=r(19)(Function.call,r(16).f(Object.prototype,"__proto__").set,2),e(t,[]),n=!(t instanceof Array)}catch(t){n=!0}return function(t,r){return i(t,r),n?t.__proto__=r:e(t,r),t}}({},!1):void 0),check:i}},function(t,n){t.exports="\t\n\v\f\r   ᠎              \u2028\u2029\ufeff"},function(t,n,r){var e=r(4),o=r(72).set;t.exports=function(t,n,r){var i,u=n.constructor;return u!==r&&"function"==typeof u&&(i=u.prototype)!==r.prototype&&e(i)&&o&&o(t,i),t}},function(t,n,r){"use strict";var e=r(21),o=r(24);t.exports=function(t){var n=String(o(this)),r="",i=e(t);if(i<0||i==1/0)throw RangeError("Count can't be negative");for(;i>0;(i>>>=1)&&(n+=n))1&i&&(r+=n);return r}},function(t,n){t.exports=Math.sign||function(t){return 0==(t=+t)||t!=t?t:t<0?-1:1}},function(t,n){var r=Math.expm1;t.exports=!r||r(10)>22025.465794806718||r(10)<22025.465794806718||-2e-17!=r(-2e-17)?function(t){return 0==(t=+t)?t:t>-1e-6&&t<1e-6?t+t*t/2:Math.exp(t)-1}:r},function(t,n,r){"use strict";var e=r(29),o=r(0),i=r(12),u=r(11),a=r(47),c=r(79),s=r(44),f=r(17),l=r(5)("iterator"),h=!([].keys&&"next"in[].keys()),p=function(){return this};t.exports=function(t,n,r,v,d,y,g){c(r,n,v);var m,b,w,x=function(t){if(!h&&t in O)return O[t];switch(t){case"keys":case"values":return function(){return new r(this,t)}}return function(){return new r(this,t)}},S=n+" Iterator",_="values"==d,E=!1,O=t.prototype,P=O[l]||O["@@iterator"]||d&&O[d],A=P||x(d),j=d?_?x("entries"):A:void 0,M="Array"==n?O.entries||P:P;if(M&&(w=f(M.call(new t)))!==Object.prototype&&w.next&&(s(w,S,!0),e||"function"==typeof w[l]||u(w,l,p)),_&&P&&"values"!==P.name&&(E=!0,A=function(){return P.call(this)}),e&&!g||!h&&!E&&O[l]||u(O,l,A),a[n]=A,a[S]=p,d)if(m={values:_?A:x("values"),keys:y?A:x("keys"),entries:j},g)for(b in m)b in O||i(O,b,m[b]);else o(o.P+o.F*(h||E),n,m);return m}},function(t,n,r){"use strict";var e=r(36),o=r(32),i=r(44),u={};r(11)(u,r(5)("iterator"),function(){return this}),t.exports=function(t,n,r){t.prototype=e(u,{next:o(1,r)}),i(t,n+" Iterator")}},function(t,n,r){var e=r(57),o=r(24);t.exports=function(t,n,r){if(e(n))throw TypeError("String#"+r+" doesn't accept regex!");return String(o(t))}},function(t,n,r){var e=r(5)("match");t.exports=function(t){var n=/./;try{"/./"[t](n)}catch(r){try{return n[e]=!1,!"/./"[t](n)}catch(t){}}return!0}},function(t,n,r){var e=r(47),o=r(5)("iterator"),i=Array.prototype;t.exports=function(t){return void 0!==t&&(e.Array===t||i[o]===t)}},function(t,n,r){"use strict";var e=r(8),o=r(32);t.exports=function(t,n,r){n in t?e.f(t,n,o(0,r)):t[n]=r}},function(t,n,r){var e=r(45),o=r(5)("iterator"),i=r(47);t.exports=r(18).getIteratorMethod=function(t){if(void 0!=t)return t[o]||t["@@iterator"]||i[e(t)]}},function(t,n,r){var e=r(228);t.exports=function(t,n){return new(e(t))(n)}},function(t,n,r){"use strict";var e=r(9),o=r(35),i=r(6);t.exports=function(t){for(var n=e(this),r=i(n.length),u=arguments.length,a=o(u>1?arguments[1]:void 0,r),c=u>2?arguments[2]:void 0,s=void 0===c?r:o(c,r);s>a;)n[a++]=t;return n}},function(t,n,r){"use strict";var e=r(31),o=r(114),i=r(47),u=r(15);t.exports=r(78)(Array,"Array",function(t,n){this._t=u(t),this._i=0,this._k=n},function(){var t=this._t,n=this._k,r=this._i++;return!t||r>=t.length?(this._t=void 0,o(1)):"keys"==n?o(0,r):"values"==n?o(0,t[r]):o(0,[r,t[r]])},"values"),i.Arguments=i.Array,e("keys"),e("values"),e("entries")},function(t,n,r){"use strict";var e=r(51),o=RegExp.prototype.exec,i=String.prototype.replace,u=o,a=function(){var t=/a/,n=/b*/g;return o.call(t,"a"),o.call(n,"a"),0!==t.lastIndex||0!==n.lastIndex}(),c=void 0!==/()??/.exec("")[1];(a||c)&&(u=function(t){var n,r,u,s,f=this;return c&&(r=new RegExp("^"+f.source+"$(?!\\s)",e.call(f))),a&&(n=f.lastIndex),u=o.call(f,t),a&&u&&(f.lastIndex=f.global?u.index+u[0].length:n),c&&u&&u.length>1&&i.call(u[0],r,function(){for(s=1;sr;)n.push(arguments[r++]);return g[++y]=function(){a("function"==typeof t?t:Function(t),n)},e(y),y},p=function(t){delete g[t]},"process"==r(20)(l)?e=function(t){l.nextTick(u(m,t,1))}:d&&d.now?e=function(t){d.now(u(m,t,1))}:v?(o=new v,i=o.port2,o.port1.onmessage=b,e=u(i.postMessage,i,1)):f.addEventListener&&"function"==typeof postMessage&&!f.importScripts?(e=function(t){f.postMessage(t+"","*")},f.addEventListener("message",b,!1)):e="onreadystatechange"in s("script")?function(t){c.appendChild(s("script")).onreadystatechange=function(){c.removeChild(this),m.call(t)}}:function(t){setTimeout(u(m,t,1),0)}),t.exports={set:h,clear:p}},function(t,n,r){var e=r(2),o=r(90).set,i=e.MutationObserver||e.WebKitMutationObserver,u=e.process,a=e.Promise,c="process"==r(20)(u);t.exports=function(){var t,n,r,s=function(){var e,o;for(c&&(e=u.domain)&&e.exit();t;){o=t.fn,t=t.next;try{o()}catch(e){throw t?r():n=void 0,e}}n=void 0,e&&e.enter()};if(c)r=function(){u.nextTick(s)};else if(!i||e.navigator&&e.navigator.standalone)if(a&&a.resolve){var f=a.resolve(void 0);r=function(){f.then(s)}}else r=function(){o.call(e,s)};else{var l=!0,h=document.createTextNode("");new i(s).observe(h,{characterData:!0}),r=function(){h.data=l=!l}}return function(e){var o={fn:e,next:void 0};n&&(n.next=o),t||(t=o,r()),n=o}}},function(t,n,r){"use strict";function e(t){var n,r;this.promise=new t(function(t,e){if(void 0!==n||void 0!==r)throw TypeError("Bad Promise constructor");n=t,r=e}),this.resolve=o(n),this.reject=o(r)}var o=r(10);t.exports.f=function(t){return new e(t)}},function(t,n,r){"use strict";function e(t,n,r){var e,o,i,u=new Array(r),a=8*r-n-1,c=(1<>1,f=23===n?U(2,-24)-U(2,-77):0,l=0,h=t<0||0===t&&1/t<0?1:0;for(t=D(t),t!=t||t===k?(o=t!=t?1:0,e=c):(e=C(B(t)/V),t*(i=U(2,-e))<1&&(e--,i*=2),t+=e+s>=1?f/i:f*U(2,1-s),t*i>=2&&(e++,i/=2),e+s>=c?(o=0,e=c):e+s>=1?(o=(t*i-1)*U(2,n),e+=s):(o=t*U(2,s-1)*U(2,n),e=0));n>=8;u[l++]=255&o,o/=256,n-=8);for(e=e<0;u[l++]=255&e,e/=256,a-=8);return u[--l]|=128*h,u}function o(t,n,r){var e,o=8*r-n-1,i=(1<>1,a=o-7,c=r-1,s=t[c--],f=127&s;for(s>>=7;a>0;f=256*f+t[c],c--,a-=8);for(e=f&(1<<-a)-1,f>>=-a,a+=n;a>0;e=256*e+t[c],c--,a-=8);if(0===f)f=1-u;else{if(f===i)return e?NaN:s?-k:k;e+=U(2,n),f-=u}return(s?-1:1)*e*U(2,f-n)}function i(t){return t[3]<<24|t[2]<<16|t[1]<<8|t[0]}function u(t){return[255&t]}function a(t){return[255&t,t>>8&255]}function c(t){return[255&t,t>>8&255,t>>16&255,t>>24&255]}function s(t){return e(t,52,8)}function f(t){return e(t,23,4)}function l(t,n,r){P(t[M],n,{get:function(){return this[r]}})}function h(t,n,r,e){var o=+r,i=E(o);if(i+n>t[G])throw L(T);var u=t[W]._b,a=i+t[q],c=u.slice(a,a+n);return e?c:c.reverse()}function p(t,n,r,e,o,i){var u=+r,a=E(u);if(a+n>t[G])throw L(T);for(var c=t[W]._b,s=a+t[q],f=e(+o),l=0;l$;)(H=Y[$++])in F||m(F,H,R[H]);y||(z.constructor=F)}var J=new N(new F(2)),K=N[M].setInt8;J.setInt8(0,2147483648),J.setInt8(1,2147483649),!J.getInt8(0)&&J.getInt8(1)||b(N[M],{setInt8:function(t,n){K.call(this,t,n<<24>>24)},setUint8:function(t,n){K.call(this,t,n<<24>>24)}},!0)}else F=function(t){x(this,F,"ArrayBuffer");var n=E(t);this._b=A.call(new Array(n),0),this[G]=n},N=function(t,n,r){x(this,N,"DataView"),x(t,F,"DataView");var e=t[G],o=S(n);if(o<0||o>e)throw L("Wrong offset!");if(r=void 0===r?e-o:_(r),o+r>e)throw L("Wrong length!");this[W]=t,this[q]=o,this[G]=r},d&&(l(F,"byteLength","_l"),l(N,"buffer","_b"),l(N,"byteLength","_l"),l(N,"byteOffset","_o")),b(N[M],{getInt8:function(t){return h(this,1,t)[0]<<24>>24},getUint8:function(t){return h(this,1,t)[0]},getInt16:function(t){var n=h(this,2,t,arguments[1]);return(n[1]<<8|n[0])<<16>>16},getUint16:function(t){var n=h(this,2,t,arguments[1]);return n[1]<<8|n[0]},getInt32:function(t){return i(h(this,4,t,arguments[1]))},getUint32:function(t){return i(h(this,4,t,arguments[1]))>>>0},getFloat32:function(t){return o(h(this,4,t,arguments[1]),23,4)},getFloat64:function(t){return o(h(this,8,t,arguments[1]),52,8)},setInt8:function(t,n){p(this,1,t,u,n)},setUint8:function(t,n){p(this,1,t,u,n)},setInt16:function(t,n){p(this,2,t,a,n,arguments[2])},setUint16:function(t,n){p(this,2,t,a,n,arguments[2])},setInt32:function(t,n){p(this,4,t,c,n,arguments[2])},setUint32:function(t,n){p(this,4,t,c,n,arguments[2])},setFloat32:function(t,n){p(this,4,t,f,n,arguments[2])},setFloat64:function(t,n){p(this,8,t,s,n,arguments[2])}});j(F,"ArrayBuffer"),j(N,"DataView"),m(N[M],g.VIEW,!0),n.ArrayBuffer=F,n.DataView=N},function(t,n){function r(t){var n=typeof t;return null!=t&&("object"==n||"function"==n)}t.exports=r},function(t,n){function r(){throw new Error("setTimeout has not been defined")}function e(){throw new Error("clearTimeout has not been defined")}function o(t){if(f===setTimeout)return setTimeout(t,0);if((f===r||!f)&&setTimeout)return f=setTimeout,setTimeout(t,0);try{return f(t,0)}catch(n){try{return f.call(null,t,0)}catch(n){return f.call(this,t,0)}}}function i(t){if(l===clearTimeout)return clearTimeout(t);if((l===e||!l)&&clearTimeout)return l=clearTimeout,clearTimeout(t);try{return l(t)}catch(n){try{return l.call(null,t)}catch(n){return l.call(this,t)}}}function u(){d&&p&&(d=!1,p.length?v=p.concat(v):y=-1,v.length&&a())}function a(){if(!d){var t=o(u);d=!0;for(var n=v.length;n;){for(p=v,v=[];++y1)for(var r=1;rc;)e(a,r=n[c++])&&(~i(s,r)||s.push(r));return s}},function(t,n,r){var e=r(8),o=r(1),i=r(34);t.exports=r(7)?Object.defineProperties:function(t,n){o(t);for(var r,u=i(n),a=u.length,c=0;a>c;)e.f(t,r=u[c++],n[r]);return t}},function(t,n,r){var e=r(15),o=r(37).f,i={}.toString,u="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],a=function(t){try{return o(t)}catch(t){return u.slice()}};t.exports.f=function(t){return u&&"[object Window]"==i.call(t)?a(t):o(e(t))}},function(t,n,r){"use strict";var e=r(7),o=r(34),i=r(54),u=r(50),a=r(9),c=r(49),s=Object.assign;t.exports=!s||r(3)(function(){var t={},n={},r=Symbol(),e="abcdefghijklmnopqrst";return t[r]=7,e.split("").forEach(function(t){n[t]=t}),7!=s({},t)[r]||Object.keys(s({},n)).join("")!=e})?function(t,n){for(var r=a(t),s=arguments.length,f=1,l=i.f,h=u.f;s>f;)for(var p,v=c(arguments[f++]),d=l?o(v).concat(l(v)):o(v),y=d.length,g=0;y>g;)p=d[g++],e&&!h.call(v,p)||(r[p]=v[p]);return r}:s},function(t,n){t.exports=Object.is||function(t,n){return t===n?0!==t||1/t==1/n:t!=t&&n!=n}},function(t,n,r){"use strict";var e=r(10),o=r(4),i=r(104),u=[].slice,a={},c=function(t,n,r){if(!(n in a)){for(var e=[],o=0;o>>0||(u.test(r)?16:10))}:e},function(t,n,r){var e=r(2).parseFloat,o=r(46).trim;t.exports=1/e(r(73)+"-0")!=-1/0?function(t){var n=o(String(t),3),r=e(n);return 0===r&&"-"==n.charAt(0)?-0:r}:e},function(t,n,r){var e=r(20);t.exports=function(t,n){if("number"!=typeof t&&"Number"!=e(t))throw TypeError(n);return+t}},function(t,n,r){var e=r(4),o=Math.floor;t.exports=function(t){return!e(t)&&isFinite(t)&&o(t)===t}},function(t,n){t.exports=Math.log1p||function(t){return(t=+t)>-1e-8&&t<1e-8?t-t*t/2:Math.log(1+t)}},function(t,n,r){var e=r(76),o=Math.pow,i=o(2,-52),u=o(2,-23),a=o(2,127)*(2-u),c=o(2,-126),s=function(t){return t+1/i-1/i};t.exports=Math.fround||function(t){var n,r,o=Math.abs(t),f=e(t);return oa||r!=r?f*(1/0):f*r)}},function(t,n,r){var e=r(1);t.exports=function(t,n,r,o){try{return o?n(e(r)[0],r[1]):n(r)}catch(n){var i=t.return;throw void 0!==i&&e(i.call(t)),n}}},function(t,n,r){var e=r(10),o=r(9),i=r(49),u=r(6);t.exports=function(t,n,r,a,c){e(n);var s=o(t),f=i(s),l=u(s.length),h=c?l-1:0,p=c?-1:1;if(r<2)for(;;){if(h in f){a=f[h],h+=p;break}if(h+=p,c?h<0:l<=h)throw TypeError("Reduce of empty array with no initial value")}for(;c?h>=0:l>h;h+=p)h in f&&(a=n(a,f[h],h,s));return a}},function(t,n,r){"use strict";var e=r(9),o=r(35),i=r(6);t.exports=[].copyWithin||function(t,n){var r=e(this),u=i(r.length),a=o(t,u),c=o(n,u),s=arguments.length>2?arguments[2]:void 0,f=Math.min((void 0===s?u:o(s,u))-c,u-a),l=1;for(c0;)c in r?r[a]=r[c]:delete r[a],a+=l,c+=l;return r}},function(t,n){t.exports=function(t,n){return{value:n,done:!!t}}},function(t,n,r){"use strict";var e=r(88);r(0)({target:"RegExp",proto:!0,forced:e!==/./.exec},{exec:e})},function(t,n,r){r(7)&&"g"!=/./g.flags&&r(8).f(RegExp.prototype,"flags",{configurable:!0,get:r(51)})},function(t,n){t.exports=function(t){try{return{e:!1,v:t()}}catch(t){return{e:!0,v:t}}}},function(t,n,r){var e=r(1),o=r(4),i=r(92);t.exports=function(t,n){if(e(t),o(n)&&n.constructor===t)return n;var r=i.f(t);return(0,r.resolve)(n),r.promise}},function(t,n,r){"use strict";var e=r(120),o=r(42);t.exports=r(62)("Map",function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},{get:function(t){var n=e.getEntry(o(this,"Map"),t);return n&&n.v},set:function(t,n){return e.def(o(this,"Map"),0===t?0:t,n)}},e,!0)},function(t,n,r){"use strict";var e=r(8).f,o=r(36),i=r(41),u=r(19),a=r(39),c=r(40),s=r(78),f=r(114),l=r(38),h=r(7),p=r(30).fastKey,v=r(42),d=h?"_s":"size",y=function(t,n){var r,e=p(n);if("F"!==e)return t._i[e];for(r=t._f;r;r=r.n)if(r.k==n)return r};t.exports={getConstructor:function(t,n,r,s){var f=t(function(t,e){a(t,f,n,"_i"),t._t=n,t._i=o(null),t._f=void 0,t._l=void 0,t[d]=0,void 0!=e&&c(e,r,t[s],t)});return i(f.prototype,{clear:function(){for(var t=v(this,n),r=t._i,e=t._f;e;e=e.n)e.r=!0,e.p&&(e.p=e.p.n=void 0),delete r[e.i];t._f=t._l=void 0,t[d]=0},delete:function(t){var r=v(this,n),e=y(r,t);if(e){var o=e.n,i=e.p;delete r._i[e.i],e.r=!0,i&&(i.n=o),o&&(o.p=i),r._f==e&&(r._f=o),r._l==e&&(r._l=i),r[d]--}return!!e},forEach:function(t){v(this,n);for(var r,e=u(t,arguments.length>1?arguments[1]:void 0,3);r=r?r.n:this._f;)for(e(r.v,r.k,this);r&&r.r;)r=r.p},has:function(t){return!!y(v(this,n),t)}}),h&&e(f.prototype,"size",{get:function(){return v(this,n)[d]}}),f},def:function(t,n,r){var e,o,i=y(t,n);return i?i.v=r:(t._l=i={i:o=p(n,!0),k:n,v:r,p:e=t._l,n:void 0,r:!1},t._f||(t._f=i),e&&(e.n=i),t[d]++,"F"!==o&&(t._i[o]=i)),t},getEntry:y,setStrong:function(t,n,r){s(t,n,function(t,r){this._t=v(t,n),this._k=r,this._l=void 0},function(){for(var t=this,n=t._k,r=t._l;r&&r.r;)r=r.p;return t._t&&(t._l=r=r?r.n:t._t._f)?"keys"==n?f(0,r.k):"values"==n?f(0,r.v):f(0,[r.k,r.v]):(t._t=void 0,f(1))},r?"entries":"values",!r,!0),l(n)}}},function(t,n,r){"use strict";var e=r(120),o=r(42);t.exports=r(62)("Set",function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},{add:function(t){return e.def(o(this,"Set"),t=0===t?0:t,t)}},e)},function(t,n,r){"use strict";var e,o=r(2),i=r(26)(0),u=r(12),a=r(30),c=r(101),s=r(123),f=r(4),l=r(42),h=r(42),p=!o.ActiveXObject&&"ActiveXObject"in o,v=a.getWeak,d=Object.isExtensible,y=s.ufstore,g=function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},m={get:function(t){if(f(t)){var n=v(t);return!0===n?y(l(this,"WeakMap")).get(t):n?n[this._i]:void 0}},set:function(t,n){return s.def(l(this,"WeakMap"),t,n)}},b=t.exports=r(62)("WeakMap",g,m,s,!0,!0);h&&p&&(e=s.getConstructor(g,"WeakMap"),c(e.prototype,m),a.NEED=!0,i(["delete","has","get","set"],function(t){var n=b.prototype,r=n[t];u(n,t,function(n,o){if(f(n)&&!d(n)){this._f||(this._f=new e);var i=this._f[t](n,o);return"set"==t?this:i}return r.call(this,n,o)})}))},function(t,n,r){"use strict";var e=r(41),o=r(30).getWeak,i=r(1),u=r(4),a=r(39),c=r(40),s=r(26),f=r(14),l=r(42),h=s(5),p=s(6),v=0,d=function(t){return t._l||(t._l=new y)},y=function(){this.a=[]},g=function(t,n){return h(t.a,function(t){return t[0]===n})};y.prototype={get:function(t){var n=g(this,t);if(n)return n[1]},has:function(t){return!!g(this,t)},set:function(t,n){var r=g(this,t);r?r[1]=n:this.a.push([t,n])},delete:function(t){var n=p(this.a,function(n){return n[0]===t});return~n&&this.a.splice(n,1),!!~n}},t.exports={getConstructor:function(t,n,r,i){var s=t(function(t,e){a(t,s,n,"_i"),t._t=n,t._i=v++,t._l=void 0,void 0!=e&&c(e,r,t[i],t)});return e(s.prototype,{delete:function(t){if(!u(t))return!1;var r=o(t);return!0===r?d(l(this,n)).delete(t):r&&f(r,this._i)&&delete r[this._i]},has:function(t){if(!u(t))return!1;var r=o(t);return!0===r?d(l(this,n)).has(t):r&&f(r,this._i)}}),s},def:function(t,n,r){var e=o(i(n),!0);return!0===e?d(t).set(n,r):e[t._i]=r,t},ufstore:d}},function(t,n,r){var e=r(21),o=r(6);t.exports=function(t){if(void 0===t)return 0;var n=e(t),r=o(n);if(n!==r)throw RangeError("Wrong length!");return r}},function(t,n,r){var e=r(37),o=r(54),i=r(1),u=r(2).Reflect;t.exports=u&&u.ownKeys||function(t){var n=e.f(i(t)),r=o.f;return r?n.concat(r(t)):n}},function(t,n,r){"use strict";function e(t,n,r,s,f,l,h,p){for(var v,d,y=f,g=0,m=!!h&&a(h,p,3);g0)y=e(t,n,v,u(v.length),y,l-1)-1;else{if(y>=9007199254740991)throw TypeError();t[y]=v}y++}g++}return y}var o=r(55),i=r(4),u=r(6),a=r(19),c=r(5)("isConcatSpreadable");t.exports=e},function(t,n,r){var e=r(6),o=r(75),i=r(24);t.exports=function(t,n,r,u){var a=String(i(t)),c=a.length,s=void 0===r?" ":String(r),f=e(n);if(f<=c||""==s)return a;var l=f-c,h=o.call(s,Math.ceil(l/s.length));return h.length>l&&(h=h.slice(0,l)),u?h+a:a+h}},function(t,n,r){var e=r(7),o=r(34),i=r(15),u=r(50).f;t.exports=function(t){return function(n){for(var r,a=i(n),c=o(a),s=c.length,f=0,l=[];s>f;)r=c[f++],e&&!u.call(a,r)||l.push(t?[r,a[r]]:a[r]);return l}}},function(t,n,r){var e=r(45),o=r(130);t.exports=function(t){return function(){if(e(this)!=t)throw TypeError(t+"#toJSON isn't generic");return o(this)}}},function(t,n,r){var e=r(40);t.exports=function(t,n){var r=[];return e(t,!1,r.push,r,n),r}},function(t,n){t.exports=Math.scale||function(t,n,r,e,o){return 0===arguments.length||t!=t||n!=n||r!=r||e!=e||o!=o?NaN:t===1/0||t===-1/0?t:(t-n)*(o-e)/(r-n)+e}},function(t,n,r){var e=r(344),o="object"==typeof self&&self&&self.Object===Object&&self,i=e||o||Function("return this")();t.exports=i},function(t,n,r){var e=r(132),o=e.Symbol;t.exports=o},function(t,n,r){"use strict";function e(t){try{return decodeURIComponent(t.replace(/\+/g," "))}catch(t){return null}}function o(t){try{return encodeURIComponent(t)}catch(t){return null}}function i(t){for(var n,r=/([^=?#&]+)=?([^&]*)/g,o={};n=r.exec(t);){var i=e(n[1]),u=e(n[2]);null===i||null===u||i in o||(o[i]=u)}return o}function u(t,n){n=n||"";var r,e,i=[];"string"!=typeof n&&(n="?");for(e in t)if(c.call(t,e)){if(r=t[e],r||null!==r&&r!==a&&!isNaN(r)||(r=""),e=o(e),r=o(r),null===e||null===r)continue;i.push(e+"="+r)}return i.length?n+i.join("&"):""}var a,c=Object.prototype.hasOwnProperty;n.stringify=u,n.parse=i},function(t,n,r){"use strict";function e(t){return t&&t.__esModule?t:{default:t}}function o(t){if(Array.isArray(t)){for(var n=0,r=Array(t.length);no;)J(t,r=e[o++],n[r]);return t},X=function(t,n){return void 0===n?E(t):K(E(t),n)},Z=function(t){var n=U.call(this,t=S(t,!0));return!(this===W&&o(B,t)&&!o(V,t))&&(!(n||!o(this,t)||!o(B,t)||o(this,R)&&this[R][t])||n)},Q=function(t,n){if(t=x(t),n=S(n,!0),t!==W||!o(B,n)||o(V,n)){var r=T(t,n);return!r||!o(B,n)||o(t,R)&&t[R][n]||(r.enumerable=!0),r}},tt=function(t){for(var n,r=N(x(t)),e=[],i=0;r.length>i;)o(B,n=r[i++])||n==R||n==c||e.push(n);return e},nt=function(t){for(var n,r=t===W,e=N(r?V:x(t)),i=[],u=0;e.length>u;)!o(B,n=e[u++])||r&&!o(W,n)||i.push(B[n]);return i};G||(I=function(){if(this instanceof I)throw TypeError("Symbol is not a constructor!");var t=h(arguments.length>0?arguments[0]:void 0),n=function(r){this===W&&n.call(V,r),o(this,R)&&o(this[R],t)&&(this[R][t]=!1),z(this,t,_(1,r))};return i&&H&&z(W,t,{configurable:!0,set:n}),Y(t)},a(I.prototype,"toString",function(){return this._k}),P.f=Q,j.f=J,r(37).f=O.f=tt,r(50).f=Z,A.f=nt,i&&!r(29)&&a(W,"propertyIsEnumerable",Z,!0),v.f=function(t){return Y(p(t))}),u(u.G+u.W+u.F*!G,{Symbol:I});for(var rt="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),et=0;rt.length>et;)p(rt[et++]);for(var ot=M(p.store),it=0;ot.length>it;)d(ot[it++]);u(u.S+u.F*!G,"Symbol",{for:function(t){return o(C,t+="")?C[t]:C[t]=I(t)},keyFor:function(t){if(!$(t))throw TypeError(t+" is not a symbol!");for(var n in C)if(C[n]===t)return n},useSetter:function(){H=!0},useSimple:function(){H=!1}}),u(u.S+u.F*!G,"Object",{create:X,defineProperty:J,defineProperties:K,getOwnPropertyDescriptor:Q,getOwnPropertyNames:tt,getOwnPropertySymbols:nt});var ut=s(function(){A.f(1)});u(u.S+u.F*ut,"Object",{getOwnPropertySymbols:function(t){return A.f(w(t))}}),L&&u(u.S+u.F*(!G||s(function(){var t=I();return"[null]"!=k([t])||"{}"!=k({a:t})||"{}"!=k(Object(t))})),"JSON",{stringify:function(t){for(var n,r,e=[t],o=1;arguments.length>o;)e.push(arguments[o++]);if(r=n=e[1],(b(n)||void 0!==t)&&!$(t))return g(n)||(n=function(t,n){if("function"==typeof r&&(n=r.call(this,t,n)),!$(n))return n}),e[1]=n,k.apply(L,e)}}),I.prototype[D]||r(11)(I.prototype,D,I.prototype.valueOf),l(I,"Symbol"),l(Math,"Math",!0),l(e.JSON,"JSON",!0)},function(t,n,r){t.exports=r(48)("native-function-to-string",Function.toString)},function(t,n,r){var e=r(34),o=r(54),i=r(50);t.exports=function(t){var n=e(t),r=o.f;if(r)for(var u,a=r(t),c=i.f,s=0;a.length>s;)c.call(t,u=a[s++])&&n.push(u);return n}},function(t,n,r){var e=r(0);e(e.S,"Object",{create:r(36)})},function(t,n,r){var e=r(0);e(e.S+e.F*!r(7),"Object",{defineProperty:r(8).f})},function(t,n,r){var e=r(0);e(e.S+e.F*!r(7),"Object",{defineProperties:r(99)})},function(t,n,r){var e=r(15),o=r(16).f;r(25)("getOwnPropertyDescriptor",function(){return function(t,n){return o(e(t),n)}})},function(t,n,r){var e=r(9),o=r(17);r(25)("getPrototypeOf",function(){return function(t){return o(e(t))}})},function(t,n,r){var e=r(9),o=r(34);r(25)("keys",function(){return function(t){return o(e(t))}})},function(t,n,r){r(25)("getOwnPropertyNames",function(){return r(100).f})},function(t,n,r){var e=r(4),o=r(30).onFreeze;r(25)("freeze",function(t){return function(n){return t&&e(n)?t(o(n)):n}})},function(t,n,r){var e=r(4),o=r(30).onFreeze;r(25)("seal",function(t){return function(n){return t&&e(n)?t(o(n)):n}})},function(t,n,r){var e=r(4),o=r(30).onFreeze;r(25)("preventExtensions",function(t){return function(n){return t&&e(n)?t(o(n)):n}})},function(t,n,r){var e=r(4);r(25)("isFrozen",function(t){return function(n){return!e(n)||!!t&&t(n)}})},function(t,n,r){var e=r(4);r(25)("isSealed",function(t){return function(n){return!e(n)||!!t&&t(n)}})},function(t,n,r){var e=r(4);r(25)("isExtensible",function(t){return function(n){return!!e(n)&&(!t||t(n))}})},function(t,n,r){var e=r(0);e(e.S+e.F,"Object",{assign:r(101)})},function(t,n,r){var e=r(0);e(e.S,"Object",{is:r(102)})},function(t,n,r){var e=r(0);e(e.S,"Object",{setPrototypeOf:r(72).set})},function(t,n,r){"use strict";var e=r(45),o={};o[r(5)("toStringTag")]="z",o+""!="[object z]"&&r(12)(Object.prototype,"toString",function(){return"[object "+e(this)+"]"},!0)},function(t,n,r){var e=r(0);e(e.P,"Function",{bind:r(103)})},function(t,n,r){var e=r(8).f,o=Function.prototype,i=/^\s*function ([^ (]*)/;"name"in o||r(7)&&e(o,"name",{configurable:!0,get:function(){try{return(""+this).match(i)[1]}catch(t){return""}}})},function(t,n,r){"use strict";var e=r(4),o=r(17),i=r(5)("hasInstance"),u=Function.prototype;i in u||r(8).f(u,i,{value:function(t){if("function"!=typeof this||!e(t))return!1;if(!e(this.prototype))return t instanceof this;for(;t=o(t);)if(this.prototype===t)return!0;return!1}})},function(t,n,r){var e=r(0),o=r(105);e(e.G+e.F*(parseInt!=o),{parseInt:o})},function(t,n,r){var e=r(0),o=r(106);e(e.G+e.F*(parseFloat!=o),{parseFloat:o})},function(t,n,r){"use strict";var e=r(2),o=r(14),i=r(20),u=r(74),a=r(23),c=r(3),s=r(37).f,f=r(16).f,l=r(8).f,h=r(46).trim,p=e.Number,v=p,d=p.prototype,y="Number"==i(r(36)(d)),g="trim"in String.prototype,m=function(t){var n=a(t,!1);if("string"==typeof n&&n.length>2){n=g?n.trim():h(n,3);var r,e,o,i=n.charCodeAt(0);if(43===i||45===i){if(88===(r=n.charCodeAt(2))||120===r)return NaN}else if(48===i){switch(n.charCodeAt(1)){case 66:case 98:e=2,o=49;break;case 79:case 111:e=8,o=55;break;default:return+n}for(var u,c=n.slice(2),s=0,f=c.length;so)return NaN;return parseInt(c,e)}}return+n};if(!p(" 0o1")||!p("0b1")||p("+0x1")){p=function(t){var n=arguments.length<1?0:t,r=this;return r instanceof p&&(y?c(function(){d.valueOf.call(r)}):"Number"!=i(r))?u(new v(m(n)),r,p):m(n)};for(var b,w=r(7)?s(v):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger".split(","),x=0;w.length>x;x++)o(v,b=w[x])&&!o(p,b)&&l(p,b,f(v,b));p.prototype=d,d.constructor=p,r(12)(e,"Number",p)}},function(t,n,r){"use strict";var e=r(0),o=r(21),i=r(107),u=r(75),a=1..toFixed,c=Math.floor,s=[0,0,0,0,0,0],f="Number.toFixed: incorrect invocation!",l=function(t,n){for(var r=-1,e=n;++r<6;)e+=t*s[r],s[r]=e%1e7,e=c(e/1e7)},h=function(t){for(var n=6,r=0;--n>=0;)r+=s[n],s[n]=c(r/t),r=r%t*1e7},p=function(){for(var t=6,n="";--t>=0;)if(""!==n||0===t||0!==s[t]){var r=String(s[t]);n=""===n?r:n+u.call("0",7-r.length)+r}return n},v=function(t,n,r){return 0===n?r:n%2==1?v(t,n-1,r*t):v(t*t,n/2,r)},d=function(t){for(var n=0,r=t;r>=4096;)n+=12,r/=4096;for(;r>=2;)n+=1,r/=2;return n};e(e.P+e.F*(!!a&&("0.000"!==8e-5.toFixed(3)||"1"!==.9.toFixed(0)||"1.25"!==1.255.toFixed(2)||"1000000000000000128"!==(0xde0b6b3a7640080).toFixed(0))||!r(3)(function(){a.call({})})),"Number",{toFixed:function(t){var n,r,e,a,c=i(this,f),s=o(t),y="",g="0";if(s<0||s>20)throw RangeError(f);if(c!=c)return"NaN";if(c<=-1e21||c>=1e21)return String(c);if(c<0&&(y="-",c=-c),c>1e-21)if(n=d(c*v(2,69,1))-69,r=n<0?c*v(2,-n,1):c/v(2,n,1),r*=4503599627370496,(n=52-n)>0){for(l(0,r),e=s;e>=7;)l(1e7,0),e-=7;for(l(v(10,e,1),0),e=n-1;e>=23;)h(1<<23),e-=23;h(1<0?(a=g.length,g=y+(a<=s?"0."+u.call("0",s-a)+g:g.slice(0,a-s)+"."+g.slice(a-s))):g=y+g,g}})},function(t,n,r){"use strict";var e=r(0),o=r(3),i=r(107),u=1..toPrecision;e(e.P+e.F*(o(function(){return"1"!==u.call(1,void 0)})||!o(function(){u.call({})})),"Number",{toPrecision:function(t){var n=i(this,"Number#toPrecision: incorrect invocation!");return void 0===t?u.call(n):u.call(n,t)}})},function(t,n,r){var e=r(0);e(e.S,"Number",{EPSILON:Math.pow(2,-52)})},function(t,n,r){var e=r(0),o=r(2).isFinite;e(e.S,"Number",{isFinite:function(t){return"number"==typeof t&&o(t)}})},function(t,n,r){var e=r(0);e(e.S,"Number",{isInteger:r(108)})},function(t,n,r){var e=r(0);e(e.S,"Number",{isNaN:function(t){return t!=t}})},function(t,n,r){var e=r(0),o=r(108),i=Math.abs;e(e.S,"Number",{isSafeInteger:function(t){return o(t)&&i(t)<=9007199254740991}})},function(t,n,r){var e=r(0);e(e.S,"Number",{MAX_SAFE_INTEGER:9007199254740991})},function(t,n,r){var e=r(0);e(e.S,"Number",{MIN_SAFE_INTEGER:-9007199254740991})},function(t,n,r){var e=r(0),o=r(106);e(e.S+e.F*(Number.parseFloat!=o),"Number",{parseFloat:o})},function(t,n,r){var e=r(0),o=r(105);e(e.S+e.F*(Number.parseInt!=o),"Number",{parseInt:o})},function(t,n,r){var e=r(0),o=r(109),i=Math.sqrt,u=Math.acosh;e(e.S+e.F*!(u&&710==Math.floor(u(Number.MAX_VALUE))&&u(1/0)==1/0),"Math",{acosh:function(t){return(t=+t)<1?NaN:t>94906265.62425156?Math.log(t)+Math.LN2:o(t-1+i(t-1)*i(t+1))}})},function(t,n,r){function e(t){return isFinite(t=+t)&&0!=t?t<0?-e(-t):Math.log(t+Math.sqrt(t*t+1)):t}var o=r(0),i=Math.asinh;o(o.S+o.F*!(i&&1/i(0)>0),"Math",{asinh:e})},function(t,n,r){var e=r(0),o=Math.atanh;e(e.S+e.F*!(o&&1/o(-0)<0),"Math",{atanh:function(t){return 0==(t=+t)?t:Math.log((1+t)/(1-t))/2}})},function(t,n,r){var e=r(0),o=r(76);e(e.S,"Math",{cbrt:function(t){return o(t=+t)*Math.pow(Math.abs(t),1/3)}})},function(t,n,r){var e=r(0);e(e.S,"Math",{clz32:function(t){return(t>>>=0)?31-Math.floor(Math.log(t+.5)*Math.LOG2E):32}})},function(t,n,r){var e=r(0),o=Math.exp;e(e.S,"Math",{cosh:function(t){return(o(t=+t)+o(-t))/2}})},function(t,n,r){var e=r(0),o=r(77);e(e.S+e.F*(o!=Math.expm1),"Math",{expm1:o})},function(t,n,r){var e=r(0);e(e.S,"Math",{fround:r(110)})},function(t,n,r){var e=r(0),o=Math.abs;e(e.S,"Math",{hypot:function(t,n){for(var r,e,i=0,u=0,a=arguments.length,c=0;u0?(e=r/c,i+=e*e):i+=r;return c===1/0?1/0:c*Math.sqrt(i)}})},function(t,n,r){var e=r(0),o=Math.imul;e(e.S+e.F*r(3)(function(){return-5!=o(4294967295,5)||2!=o.length}),"Math",{imul:function(t,n){var r=+t,e=+n,o=65535&r,i=65535&e;return 0|o*i+((65535&r>>>16)*i+o*(65535&e>>>16)<<16>>>0)}})},function(t,n,r){var e=r(0);e(e.S,"Math",{log10:function(t){return Math.log(t)*Math.LOG10E}})},function(t,n,r){var e=r(0);e(e.S,"Math",{log1p:r(109)})},function(t,n,r){var e=r(0);e(e.S,"Math",{log2:function(t){return Math.log(t)/Math.LN2}})},function(t,n,r){var e=r(0);e(e.S,"Math",{sign:r(76)})},function(t,n,r){var e=r(0),o=r(77),i=Math.exp;e(e.S+e.F*r(3)(function(){return-2e-17!=!Math.sinh(-2e-17)}),"Math",{sinh:function(t){return Math.abs(t=+t)<1?(o(t)-o(-t))/2:(i(t-1)-i(-t-1))*(Math.E/2)}})},function(t,n,r){var e=r(0),o=r(77),i=Math.exp;e(e.S,"Math",{tanh:function(t){var n=o(t=+t),r=o(-t);return n==1/0?1:r==1/0?-1:(n-r)/(i(t)+i(-t))}})},function(t,n,r){var e=r(0);e(e.S,"Math",{trunc:function(t){return(t>0?Math.floor:Math.ceil)(t)}})},function(t,n,r){var e=r(0),o=r(35),i=String.fromCharCode,u=String.fromCodePoint;e(e.S+e.F*(!!u&&1!=u.length),"String",{fromCodePoint:function(t){for(var n,r=[],e=arguments.length,u=0;e>u;){if(n=+arguments[u++],o(n,1114111)!==n)throw RangeError(n+" is not a valid code point");r.push(n<65536?i(n):i(55296+((n-=65536)>>10),n%1024+56320))}return r.join("")}})},function(t,n,r){var e=r(0),o=r(15),i=r(6);e(e.S,"String",{raw:function(t){for(var n=o(t.raw),r=i(n.length),e=arguments.length,u=[],a=0;r>a;)u.push(String(n[a++])),a=n.length?{value:void 0,done:!0}:(t=e(n,r),this._i+=t.length,{value:t,done:!1})})},function(t,n,r){"use strict";var e=r(0),o=r(56)(!1);e(e.P,"String",{codePointAt:function(t){return o(this,t)}})},function(t,n,r){"use strict";var e=r(0),o=r(6),i=r(80),u="".endsWith;e(e.P+e.F*r(81)("endsWith"),"String",{endsWith:function(t){var n=i(this,t,"endsWith"),r=arguments.length>1?arguments[1]:void 0,e=o(n.length),a=void 0===r?e:Math.min(o(r),e),c=String(t);return u?u.call(n,c,a):n.slice(a-c.length,a)===c}})},function(t,n,r){"use strict";var e=r(0),o=r(80);e(e.P+e.F*r(81)("includes"),"String",{includes:function(t){return!!~o(this,t,"includes").indexOf(t,arguments.length>1?arguments[1]:void 0)}})},function(t,n,r){var e=r(0);e(e.P,"String",{repeat:r(75)})},function(t,n,r){"use strict";var e=r(0),o=r(6),i=r(80),u="".startsWith;e(e.P+e.F*r(81)("startsWith"),"String",{startsWith:function(t){var n=i(this,t,"startsWith"),r=o(Math.min(arguments.length>1?arguments[1]:void 0,n.length)),e=String(t);return u?u.call(n,e,r):n.slice(r,r+e.length)===e}})},function(t,n,r){"use strict";r(13)("anchor",function(t){return function(n){return t(this,"a","name",n)}})},function(t,n,r){"use strict";r(13)("big",function(t){return function(){return t(this,"big","","")}})},function(t,n,r){"use strict";r(13)("blink",function(t){return function(){return t(this,"blink","","")}})},function(t,n,r){"use strict";r(13)("bold",function(t){return function(){return t(this,"b","","")}})},function(t,n,r){"use strict";r(13)("fixed",function(t){return function(){return t(this,"tt","","")}})},function(t,n,r){"use strict";r(13)("fontcolor",function(t){return function(n){return t(this,"font","color",n)}})},function(t,n,r){"use strict";r(13)("fontsize",function(t){return function(n){return t(this,"font","size",n)}})},function(t,n,r){"use strict";r(13)("italics",function(t){return function(){return t(this,"i","","")}})},function(t,n,r){"use strict";r(13)("link",function(t){return function(n){return t(this,"a","href",n)}})},function(t,n,r){"use strict";r(13)("small",function(t){return function(){return t(this,"small","","")}})},function(t,n,r){"use strict";r(13)("strike",function(t){return function(){return t(this,"strike","","")}})},function(t,n,r){"use strict";r(13)("sub",function(t){return function(){return t(this,"sub","","")}})},function(t,n,r){"use strict";r(13)("sup",function(t){return function(){return t(this,"sup","","")}})},function(t,n,r){var e=r(0);e(e.S,"Date",{now:function(){return(new Date).getTime()}})},function(t,n,r){"use strict";var e=r(0),o=r(9),i=r(23);e(e.P+e.F*r(3)(function(){return null!==new Date(NaN).toJSON()||1!==Date.prototype.toJSON.call({toISOString:function(){return 1}})}),"Date",{toJSON:function(t){var n=o(this),r=i(n);return"number"!=typeof r||isFinite(r)?n.toISOString():null}})},function(t,n,r){var e=r(0),o=r(217);e(e.P+e.F*(Date.prototype.toISOString!==o),"Date",{toISOString:o})},function(t,n,r){"use strict";var e=r(3),o=Date.prototype.getTime,i=Date.prototype.toISOString,u=function(t){return t>9?t:"0"+t};t.exports=e(function(){return"0385-07-25T07:06:39.999Z"!=i.call(new Date(-5e13-1))})||!e(function(){i.call(new Date(NaN))})?function(){if(!isFinite(o.call(this)))throw RangeError("Invalid time value");var t=this,n=t.getUTCFullYear(),r=t.getUTCMilliseconds(),e=n<0?"-":n>9999?"+":"";return e+("00000"+Math.abs(n)).slice(e?-6:-4)+"-"+u(t.getUTCMonth()+1)+"-"+u(t.getUTCDate())+"T"+u(t.getUTCHours())+":"+u(t.getUTCMinutes())+":"+u(t.getUTCSeconds())+"."+(r>99?r:"0"+u(r))+"Z"}:i},function(t,n,r){var e=Date.prototype,o=e.toString,i=e.getTime;new Date(NaN)+""!="Invalid Date"&&r(12)(e,"toString",function(){var t=i.call(this);return t===t?o.call(this):"Invalid Date"})},function(t,n,r){var e=r(5)("toPrimitive"),o=Date.prototype;e in o||r(11)(o,e,r(220))},function(t,n,r){"use strict";var e=r(1),o=r(23);t.exports=function(t){if("string"!==t&&"number"!==t&&"default"!==t)throw TypeError("Incorrect hint");return o(e(this),"number"!=t)}},function(t,n,r){var e=r(0);e(e.S,"Array",{isArray:r(55)})},function(t,n,r){"use strict";var e=r(19),o=r(0),i=r(9),u=r(111),a=r(82),c=r(6),s=r(83),f=r(84);o(o.S+o.F*!r(58)(function(t){Array.from(t)}),"Array",{from:function(t){var n,r,o,l,h=i(t),p="function"==typeof this?this:Array,v=arguments.length,d=v>1?arguments[1]:void 0,y=void 0!==d,g=0,m=f(h);if(y&&(d=e(d,v>2?arguments[2]:void 0,2)),void 0==m||p==Array&&a(m))for(n=c(h.length),r=new p(n);n>g;g++)s(r,g,y?d(h[g],g):h[g]);else for(l=m.call(h),r=new p;!(o=l.next()).done;g++)s(r,g,y?u(l,d,[o.value,g],!0):o.value);return r.length=g,r}})},function(t,n,r){"use strict";var e=r(0),o=r(83);e(e.S+e.F*r(3)(function(){function t(){}return!(Array.of.call(t)instanceof t)}),"Array",{of:function(){for(var t=0,n=arguments.length,r=new("function"==typeof this?this:Array)(n);n>t;)o(r,t,arguments[t++]);return r.length=n,r}})},function(t,n,r){"use strict";var e=r(0),o=r(15),i=[].join;e(e.P+e.F*(r(49)!=Object||!r(22)(i)),"Array",{join:function(t){return i.call(o(this),void 0===t?",":t)}})},function(t,n,r){"use strict";var e=r(0),o=r(71),i=r(20),u=r(35),a=r(6),c=[].slice;e(e.P+e.F*r(3)(function(){o&&c.call(o)}),"Array",{slice:function(t,n){var r=a(this.length),e=i(this);if(n=void 0===n?r:n,"Array"==e)return c.call(this,t,n);for(var o=u(t,r),s=u(n,r),f=a(s-o),l=new Array(f),h=0;h1&&(e=Math.min(e,i(arguments[1]))),e<0&&(e=r+e);e>=0;e--)if(e in n&&n[e]===t)return e||0;return-1}})},function(t,n,r){var e=r(0);e(e.P,"Array",{copyWithin:r(113)}),r(31)("copyWithin")},function(t,n,r){var e=r(0);e(e.P,"Array",{fill:r(86)}),r(31)("fill")},function(t,n,r){"use strict";var e=r(0),o=r(26)(5),i=!0;"find"in[]&&Array(1).find(function(){i=!1}),e(e.P+e.F*i,"Array",{find:function(t){return o(this,t,arguments.length>1?arguments[1]:void 0)}}),r(31)("find")},function(t,n,r){"use strict";var e=r(0),o=r(26)(6),i="findIndex",u=!0;i in[]&&Array(1)[i](function(){u=!1}),e(e.P+e.F*u,"Array",{findIndex:function(t){return o(this,t,arguments.length>1?arguments[1]:void 0)}}),r(31)(i)},function(t,n,r){r(38)("Array")},function(t,n,r){var e=r(2),o=r(74),i=r(8).f,u=r(37).f,a=r(57),c=r(51),s=e.RegExp,f=s,l=s.prototype,h=/a/g,p=/a/g,v=new s(h)!==h;if(r(7)&&(!v||r(3)(function(){return p[r(5)("match")]=!1,s(h)!=h||s(p)==p||"/a/i"!=s(h,"i")}))){s=function(t,n){var r=this instanceof s,e=a(t),i=void 0===n;return!r&&e&&t.constructor===s&&i?t:o(v?new f(e&&!i?t.source:t,n):f((e=t instanceof s)?t.source:t,e&&i?c.call(t):n),r?this:l,s)};for(var d=u(f),y=0;d.length>y;)!function(t){t in s||i(s,t,{configurable:!0,get:function(){return f[t]},set:function(n){f[t]=n}})}(d[y++]);l.constructor=s,s.prototype=l,r(12)(e,"RegExp",s)}r(38)("RegExp")},function(t,n,r){"use strict";r(116);var e=r(1),o=r(51),i=r(7),u=/./.toString,a=function(t){r(12)(RegExp.prototype,"toString",t,!0)};r(3)(function(){return"/a/b"!=u.call({source:"a",flags:"b"})})?a(function(){var t=e(this);return"/".concat(t.source,"/","flags"in t?t.flags:!i&&t instanceof RegExp?o.call(t):void 0)}):"toString"!=u.name&&a(function(){return u.call(this)})},function(t,n,r){"use strict";var e=r(1),o=r(6),i=r(89),u=r(59);r(60)("match",1,function(t,n,r,a){return[function(r){var e=t(this),o=void 0==r?void 0:r[n];return void 0!==o?o.call(r,e):new RegExp(r)[n](String(e))},function(t){var n=a(r,t,this);if(n.done)return n.value;var c=e(t),s=String(this);if(!c.global)return u(c,s);var f=c.unicode;c.lastIndex=0;for(var l,h=[],p=0;null!==(l=u(c,s));){var v=String(l[0]);h[p]=v,""===v&&(c.lastIndex=i(s,o(c.lastIndex),f)),p++}return 0===p?null:h}]})},function(t,n,r){"use strict";var e=r(1),o=r(9),i=r(6),u=r(21),a=r(89),c=r(59),s=Math.max,f=Math.min,l=Math.floor,h=/\$([$&`']|\d\d?|<[^>]*>)/g,p=/\$([$&`']|\d\d?)/g,v=function(t){return void 0===t?t:String(t)};r(60)("replace",2,function(t,n,r,d){function y(t,n,e,i,u,a){var c=e+t.length,s=i.length,f=p;return void 0!==u&&(u=o(u),f=h),r.call(a,f,function(r,o){var a;switch(o.charAt(0)){case"$":return"$";case"&":return t;case"`":return n.slice(0,e);case"'":return n.slice(c);case"<":a=u[o.slice(1,-1)];break;default:var f=+o;if(0===f)return r;if(f>s){var h=l(f/10);return 0===h?r:h<=s?void 0===i[h-1]?o.charAt(1):i[h-1]+o.charAt(1):r}a=i[f-1]}return void 0===a?"":a})}return[function(e,o){var i=t(this),u=void 0==e?void 0:e[n];return void 0!==u?u.call(e,i,o):r.call(String(i),e,o)},function(t,n){var o=d(r,t,this,n);if(o.done)return o.value;var l=e(t),h=String(this),p="function"==typeof n;p||(n=String(n));var g=l.global;if(g){var m=l.unicode;l.lastIndex=0}for(var b=[];;){var w=c(l,h);if(null===w)break;if(b.push(w),!g)break;""===String(w[0])&&(l.lastIndex=a(h,i(l.lastIndex),m))}for(var x="",S=0,_=0;_=S&&(x+=h.slice(S,O)+T,S=O+E.length)}return x+h.slice(S)}]})},function(t,n,r){"use strict";var e=r(1),o=r(102),i=r(59);r(60)("search",1,function(t,n,r,u){return[function(r){var e=t(this),o=void 0==r?void 0:r[n];return void 0!==o?o.call(r,e):new RegExp(r)[n](String(e))},function(t){var n=u(r,t,this);if(n.done)return n.value;var a=e(t),c=String(this),s=a.lastIndex;o(s,0)||(a.lastIndex=0);var f=i(a,c);return o(a.lastIndex,s)||(a.lastIndex=s),null===f?-1:f.index}]})},function(t,n,r){"use strict";var e=r(57),o=r(1),i=r(52),u=r(89),a=r(6),c=r(59),s=r(88),f=r(3),l=Math.min,h=[].push,p="length",v=!f(function(){RegExp(4294967295,"y")});r(60)("split",2,function(t,n,r,f){var d;return d="c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1)[p]||2!="ab".split(/(?:ab)*/)[p]||4!=".".split(/(.?)(.?)/)[p]||".".split(/()()/)[p]>1||"".split(/.?/)[p]?function(t,n){var o=String(this);if(void 0===t&&0===n)return[];if(!e(t))return r.call(o,t,n);for(var i,u,a,c=[],f=(t.ignoreCase?"i":"")+(t.multiline?"m":"")+(t.unicode?"u":"")+(t.sticky?"y":""),l=0,v=void 0===n?4294967295:n>>>0,d=new RegExp(t.source,f+"g");(i=s.call(d,o))&&!((u=d.lastIndex)>l&&(c.push(o.slice(l,i.index)),i[p]>1&&i.index=v));)d.lastIndex===i.index&&d.lastIndex++;return l===o[p]?!a&&d.test("")||c.push(""):c.push(o.slice(l)),c[p]>v?c.slice(0,v):c}:"0".split(void 0,0)[p]?function(t,n){return void 0===t&&0===n?[]:r.call(this,t,n)}:r,[function(r,e){var o=t(this),i=void 0==r?void 0:r[n];return void 0!==i?i.call(r,o,e):d.call(String(o),r,e)},function(t,n){var e=f(d,t,this,n,d!==r);if(e.done)return e.value;var s=o(t),h=String(this),p=i(s,RegExp),y=s.unicode,g=(s.ignoreCase?"i":"")+(s.multiline?"m":"")+(s.unicode?"u":"")+(v?"y":"g"),m=new p(v?s:"^(?:"+s.source+")",g),b=void 0===n?4294967295:n>>>0;if(0===b)return[];if(0===h.length)return null===c(m,h)?[h]:[];for(var w=0,x=0,S=[];xi;)!function(n){var r,i,u,a=o?n.ok:n.fail,c=n.resolve,s=n.reject,f=n.domain;try{a?(o||(2==t._h&&R(t),t._h=1),!0===a?r=e:(f&&f.enter(),r=a(e),f&&(f.exit(),u=!0)),r===n.promise?s(_("Promise-chain cycle")):(i=N(r))?i.call(r,c,s):c(r)):s(e)}catch(t){f&&!u&&f.exit(),s(t)}}(r[i++]);t._c=[],t._n=!1,n&&!t._h&&L(t)})}},L=function(t){g.call(c,function(){var n,r,e,o=t._v,i=k(t);if(i&&(n=w(function(){j?E.emit("unhandledRejection",o,t):(r=c.onunhandledrejection)?r({promise:t,reason:o}):(e=c.console)&&e.error&&e.error("Unhandled promise rejection",o)}),t._h=j||k(t)?2:1),t._a=void 0,i&&n.e)throw n.v})},k=function(t){return 1!==t._h&&0===(t._a||t._c).length},R=function(t){g.call(c,function(){var n;j?E.emit("rejectionHandled",t):(n=c.onrejectionhandled)&&n({promise:t,reason:t._v})})},D=function(t){var n=this;n._d||(n._d=!0,n=n._w||n,n._v=t,n._s=2,n._a||(n._a=n._c.slice()),I(n,!0))},U=function(t){var n,r=this;if(!r._d){r._d=!0,r=r._w||r;try{if(r===t)throw _("Promise can't be resolved itself");(n=N(t))?m(function(){var e={_w:r,_d:!1};try{n.call(t,s(U,e,1),s(D,e,1))}catch(t){D.call(e,t)}}):(r._v=t,r._s=1,I(r,!1))}catch(t){D.call({_w:r,_d:!1},t)}}};F||(A=function(t){v(this,A,"Promise","_h"),p(t),e.call(this);try{t(s(U,this,1),s(D,this,1))}catch(t){D.call(this,t)}},e=function(t){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1},e.prototype=r(41)(A.prototype,{then:function(t,n){var r=T(y(this,A));return r.ok="function"!=typeof t||t,r.fail="function"==typeof n&&n,r.domain=j?E.domain:void 0,this._c.push(r),this._a&&this._a.push(r),this._s&&I(this,!1),r.promise},catch:function(t){return this.then(void 0,t)}}),i=function(){var t=new e;this.promise=t,this.resolve=s(U,t,1),this.reject=s(D,t,1)},b.f=T=function(t){return t===A||t===u?new i(t):o(t)}),l(l.G+l.W+l.F*!F,{Promise:A}),r(44)(A,"Promise"),r(38)("Promise"),u=r(18).Promise,l(l.S+l.F*!F,"Promise",{reject:function(t){var n=T(this);return(0,n.reject)(t),n.promise}}),l(l.S+l.F*(a||!F),"Promise",{resolve:function(t){return S(a&&this===u?A:this,t)}}),l(l.S+l.F*!(F&&r(58)(function(t){A.all(t).catch(M)})),"Promise",{all:function(t){var n=this,r=T(n),e=r.resolve,o=r.reject,i=w(function(){var r=[],i=0,u=1;d(t,!1,function(t){var a=i++,c=!1;r.push(void 0),u++,n.resolve(t).then(function(t){c||(c=!0,r[a]=t,--u||e(r))},o)}),--u||e(r)});return i.e&&o(i.v),r.promise},race:function(t){var n=this,r=T(n),e=r.reject,o=w(function(){d(t,!1,function(t){n.resolve(t).then(r.resolve,e)})});return o.e&&e(o.v),r.promise}})},function(t,n,r){"use strict";var e=r(123),o=r(42);r(62)("WeakSet",function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},{add:function(t){return e.def(o(this,"WeakSet"),t,!0)}},e,!1,!0)},function(t,n,r){"use strict";var e=r(0),o=r(63),i=r(93),u=r(1),a=r(35),c=r(6),s=r(4),f=r(2).ArrayBuffer,l=r(52),h=i.ArrayBuffer,p=i.DataView,v=o.ABV&&f.isView,d=h.prototype.slice,y=o.VIEW;e(e.G+e.W+e.F*(f!==h),{ArrayBuffer:h}),e(e.S+e.F*!o.CONSTR,"ArrayBuffer",{isView:function(t){return v&&v(t)||s(t)&&y in t}}),e(e.P+e.U+e.F*r(3)(function(){return!new h(2).slice(1,void 0).byteLength}),"ArrayBuffer",{slice:function(t,n){if(void 0!==d&&void 0===n)return d.call(u(this),t);for(var r=u(this).byteLength,e=a(t,r),o=a(void 0===n?r:n,r),i=new(l(this,h))(c(o-e)),s=new p(this),f=new p(i),v=0;e=r.length)return{value:void 0,done:!0}}while(!((t=r[n._i++])in n._t));return{value:t,done:!1}}),e(e.S,"Reflect",{enumerate:function(t){return new i(t)}})},function(t,n,r){function e(t,n){var r,a,f=arguments.length<3?t:arguments[2];return s(t)===f?t[n]:(r=o.f(t,n))?u(r,"value")?r.value:void 0!==r.get?r.get.call(f):void 0:c(a=i(t))?e(a,n,f):void 0}var o=r(16),i=r(17),u=r(14),a=r(0),c=r(4),s=r(1);a(a.S,"Reflect",{get:e})},function(t,n,r){var e=r(16),o=r(0),i=r(1);o(o.S,"Reflect",{getOwnPropertyDescriptor:function(t,n){return e.f(i(t),n)}})},function(t,n,r){var e=r(0),o=r(17),i=r(1);e(e.S,"Reflect",{getPrototypeOf:function(t){return o(i(t))}})},function(t,n,r){var e=r(0);e(e.S,"Reflect",{has:function(t,n){return n in t}})},function(t,n,r){var e=r(0),o=r(1),i=Object.isExtensible;e(e.S,"Reflect",{isExtensible:function(t){return o(t),!i||i(t)}})},function(t,n,r){var e=r(0);e(e.S,"Reflect",{ownKeys:r(125)})},function(t,n,r){var e=r(0),o=r(1),i=Object.preventExtensions;e(e.S,"Reflect",{preventExtensions:function(t){o(t);try{return i&&i(t),!0}catch(t){return!1}}})},function(t,n,r){function e(t,n,r){var c,h,p=arguments.length<4?t:arguments[3],v=i.f(f(t),n);if(!v){if(l(h=u(t)))return e(h,n,r,p);v=s(0)}if(a(v,"value")){if(!1===v.writable||!l(p))return!1;if(c=i.f(p,n)){if(c.get||c.set||!1===c.writable)return!1;c.value=r,o.f(p,n,c)}else o.f(p,n,s(0,r));return!0}return void 0!==v.set&&(v.set.call(p,r),!0)}var o=r(8),i=r(16),u=r(17),a=r(14),c=r(0),s=r(32),f=r(1),l=r(4);c(c.S,"Reflect",{set:e})},function(t,n,r){var e=r(0),o=r(72);o&&e(e.S,"Reflect",{setPrototypeOf:function(t,n){o.check(t,n);try{return o.set(t,n),!0}catch(t){return!1}}})},function(t,n,r){"use strict";var e=r(0),o=r(53)(!0);e(e.P,"Array",{includes:function(t){return o(this,t,arguments.length>1?arguments[1]:void 0)}}),r(31)("includes")},function(t,n,r){"use strict";var e=r(0),o=r(126),i=r(9),u=r(6),a=r(10),c=r(85);e(e.P,"Array",{flatMap:function(t){var n,r,e=i(this);return a(t),n=u(e.length),r=c(e,0),o(r,e,e,n,0,1,t,arguments[1]),r}}),r(31)("flatMap")},function(t,n,r){"use strict";var e=r(0),o=r(126),i=r(9),u=r(6),a=r(21),c=r(85);e(e.P,"Array",{flatten:function(){var t=arguments[0],n=i(this),r=u(n.length),e=c(n,0);return o(e,n,n,r,0,void 0===t?1:a(t)),e}}),r(31)("flatten")},function(t,n,r){"use strict";var e=r(0),o=r(56)(!0);e(e.P,"String",{at:function(t){return o(this,t)}})},function(t,n,r){"use strict";var e=r(0),o=r(127),i=r(61),u=/Version\/10\.\d+(\.\d+)?( Mobile\/\w+)? Safari\//.test(i);e(e.P+e.F*u,"String",{padStart:function(t){return o(this,t,arguments.length>1?arguments[1]:void 0,!0)}})},function(t,n,r){"use strict";var e=r(0),o=r(127),i=r(61),u=/Version\/10\.\d+(\.\d+)?( Mobile\/\w+)? Safari\//.test(i);e(e.P+e.F*u,"String",{padEnd:function(t){return o(this,t,arguments.length>1?arguments[1]:void 0,!1)}})},function(t,n,r){"use strict";r(46)("trimLeft",function(t){return function(){return t(this,1)}},"trimStart")},function(t,n,r){"use strict";r(46)("trimRight",function(t){return function(){return t(this,2)}},"trimEnd")},function(t,n,r){"use strict";var e=r(0),o=r(24),i=r(6),u=r(57),a=r(51),c=RegExp.prototype,s=function(t,n){this._r=t,this._s=n};r(79)(s,"RegExp String",function(){var t=this._r.exec(this._s);return{value:t,done:null===t}}),e(e.P,"String",{matchAll:function(t){if(o(this),!u(t))throw TypeError(t+" is not a regexp!");var n=String(this),r="flags"in c?String(t.flags):a.call(t),e=new RegExp(t.source,~r.indexOf("g")?r:"g"+r);return e.lastIndex=i(t.lastIndex),new s(e,n)}})},function(t,n,r){r(68)("asyncIterator")},function(t,n,r){r(68)("observable")},function(t,n,r){var e=r(0),o=r(125),i=r(15),u=r(16),a=r(83);e(e.S,"Object",{getOwnPropertyDescriptors:function(t){for(var n,r,e=i(t),c=u.f,s=o(e),f={},l=0;s.length>l;)void 0!==(r=c(e,n=s[l++]))&&a(f,n,r);return f}})},function(t,n,r){var e=r(0),o=r(128)(!1);e(e.S,"Object",{values:function(t){return o(t)}})},function(t,n,r){var e=r(0),o=r(128)(!0);e(e.S,"Object",{entries:function(t){return o(t)}})},function(t,n,r){"use strict";var e=r(0),o=r(9),i=r(10),u=r(8);r(7)&&e(e.P+r(64),"Object",{__defineGetter__:function(t,n){u.f(o(this),t,{get:i(n),enumerable:!0,configurable:!0})}})},function(t,n,r){"use strict";var e=r(0),o=r(9),i=r(10),u=r(8);r(7)&&e(e.P+r(64),"Object",{__defineSetter__:function(t,n){u.f(o(this),t,{set:i(n),enumerable:!0,configurable:!0})}})},function(t,n,r){"use strict";var e=r(0),o=r(9),i=r(23),u=r(17),a=r(16).f;r(7)&&e(e.P+r(64),"Object",{__lookupGetter__:function(t){var n,r=o(this),e=i(t,!0);do{if(n=a(r,e))return n.get}while(r=u(r))}})},function(t,n,r){"use strict";var e=r(0),o=r(9),i=r(23),u=r(17),a=r(16).f;r(7)&&e(e.P+r(64),"Object",{__lookupSetter__:function(t){var n,r=o(this),e=i(t,!0);do{if(n=a(r,e))return n.set}while(r=u(r))}})},function(t,n,r){var e=r(0);e(e.P+e.R,"Map",{toJSON:r(129)("Map")})},function(t,n,r){var e=r(0);e(e.P+e.R,"Set",{toJSON:r(129)("Set")})},function(t,n,r){r(65)("Map")},function(t,n,r){r(65)("Set")},function(t,n,r){r(65)("WeakMap")},function(t,n,r){r(65)("WeakSet")},function(t,n,r){r(66)("Map")},function(t,n,r){r(66)("Set")},function(t,n,r){r(66)("WeakMap")},function(t,n,r){r(66)("WeakSet")},function(t,n,r){var e=r(0);e(e.G,{global:r(2)})},function(t,n,r){var e=r(0);e(e.S,"System",{global:r(2)})},function(t,n,r){var e=r(0),o=r(20);e(e.S,"Error",{isError:function(t){return"Error"===o(t)}})},function(t,n,r){var e=r(0);e(e.S,"Math",{clamp:function(t,n,r){return Math.min(r,Math.max(n,t))}})},function(t,n,r){var e=r(0);e(e.S,"Math",{DEG_PER_RAD:Math.PI/180})},function(t,n,r){var e=r(0),o=180/Math.PI;e(e.S,"Math",{degrees:function(t){return t*o}})},function(t,n,r){var e=r(0),o=r(131),i=r(110);e(e.S,"Math",{fscale:function(t,n,r,e,u){return i(o(t,n,r,e,u))}})},function(t,n,r){var e=r(0);e(e.S,"Math",{iaddh:function(t,n,r,e){var o=t>>>0,i=n>>>0,u=r>>>0;return i+(e>>>0)+((o&u|(o|u)&~(o+u>>>0))>>>31)|0}})},function(t,n,r){var e=r(0);e(e.S,"Math",{isubh:function(t,n,r,e){var o=t>>>0,i=n>>>0,u=r>>>0;return i-(e>>>0)-((~o&u|~(o^u)&o-u>>>0)>>>31)|0}})},function(t,n,r){var e=r(0);e(e.S,"Math",{imulh:function(t,n){var r=+t,e=+n,o=65535&r,i=65535&e,u=r>>16,a=e>>16,c=(u*i>>>0)+(o*i>>>16);return u*a+(c>>16)+((o*a>>>0)+(65535&c)>>16)}})},function(t,n,r){var e=r(0);e(e.S,"Math",{RAD_PER_DEG:180/Math.PI})},function(t,n,r){var e=r(0),o=Math.PI/180;e(e.S,"Math",{radians:function(t){return t*o}})},function(t,n,r){var e=r(0);e(e.S,"Math",{scale:r(131)})},function(t,n,r){var e=r(0);e(e.S,"Math",{umulh:function(t,n){var r=+t,e=+n,o=65535&r,i=65535&e,u=r>>>16,a=e>>>16,c=(u*i>>>0)+(o*i>>>16);return u*a+(c>>>16)+((o*a>>>0)+(65535&c)>>>16)}})},function(t,n,r){var e=r(0);e(e.S,"Math",{signbit:function(t){return(t=+t)!=t?t:0==t?1/t==1/0:t>0}})},function(t,n,r){"use strict";var e=r(0),o=r(18),i=r(2),u=r(52),a=r(118);e(e.P+e.R,"Promise",{finally:function(t){var n=u(this,o.Promise||i.Promise),r="function"==typeof t;return this.then(r?function(r){return a(n,t()).then(function(){return r})}:t,r?function(r){return a(n,t()).then(function(){throw r})}:t)}})},function(t,n,r){"use strict";var e=r(0),o=r(92),i=r(117);e(e.S,"Promise",{try:function(t){var n=o.f(this),r=i(t);return(r.e?n.reject:n.resolve)(r.v),n.promise}})},function(t,n,r){var e=r(28),o=r(1),i=e.key,u=e.set;e.exp({defineMetadata:function(t,n,r,e){u(t,n,o(r),i(e))}})},function(t,n,r){var e=r(28),o=r(1),i=e.key,u=e.map,a=e.store;e.exp({deleteMetadata:function(t,n){var r=arguments.length<3?void 0:i(arguments[2]),e=u(o(n),r,!1);if(void 0===e||!e.delete(t))return!1;if(e.size)return!0;var c=a.get(n);return c.delete(r),!!c.size||a.delete(n)}})},function(t,n,r){var e=r(28),o=r(1),i=r(17),u=e.has,a=e.get,c=e.key,s=function(t,n,r){if(u(t,n,r))return a(t,n,r);var e=i(n);return null!==e?s(t,e,r):void 0};e.exp({getMetadata:function(t,n){return s(t,o(n),arguments.length<3?void 0:c(arguments[2]))}})},function(t,n,r){var e=r(121),o=r(130),i=r(28),u=r(1),a=r(17),c=i.keys,s=i.key,f=function(t,n){var r=c(t,n),i=a(t);if(null===i)return r;var u=f(i,n);return u.length?r.length?o(new e(r.concat(u))):u:r};i.exp({getMetadataKeys:function(t){return f(u(t),arguments.length<2?void 0:s(arguments[1]))}})},function(t,n,r){var e=r(28),o=r(1),i=e.get,u=e.key;e.exp({getOwnMetadata:function(t,n){return i(t,o(n),arguments.length<3?void 0:u(arguments[2]))}})},function(t,n,r){var e=r(28),o=r(1),i=e.keys,u=e.key;e.exp({getOwnMetadataKeys:function(t){return i(o(t),arguments.length<2?void 0:u(arguments[1]))}})},function(t,n,r){var e=r(28),o=r(1),i=r(17),u=e.has,a=e.key,c=function(t,n,r){if(u(t,n,r))return!0;var e=i(n);return null!==e&&c(t,e,r)};e.exp({hasMetadata:function(t,n){return c(t,o(n),arguments.length<3?void 0:a(arguments[2]))}})},function(t,n,r){var e=r(28),o=r(1),i=e.has,u=e.key;e.exp({hasOwnMetadata:function(t,n){return i(t,o(n),arguments.length<3?void 0:u(arguments[2]))}})},function(t,n,r){var e=r(28),o=r(1),i=r(10),u=e.key,a=e.set;e.exp({metadata:function(t,n){return function(r,e){a(t,n,(void 0!==e?o:i)(r),u(e))}}})},function(t,n,r){var e=r(0),o=r(91)(),i=r(2).process,u="process"==r(20)(i);e(e.G,{asap:function(t){var n=u&&i.domain;o(n?n.bind(t):t)}})},function(t,n,r){"use strict";var e=r(0),o=r(2),i=r(18),u=r(91)(),a=r(5)("observable"),c=r(10),s=r(1),f=r(39),l=r(41),h=r(11),p=r(40),v=p.RETURN,d=function(t){return null==t?void 0:c(t)},y=function(t){var n=t._c;n&&(t._c=void 0,n())},g=function(t){return void 0===t._o},m=function(t){g(t)||(t._o=void 0,y(t))},b=function(t,n){s(t),this._c=void 0,this._o=t,t=new w(this);try{var r=n(t),e=r;null!=r&&("function"==typeof r.unsubscribe?r=function(){e.unsubscribe()}:c(r),this._c=r)}catch(n){return void t.error(n)}g(this)&&y(this)};b.prototype=l({},{unsubscribe:function(){m(this)}});var w=function(t){this._s=t};w.prototype=l({},{next:function(t){var n=this._s;if(!g(n)){var r=n._o;try{var e=d(r.next);if(e)return e.call(r,t)}catch(t){try{m(n)}finally{throw t}}}},error:function(t){var n=this._s;if(g(n))throw t;var r=n._o;n._o=void 0;try{var e=d(r.error);if(!e)throw t;t=e.call(r,t)}catch(t){try{y(n)}finally{throw t}}return y(n),t},complete:function(t){var n=this._s;if(!g(n)){var r=n._o;n._o=void 0;try{var e=d(r.complete);t=e?e.call(r,t):void 0}catch(t){try{y(n)}finally{throw t}}return y(n),t}}});var x=function(t){f(this,x,"Observable","_f")._f=c(t)};l(x.prototype,{subscribe:function(t){return new b(t,this._f)},forEach:function(t){var n=this;return new(i.Promise||o.Promise)(function(r,e){c(t);var o=n.subscribe({next:function(n){try{return t(n)}catch(t){e(t),o.unsubscribe()}},error:e,complete:r})})}}),l(x,{from:function(t){var n="function"==typeof this?this:x,r=d(s(t)[a]);if(r){var e=s(r.call(t));return e.constructor===n?e:new n(function(t){return e.subscribe(t)})}return new n(function(n){var r=!1;return u(function(){if(!r){try{if(p(t,!1,function(t){if(n.next(t),r)return v})===v)return}catch(t){if(r)throw t;return void n.error(t)}n.complete()}}),function(){r=!0}})},of:function(){for(var t=0,n=arguments.length,r=new Array(n);t2,o=!!e&&u.call(arguments,2);return t(e?function(){("function"==typeof n?n:Function(n)).apply(this,o)}:n,r)}};o(o.G+o.B+o.F*a,{setTimeout:c(e.setTimeout),setInterval:c(e.setInterval)})},function(t,n,r){var e=r(0),o=r(90);e(e.G+e.B,{setImmediate:o.set,clearImmediate:o.clear})},function(t,n,r){for(var e=r(87),o=r(34),i=r(12),u=r(2),a=r(11),c=r(47),s=r(5),f=s("iterator"),l=s("toStringTag"),h=c.Array,p={CSSRuleList:!0,CSSStyleDeclaration:!1,CSSValueList:!1,ClientRectList:!1,DOMRectList:!1,DOMStringList:!1,DOMTokenList:!0,DataTransferItemList:!1,FileList:!1,HTMLAllCollection:!1,HTMLCollection:!1,HTMLFormElement:!1,HTMLSelectElement:!1,MediaList:!0,MimeTypeArray:!1,NamedNodeMap:!1,NodeList:!0,PaintRequestList:!1,Plugin:!1,PluginArray:!1,SVGLengthList:!1,SVGNumberList:!1,SVGPathSegList:!1,SVGPointList:!1,SVGStringList:!1,SVGTransformList:!1,SourceBufferList:!1,StyleSheetList:!0,TextTrackCueList:!1,TextTrackList:!1,TouchList:!1},v=o(p),d=0;d=0;--e){var o=this.tryEntries[e],i=o.completion;if("root"===o.tryLoc)return n("end");if(o.tryLoc<=this.prev){var u=m.call(o,"catchLoc"),a=m.call(o,"finallyLoc");if(u&&a){if(this.prev=0;--r){var e=this.tryEntries[r];if(e.tryLoc<=this.prev&&m.call(e,"finallyLoc")&&this.prev=0;--n){var r=this.tryEntries[n];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),h(r),M}},catch:function(t){for(var n=this.tryEntries.length-1;n>=0;--n){var r=this.tryEntries[n];if(r.tryLoc===t){var e=r.completion;if("throw"===e.type){var o=e.arg;h(r)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(t,n,r){return this.delegate={iterator:v(t),resultName:n,nextLoc:r},"next"===this.method&&(this.arg=y),M}}}("object"==typeof n?n:"object"==typeof window?window:"object"==typeof self?self:this)}).call(n,r(43))},function(t,n,r){r(336),t.exports=r(18).RegExp.escape},function(t,n,r){var e=r(0),o=r(337)(/[\\^$*+?.()|[\]{}]/g,"\\$&");e(e.S,"RegExp",{escape:function(t){return o(t)}})},function(t,n){t.exports=function(t,n){var r=n===Object(n)?function(t){return n[t]}:n;return function(n){return String(n).replace(t,r)}}},function(t,n,r){!function(n,r){t.exports=r()}(0,function(){var t,n=[],r=document,e=r.documentElement.doScroll,o=(e?/^loaded|^c/:/^loaded|^i|^c/).test(r.readyState);return o||r.addEventListener("DOMContentLoaded",t=function(){for(r.removeEventListener("DOMContentLoaded",t),o=1;t=n.shift();)t()}),function(t){o?setTimeout(t,0):n.push(t)}})},function(t,n,r){"use strict";(function(t,e){function o(t){return t&&t.__esModule?t:{default:t}}function i(t){return function(){var n=t.apply(this,arguments);return new Promise(function(t,r){function e(o,i){try{var u=n[o](i),a=u.value}catch(t){return void r(t)}if(!u.done)return Promise.resolve(a).then(function(t){e("next",t)},function(t){e("throw",t)});t(a)}return e("next")})}}Object.defineProperty(n,"__esModule",{value:!0}),n.DEFAULTS=void 0;var u=Object.assign||function(t){for(var n=1;n0&&void 0!==arguments[0]?arguments[0]:{},r=n.value,e=void 0!==r&&r,o=n.params,i=void 0!==o&&o,u=new f.default(t.location.href,!0);!1===i?delete u.query.q:u.query.q=i;var a=h.default.stringify(u.query,"?");v.default.push(""+u.pathname+a,{historyValue:e,type:"tntsearch"})},g=(0,c.default)(function(){var t=i(regeneratorRuntime.mark(function t(){var n,r,o,i,u,a,c=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},s=c.input,f=c.results,l=c.historyValue,h=void 0!==l&&l;return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:if(s&&f){t.next=2;break}return t.abrupt("return",!1);case 2:if(n=h||s.value.trim(),r=s.nextElementSibling,o=Object.assign({},d,JSON.parse(s.dataset.tntsearch||"{}")),n){t.next=9;break}return f.style.display="none",o.in_page&&(r.style.display="none",!1===h&&o.live_update&&y({value:n})),t.abrupt("return",!1);case 9:if(!(n.length-1?n:t}function p(t,n){n=n||{};var r=n.body;if(t instanceof p){if(t.bodyUsed)throw new TypeError("Already read");this.url=t.url,this.credentials=t.credentials,n.headers||(this.headers=new o(t.headers)),this.method=t.method,this.mode=t.mode,r||null==t._bodyInit||(r=t._bodyInit,t.bodyUsed=!0)}else this.url=String(t);if(this.credentials=n.credentials||this.credentials||"omit",!n.headers&&this.headers||(this.headers=new o(n.headers)),this.method=h(n.method||this.method||"GET"),this.mode=n.mode||this.mode||null,this.referrer=null,("GET"===this.method||"HEAD"===this.method)&&r)throw new TypeError("Body not allowed for GET or HEAD requests");this._initBody(r)}function v(t){var n=new FormData;return t.trim().split("&").forEach(function(t){if(t){var r=t.split("="),e=r.shift().replace(/\+/g," "),o=r.join("=").replace(/\+/g," ");n.append(decodeURIComponent(e),decodeURIComponent(o))}}),n}function d(t){var n=new o;return t.replace(/\r?\n[\t ]+/g," ").split(/\r?\n/).forEach(function(t){var r=t.split(":"),e=r.shift().trim();if(e){var o=r.join(":").trim();n.append(e,o)}}),n}function y(t,n){n||(n={}),this.type="default",this.status=void 0===n.status?200:n.status,this.ok=this.status>=200&&this.status<300,this.statusText="statusText"in n?n.statusText:"OK",this.headers=new o(n.headers),this.url=n.url||"",this._initBody(t)}if(!t.fetch){var g={searchParams:"URLSearchParams"in t,iterable:"Symbol"in t&&"iterator"in Symbol,blob:"FileReader"in t&&"Blob"in t&&function(){try{return new Blob,!0}catch(t){return!1}}(),formData:"FormData"in t,arrayBuffer:"ArrayBuffer"in t};if(g.arrayBuffer)var m=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]"],b=function(t){return t&&DataView.prototype.isPrototypeOf(t)},w=ArrayBuffer.isView||function(t){return t&&m.indexOf(Object.prototype.toString.call(t))>-1};o.prototype.append=function(t,e){t=n(t),e=r(e);var o=this.map[t];this.map[t]=o?o+","+e:e},o.prototype.delete=function(t){delete this.map[n(t)]},o.prototype.get=function(t){return t=n(t),this.has(t)?this.map[t]:null},o.prototype.has=function(t){return this.map.hasOwnProperty(n(t))},o.prototype.set=function(t,e){this.map[n(t)]=r(e)},o.prototype.forEach=function(t,n){for(var r in this.map)this.map.hasOwnProperty(r)&&t.call(n,this.map[r],r,this)},o.prototype.keys=function(){var t=[];return this.forEach(function(n,r){t.push(r)}),e(t)},o.prototype.values=function(){var t=[];return this.forEach(function(n){t.push(n)}),e(t)},o.prototype.entries=function(){var t=[];return this.forEach(function(n,r){t.push([r,n])}),e(t)},g.iterable&&(o.prototype[Symbol.iterator]=o.prototype.entries);var x=["DELETE","GET","HEAD","OPTIONS","POST","PUT"];p.prototype.clone=function(){return new p(this,{body:this._bodyInit})},l.call(p.prototype),l.call(y.prototype),y.prototype.clone=function(){return new y(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new o(this.headers),url:this.url})},y.error=function(){var t=new y(null,{status:0,statusText:""});return t.type="error",t};var S=[301,302,303,307,308];y.redirect=function(t,n){if(-1===S.indexOf(n))throw new RangeError("Invalid status code");return new y(null,{status:n,headers:{location:t}})},t.Headers=o,t.Request=p,t.Response=y,t.fetch=function(t,n){return new Promise(function(r,e){var o=new p(t,n),i=new XMLHttpRequest;i.onload=function(){var t={status:i.status,statusText:i.statusText,headers:d(i.getAllResponseHeaders()||"")};t.url="responseURL"in i?i.responseURL:t.headers.get("X-Request-URL");var n="response"in i?i.response:i.responseText;r(new y(n,t))},i.onerror=function(){e(new TypeError("Network request failed"))},i.ontimeout=function(){e(new TypeError("Network request failed"))},i.open(o.method,o.url,!0),"include"===o.credentials?i.withCredentials=!0:"omit"===o.credentials&&(i.withCredentials=!1),"responseType"in i&&g.blob&&(i.responseType="blob"),o.headers.forEach(function(t,n){i.setRequestHeader(n,t)}),i.send(void 0===o._bodyInit?null:o._bodyInit)})},t.fetch.polyfill=!0}}("undefined"!=typeof self?self:this),t.exports=n.fetch}).call(n)}).call(n,r(43))},function(t,n,r){function e(t,n,r){var e=!0,a=!0;if("function"!=typeof t)throw new TypeError(u);return i(r)&&(e="leading"in r?!!r.leading:e,a="trailing"in r?!!r.trailing:a),o(t,n,{leading:e,maxWait:n,trailing:a})}var o=r(342),i=r(94),u="Expected a function";t.exports=e},function(t,n,r){function e(t,n,r){function e(n){var r=m,e=b;return m=b=void 0,E=n,x=t.apply(e,r)}function f(t){return E=t,S=setTimeout(p,n),O?e(t):x}function l(t){var r=t-_,e=t-E,o=n-r;return P?s(o,w-e):o}function h(t){var r=t-_,e=t-E;return void 0===_||r>=n||r<0||P&&e>=w}function p(){var t=i();if(h(t))return v(t);S=setTimeout(p,l(t))}function v(t){return S=void 0,A&&m?e(t):(m=b=void 0,x)}function d(){void 0!==S&&clearTimeout(S),E=0,m=_=b=S=void 0}function y(){return void 0===S?x:v(i())}function g(){var t=i(),r=h(t);if(m=arguments,b=this,_=t,r){if(void 0===S)return f(_);if(P)return clearTimeout(S),S=setTimeout(p,n),e(_)}return void 0===S&&(S=setTimeout(p,n)),x}var m,b,w,x,S,_,E=0,O=!1,P=!1,A=!0;if("function"!=typeof t)throw new TypeError(a);return n=u(n)||0,o(r)&&(O=!!r.leading,P="maxWait"in r,w=P?c(u(r.maxWait)||0,n):w,A="trailing"in r?!!r.trailing:A),g.cancel=d,g.flush=y,g}var o=r(94),i=r(343),u=r(345),a="Expected a function",c=Math.max,s=Math.min;t.exports=e},function(t,n,r){var e=r(132),o=function(){return e.Date.now()};t.exports=o},function(t,n,r){(function(n){var r="object"==typeof n&&n&&n.Object===Object&&n;t.exports=r}).call(n,r(43))},function(t,n,r){function e(t){if("number"==typeof t)return t;if(i(t))return u;if(o(t)){var n="function"==typeof t.valueOf?t.valueOf():t;t=o(n)?n+"":n}if("string"!=typeof t)return 0===t?t:+t;t=t.replace(a,"");var r=s.test(t);return r||f.test(t)?l(t.slice(2),r?2:8):c.test(t)?u:+t}var o=r(94),i=r(346),u=NaN,a=/^\s+|\s+$/g,c=/^[-+]0x[0-9a-f]+$/i,s=/^0b[01]+$/i,f=/^0o[0-7]+$/i,l=parseInt;t.exports=e},function(t,n,r){function e(t){return"symbol"==typeof t||i(t)&&o(t)==u}var o=r(347),i=r(350),u="[object Symbol]";t.exports=e},function(t,n,r){function e(t){return null==t?void 0===t?c:a:s&&s in Object(t)?i(t):u(t)}var o=r(133),i=r(348),u=r(349),a="[object Null]",c="[object Undefined]",s=o?o.toStringTag:void 0;t.exports=e},function(t,n,r){function e(t){var n=u.call(t,c),r=t[c];try{t[c]=void 0;var e=!0}catch(t){}var o=a.call(t);return e&&(n?t[c]=r:delete t[c]),o}var o=r(133),i=Object.prototype,u=i.hasOwnProperty,a=i.toString,c=o?o.toStringTag:void 0;t.exports=e},function(t,n){function r(t){return o.call(t)}var e=Object.prototype,o=e.toString;t.exports=r},function(t,n){function r(t){return null!=t&&"object"==typeof t}t.exports=r},function(t,n,r){"use strict";(function(n){function e(t){return(t||"").toString().replace(v,"")}function o(t){var r;r="undefined"!=typeof window?window:void 0!==n?n:"undefined"!=typeof self?self:{};var e=r.location||{};t=t||e;var o,i={},u=typeof t;if("blob:"===t.protocol)i=new a(unescape(t.pathname),{});else if("string"===u){i=new a(t,{});for(o in y)delete i[o]}else if("object"===u){for(o in t)o in y||(i[o]=t[o]);void 0===i.slashes&&(i.slashes=h.test(t.href))}return i}function i(t){t=e(t);var n=p.exec(t);return{protocol:n[1]?n[1].toLowerCase():"",slashes:!!n[2],rest:n[3]}}function u(t,n){if(""===t)return n;for(var r=(n||"/").split("/").slice(0,-1).concat(t.split("/")),e=r.length,o=r[e-1],i=!1,u=0;e--;)"."===r[e]?r.splice(e,1):".."===r[e]?(r.splice(e,1),u++):u&&(0===e&&(i=!0),r.splice(e,1),u--);return i&&r.unshift(""),"."!==o&&".."!==o||r.push(""),r.join("/")}function a(t,n,r){if(t=e(t),!(this instanceof a))return new a(t,n,r);var c,s,h,p,v,y,g=d.slice(),m=typeof n,b=this,w=0;for("object"!==m&&"string"!==m&&(r=n,n=null),r&&"function"!=typeof r&&(r=l.parse),n=o(n),s=i(t||""),c=!s.protocol&&!s.slashes,b.slashes=s.slashes||c&&n.slashes,b.protocol=s.protocol||n.protocol||"",t=s.rest,s.slashes||(g[3]=[/(.*)/,"pathname"]);we?o.splice(e,o.length-e,i):o.push(i),r({action:"PUSH",location:i,index:e,entries:o})}})}function i(n,o){"production"!==t.env.NODE_ENV&&Object(T.a)(!("object"==typeof n&&void 0!==n.state&&void 0!==o),"You should avoid providing a 2nd state argument to replace when the 1st argument is a location-like object that already has state; it is ignored");var i=f(n,o,e(),M.location);_.confirmTransitionTo(i,"REPLACE",y,function(t){t&&(M.entries[M.index]=i,r({action:"REPLACE",location:i}))})}function u(t){var n=O(M.index+t,0,M.entries.length-1),e=M.entries[n];_.confirmTransitionTo(e,"POP",y,function(t){t?r({action:"POP",location:e,index:n}):r()})}function a(){u(-1)}function c(){u(1)}function l(t){var n=M.index+t;return n>=0&&n=0;h--){var p=i[h];"."===p?o(i,h):".."===p?(o(i,h),l++):l&&(o(i,h),l--)}if(!c)for(;l--;l)i.unshift("..");!c||""===i[0]||i[0]&&e(i[0])||i.unshift("");var v=i.join("/");return s&&"/"!==v.substr(-1)&&(v+="/"),v}n.a=i},function(t,n,r){"use strict";function e(t){return t.valueOf?t.valueOf():Object.prototype.valueOf.call(t)}function o(t,n){if(t===n)return!0;if(null==t||null==n)return!1;if(Array.isArray(t))return Array.isArray(n)&&t.length===n.length&&t.every(function(t,r){return o(t,n[r])});if("object"==typeof t||"object"==typeof n){var r=e(t),i=e(n);return r!==t||i!==n?o(r,i):Object.keys(Object.assign({},t,n)).every(function(r){return o(t[r],n[r])})}return!1}n.a=o},function(t,n,r){"use strict";(function(t){function r(t,n){if(!e){if(t)return;var r="Warning: "+n;"undefined"!=typeof console&&console.warn(r);try{throw Error(r)}catch(t){}}}var e="production"===t.env.NODE_ENV;n.a=r}).call(n,r(95))},function(t,n,r){"use strict";(function(t){function r(t,n){if(!t){if(e)throw new Error(o);throw new Error(o+": "+(n||""))}}var e="production"===t.env.NODE_ENV,o="Invariant failed";n.a=r}).call(n,r(95))}]); \ No newline at end of file diff --git a/plugins/tntsearch/blueprints.yaml b/plugins/tntsearch/blueprints.yaml new file mode 100644 index 0000000..e69c536 --- /dev/null +++ b/plugins/tntsearch/blueprints.yaml @@ -0,0 +1,297 @@ +name: TNT Search +type: plugin +slug: tntsearch +version: 3.4.0 +testing: false +description: Powerful indexed-based full text search engine powered by TNTSearch +icon: binoculars +author: + name: Trilby Media, LLC + email: devs@trilby.media +homepage: https://github.com/trilbymedia/grav-plugin-tntsearch +keywords: grav, plugin, search, search-engine +bugs: https://github.com/trilbymedia/grav-plugin-tntsearch/issues +docs: https://github.com/trilbymedia/grav-plugin-tntsearch/blob/develop/README.md +license: MIT + +dependencies: + - { name: grav, version: '>=1.6.21' } + +form: + validation: strict + + fields: + + enabled: + type: toggle + label: Plugin status + highlight: 1 + default: 0 + options: + 1: Enabled + 0: Disabled + validate: + type: bool + + index_title: + type: spacer + title: Indexer Settings + + index_status: + type: indexstatus + label: Search Index Status + + enable_admin_page_events: + type: toggle + label: Enable Admin Page Events + help: Disable this if you are having problems with timeouts during page saving + highlight: 1 + default: 1 + options: + 1: Enabled + 0: Disabled + validate: + type: bool + + scheduled_index.enabled: + type: toggle + label: Enable Index Scheduled Job + help: Use the Grav Scheduler to kick off a background index job + highlight: 0 + default: 0 + options: + 1: Enabled + 0: Disabled + validate: + type: bool + + scheduled_index.at: + type: cron + label: Scheduled Job Frequency + size: medium + help: Use 'cron' format + default: '0 */3 * * *' + placeholder: '0 */3 * * *' + + scheduled_index.logs: + type: text + label: Scheduled Job Log File + placeholder: 'logs/tntsearch-index.out' + size: medium + + ui_title: + type: spacer + title: UI Settings + + built_in_css: + type: toggle + label: Built-in CSS + highlight: 1 + default: 1 + options: + 1: Enabled + 0: Disabled + validate: + type: bool + + built_in_js: + type: toggle + label: Built-in Javascript + highlight: 1 + default: 1 + options: + 1: Enabled + 0: Disabled + validate: + type: bool + + search_title: + type: spacer + title: Search Settings + + built_in_search_page: + type: toggle + label: Built-in Search Page + highlight: 1 + default: 1 + options: + 1: Enabled + 0: Disabled + validate: + type: bool + + + + search_route: + type: text + size: medium + label: Search Page Route + help: The route for the built-in search page, leave empty if you wish to not have a dedicated search page. + + query_route: + type: text + size: medium + label: Query Route + help: The route used to retrieve search results. + + search_type: + type: select + size: small + classes: fancy + label: Search Type + help: Configure how TNTSearch will use the search query term + default: auto + options: + auto: Auto + basic: Basic + boolean: Boolean + + fuzzy: + type: toggle + label: Fuzzy Search + highlight: 1 + default: 0 + options: + 1: Enabled + 0: Disabled + validate: + type: bool + + distance: + type: number + size: x-small + label: Levenshtein distance of fuzzy search + help: It represents the amount of characters which need to be changed, removed, or added in a word in order it to match the search keyword. Increasing the distance produces more search results but decreases the accuracy of the search. + default: 2 + + phrases: + type: toggle + label: Match quoted phrases + highlight: 1 + default: 1 + options: + 1: Enabled + 0: Disabled + validate: + type: bool + + stemmer: + type: select + size: small + classes: fancy + label: Stemmer + help: An automated process which produces a base string in an attempt to represent related words. If your content is not in the language listed, for best search results it is recommended to disable the stemmer. + default: no + options: + no: Disabled + arabic: Arabic + croatian: Croatian + porter: English + german: German + italian: Italian + portuguese: Portuguese + russian: Russian + ukrainian: Ukrainian + + display_route: + type: toggle + label: Display Route + highlight: 1 + default: 1 + options: + 1: Enabled + 0: Disabled + validate: + type: bool + + live_uri_update: + type: toggle + label: Live URI Update + highlight: 1 + default: 1 + options: + 1: Enabled + 0: Disabled + validate: + type: bool + + display_hits: + type: toggle + label: Display Hits + highlight: 1 + default: 1 + options: + 1: Enabled + 0: Disabled + validate: + type: bool + + display_time: + type: toggle + label: Display Time + highlight: 1 + default: 1 + options: + 1: Enabled + 0: Disabled + validate: + type: bool + + limit: + type: text + label: Results Limit + default: 20 + + min: + type: text + label: Min Chars Before Search + default: 3 + + snippet: + type: text + label: Results Text Limit + default: 300 + + index_page_by_default: + type: toggle + label: Index Every Page + help: 'Index every page by default unless a page specifically declares `tntsearch: process: false`. Disabling this requires a `process: true` declartion to be added to each page that should be indexed.' + highlight: 1 + default: 1 + options: + 1: Enabled + 0: Disabled + validate: + type: bool + + filter.items: + type: textarea + size: large + rows: 4 + label: Search Filter + help: Use a standard collections based filter definition to restrict search to only these pages + yaml: true + placeholder: 'taxonomy@: { category: [news] }' + validate: + type: yaml + + powered_by: + type: toggle + label: Powered By + highlight: 1 + default: 0 + options: + 1: Enabled + 0: Disabled + validate: + type: bool + + adv_title: + type: spacer + title: Advanced Settings + + search_object_type: + type: text + label: Search Object Type + help: Allows for overriding the deafult search type to a custom type provided by a plugin. + default: Grav diff --git a/plugins/tntsearch/classes/GravConnector.php b/plugins/tntsearch/classes/GravConnector.php new file mode 100644 index 0000000..3ebc689 --- /dev/null +++ b/plugins/tntsearch/classes/GravConnector.php @@ -0,0 +1,87 @@ +get('plugins.tntsearch.filter'); + $default_process = $config->get('plugins.tntsearch.index_page_by_default'); + $gtnt = TNTSearchPlugin::getSearchObjectType(); + + + if ($filter && array_key_exists('items', $filter)) { + + if (is_string($filter['items'])) { + $filter['items'] = Yaml::parse($filter['items']); + } + + $page = new Page; + $collection = $page->collection($filter, false); + } else { + $collection = Grav::instance()['pages']->all(); + $collection->published()->routable(); + } + + foreach ($collection as $page) { + $counter++; + $process = $default_process; + $header = $page->header(); + $url = $page->url(); + + if (isset($header->tntsearch['process'])) { + $process = $header->tntsearch['process']; + } + + // Only process what's configured + if (!$process) { + echo("Skipped {$counter} {$url}\n"); + continue; + } + + try { + $fields = $gtnt->indexPageData($page); + $results[] = (array) $fields; + echo("Added {$counter} {$url}\n"); + } catch (\Exception $e) { + echo("Skipped {$counter} {$url} - {$e->getMessage()}\n"); + continue; + } + } + + return new GravResultObject($results); + } + +} + diff --git a/plugins/tntsearch/classes/GravResultObject.php b/plugins/tntsearch/classes/GravResultObject.php new file mode 100644 index 0000000..898f815 --- /dev/null +++ b/plugins/tntsearch/classes/GravResultObject.php @@ -0,0 +1,29 @@ +counter = 0; + $this->items = $items; + } + + /** + * @param array $options + * @return array + */ + public function fetch($options) + { + return $this->items[$this->counter++]; + } +} \ No newline at end of file diff --git a/plugins/tntsearch/classes/GravTNTSearch.php b/plugins/tntsearch/classes/GravTNTSearch.php new file mode 100644 index 0000000..864856d --- /dev/null +++ b/plugins/tntsearch/classes/GravTNTSearch.php @@ -0,0 +1,350 @@ +get('plugins.tntsearch.search_type', 'auto'); + $fuzzy = $config->get('plugins.tntsearch.fuzzy', false); + $distance = $config->get('plugins.tntsearch.distance', 2); + $stemmer = $config->get('plugins.tntsearch.stemmer', 'no'); + $limit = $config->get('plugins.tntsearch.limit', 20); + $snippet = $config->get('plugins.tntsearch.snippet', 300); + $data_path = $locator->findResource('user://data', true) . '/tntsearch'; + + /** @var Language $language */ + $language = Grav::instance()['language']; + + if ($language->enabled()) { + $active = $language->getActive(); + $default = $language->getDefault(); + $this->language = $active ?: $default; + $this->index = $this->language . '.index'; + } + + if (!file_exists($data_path)) { + mkdir($data_path); + } + + $defaults = [ + 'json' => false, + 'search_type' => $search_type, + 'fuzzy' => $fuzzy, + 'distance' => $distance, + 'stemmer' => $stemmer, + 'limit' => $limit, + 'as_you_type' => true, + 'snippet' => $snippet, + 'phrases' => true, + ]; + + $this->options = array_replace($defaults, $options); + $this->tnt = new TNTSearch(); + $this->tnt->loadConfig( + [ + 'storage' => $data_path, + 'driver' => 'sqlite', + 'charset' => 'utf8' + ] + ); + } + + /** + * @param string $query + * @return object|string + * @throws IndexNotFoundException + */ + public function search($query) + { + /** @var Uri $uri */ + $uri = Grav::instance()['uri']; + $type = $uri->query('search_type'); + $this->tnt->selectIndex($this->index); + $this->tnt->asYouType = $this->options['as_you_type']; + + if (isset($this->options['fuzzy']) && $this->options['fuzzy']) { + $this->tnt->fuzziness = true; + $this->tnt->fuzzy_distance = $this->options['distance']; + } + + $limit = (int)$this->options['limit']; + $type = $type ?? $this->options['search_type']; + + // TODO: Multiword parameter has been removed from $tnt->search(), please check if this works + $multiword = null; + if (isset($this->options['phrases']) && $this->options['phrases']) { + if (strlen($query) > 2) { + if ($query[0] === '"' && $query[strlen($query) - 1] === '"') { + $multiword = substr($query, 1, -1); + $type = 'basic'; + $query = $multiword; + } + } + } + + + switch ($type) { + case 'basic': + $results = $this->tnt->search($query, $limit); + break; + case 'boolean': + $results = $this->tnt->searchBoolean($query, $limit); + break; + case 'default': + case 'auto': + default: + $guess = 'search'; + foreach ($this->bool_characters as $char) { + if (strpos($query, $char) !== false) { + $guess = 'searchBoolean'; + break; + } + } + + $results = $this->tnt->{$guess}($query, $limit); + } + + return $this->processResults($results, $query); + } + + /** + * @param array $res + * @param string $query + * @return object|string + */ + protected function processResults($res, $query) + { + $data = new \stdClass(); + $data->number_of_hits = $res['hits'] ?? 0; + $data->execution_time = $res['execution_time']; + + /** @var Pages $pages */ + $pages = Grav::instance()['pages']; + + $counter = 0; + foreach ($res['ids'] as $path) { + if ($counter++ > $this->options['limit']) { + break; + } + + $page = $pages->find($path); + + if ($page) { + $event = new Event( + [ + 'page' => $page, + 'query' => $query, + 'options' => $this->options, + 'fields' => $data, + 'gtnt' => $this + ] + ); + Grav::instance()->fireEvent('onTNTSearchQuery', $event); + } + } + + if ($this->options['json']) { + return json_encode($data, JSON_PRETTY_PRINT) ?: ''; + } + + return $data; + } + + /** + * @param PageInterface $page + * @return string + */ + public static function getCleanContent($page) + { + $grav = Grav::instance(); + $activePage = $grav['page']; + + // Set active page in grav to the one we are currently processing. + unset($grav['page']); + $grav['page'] = $page; + + /** @var Twig $twig */ + $twig = $grav['twig']; + $header = $page->header(); + + // @phpstan-ignore-next-line + if (isset($header->tntsearch['template'])) { + $processed_page = $twig->processTemplate($header->tntsearch['template'] . '.html.twig', ['page' => $page]); + $content = $processed_page; + } else { + $content = $page->content(); + } + + $content = strip_tags($content); + $content = preg_replace(['/[ \t]+/', '/\s*$^\s*/m'], [' ', "\n"], $content) ?? $content; + + // Restore active page in Grav. + unset($grav['page']); + $grav['page'] = $activePage; + + return $content; + } + + /** + * @return void + */ + public function createIndex() + { + $this->tnt->setDatabaseHandle(new GravConnector); + $indexer = $this->tnt->createIndex($this->index); + + // Disable stemmer for users with older configuration. + if ($this->options['stemmer'] == 'default') { + $indexer->setLanguage('no'); + } else { + $indexer->setLanguage($this->options['stemmer']); + } + + $indexer->run(); + } + + /** + * @return void + * @throws IndexNotFoundException + */ + public function selectIndex() + { + $this->tnt->selectIndex($this->index); + } + + /** + * @param object $object + * @return void + */ + public function deleteIndex($object) + { + if (!$object instanceof Page) { + return; + } + + $this->tnt->setDatabaseHandle(new GravConnector); + try { + $this->tnt->selectIndex($this->index); + } catch (IndexNotFoundException $e) { + return; + } + + $indexer = $this->tnt->getIndex(); + + // Delete existing if it exists + $indexer->delete($object->route()); + } + + /** + * @param object $object + * @return void + */ + public function updateIndex($object) + { + if (!$object instanceof Page) { + return; + } + + $this->tnt->setDatabaseHandle(new GravConnector); + + try { + $this->tnt->selectIndex($this->index); + } catch (IndexNotFoundException $e) { + return; + } + + $indexer = $this->tnt->getIndex(); + + // Delete existing if it exists + $indexer->delete($object->route()); + + $filter = Grav::instance()['config']->get('plugins.tntsearch.filter'); + if ($filter && array_key_exists('items', $filter)) { + + if (is_string($filter['items'])) { + $filter['items'] = Yaml::parse($filter['items']); + } + + $apage = new Page; + /** @var Collection $collection */ + $collection = $apage->collection($filter, false); + + $path = $object->path(); + if ($path && array_key_exists($path, $collection->toArray())) { + $fields = $this->indexPageData($object); + $document = (array) $fields; + + // Insert document + $indexer->insert($document); + } + } + } + + /** + * @param PageInterface $page + * @return object + */ + public function indexPageData($page) + { + $header = (array) $page->header(); + $redirect = (bool) $page->redirect(); + + if (!$page->published()) { + throw new \RuntimeException('not published...'); + } + if (!$page->routable()) { + throw new \RuntimeException('not routable...'); + } + if ($redirect || (isset($header['tntsearch']['index']) && $header['tntsearch']['index'] === false )) { + throw new \RuntimeException('redirect only...'); + } + + $route = $page->route(); + + $fields = new \stdClass(); + $fields->id = $route; + $fields->name = $page->title(); + $fields->content = static::getCleanContent($page); + + Grav::instance()->fireEvent('onTNTSearchIndex', new Event(['page' => $page, 'fields' => $fields])); + + return $fields; + } +} diff --git a/plugins/tntsearch/cli/TNTSearchIndexerCommand.php b/plugins/tntsearch/cli/TNTSearchIndexerCommand.php new file mode 100644 index 0000000..21c3c0b --- /dev/null +++ b/plugins/tntsearch/cli/TNTSearchIndexerCommand.php @@ -0,0 +1,97 @@ + 'green', + 'INFO' => 'cyan', + 'NOTICE' => 'yellow', + 'WARNING' => 'yellow', + 'ERROR' => 'red', + 'CRITICAL' => 'red', + 'ALERT' => 'red', + 'EMERGENCY' => 'magenta' + ]; + + /** + * @return void + */ + protected function configure(): void + { + $this + ->setName('index') + ->addOption( + 'alt', + null, + InputOption::VALUE_NONE, + 'alternative output' + ) + ->addOption( + 'language', + 'l', + InputOption::VALUE_OPTIONAL, + 'optional language to index (multi-language sites only)' + ) + ->setDescription('TNTSearch Indexer') + ->setHelp('The index command re-indexes the search engine'); + } + + /** + * @return int + */ + protected function serve(): int + { + /** @var string|null $langCode */ + $langCode = $this->input->getOption('language'); + + error_reporting(1); + $this->setLanguage($langCode); + $this->initializePages(); + + $alt_output = $this->input->getOption('alt') ? true : false; + + if ($alt_output) { + $output = $this->doIndex($langCode); + $this->output->write($output); + $this->output->writeln(''); + } else { + $this->output->writeln(''); + $this->output->writeln('Re-indexing'); + $this->output->writeln(''); + $start = microtime(true); + $output = $this->doIndex($langCode); + $this->output->write($output); + $this->output->writeln(''); + $end = number_format(microtime(true) - $start,1); + $this->output->writeln(''); + $this->output->writeln('Indexed in ' . $end . 's'); + } + + return 0; + } + + /** + * @param string|null $langCode + * @return string + */ + private function doIndex(string $langCode = null): string + { + [,,$output] = TNTSearchPlugin::indexJob($langCode); + + return $output; + } +} + diff --git a/plugins/tntsearch/cli/TNTSearchQueryCommand.php b/plugins/tntsearch/cli/TNTSearchQueryCommand.php new file mode 100644 index 0000000..45411c2 --- /dev/null +++ b/plugins/tntsearch/cli/TNTSearchQueryCommand.php @@ -0,0 +1,74 @@ + 'green', + 'INFO' => 'cyan', + 'NOTICE' => 'yellow', + 'WARNING' => 'yellow', + 'ERROR' => 'red', + 'CRITICAL' => 'red', + 'ALERT' => 'red', + 'EMERGENCY' => 'magenta' + ]; + + /** + * @return void + */ + protected function configure() + { + $this + ->setName('query') + ->setDescription('TNTSearch Query') + ->addArgument( + 'query', + InputArgument::REQUIRED, + 'The search query you wish to use to test the database' + ) + ->addOption( + 'language', + 'l', + InputOption::VALUE_OPTIONAL, + 'optional language to search against (multi-language sites only)' + ) + ->setHelp('The query command allows you to test the search engine') + ; + } + + /** + * @return int + */ + protected function serve(): int + { + /** @var string|null $langCode */ + $langCode = $this->input->getOption('language'); + /** @var string $query */ + $query = $this->input->getArgument('query'); + + $this->setLanguage($langCode); + $this->initializePages(); + + $gtnt = TNTSearchPlugin::getSearchObjectType(['json' => true]); + print_r($gtnt->search($query)); + + $this->output->newLine(); + + return 0; + } +} + diff --git a/plugins/tntsearch/composer.json b/plugins/tntsearch/composer.json new file mode 100644 index 0000000..9e84ab6 --- /dev/null +++ b/plugins/tntsearch/composer.json @@ -0,0 +1,34 @@ +{ + "name": "trilbymedia/grav-plugin-tntsearch", + "type": "grav-plugin", + "description": "TNTSearch plugin for Grav CMS", + "keywords": ["tntsearch","search"], + "homepage": "https://github.com/trilbymedia/grav-plugin-tntsearch", + "license": "MIT", + "authors": [ + { + "name": "Team Grav", + "email": "devs@getgrav.org", + "homepage": "http://getgrav.org", + "role": "Developer" + } + ], + "require": { + "php": ">=7.1.3", + "ext-json": "*", + "ext-pdo": "*", + "teamtnt/tntsearch": "^2.0" + }, + "autoload": { + "psr-4": { + "Grav\\Plugin\\TNTSearch\\": "classes/", + "Grav\\Plugin\\Console\\": "cli/" + }, + "classmap": ["tntsearch.php"] + }, + "config": { + "platform": { + "php": "7.1.3" + } + } +} \ No newline at end of file diff --git a/plugins/tntsearch/composer.lock b/plugins/tntsearch/composer.lock new file mode 100644 index 0000000..3cb6ef2 --- /dev/null +++ b/plugins/tntsearch/composer.lock @@ -0,0 +1,104 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "8fa5f3e8ff0d88b02f744b9dc4cfa420", + "packages": [ + { + "name": "teamtnt/tntsearch", + "version": "v2.9.0", + "source": { + "type": "git", + "url": "https://github.com/teamtnt/tntsearch.git", + "reference": "ccedae0cfe21f7831f2dd1f973cf8904dad42d8d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/teamtnt/tntsearch/zipball/ccedae0cfe21f7831f2dd1f973cf8904dad42d8d", + "reference": "ccedae0cfe21f7831f2dd1f973cf8904dad42d8d", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "ext-pdo_sqlite": "*", + "ext-sqlite3": "*", + "php": "~7.1|^8" + }, + "require-dev": { + "phpunit/phpunit": "7.*|8.*|9.*", + "symfony/var-dumper": "^4|^5.2" + }, + "type": "library", + "autoload": { + "files": [ + "helper/helpers.php" + ], + "psr-4": { + "TeamTNT\\TNTSearch\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nenad Tičarić", + "email": "nticaric@gmail.com", + "homepage": "http://www.tntstudio.us", + "role": "Developer" + } + ], + "description": "A fully featured full text search engine written in PHP", + "homepage": "https://github.com/teamtnt/tntsearch", + "keywords": [ + "Fuzzy search", + "bm25", + "fulltext", + "geosearch", + "search", + "stemming", + "teamtnt", + "text classification", + "tntsearch" + ], + "support": { + "issues": "https://github.com/teamtnt/tntsearch/issues", + "source": "https://github.com/teamtnt/tntsearch/tree/v2.9.0" + }, + "funding": [ + { + "url": "https://ko-fi.com/nticaric", + "type": "ko_fi" + }, + { + "url": "https://opencollective.com/tntsearch", + "type": "open_collective" + }, + { + "url": "https://www.patreon.com/nticaric", + "type": "patreon" + } + ], + "time": "2022-02-22T10:35:34+00:00" + } + ], + "packages-dev": [], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": ">=7.1.3", + "ext-json": "*", + "ext-pdo": "*" + }, + "platform-dev": [], + "platform-overrides": { + "php": "7.1.3" + }, + "plugin-api-version": "2.3.0" +} diff --git a/plugins/tntsearch/languages.yaml b/plugins/tntsearch/languages.yaml new file mode 100644 index 0000000..6b34f43 --- /dev/null +++ b/plugins/tntsearch/languages.yaml @@ -0,0 +1,20 @@ +en: + PLUGIN_TNTSEARCH: + FOUND_RESULTS: "Found %s results" + FOUND_IN: "in %s" + POWERED_BY: "Powered by %s" +de: + PLUGIN_TNTSEARCH: + FOUND_RESULTS: "Es wurden %s Resultate gefunden" + FOUND_IN: "(%s)" + POWERED_BY: "Powered by %s" +ru: + PLUGIN_TNTSEARCH: + FOUND_RESULTS: "Результатов: %s" + FOUND_IN: "(%s)" + POWERED_BY: "Работает на %s" +fr: + PLUGIN_TNTSEARCH: + FOUND_RESULTS: "Résultats trouvés: %s" + FOUND_IN: "(%s)" + POWERED_BY: "Par %s" \ No newline at end of file diff --git a/plugins/tntsearch/package.json b/plugins/tntsearch/package.json new file mode 100644 index 0000000..dd28310 --- /dev/null +++ b/plugins/tntsearch/package.json @@ -0,0 +1,38 @@ +{ + "name": "grav-tntsearch", + "version": "1.1.1", + "main": "app/main.js", + "author": "Trilby Media", + "private": true, + "license": "MIT", + "scripts": { + "watch": "webpack --watch --progress --colors --env.NODE_ENV=development --env.dev --config webpack.conf.js", + "dev": "webpack --progress --colors --env.NODE_ENV=development --env.dev --config webpack.conf.js", + "prod": "NODE_ENV=production webpack --env.NODE_ENV=production --env.prod --config webpack.conf.js" + }, + "dependencies": { + "domready": "^1.0.8", + "history": "^4.7.2", + "lodash": "^4.17.4", + "querystringify": "^2.0.0", + "url-parse": "^1.4.3", + "whatwg-fetch": "^2.0.3" + }, + "devDependencies": { + "babel-core": "^6.26.0", + "babel-eslint": "^8.2.1", + "babel-loader": "^7.1.2", + "babel-polyfill": "^6.26.0", + "babel-preset-es2015": "^6.24.1", + "babel-preset-stage-3": "^6.24.1", + "css-loader": "^0.28.9", + "eslint": "^4.18.2", + "eslint-config-defaults": "^9.0.0", + "eslint-loader": "^1.9.0", + "exports-loader": "^0.6.4", + "imports-loader": "^0.7.1", + "json-loader": "^0.5.7", + "style-loader": "^0.20.1", + "webpack": "^3.10.0" + } +} diff --git a/plugins/tntsearch/pages/search.md b/plugins/tntsearch/pages/search.md new file mode 100644 index 0000000..a78870c --- /dev/null +++ b/plugins/tntsearch/pages/search.md @@ -0,0 +1,3 @@ +--- +title: TNTSearch Search +--- \ No newline at end of file diff --git a/plugins/tntsearch/pages/tntquery.md b/plugins/tntsearch/pages/tntquery.md new file mode 100644 index 0000000..3441912 --- /dev/null +++ b/plugins/tntsearch/pages/tntquery.md @@ -0,0 +1,5 @@ +--- +title: TNTSearch Query +template_format: json +cache_control: no-cache +--- \ No newline at end of file diff --git a/plugins/tntsearch/templates/forms/fields/indexstatus/indexstatus.html.twig b/plugins/tntsearch/templates/forms/fields/indexstatus/indexstatus.html.twig new file mode 100644 index 0000000..6b83580 --- /dev/null +++ b/plugins/tntsearch/templates/forms/fields/indexstatus/indexstatus.html.twig @@ -0,0 +1,16 @@ +{% extends "forms/field.html.twig" %} + +{% block input %} +
+
+ {% if tntsearch_index_status.status %} + + {{ tntsearch_index_status.msg }} + {% else %} + + {{ tntsearch_index_status.msg }} + {% endif %} +
+
+
+{% endblock %} \ No newline at end of file diff --git a/plugins/tntsearch/templates/partials/tntsearch.html.twig b/plugins/tntsearch/templates/partials/tntsearch.html.twig new file mode 100644 index 0000000..7072443 --- /dev/null +++ b/plugins/tntsearch/templates/partials/tntsearch.html.twig @@ -0,0 +1,30 @@ +{% set url = url|default(base_url|rtrim('/') ~ '/' ~ config.get('plugins.tntsearch.query_route', 's')|trim('/')) %} +{% set limit = limit|default(config.get('plugins.tntsearch.limit', 20)) %} +{% set snippet = snippet|default(config.get('plugins.tntsearch.snippet', 300)) %} +{% set min = min|default(config.get('plugins.tntsearch.min', 3)) %} +{% set search_type = search_type|default(config.get('plugins.tntsearch.search_type', 'auto')) %} +{% set placeholder = placeholder|default('Search...') %} +{% set live_update = in_page ? live_update|default(config.get('plugins.tntsearch.live_uri_update', 1)) : 0 %} +{% set nojs_action = config.get('plugins.tntsearch.search_route', '/search')|trim('/') %} + +{% set options = { uri: url, limit: limit, snippet: snippet, min: min, in_page: in_page, live_update: live_update, search_type: search_type } %} + +
+ {% block tntsearch_input %} + + {% endblock %} +
+ {% if tntsearch_results is defined and tntsearch_results is not empty and in_page %} + {% include 'tntquery-ajax.html.twig' %} + {% endif %} +
+ + {% if config.get('plugins.tntsearch.powered_by') %} +

+ {{ "PLUGIN_TNTSEARCH.POWERED_BY"|t("TNTSearch")|raw }} +

+ {% endif %} +
diff --git a/plugins/tntsearch/templates/search.html.twig b/plugins/tntsearch/templates/search.html.twig new file mode 100644 index 0000000..9ee1e32 --- /dev/null +++ b/plugins/tntsearch/templates/search.html.twig @@ -0,0 +1,7 @@ +{% extends 'partials/base.html.twig' %} + +{% block content %} + {{ page.content|raw }} + + {% include 'partials/tntsearch.html.twig' with { in_page: true }%} +{% endblock %} diff --git a/plugins/tntsearch/templates/tntquery-ajax.html.twig b/plugins/tntsearch/templates/tntquery-ajax.html.twig new file mode 100644 index 0000000..fc3b077 --- /dev/null +++ b/plugins/tntsearch/templates/tntquery-ajax.html.twig @@ -0,0 +1,19 @@ +
+

+ {% if config.get('plugins.tntsearch.display_hits') %} + {{ "PLUGIN_TNTSEARCH.FOUND_RESULTS"|t(tntsearch_results.number_of_hits)|raw }} + {% endif %} + {% if config.get('plugins.tntsearch.display_time') %} + {{ "PLUGIN_TNTSEARCH.FOUND_IN"|t(tntsearch_results.execution_time)|raw }} + {% endif %} +

+ {% for key, val in tntsearch_results.hits %} +
+ {{ val.title|raw }} +
+ {% if config.get('plugins.tntsearch.display_route') %} +
{{ val.link|raw }}
+ {% endif %} +

{{ val.content|raw }}

+ {% endfor %} +
\ No newline at end of file diff --git a/plugins/tntsearch/templates/tntquery.html.twig b/plugins/tntsearch/templates/tntquery.html.twig new file mode 100644 index 0000000..5129c14 --- /dev/null +++ b/plugins/tntsearch/templates/tntquery.html.twig @@ -0,0 +1,8 @@ +{% extends 'partials/base.html.twig' %} + +{% block content %} +
+ {{ vardump(tntsearch_results) }} +
+{% endblock %} + diff --git a/plugins/tntsearch/templates/tntquery.json.twig b/plugins/tntsearch/templates/tntquery.json.twig new file mode 100644 index 0000000..a82dfd2 --- /dev/null +++ b/plugins/tntsearch/templates/tntquery.json.twig @@ -0,0 +1 @@ +{{ tntsearch_results|json_encode|raw }} \ No newline at end of file diff --git a/plugins/tntsearch/tntsearch.php b/plugins/tntsearch/tntsearch.php new file mode 100644 index 0000000..5a5b3a2 --- /dev/null +++ b/plugins/tntsearch/tntsearch.php @@ -0,0 +1,523 @@ + [ + ['autoload', 100000], + ['onPluginsInitialized', 0] + ], + 'onSchedulerInitialized' => ['onSchedulerInitialized', 0], + 'onTwigLoader' => ['onTwigLoader', 0], + 'onTNTSearchReIndex' => ['onTNTSearchReIndex', 0], + 'onTNTSearchIndex' => ['onTNTSearchIndex', 0], + 'onTNTSearchQuery' => ['onTNTSearchQuery', 0], + ]; + } + + /** + * [onPluginsInitialized:100000] Composer autoload. + *is + * @return ClassLoader + */ + public function autoload(): ClassLoader + { + return require __DIR__ . '/vendor/autoload.php'; + } + + /** + * Initialize the plugin + */ + public function onPluginsInitialized(): void + { + if ($this->isAdmin()) { + $this->GravTNTSearch(); + $route = $this->config->get('plugins.admin.route'); + $base = '/' . trim($route, '/'); + $this->admin_route = $this->grav['base_url'] . $base; + + $this->enable([ + 'onAdminMenu' => ['onAdminMenu', 0], + 'onAdminTaskExecute' => ['onAdminTaskExecute', 0], + 'onTwigSiteVariables' => ['onTwigAdminVariables', 0], + 'onTwigLoader' => ['addAdminTwigTemplates', 0], + ]); + + if ($this->config->get('plugins.tntsearch.enable_admin_page_events', true)) { + $this->enable([ + 'onAdminAfterSave' => ['onObjectSave', 0], + 'onAdminAfterDelete' => ['onObjectDelete', 0], + 'onFlexObjectSave' => ['onObjectSave', 0], + 'onFlexObjectDelete' => ['onObjectDelete', 0], + ]); + } + + return; + } + + $this->enable([ + 'onPagesInitialized' => ['onPagesInitialized', 1000], + 'onTwigSiteVariables' => ['onTwigSiteVariables', 0], + ]); + } + + /** + * Add index job to Grav Scheduler + * Requires Grav 1.6.0 - Scheduler + */ + public function onSchedulerInitialized(Event $e): void + { + if ($this->config->get('plugins.tntsearch.scheduled_index.enabled')) { + /** @var Scheduler $scheduler */ + $scheduler = $e['scheduler']; + $at = $this->config->get('plugins.tntsearch.scheduled_index.at'); + $logs = $this->config->get('plugins.tntsearch.scheduled_index.logs'); + $job = $scheduler->addCommand('bin/plugin', ['tntsearch', 'index'], 'tntsearch-index'); + $job->at($at); + $job->output($logs); + $job->backlink('/plugins/tntsearch'); + } + } + + /** + * Function to force a reindex from your own plugins + */ + public function onTNTSearchReIndex(): void + { + $this->GravTNTSearch()->createIndex(); + } + + /** + * A sample event to show how easy it is to extend the indexing fields + * + * @param Event $e + */ + public function onTNTSearchIndex(Event $e): void + { + $page = $e['page']; + $fields = $e['fields']; + + if ($page && $page instanceof Page && isset($page->header()->author)) { + $author = $page->header()->author; + if (is_string($author)) { + $fields->author = $author; + } + } + } + + public function onTNTSearchQuery(Event $e): void + { + $page = $e['page']; + $query = $e['query']; + $options = $e['options']; + $fields = $e['fields']; + $gtnt = $e['gtnt']; + + $content = $gtnt->getCleanContent($page); + $title = $page->title(); + + $relevant = $gtnt->tnt->snippet($query, $content, $options['snippet']); + + if (strlen($relevant) <= 6) { + $relevant = substr($content, 0, $options['snippet']); + } + + $fields->hits[] = [ + 'link' => $page->route(), + 'title' => $gtnt->tnt->highlight($title, $query, 'em', ['wholeWord' => false]), + 'content' => $gtnt->tnt->highlight($relevant, $query, 'em', ['wholeWord' => false]), + ]; + } + + /** + * Create pages and perform the search actions + */ + public function onPagesInitialized(): void + { + /** @var Uri $uri */ + $uri = $this->grav['uri']; + + $options = []; + + $this->current_route = $uri->path(); + + $this->built_in_search_page = $this->config->get('plugins.tntsearch.built_in_search_page'); + $this->search_route = $this->config->get('plugins.tntsearch.search_route'); + $this->query_route = $this->config->get('plugins.tntsearch.query_route'); + + $pages = $this->grav['pages']; + $page = $pages->dispatch($this->current_route); + + if (!$page) { + if ($this->query_route && $this->query_route === $this->current_route) { + $page = new Page; + $page->init(new \SplFileInfo(__DIR__ . '/pages/tntquery.md')); + $page->slug(basename($this->current_route)); + if ($uri->param('ajax') || $uri->query('ajax')) { + $page->template('tntquery-ajax'); + } + $pages->addPage($page, $this->current_route); + } elseif ($this->built_in_search_page && $this->search_route == $this->current_route) { + $page = new Page; + $page->init(new \SplFileInfo(__DIR__ . '/pages/search.md')); + $page->slug(basename($this->current_route)); + $pages->addPage($page, $this->current_route); + } + } + + $this->query = (string)($uri->param('q', null) ?: $uri->query('q') ?: ''); + + if ($this->query) { + $snippet = $this->getFormValue('sl'); + $limit = $this->getFormValue('l'); + + if ($snippet) { + $options['snippet'] = $snippet; + } + if ($limit) { + $options['limit'] = $limit; + } + + $this->grav['tntsearch'] = static::getSearchObjectType($options); + + if ($page) { + $this->config->set('plugins.tntsearch', $this->mergeConfig($page)); + } + + try { + $this->results = $this->GravTNTSearch()->search($this->query); + } catch (IndexNotFoundException $e) { + $this->results = ['number_of_hits' => 0, 'hits' => [], 'execution_time' => 'missing index']; + } + } + } + + /** + * Add the Twig template paths to the Twig laoder + */ + public function onTwigLoader(): void + { + $this->grav['twig']->addPath(__DIR__ . '/templates'); + } + + /** + * Add the current template paths to the admin Twig loader + */ + public function addAdminTwigTemplates(): void + { + $this->grav['twig']->addPath($this->grav['locator']->findResource('theme://templates')); + } + + /** + * Add results and query to Twig as well as CSS/JS assets + */ + public function onTwigSiteVariables(): void + { + $twig = $this->grav['twig']; + + if ($this->query) { + $twig->twig_vars['query'] = $this->query; + $twig->twig_vars['tntsearch_results'] = $this->results; + } + + if ($this->config->get('plugins.tntsearch.built_in_css')) { + $this->grav['assets']->addCss('plugin://tntsearch/assets/tntsearch.css'); + } + if ($this->config->get('plugins.tntsearch.built_in_js')) { + // $this->grav['assets']->addJs('plugin://tntsearch/assets/tntsearch.js'); + $this->grav['assets']->addJs('plugin://tntsearch/assets/tntsearch.js'); + } + } + + /** + * Handle the Reindex task from the admin + * + * @param Event $e + */ + public function onAdminTaskExecute(Event $e): void + { + if ($e['method'] === 'taskReindexTNTSearch') { + + $controller = $e['controller']; + + header('Content-type: application/json'); + + if (!$controller->authorizeTask('reindexTNTSearch', ['admin.configuration', 'admin.super'])) { + $json_response = [ + 'status' => 'error', + 'message' => ' Index not created', + 'details' => 'Insufficient permissions to reindex the search engine database.' + ]; + echo json_encode($json_response); + exit; + } + + // disable warnings + error_reporting(1); + // disable execution time + set_time_limit(0); + + list($status, $msg, $output) = static::indexJob(); + + $json_response = [ + 'status' => $status ? 'success' : 'error', + 'message' => $msg + ]; + + echo json_encode($json_response); + exit; + } + + } + + /** + * Perform an 'add' or 'update' for index data as needed + * + * @param Event $event + * @return bool + */ + public function onObjectSave($event): bool + { + if (defined('CLI_DISABLE_TNTSEARCH')) { + return true; + } + + $obj = $event['object'] ?: $event['page']; + + if ($obj) { + $this->GravTNTSearch()->updateIndex($obj); + } + + return true; + } + + /** + * Perform a 'delete' for index data as needed + * + * @param Event $event + * @return bool + */ + public function onObjectDelete($event): bool + { + if (defined('CLI_DISABLE_TNTSEARCH')) { + return true; + } + $obj = $event['object'] ?: $event['page']; + + if ($obj) { + $this->GravTNTSearch()->deleteIndex($obj); + } + + return true; + } + + /** + * Set some twig vars and load CSS/JS assets for admin + */ + public function onTwigAdminVariables(): void + { + $twig = $this->grav['twig']; + $gtnt = $this->GravTNTSearch(); + + [$status, $msg] = static::getIndexCount($gtnt); + + if ($status === false) { + $message = ' TNTSearch must be indexed before it will function properly.'; + $this->grav['admin']->addTempMessage($message, 'error'); + } + + $twig->twig_vars['tntsearch_index_status'] = ['status' => $status, 'msg' => $msg]; + $this->grav['assets']->addCss('plugin://tntsearch/assets/admin/tntsearch.css'); + $this->grav['assets']->addJs('plugin://tntsearch/assets/admin/tntsearch.js'); + } + + /** + * Add reindex button to the admin QuickTray + */ + public function onAdminMenu(): void + { + $options = [ + 'authorize' => 'taskReindexTNTSearch', + 'hint' => 'reindexes the TNT Search index', + 'class' => 'tntsearch-reindex', + 'icon' => 'fa-binoculars' + ]; + + $this->grav['twig']->plugins_quick_tray['TNT Search'] = $options; + } + + /** + * Wrapper to get the number of documents currently indexed + * + * @param GravTNTSearch $gtnt + * @return array + */ + protected static function getIndexCount($gtnt): array + { + $status = true; + try { + $msg = ''; + $gtnt->selectIndex(); + $doc_count = $gtnt->tnt->totalDocumentsInCollection(); + + $language = Grav::instance()['language']; + if ($language->enabled()) { + $msg .= 'Processed ' . count($language->getLanguages()) . ' languages, each with '; + } + $msg .= $doc_count . ' documents reindexed'; + } catch (IndexNotFoundException $e) { + $status = false; + $msg = 'Index not created'; + } + + return [$status, $msg]; + } + + /** + * Helper function to read form/url values + * + * @param string $val + * @return mixed + */ + protected function getFormValue($val) + { + $uri = $this->grav['uri']; + + return $uri->param($val) ?: $uri->query($val) ?: filter_input(INPUT_POST, $val, FILTER_SANITIZE_ENCODED); + } + + /** + * @param array $options + * @return GravTNTSearch + */ + public static function getSearchObjectType($options = []) + { + $type = 'Grav\\Plugin\\TNTSearch\\' . Grav::instance()['config']->get('plugins.tntsearch.search_object_type', 'Grav') . 'TNTSearch'; + if (class_exists($type)) { + return new $type($options); + } + + throw new \RuntimeException('Search class: ' . $type . ' does not exist'); + } + + /** + * @param string|null $langCode + * @return array + */ + public static function indexJob(string $langCode = null) + { + $grav = Grav::instance(); + $grav['debugger']->enabled(false); + + /** @var Pages $pages */ + $pages = $grav['pages']; + if (method_exists($pages, 'enablePages')) { + $pages->enablePages(); + } + + ob_start(); + + /** @var Language $language */ + $language = $grav['language']; + $langEnabled = $language->enabled(); + + // TODO: can be removed when Grav minimum >= v1.6.22 + $hasReset = method_exists($pages, 'reset'); + if (!$hasReset && !$langCode) { + $langCode = $language->getActive(); + } + + if ($langCode && (!$langEnabled || !$language->validate($langCode))) { + $langCode = null; + } + + $langCodes = $langCode ? [$langCode] : $language->getLanguages(); + if ($langCodes) { + foreach ($langCodes as $lang) { + if ($lang !== $language->getActive()) { + $language->init(); + $language->setActive($lang); + + // TODO: $hasReset test can be removed (keep reset!) when Grav minimum >= v1.6.22 + if ($hasReset) { + $pages->reset(); + } + } + + echo "\nLanguage: {$lang}\n"; + + $gtnt = static::getSearchObjectType(); + $gtnt->createIndex(); + } + } else { + $gtnt = static::getSearchObjectType(); + $gtnt->createIndex(); + } + + $output = ob_get_clean(); + + // Reset and get index count and status + $gtnt = static::getSearchObjectType(); + [$status, $msg] = static::getIndexCount($gtnt); + + return [$status, $msg, $output]; + } + + /** + * Helper to initialize TNTSearch if required + * + * @return GravTNTSearch + */ + protected function GravTNTSearch() + { + if (!isset($this->grav['tntsearch'])) { + $this->grav['tntsearch'] = static::getSearchObjectType(); + } + + return $this->grav['tntsearch']; + } +} diff --git a/plugins/tntsearch/tntsearch.yaml b/plugins/tntsearch/tntsearch.yaml new file mode 100644 index 0000000..c0df206 --- /dev/null +++ b/plugins/tntsearch/tntsearch.yaml @@ -0,0 +1,29 @@ +enabled: true +search_route: '/search' +query_route: '/s' +built_in_css: true +built_in_js: true +built_in_search_page: true +enable_admin_page_events: true +search_type: auto +fuzzy: false +distance: 2 +phrases: true +stemmer: default +display_route: true +display_hits: true +display_time: true +live_uri_update: true +limit: 20 +min: 3 +snippet: 300 +index_page_by_default: true +scheduled_index: + enabled: false + at: '0 */3 * * *' + logs: 'logs/tntsearch-index.out' +filter: + items: + - root@.descendants +powered_by: true +search_object_type: Grav diff --git a/plugins/tntsearch/vendor/autoload.php b/plugins/tntsearch/vendor/autoload.php new file mode 100644 index 0000000..0c40f1f --- /dev/null +++ b/plugins/tntsearch/vendor/autoload.php @@ -0,0 +1,25 @@ + + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer\Autoload; + +/** + * ClassLoader implements a PSR-0, PSR-4 and classmap class loader. + * + * $loader = new \Composer\Autoload\ClassLoader(); + * + * // register classes with namespaces + * $loader->add('Symfony\Component', __DIR__.'/component'); + * $loader->add('Symfony', __DIR__.'/framework'); + * + * // activate the autoloader + * $loader->register(); + * + * // to enable searching the include path (eg. for PEAR packages) + * $loader->setUseIncludePath(true); + * + * In this example, if you try to use a class in the Symfony\Component + * namespace or one of its children (Symfony\Component\Console for instance), + * the autoloader will first look for the class under the component/ + * directory, and it will then fallback to the framework/ directory if not + * found before giving up. + * + * This class is loosely based on the Symfony UniversalClassLoader. + * + * @author Fabien Potencier + * @author Jordi Boggiano + * @see https://www.php-fig.org/psr/psr-0/ + * @see https://www.php-fig.org/psr/psr-4/ + */ +class ClassLoader +{ + /** @var \Closure(string):void */ + private static $includeFile; + + /** @var ?string */ + private $vendorDir; + + // PSR-4 + /** + * @var array[] + * @psalm-var array> + */ + private $prefixLengthsPsr4 = array(); + /** + * @var array[] + * @psalm-var array> + */ + private $prefixDirsPsr4 = array(); + /** + * @var array[] + * @psalm-var array + */ + private $fallbackDirsPsr4 = array(); + + // PSR-0 + /** + * @var array[] + * @psalm-var array> + */ + private $prefixesPsr0 = array(); + /** + * @var array[] + * @psalm-var array + */ + private $fallbackDirsPsr0 = array(); + + /** @var bool */ + private $useIncludePath = false; + + /** + * @var string[] + * @psalm-var array + */ + private $classMap = array(); + + /** @var bool */ + private $classMapAuthoritative = false; + + /** + * @var bool[] + * @psalm-var array + */ + private $missingClasses = array(); + + /** @var ?string */ + private $apcuPrefix; + + /** + * @var self[] + */ + private static $registeredLoaders = array(); + + /** + * @param ?string $vendorDir + */ + public function __construct($vendorDir = null) + { + $this->vendorDir = $vendorDir; + self::initializeIncludeClosure(); + } + + /** + * @return string[] + */ + public function getPrefixes() + { + if (!empty($this->prefixesPsr0)) { + return call_user_func_array('array_merge', array_values($this->prefixesPsr0)); + } + + return array(); + } + + /** + * @return array[] + * @psalm-return array> + */ + public function getPrefixesPsr4() + { + return $this->prefixDirsPsr4; + } + + /** + * @return array[] + * @psalm-return array + */ + public function getFallbackDirs() + { + return $this->fallbackDirsPsr0; + } + + /** + * @return array[] + * @psalm-return array + */ + public function getFallbackDirsPsr4() + { + return $this->fallbackDirsPsr4; + } + + /** + * @return string[] Array of classname => path + * @psalm-return array + */ + public function getClassMap() + { + return $this->classMap; + } + + /** + * @param string[] $classMap Class to filename map + * @psalm-param array $classMap + * + * @return void + */ + public function addClassMap(array $classMap) + { + if ($this->classMap) { + $this->classMap = array_merge($this->classMap, $classMap); + } else { + $this->classMap = $classMap; + } + } + + /** + * Registers a set of PSR-0 directories for a given prefix, either + * appending or prepending to the ones previously set for this prefix. + * + * @param string $prefix The prefix + * @param string[]|string $paths The PSR-0 root directories + * @param bool $prepend Whether to prepend the directories + * + * @return void + */ + public function add($prefix, $paths, $prepend = false) + { + if (!$prefix) { + if ($prepend) { + $this->fallbackDirsPsr0 = array_merge( + (array) $paths, + $this->fallbackDirsPsr0 + ); + } else { + $this->fallbackDirsPsr0 = array_merge( + $this->fallbackDirsPsr0, + (array) $paths + ); + } + + return; + } + + $first = $prefix[0]; + if (!isset($this->prefixesPsr0[$first][$prefix])) { + $this->prefixesPsr0[$first][$prefix] = (array) $paths; + + return; + } + if ($prepend) { + $this->prefixesPsr0[$first][$prefix] = array_merge( + (array) $paths, + $this->prefixesPsr0[$first][$prefix] + ); + } else { + $this->prefixesPsr0[$first][$prefix] = array_merge( + $this->prefixesPsr0[$first][$prefix], + (array) $paths + ); + } + } + + /** + * Registers a set of PSR-4 directories for a given namespace, either + * appending or prepending to the ones previously set for this namespace. + * + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param string[]|string $paths The PSR-4 base directories + * @param bool $prepend Whether to prepend the directories + * + * @throws \InvalidArgumentException + * + * @return void + */ + public function addPsr4($prefix, $paths, $prepend = false) + { + if (!$prefix) { + // Register directories for the root namespace. + if ($prepend) { + $this->fallbackDirsPsr4 = array_merge( + (array) $paths, + $this->fallbackDirsPsr4 + ); + } else { + $this->fallbackDirsPsr4 = array_merge( + $this->fallbackDirsPsr4, + (array) $paths + ); + } + } elseif (!isset($this->prefixDirsPsr4[$prefix])) { + // Register directories for a new namespace. + $length = strlen($prefix); + if ('\\' !== $prefix[$length - 1]) { + throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); + } + $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; + $this->prefixDirsPsr4[$prefix] = (array) $paths; + } elseif ($prepend) { + // Prepend directories for an already registered namespace. + $this->prefixDirsPsr4[$prefix] = array_merge( + (array) $paths, + $this->prefixDirsPsr4[$prefix] + ); + } else { + // Append directories for an already registered namespace. + $this->prefixDirsPsr4[$prefix] = array_merge( + $this->prefixDirsPsr4[$prefix], + (array) $paths + ); + } + } + + /** + * Registers a set of PSR-0 directories for a given prefix, + * replacing any others previously set for this prefix. + * + * @param string $prefix The prefix + * @param string[]|string $paths The PSR-0 base directories + * + * @return void + */ + public function set($prefix, $paths) + { + if (!$prefix) { + $this->fallbackDirsPsr0 = (array) $paths; + } else { + $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths; + } + } + + /** + * Registers a set of PSR-4 directories for a given namespace, + * replacing any others previously set for this namespace. + * + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param string[]|string $paths The PSR-4 base directories + * + * @throws \InvalidArgumentException + * + * @return void + */ + public function setPsr4($prefix, $paths) + { + if (!$prefix) { + $this->fallbackDirsPsr4 = (array) $paths; + } else { + $length = strlen($prefix); + if ('\\' !== $prefix[$length - 1]) { + throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); + } + $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; + $this->prefixDirsPsr4[$prefix] = (array) $paths; + } + } + + /** + * Turns on searching the include path for class files. + * + * @param bool $useIncludePath + * + * @return void + */ + public function setUseIncludePath($useIncludePath) + { + $this->useIncludePath = $useIncludePath; + } + + /** + * Can be used to check if the autoloader uses the include path to check + * for classes. + * + * @return bool + */ + public function getUseIncludePath() + { + return $this->useIncludePath; + } + + /** + * Turns off searching the prefix and fallback directories for classes + * that have not been registered with the class map. + * + * @param bool $classMapAuthoritative + * + * @return void + */ + public function setClassMapAuthoritative($classMapAuthoritative) + { + $this->classMapAuthoritative = $classMapAuthoritative; + } + + /** + * Should class lookup fail if not found in the current class map? + * + * @return bool + */ + public function isClassMapAuthoritative() + { + return $this->classMapAuthoritative; + } + + /** + * APCu prefix to use to cache found/not-found classes, if the extension is enabled. + * + * @param string|null $apcuPrefix + * + * @return void + */ + public function setApcuPrefix($apcuPrefix) + { + $this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null; + } + + /** + * The APCu prefix in use, or null if APCu caching is not enabled. + * + * @return string|null + */ + public function getApcuPrefix() + { + return $this->apcuPrefix; + } + + /** + * Registers this instance as an autoloader. + * + * @param bool $prepend Whether to prepend the autoloader or not + * + * @return void + */ + public function register($prepend = false) + { + spl_autoload_register(array($this, 'loadClass'), true, $prepend); + + if (null === $this->vendorDir) { + return; + } + + if ($prepend) { + self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders; + } else { + unset(self::$registeredLoaders[$this->vendorDir]); + self::$registeredLoaders[$this->vendorDir] = $this; + } + } + + /** + * Unregisters this instance as an autoloader. + * + * @return void + */ + public function unregister() + { + spl_autoload_unregister(array($this, 'loadClass')); + + if (null !== $this->vendorDir) { + unset(self::$registeredLoaders[$this->vendorDir]); + } + } + + /** + * Loads the given class or interface. + * + * @param string $class The name of the class + * @return true|null True if loaded, null otherwise + */ + public function loadClass($class) + { + if ($file = $this->findFile($class)) { + $includeFile = self::$includeFile; + $includeFile($file); + + return true; + } + + return null; + } + + /** + * Finds the path to the file where the class is defined. + * + * @param string $class The name of the class + * + * @return string|false The path if found, false otherwise + */ + public function findFile($class) + { + // class map lookup + if (isset($this->classMap[$class])) { + return $this->classMap[$class]; + } + if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) { + return false; + } + if (null !== $this->apcuPrefix) { + $file = apcu_fetch($this->apcuPrefix.$class, $hit); + if ($hit) { + return $file; + } + } + + $file = $this->findFileWithExtension($class, '.php'); + + // Search for Hack files if we are running on HHVM + if (false === $file && defined('HHVM_VERSION')) { + $file = $this->findFileWithExtension($class, '.hh'); + } + + if (null !== $this->apcuPrefix) { + apcu_add($this->apcuPrefix.$class, $file); + } + + if (false === $file) { + // Remember that this class does not exist. + $this->missingClasses[$class] = true; + } + + return $file; + } + + /** + * Returns the currently registered loaders indexed by their corresponding vendor directories. + * + * @return self[] + */ + public static function getRegisteredLoaders() + { + return self::$registeredLoaders; + } + + /** + * @param string $class + * @param string $ext + * @return string|false + */ + private function findFileWithExtension($class, $ext) + { + // PSR-4 lookup + $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext; + + $first = $class[0]; + if (isset($this->prefixLengthsPsr4[$first])) { + $subPath = $class; + while (false !== $lastPos = strrpos($subPath, '\\')) { + $subPath = substr($subPath, 0, $lastPos); + $search = $subPath . '\\'; + if (isset($this->prefixDirsPsr4[$search])) { + $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1); + foreach ($this->prefixDirsPsr4[$search] as $dir) { + if (file_exists($file = $dir . $pathEnd)) { + return $file; + } + } + } + } + } + + // PSR-4 fallback dirs + foreach ($this->fallbackDirsPsr4 as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) { + return $file; + } + } + + // PSR-0 lookup + if (false !== $pos = strrpos($class, '\\')) { + // namespaced class name + $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1) + . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR); + } else { + // PEAR-like class name + $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext; + } + + if (isset($this->prefixesPsr0[$first])) { + foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) { + if (0 === strpos($class, $prefix)) { + foreach ($dirs as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { + return $file; + } + } + } + } + } + + // PSR-0 fallback dirs + foreach ($this->fallbackDirsPsr0 as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { + return $file; + } + } + + // PSR-0 include paths. + if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) { + return $file; + } + + return false; + } + + /** + * @return void + */ + private static function initializeIncludeClosure() + { + if (self::$includeFile !== null) { + return; + } + + /** + * Scope isolated include. + * + * Prevents access to $this/self from included files. + * + * @param string $file + * @return void + */ + self::$includeFile = \Closure::bind(static function($file) { + include $file; + }, null, null); + } +} diff --git a/plugins/tntsearch/vendor/composer/InstalledVersions.php b/plugins/tntsearch/vendor/composer/InstalledVersions.php new file mode 100644 index 0000000..c6b54af --- /dev/null +++ b/plugins/tntsearch/vendor/composer/InstalledVersions.php @@ -0,0 +1,352 @@ + + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer; + +use Composer\Autoload\ClassLoader; +use Composer\Semver\VersionParser; + +/** + * This class is copied in every Composer installed project and available to all + * + * See also https://getcomposer.org/doc/07-runtime.md#installed-versions + * + * To require its presence, you can require `composer-runtime-api ^2.0` + * + * @final + */ +class InstalledVersions +{ + /** + * @var mixed[]|null + * @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array}|array{}|null + */ + private static $installed; + + /** + * @var bool|null + */ + private static $canGetVendors; + + /** + * @var array[] + * @psalm-var array}> + */ + private static $installedByVendor = array(); + + /** + * Returns a list of all package names which are present, either by being installed, replaced or provided + * + * @return string[] + * @psalm-return list + */ + public static function getInstalledPackages() + { + $packages = array(); + foreach (self::getInstalled() as $installed) { + $packages[] = array_keys($installed['versions']); + } + + if (1 === \count($packages)) { + return $packages[0]; + } + + return array_keys(array_flip(\call_user_func_array('array_merge', $packages))); + } + + /** + * Returns a list of all package names with a specific type e.g. 'library' + * + * @param string $type + * @return string[] + * @psalm-return list + */ + public static function getInstalledPackagesByType($type) + { + $packagesByType = array(); + + foreach (self::getInstalled() as $installed) { + foreach ($installed['versions'] as $name => $package) { + if (isset($package['type']) && $package['type'] === $type) { + $packagesByType[] = $name; + } + } + } + + return $packagesByType; + } + + /** + * Checks whether the given package is installed + * + * This also returns true if the package name is provided or replaced by another package + * + * @param string $packageName + * @param bool $includeDevRequirements + * @return bool + */ + public static function isInstalled($packageName, $includeDevRequirements = true) + { + foreach (self::getInstalled() as $installed) { + if (isset($installed['versions'][$packageName])) { + return $includeDevRequirements || empty($installed['versions'][$packageName]['dev_requirement']); + } + } + + return false; + } + + /** + * Checks whether the given package satisfies a version constraint + * + * e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call: + * + * Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3') + * + * @param VersionParser $parser Install composer/semver to have access to this class and functionality + * @param string $packageName + * @param string|null $constraint A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package + * @return bool + */ + public static function satisfies(VersionParser $parser, $packageName, $constraint) + { + $constraint = $parser->parseConstraints($constraint); + $provided = $parser->parseConstraints(self::getVersionRanges($packageName)); + + return $provided->matches($constraint); + } + + /** + * Returns a version constraint representing all the range(s) which are installed for a given package + * + * It is easier to use this via isInstalled() with the $constraint argument if you need to check + * whether a given version of a package is installed, and not just whether it exists + * + * @param string $packageName + * @return string Version constraint usable with composer/semver + */ + public static function getVersionRanges($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + $ranges = array(); + if (isset($installed['versions'][$packageName]['pretty_version'])) { + $ranges[] = $installed['versions'][$packageName]['pretty_version']; + } + if (array_key_exists('aliases', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']); + } + if (array_key_exists('replaced', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']); + } + if (array_key_exists('provided', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']); + } + + return implode(' || ', $ranges); + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present + */ + public static function getVersion($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['version'])) { + return null; + } + + return $installed['versions'][$packageName]['version']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present + */ + public static function getPrettyVersion($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['pretty_version'])) { + return null; + } + + return $installed['versions'][$packageName]['pretty_version']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference + */ + public static function getReference($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['reference'])) { + return null; + } + + return $installed['versions'][$packageName]['reference']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path. + */ + public static function getInstallPath($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @return array + * @psalm-return array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool} + */ + public static function getRootPackage() + { + $installed = self::getInstalled(); + + return $installed[0]['root']; + } + + /** + * Returns the raw installed.php data for custom implementations + * + * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect. + * @return array[] + * @psalm-return array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} + */ + public static function getRawData() + { + @trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED); + + if (null === self::$installed) { + // only require the installed.php file if this file is loaded from its dumped location, + // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937 + if (substr(__DIR__, -8, 1) !== 'C') { + self::$installed = include __DIR__ . '/installed.php'; + } else { + self::$installed = array(); + } + } + + return self::$installed; + } + + /** + * Returns the raw data of all installed.php which are currently loaded for custom implementations + * + * @return array[] + * @psalm-return list}> + */ + public static function getAllRawData() + { + return self::getInstalled(); + } + + /** + * Lets you reload the static array from another file + * + * This is only useful for complex integrations in which a project needs to use + * this class but then also needs to execute another project's autoloader in process, + * and wants to ensure both projects have access to their version of installed.php. + * + * A typical case would be PHPUnit, where it would need to make sure it reads all + * the data it needs from this class, then call reload() with + * `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure + * the project in which it runs can then also use this class safely, without + * interference between PHPUnit's dependencies and the project's dependencies. + * + * @param array[] $data A vendor/composer/installed.php data set + * @return void + * + * @psalm-param array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $data + */ + public static function reload($data) + { + self::$installed = $data; + self::$installedByVendor = array(); + } + + /** + * @return array[] + * @psalm-return list}> + */ + private static function getInstalled() + { + if (null === self::$canGetVendors) { + self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders'); + } + + $installed = array(); + + if (self::$canGetVendors) { + foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) { + if (isset(self::$installedByVendor[$vendorDir])) { + $installed[] = self::$installedByVendor[$vendorDir]; + } elseif (is_file($vendorDir.'/composer/installed.php')) { + $installed[] = self::$installedByVendor[$vendorDir] = require $vendorDir.'/composer/installed.php'; + if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) { + self::$installed = $installed[count($installed) - 1]; + } + } + } + } + + if (null === self::$installed) { + // only require the installed.php file if this file is loaded from its dumped location, + // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937 + if (substr(__DIR__, -8, 1) !== 'C') { + self::$installed = require __DIR__ . '/installed.php'; + } else { + self::$installed = array(); + } + } + $installed[] = self::$installed; + + return $installed; + } +} diff --git a/plugins/tntsearch/vendor/composer/LICENSE b/plugins/tntsearch/vendor/composer/LICENSE new file mode 100644 index 0000000..f27399a --- /dev/null +++ b/plugins/tntsearch/vendor/composer/LICENSE @@ -0,0 +1,21 @@ + +Copyright (c) Nils Adermann, Jordi Boggiano + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + diff --git a/plugins/tntsearch/vendor/composer/autoload_classmap.php b/plugins/tntsearch/vendor/composer/autoload_classmap.php new file mode 100644 index 0000000..750f552 --- /dev/null +++ b/plugins/tntsearch/vendor/composer/autoload_classmap.php @@ -0,0 +1,11 @@ + $vendorDir . '/composer/InstalledVersions.php', + 'Grav\\Plugin\\TNTSearchPlugin' => $baseDir . '/tntsearch.php', +); diff --git a/plugins/tntsearch/vendor/composer/autoload_files.php b/plugins/tntsearch/vendor/composer/autoload_files.php new file mode 100644 index 0000000..e127d8d --- /dev/null +++ b/plugins/tntsearch/vendor/composer/autoload_files.php @@ -0,0 +1,10 @@ + $vendorDir . '/teamtnt/tntsearch/helper/helpers.php', +); diff --git a/plugins/tntsearch/vendor/composer/autoload_namespaces.php b/plugins/tntsearch/vendor/composer/autoload_namespaces.php new file mode 100644 index 0000000..15a2ff3 --- /dev/null +++ b/plugins/tntsearch/vendor/composer/autoload_namespaces.php @@ -0,0 +1,9 @@ + array($vendorDir . '/teamtnt/tntsearch/src'), + 'Grav\\Plugin\\TNTSearch\\' => array($baseDir . '/classes'), + 'Grav\\Plugin\\Console\\' => array($baseDir . '/cli'), +); diff --git a/plugins/tntsearch/vendor/composer/autoload_real.php b/plugins/tntsearch/vendor/composer/autoload_real.php new file mode 100644 index 0000000..aeacc66 --- /dev/null +++ b/plugins/tntsearch/vendor/composer/autoload_real.php @@ -0,0 +1,50 @@ +register(true); + + $filesToLoad = \Composer\Autoload\ComposerStaticInit6693564509f9a3fa6ed2c7bf76fdb017::$files; + $requireFile = \Closure::bind(static function ($fileIdentifier, $file) { + if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { + $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true; + + require $file; + } + }, null, null); + foreach ($filesToLoad as $fileIdentifier => $file) { + $requireFile($fileIdentifier, $file); + } + + return $loader; + } +} diff --git a/plugins/tntsearch/vendor/composer/autoload_static.php b/plugins/tntsearch/vendor/composer/autoload_static.php new file mode 100644 index 0000000..ac0125d --- /dev/null +++ b/plugins/tntsearch/vendor/composer/autoload_static.php @@ -0,0 +1,54 @@ + __DIR__ . '/..' . '/teamtnt/tntsearch/helper/helpers.php', + ); + + public static $prefixLengthsPsr4 = array ( + 'T' => + array ( + 'TeamTNT\\TNTSearch\\' => 18, + ), + 'G' => + array ( + 'Grav\\Plugin\\TNTSearch\\' => 22, + 'Grav\\Plugin\\Console\\' => 20, + ), + ); + + public static $prefixDirsPsr4 = array ( + 'TeamTNT\\TNTSearch\\' => + array ( + 0 => __DIR__ . '/..' . '/teamtnt/tntsearch/src', + ), + 'Grav\\Plugin\\TNTSearch\\' => + array ( + 0 => __DIR__ . '/../..' . '/classes', + ), + 'Grav\\Plugin\\Console\\' => + array ( + 0 => __DIR__ . '/../..' . '/cli', + ), + ); + + public static $classMap = array ( + 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php', + 'Grav\\Plugin\\TNTSearchPlugin' => __DIR__ . '/../..' . '/tntsearch.php', + ); + + public static function getInitializer(ClassLoader $loader) + { + return \Closure::bind(function () use ($loader) { + $loader->prefixLengthsPsr4 = ComposerStaticInit6693564509f9a3fa6ed2c7bf76fdb017::$prefixLengthsPsr4; + $loader->prefixDirsPsr4 = ComposerStaticInit6693564509f9a3fa6ed2c7bf76fdb017::$prefixDirsPsr4; + $loader->classMap = ComposerStaticInit6693564509f9a3fa6ed2c7bf76fdb017::$classMap; + + }, null, ClassLoader::class); + } +} diff --git a/plugins/tntsearch/vendor/composer/installed.json b/plugins/tntsearch/vendor/composer/installed.json new file mode 100644 index 0000000..86b5322 --- /dev/null +++ b/plugins/tntsearch/vendor/composer/installed.json @@ -0,0 +1,87 @@ +{ + "packages": [ + { + "name": "teamtnt/tntsearch", + "version": "v2.9.0", + "version_normalized": "2.9.0.0", + "source": { + "type": "git", + "url": "https://github.com/teamtnt/tntsearch.git", + "reference": "ccedae0cfe21f7831f2dd1f973cf8904dad42d8d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/teamtnt/tntsearch/zipball/ccedae0cfe21f7831f2dd1f973cf8904dad42d8d", + "reference": "ccedae0cfe21f7831f2dd1f973cf8904dad42d8d", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "ext-pdo_sqlite": "*", + "ext-sqlite3": "*", + "php": "~7.1|^8" + }, + "require-dev": { + "phpunit/phpunit": "7.*|8.*|9.*", + "symfony/var-dumper": "^4|^5.2" + }, + "time": "2022-02-22T10:35:34+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "files": [ + "helper/helpers.php" + ], + "psr-4": { + "TeamTNT\\TNTSearch\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nenad Tičarić", + "email": "nticaric@gmail.com", + "homepage": "http://www.tntstudio.us", + "role": "Developer" + } + ], + "description": "A fully featured full text search engine written in PHP", + "homepage": "https://github.com/teamtnt/tntsearch", + "keywords": [ + "Fuzzy search", + "bm25", + "fulltext", + "geosearch", + "search", + "stemming", + "teamtnt", + "text classification", + "tntsearch" + ], + "support": { + "issues": "https://github.com/teamtnt/tntsearch/issues", + "source": "https://github.com/teamtnt/tntsearch/tree/v2.9.0" + }, + "funding": [ + { + "url": "https://ko-fi.com/nticaric", + "type": "ko_fi" + }, + { + "url": "https://opencollective.com/tntsearch", + "type": "open_collective" + }, + { + "url": "https://www.patreon.com/nticaric", + "type": "patreon" + } + ], + "install-path": "../teamtnt/tntsearch" + } + ], + "dev": true, + "dev-package-names": [] +} diff --git a/plugins/tntsearch/vendor/composer/installed.php b/plugins/tntsearch/vendor/composer/installed.php new file mode 100644 index 0000000..6289ad0 --- /dev/null +++ b/plugins/tntsearch/vendor/composer/installed.php @@ -0,0 +1,32 @@ + array( + 'name' => 'trilbymedia/grav-plugin-tntsearch', + 'pretty_version' => 'dev-develop', + 'version' => 'dev-develop', + 'reference' => '60562d62856c114f23c183f7873fe1c809f4c7b5', + 'type' => 'grav-plugin', + 'install_path' => __DIR__ . '/../../', + 'aliases' => array(), + 'dev' => true, + ), + 'versions' => array( + 'teamtnt/tntsearch' => array( + 'pretty_version' => 'v2.9.0', + 'version' => '2.9.0.0', + 'reference' => 'ccedae0cfe21f7831f2dd1f973cf8904dad42d8d', + 'type' => 'library', + 'install_path' => __DIR__ . '/../teamtnt/tntsearch', + 'aliases' => array(), + 'dev_requirement' => false, + ), + 'trilbymedia/grav-plugin-tntsearch' => array( + 'pretty_version' => 'dev-develop', + 'version' => 'dev-develop', + 'reference' => '60562d62856c114f23c183f7873fe1c809f4c7b5', + 'type' => 'grav-plugin', + 'install_path' => __DIR__ . '/../../', + 'aliases' => array(), + 'dev_requirement' => false, + ), + ), +); diff --git a/plugins/tntsearch/vendor/composer/platform_check.php b/plugins/tntsearch/vendor/composer/platform_check.php new file mode 100644 index 0000000..cd1bd2c --- /dev/null +++ b/plugins/tntsearch/vendor/composer/platform_check.php @@ -0,0 +1,26 @@ += 70103)) { + $issues[] = 'Your Composer dependencies require a PHP version ">= 7.1.3". You are running ' . PHP_VERSION . '.'; +} + +if ($issues) { + if (!headers_sent()) { + header('HTTP/1.1 500 Internal Server Error'); + } + if (!ini_get('display_errors')) { + if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') { + fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL); + } elseif (!headers_sent()) { + echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL; + } + } + trigger_error( + 'Composer detected issues in your platform: ' . implode(' ', $issues), + E_USER_ERROR + ); +} diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/.github/FUNDING.yml b/plugins/tntsearch/vendor/teamtnt/tntsearch/.github/FUNDING.yml new file mode 100644 index 0000000..d65b5f0 --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/.github/FUNDING.yml @@ -0,0 +1,3 @@ +open_collective: tntsearch +patreon: nticaric +ko_fi: nticaric diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/.github/stale.yml b/plugins/tntsearch/vendor/teamtnt/tntsearch/.github/stale.yml new file mode 100644 index 0000000..4094449 --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/.github/stale.yml @@ -0,0 +1,18 @@ +# Number of days of inactivity before an issue becomes stale +daysUntilStale: 240 +# Number of days of inactivity before a stale issue is closed +daysUntilClose: 7 +# Issues with these labels will never be considered stale +exemptLabels: + - pinned + - security + - PR +# Label to use when marking an issue as stale +staleLabel: wontfix +# Comment to post when marking an issue as stale. Set to `false` to disable +markComment: > + This issue has been automatically marked as stale because it has not had + recent activity. It will be closed if no further activity occurs. Thank you + for your contributions. +# Comment to post when closing a stale issue. Set to `false` to disable +closeComment: false diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/.gitignore b/plugins/tntsearch/vendor/teamtnt/tntsearch/.gitignore new file mode 100644 index 0000000..7f2eac6 --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/.gitignore @@ -0,0 +1,8 @@ +.idea/* +vendor +examples +.DS_Store +composer.lock +coverage +tests/_files/*.index +.phpunit.result.cache diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/.travis.yml b/plugins/tntsearch/vendor/teamtnt/tntsearch/.travis.yml new file mode 100644 index 0000000..cfebe76 --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/.travis.yml @@ -0,0 +1,22 @@ +language: php + +php: + - 7.1 + - 7.2 + - 7.3 + - 7.4 + - 8.0 + +addons: + code_climate: + repo_token: e43f1f89afb5a2f6acfaea42a6a9ebd8d33538208fafa8636826c173b3f7ec26 + +script: + - vendor/bin/phpunit + +before_script: + - composer self-update + - composer install + +after_script: + - vendor/bin/test-reporter diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/CHANGELOG.md b/plugins/tntsearch/vendor/teamtnt/tntsearch/CHANGELOG.md new file mode 100644 index 0000000..f0d8f80 --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/CHANGELOG.md @@ -0,0 +1,22 @@ +# Changelog + +All Notable changes to `tntsearch` will be documented in this file. + +Updates should follow the [Keep a CHANGELOG](http://keepachangelog.com/) principles. + +## NEXT - YYYY-MM-DD + +### Added +- Nothing + +### Deprecated +- Nothing + +### Fixed +- Nothing + +### Removed +- Nothing + +### Security +- Nothing diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/CODE_OF_CONDUCT.md b/plugins/tntsearch/vendor/teamtnt/tntsearch/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..7150c58 --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/CODE_OF_CONDUCT.md @@ -0,0 +1,46 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at info@tntstudio.hr. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] + +[homepage]: http://contributor-covenant.org +[version]: http://contributor-covenant.org/version/1/4/ diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/CONDUCT.md b/plugins/tntsearch/vendor/teamtnt/tntsearch/CONDUCT.md new file mode 100644 index 0000000..6ff94ca --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/CONDUCT.md @@ -0,0 +1,22 @@ +# Contributor Code of Conduct + +As contributors and maintainers of this project, and in the interest of fostering an open and welcoming community, we pledge to respect all people who contribute through reporting issues, posting feature requests, updating documentation, submitting pull requests or patches, and other activities. + +We are committed to making participation in this project a harassment-free experience for everyone, regardless of level of experience, gender, gender identity and expression, sexual orientation, disability, personal appearance, body size, race, ethnicity, age, religion, or nationality. + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery +* Personal attacks +* Trolling or insulting/derogatory comments +* Public or private harassment +* Publishing other's private information, such as physical or electronic addresses, without explicit permission +* Other unethical or unprofessional conduct. + +Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct. By adopting this Code of Conduct, project maintainers commit themselves to fairly and consistently applying these principles to every aspect of managing this project. Project maintainers who do not follow or enforce the Code of Conduct may be permanently removed from the project team. + +This code of conduct applies both within project spaces and in public spaces when an individual is representing the project or its community in a direct capacity. Personal views, beliefs and values of individuals do not necessarily reflect those of the organisation or affiliated individuals and organisations. + +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by opening an issue or contacting one or more of the project maintainers. + +This Code of Conduct is adapted from the [Contributor Covenant](http://contributor-covenant.org), version 1.2.0, available at [http://contributor-covenant.org/version/1/2/0/](http://contributor-covenant.org/version/1/2/0/) diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/CONTRIBUTING.md b/plugins/tntsearch/vendor/teamtnt/tntsearch/CONTRIBUTING.md new file mode 100644 index 0000000..f4d4c97 --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/CONTRIBUTING.md @@ -0,0 +1,32 @@ +# Contributing + +Contributions are **welcome** and will be fully **credited**. + +We accept contributions via Pull Requests on [Github](https://github.com/teamtnt/tntsearch). + + +## Pull Requests + +- **[PSR-2 Coding Standard](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md)** - The easiest way to apply the conventions is to install [PHP Code Sniffer](http://pear.php.net/package/PHP_CodeSniffer). + +- **Add tests!** - Your patch won't be accepted if it doesn't have tests. + +- **Document any change in behaviour** - Make sure the `README.md` and any other relevant documentation are kept up-to-date. + +- **Consider our release cycle** - We try to follow [SemVer v2.0.0](http://semver.org/). Randomly breaking public APIs is not an option. + +- **Create feature branches** - Don't ask us to pull from your master branch. + +- **One pull request per feature** - If you want to do more than one thing, send multiple pull requests. + +- **Send coherent history** - Make sure each individual commit in your pull request is meaningful. If you had to make multiple intermediate commits while developing, please [squash them](http://www.git-scm.com/book/en/v2/Git-Tools-Rewriting-History#Changing-Multiple-Commit-Messages) before submitting. + + +## Running Tests + +``` bash +$ composer test +``` + + +**Happy coding**! diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/LICENSE.md b/plugins/tntsearch/vendor/teamtnt/tntsearch/LICENSE.md new file mode 100644 index 0000000..12096cf --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/LICENSE.md @@ -0,0 +1,21 @@ +# The MIT License (MIT) + +Copyright (c) 2016 Nenad Tičarić + +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in +> all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +> THE SOFTWARE. diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/PS4Ware.md b/plugins/tntsearch/vendor/teamtnt/tntsearch/PS4Ware.md new file mode 100644 index 0000000..83bf4e2 --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/PS4Ware.md @@ -0,0 +1,9 @@ +# PS4Ware + +TNTSearch is PS4Ware: it's free to use, but if it makes to production +we'd appreciate a PS4 game. + + +### [Helm und Walter Team](https://helmundwalter.de/) + +![The Long Dark](https://user-images.githubusercontent.com/824840/66302347-0e8af800-e8f9-11e9-96d2-4bbf58532f34.png) diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/README.md b/plugins/tntsearch/vendor/teamtnt/tntsearch/README.md new file mode 100644 index 0000000..61aed08 --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/README.md @@ -0,0 +1,380 @@ +[![Latest Version on Packagist][ico-version]][link-packagist] +[![Total Downloads][ico-downloads]][link-downloads] +[![Software License][ico-license]](LICENSE.md) +[![Build Status](https://img.shields.io/travis/teamtnt/tntsearch/master.svg?style=flat-square)](https://travis-ci.org/teamtnt/tntsearch) +[![Slack Status](https://img.shields.io/badge/slack-chat-E01563.svg?style=flat-square)](https://tntsearch.slack.com) + +![TNTSearch](https://i.imgur.com/aYKsNYv.png) + +# TNTSearch + +TNTSearch is a full-text search (FTS) engine written entirely in PHP. A simple configuration allows you to add an amazing search experience in just minutes. Features include: + +* Fuzzy search +* Search as you type +* Geo-search +* Text classification +* Stemming +* Custom tokenizers +* Bm25 ranking algorithm +* Boolean search +* Result highlighting +* Dynamic index updates (no need to reindex each time) +* Easily deployable via Packagist.org + +We also created some demo pages that show tolerant retrieval with n-grams in action. +The package has a bunch of helper functions like Jaro-Winkler and Cosine similarity for distance calculations. It supports stemming for English, Croatian, Arabic, Italian, Russian, Portuguese and Ukrainian. If the built-in stemmers aren't enough, the engine lets you easily plugin any compatible snowball stemmer. Some forks of the package even support Chinese. And please contribute other languages! + +Unlike many other engines, the index can be easily updated without doing a reindex or using deltas. + +**View** [online demo](http://tntsearch.tntstudio.us/)  |  **Follow us** on +[Twitter](https://twitter.com/tntstudiohr), +or [Facebook](https://www.facebook.com/tntstudiohr)  |  +**Visit our sponsors**: + +

+ + + +

+ +--- +## Demo + +* [TV Shows Search](http://tntsearch.tntstudio.us/) +* [PHPUnit Documentation Search](http://phpunit.tntstudio.us) +* [City Search with n-grams](http://cities.tnt.studio/) + +## Tutorials + +* [Solving the search problem with Laravel and TNTSearch](https://tnt.studio/solving-the-search-problem-with-laravel-and-tntsearch) +* [Searching for Users with Laravel Scout and TNTSearch](https://tnt.studio/searching-for-users-with-laravel-scout-and-tntsearch) + +## Premium products + +If you're using TNT Search and finding it useful, take a look at our premium analytics tool: + + +[](https://analytics.tnt.studio) + +## Support us on Open Collective + +- [TNTSearch](https://opencollective.com/tntsearch) + +## Installation + +The easiest way to install TNTSearch is via [composer](http://getcomposer.org/): + +``` +composer require teamtnt/tntsearch +``` + +## Requirements + +Before you proceed, make sure your server meets the following requirements: + +* PHP >= 7.1 +* PDO PHP Extension +* SQLite PHP Extension +* mbstring PHP Extension + +## Examples + +### Creating an index + +In order to be able to make full text search queries, you have to create an index. + +Usage: +```php +use TeamTNT\TNTSearch\TNTSearch; + +$tnt = new TNTSearch; + +$tnt->loadConfig([ + 'driver' => 'mysql', + 'host' => 'localhost', + 'database' => 'dbname', + 'username' => 'user', + 'password' => 'pass', + 'storage' => '/var/www/tntsearch/examples/', + 'stemmer' => \TeamTNT\TNTSearch\Stemmer\PorterStemmer::class//optional +]); + +$indexer = $tnt->createIndex('name.index'); +$indexer->query('SELECT id, article FROM articles;'); +//$indexer->setLanguage('german'); +$indexer->run(); + +``` + +Important: "storage" settings marks the folder where all of your indexes +will be saved so make sure to have permission to write to this folder otherwise +you might expect the following exception thrown: + +* [PDOException] SQLSTATE[HY000] [14] unable to open database file * + +Note: If your primary key is different than `id` set it like: + +```php +$indexer->setPrimaryKey('article_id'); +``` + +### Making the primary key searchable + +By default, the primary key isn't searchable. If you want to make it searchable, simply run: + + +```php +$indexer->includePrimaryKey(); +``` + +### Searching + +Searching for a phrase or keyword is trivial: + +```php +use TeamTNT\TNTSearch\TNTSearch; + +$tnt = new TNTSearch; + +$tnt->loadConfig($config); +$tnt->selectIndex("name.index"); + +$res = $tnt->search("This is a test search", 12); + +print_r($res); //returns an array of 12 document ids that best match your query + +// to display the results you need an additional query against your application database +// SELECT * FROM articles WHERE id IN $res ORDER BY FIELD(id, $res); +``` + +The ORDER BY FIELD clause is important, otherwise the database engine will not return +the results in the required order. + +### Boolean Search + +```php +use TeamTNT\TNTSearch\TNTSearch; + +$tnt = new TNTSearch; + +$tnt->loadConfig($config); +$tnt->selectIndex("name.index"); + +//this will return all documents that have romeo in it but not juliet +$res = $tnt->searchBoolean("romeo -juliet"); + +//returns all documents that have romeo or hamlet in it +$res = $tnt->searchBoolean("romeo or hamlet"); + +//returns all documents that have either romeo AND juliet or prince AND hamlet +$res = $tnt->searchBoolean("(romeo juliet) or (prince hamlet)"); + +``` + +### Fuzzy Search + +The fuzziness can be tweaked by setting the following member variables: + +```php +public $fuzzy_prefix_length = 2; +public $fuzzy_max_expansions = 50; +public $fuzzy_distance = 2; //represents the Levenshtein distance; +``` + +```php +use TeamTNT\TNTSearch\TNTSearch; + +$tnt = new TNTSearch; + +$tnt->loadConfig($config); +$tnt->selectIndex("name.index"); +$tnt->fuzziness = true; + +//when the fuzziness flag is set to true, the keyword juleit will return +//documents that match the word juliet, the default Levenshtein distance is 2 +$res = $tnt->search("juleit"); + +``` +## Updating the index + +Once you created an index, you don't need to reindex it each time you make some changes +to your document collection. TNTSearch supports dynamic index updates. + +```php +use TeamTNT\TNTSearch\TNTSearch; + +$tnt = new TNTSearch; + +$tnt->loadConfig($config); +$tnt->selectIndex("name.index"); + +$index = $tnt->getIndex(); + +//to insert a new document to the index +$index->insert(['id' => '11', 'title' => 'new title', 'article' => 'new article']); + +//to update an existing document +$index->update(11, ['id' => '11', 'title' => 'updated title', 'article' => 'updated article']); + +//to delete the document from index +$index->delete(12); +``` + +## Custom Tokenizer +First, create your own Tokenizer class. It should extend AbstractTokenizer class, define +word split $pattern value and must implement TokenizerInterface: + +``` php + +use TeamTNT\TNTSearch\Support\AbstractTokenizer; +use TeamTNT\TNTSearch\Support\TokenizerInterface; + +class SomeTokenizer extends AbstractTokenizer implements TokenizerInterface +{ + static protected $pattern = '/[\s,\.]+/'; + + public function tokenize($text) { + return preg_split($this->getPattern(), strtolower($text), -1, PREG_SPLIT_NO_EMPTY); + } +} +``` + +This tokenizer will split words using spaces, commas and periods. + +After you have the tokenizer ready, you should pass it to `TNTIndexer` via `setTokenizer` method. + +``` php +$someTokenizer = new SomeTokenizer; + +$indexer = new TNTIndexer; +$indexer->setTokenizer($someTokenizer); +``` + +Another way would be to pass the tokenizer via config: + +```php +use TeamTNT\TNTSearch\TNTSearch; + +$tnt = new TNTSearch; + +$tnt->loadConfig([ + 'driver' => 'mysql', + 'host' => 'localhost', + 'database' => 'dbname', + 'username' => 'user', + 'password' => 'pass', + 'storage' => '/var/www/tntsearch/examples/', + 'stemmer' => \TeamTNT\TNTSearch\Stemmer\PorterStemmer::class//optional, + 'tokenizer' => \TeamTNT\TNTSearch\Support\SomeTokenizer::class +]); + +$indexer = $tnt->createIndex('name.index'); +$indexer->query('SELECT id, article FROM articles;'); +$indexer->run(); + +``` + +## Geo Search + +### Indexing + +```php +$candyShopIndexer = new TNTGeoIndexer; +$candyShopIndexer->loadConfig($config); +$candyShopIndexer->createIndex('candyShops.index'); +$candyShopIndexer->query('SELECT id, longitude, latitude FROM candy_shops;'); +$candyShopIndexer->run(); +``` +### Searching + +```php +$currentLocation = [ + 'longitude' => 11.576124, + 'latitude' => 48.137154 +]; + +$distance = 2; //km + +$candyShopIndex = new TNTGeoSearch(); +$candyShopIndex->loadConfig($config); +$candyShopIndex->selectIndex('candyShops.index'); + +$candyShops = $candyShopIndex->findNearest($currentLocation, $distance, 10); +``` + +## Classification + +```php +use TeamTNT\TNTSearch\Classifier\TNTClassifier; + +$classifier = new TNTClassifier(); +$classifier->learn("A great game", "Sports"); +$classifier->learn("The election was over", "Not sports"); +$classifier->learn("Very clean match", "Sports"); +$classifier->learn("A clean but forgettable game", "Sports"); + +$guess = $classifier->predict("It was a close election"); +var_dump($guess['label']); //returns "Not sports" + +``` + +### Saving the classifier + +```php +$classifier->save('sports.cls'); +``` + +### Loading the classifier + +```php +$classifier = new TNTClassifier(); +$classifier->load('sports.cls'); +``` + +## Drivers + +* [TNTSearch Driver for Laravel Scout](https://github.com/teamtnt/laravel-scout-tntsearch-driver) + +## PS4Ware + +You're free to use this package, but if it makes it to your production environment, we would highly appreciate you sending us a PS4 game of your choice. This way you support us to further develop and add new features. + +Our address is: TNT Studio, Sv. Mateja 19, 10010 Zagreb, Croatia. + +We'll publish all received games [here][link-ps4ware] + +[link-ps4ware]: https://github.com/teamtnt/tntsearch/blob/master/PS4Ware.md + +## Support [![OpenCollective](https://opencollective.com/tntsearch/backers/badge.svg)](#backers) [![OpenCollective](https://opencollective.com/tntsearch/sponsors/badge.svg)](#sponsors) + +Buy Me a Coffee at ko-fi.com + +### Backers + +Support us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/tntsearch#backer)] + +## Sponsors + +Become a sponsor and get your logo on our README on Github with a link to your site. [[Become a sponsor](https://opencollective.com/tntsearch#sponsor)] + +## Credits + +- [Nenad Tičarić][link-author] +- [All Contributors][link-contributors] + +## License + +The MIT License (MIT). Please see [License File](LICENSE.md) for more information. + +[ico-version]: https://img.shields.io/packagist/v/teamtnt/tntsearch.svg?style=flat-square +[ico-license]: https://img.shields.io/badge/license-MIT-brightgreen.svg?style=flat-square +[ico-downloads]: https://img.shields.io/packagist/dt/teamtnt/tntsearch.svg?style=flat-square + +[link-packagist]: https://packagist.org/packages/teamtnt/tntsearch +[link-downloads]: https://packagist.org/packages/teamtnt/tntsearch +[link-author]: https://github.com/nticaric +[link-contributors]: ../../contributors + +--- +From Croatia with ♥ by TNT Studio ([@tntstudiohr](https://twitter.com/tntstudiohr), [blog](https://tnt.studio)) diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/composer.json b/plugins/tntsearch/vendor/teamtnt/tntsearch/composer.json new file mode 100644 index 0000000..f1a0bad --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/composer.json @@ -0,0 +1,42 @@ +{ + "name": "teamtnt/tntsearch", + "type": "library", + "description": "A fully featured full text search engine written in PHP", + "keywords": [ + "teamtnt", + "tntsearch", + "search", + "fulltext", + "geosearch", + "text classification", + "bm25", + "stemming", + "fuzzy search" + ], + "homepage": "https://github.com/teamtnt/tntsearch", + "license": "MIT", + "authors": [{ + "name": "Nenad Tičarić", + "email": "nticaric@gmail.com", + "homepage": "http://www.tntstudio.us", + "role": "Developer" + }], + "require": { + "php": "~7.1|^8", + "ext-pdo_sqlite": "*", + "ext-sqlite3": "*", + "ext-mbstring": "*" + }, + "require-dev": { + "phpunit/phpunit": "7.*|8.*|9.*", + "symfony/var-dumper": "^4|^5.2" + }, + "autoload": { + "psr-4": { + "TeamTNT\\TNTSearch\\": "src" + }, + "files": [ + "helper/helpers.php" + ] + } +} \ No newline at end of file diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/helper/helpers.php b/plugins/tntsearch/vendor/teamtnt/tntsearch/helper/helpers.php new file mode 100644 index 0000000..e0a663b --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/helper/helpers.php @@ -0,0 +1,25 @@ += 0 && strpos($haystack, $needle, $temp) !== false); + } +} + +if (!function_exists('fuzzyMatch')) { + function fuzzyMatch($pattern, $items) + { + $fm = new TeamTNT\TNTSearch\TNTFuzzyMatch; + return $fm->fuzzyMatch($pattern, $items); + } +} + +if (!function_exists('fuzzyMatchFromFile')) { + function fuzzyMatchFromFile($pattern, $path) + { + $fm = new TeamTNT\TNTSearch\TNTFuzzyMatch; + return $fm->fuzzyMatchFromFile($pattern, $path); + } +} diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/phpunit.php b/plugins/tntsearch/vendor/teamtnt/tntsearch/phpunit.php new file mode 100644 index 0000000..22134c3 --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/phpunit.php @@ -0,0 +1,15 @@ + + + + + ./tests/ + + + + \ No newline at end of file diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Classifier/TNTClassifier.php b/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Classifier/TNTClassifier.php new file mode 100644 index 0000000..94cfcfd --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Classifier/TNTClassifier.php @@ -0,0 +1,131 @@ +tokenizer = new Tokenizer; + $this->stemmer = new NoStemmer; + } + + public function predict($statement) + { + $words = $this->tokenizer->tokenize($statement); + + $best_likelihood = -INF; + $best_type = ''; + foreach ($this->types as $type) { + $likelihood = log($this->pTotal($type)); // calculate P(Type) + $p = 0; + foreach ($words as $word) { + $word = $this->stemmer->stem($word); + $p += log($this->p($word, $type)); + } + $likelihood += $p; // calculate P(word, Type) + if ($likelihood > $best_likelihood) { + $best_likelihood = $likelihood; + $best_type = $type; + } + } + return [ + 'likelihood' => $best_likelihood, + 'label' => $best_type + ]; + } + + public function learn($statement, $type) + { + if (!in_array($type, $this->types)) { + $this->types[] = $type; + } + + $words = $this->tokenizer->tokenize($statement); + + foreach ($words as $word) { + $word = $this->stemmer->stem($word); + + if (!isset($this->words[$type][$word])) { + $this->words[$type][$word] = 0; + } + $this->words[$type][$word]++; // increment the word count for the type + } + if (!isset($this->documents[$type])) { + $this->documents[$type] = 0; + } + + $this->documents[$type]++; // increment the document count for the type + } + + public function p($word, $type) + { + $count = 0; + if (isset($this->words[$type][$word])) { + $count = $this->words[$type][$word]; + } + + if (!isset($this->arraySumOfWordType[$type])) { + $this->arraySumOfWordType[$type] = array_sum($this->words[$type]); + } + + return ($count + 1) / ($this->arraySumOfWordType[$type] + $this->vocabularyCount()); + } + + public function pTotal($type) + { + if (!isset($this->arraySumOfDocuments)) { + $this->arraySumOfDocuments = array_sum($this->documents); + } + return ($this->documents[$type]) / $this->arraySumOfDocuments; + } + + public function vocabularyCount() + { + if (isset($this->vc)) { + return $this->vc; + } + + $words = []; + foreach ($this->words as $key => $value) { + foreach ($this->words[$key] as $word => $count) { + $words[$word] = 0; + } + } + $this->vc = count($words); + return $this->vc; + } + + public function save($path) + { + $s = serialize($this); + return file_put_contents($path, $s); + } + + public function load($name) + { + $s = file_get_contents($name); + $classifier = unserialize($s); + + unset($this->vc); + unset($this->arraySumOfDocuments); + unset($this->arraySumOfWordType); + + $this->documents = $classifier->documents; + $this->words = $classifier->words; + $this->types = $classifier->types; + $this->tokenizer = $classifier->tokenizer; + $this->stemmer = $classifier->stemmer; + } +} diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Connectors/Connector.php b/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Connectors/Connector.php new file mode 100644 index 0000000..7f573b2 --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Connectors/Connector.php @@ -0,0 +1,77 @@ + PDO::CASE_NATURAL, + PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, + PDO::ATTR_ORACLE_NULLS => PDO::NULL_NATURAL, + PDO::ATTR_STRINGIFY_FETCHES => false, + PDO::ATTR_EMULATE_PREPARES => false, + ]; + + /** + * Get the PDO options based on the configuration. + * + * @param array $config + * @return array + */ + public function getOptions(array $config) + { + return $this->options; + } + + /** + * Create a new PDO connection. + * + * @param string $dsn + * @param array $config + * @param array $options + * @return \PDO + */ + public function createConnection($dsn, array $config, array $options) + { + extract($config, EXTR_SKIP); + + if (!array_key_exists('username', $config)) { + $username = null; + } + + if (!array_key_exists('password', $config)) { + $password = null; + } + + return new PDO($dsn, $username, $password, $options); + + } + + /** + * Get the default PDO connection options. + * + * @return array + */ + public function getDefaultOptions() + { + return $this->options; + } + + /** + * Set the default PDO connection options. + * + * @param array $options + * @return void + */ + public function setDefaultOptions(array $options) + { + $this->options = $options; + } +} diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Connectors/ConnectorInterface.php b/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Connectors/ConnectorInterface.php new file mode 100644 index 0000000..bbb3880 --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Connectors/ConnectorInterface.php @@ -0,0 +1,14 @@ +getDsn($config); + + $options = $this->getOptions($config); + + // We need to grab the PDO options that should be used while making the brand + // new connection instance. The PDO options control various aspects of the + // connection's behavior, and some might be specified by the developers. + $connection = $this->createConnection($dsn, $config, $options); + + if (! empty($config['database'])) { + $connection->exec("use `{$config['database']}`;"); + } + + $collation = 'utf8_unicode_ci'; + + if (! empty($config['collation'])) { + $collation = $config['collation']; + } + + // Next we will set the "names" and "collation" on the clients connections so + // a correct character set will be used by this client. The collation also + // is set on the server but needs to be set here on this client objects. + if (isset($config['charset'])) { + $charset = $config['charset']; + + $names = "set names '{$charset}'". + (! is_null($collation) ? " collate '{$collation}'" : ''); + + $connection->prepare($names)->execute(); + } + // Next, we will check to see if a timezone has been specified in this config + // and if it has we will issue a statement to modify the timezone with the + // database. Setting this DB timezone is an optional configuration item. + if (isset($config['timezone'])) { + $connection->prepare( + 'set time_zone="'.$config['timezone'].'"' + )->execute(); + } + + $this->setModes($connection, $config); + + return $connection; + } + + public function getOptions(array $config) + { + return array_merge(parent::getOptions($config), [ + PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => false, + ]); + } + + /** + * Create a DSN string from a configuration. + * + * Chooses socket or host/port based on the 'unix_socket' config value. + * + * @param array $config + * @return string + */ + protected function getDsn(array $config) + { + return $this->configHasSocket($config) ? $this->getSocketDsn($config) : $this->getHostDsn($config); + } + + /** + * Determine if the given configuration array has a UNIX socket value. + * + * @param array $config + * @return bool + */ + protected function configHasSocket(array $config) + { + return isset($config['unix_socket']) && ! empty($config['unix_socket']); + } + + /** + * Get the DSN string for a socket configuration. + * + * @param array $config + * @return string + */ + protected function getSocketDsn(array $config) + { + return "mysql:unix_socket={$config['unix_socket']};dbname={$config['database']}"; + } + + /** + * Get the DSN string for a host / port configuration. + * + * @param array $config + * @return string + */ + protected function getHostDsn(array $config) + { + extract($config, EXTR_SKIP); + + return isset($port) + ? "mysql:host={$host};port={$port};dbname={$database}" + : "mysql:host={$host};dbname={$database}"; + } + + /** + * Set the modes for the connection. + * + * @param \PDO $connection + * @param array $config + * @return void + */ + protected function setModes(PDO $connection, array $config) + { + if (isset($config['modes'])) { + $modes = implode(',', $config['modes']); + + $connection->prepare("set session sql_mode='{$modes}'")->execute(); + } elseif (isset($config['strict'])) { + if ($config['strict']) { + $connection->prepare("set session sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'")->execute(); + } else { + $connection->prepare("set session sql_mode='NO_ENGINE_SUBSTITUTION'")->execute(); + } + } + } +} diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Connectors/PostgresConnector.php b/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Connectors/PostgresConnector.php new file mode 100644 index 0000000..1477747 --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Connectors/PostgresConnector.php @@ -0,0 +1,121 @@ + PDO::CASE_NATURAL, + PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, + PDO::ATTR_ORACLE_NULLS => PDO::NULL_NATURAL, + PDO::ATTR_STRINGIFY_FETCHES => false, + ]; + + /** + * Establish a database connection. + * + * @param array $config + * @return \PDO + */ + public function connect(array $config) + { + // First we'll create the basic DSN and connection instance connecting to the + // using the configuration option specified by the developer. We will also + // set the default character set on the connections to UTF-8 by default. + $dsn = $this->getDsn($config); + + $options = $this->getOptions($config); + + $connection = $this->createConnection($dsn, $config, $options); + + $charset = 'utf8'; + + if (isset($config['charset'])) { + $charset = $config['charset']; + } + + $connection->prepare("set names '$charset'")->execute(); + + // Next, we will check to see if a timezone has been specified in this config + // and if it has we will issue a statement to modify the timezone with the + // database. Setting this DB timezone is an optional configuration item. + if (isset($config['timezone'])) { + $timezone = $config['timezone']; + + $connection->prepare("set time zone '$timezone'")->execute(); + } + + // Unlike MySQL, Postgres allows the concept of "schema" and a default schema + // may have been specified on the connections. If that is the case we will + // set the default schema search paths to the specified database schema. + if (isset($config['schema'])) { + $schema = $this->formatSchema($config['schema']); + + $connection->prepare("set search_path to {$schema}")->execute(); + } + + // Postgres allows an application_name to be set by the user and this name is + // used to when monitoring the application with pg_stat_activity. So we'll + // determine if the option has been specified and run a statement if so. + if (isset($config['application_name'])) { + $applicationName = $config['application_name']; + + $connection->prepare("set application_name to '$applicationName'")->execute(); + } + + return $connection; + } + + /** + * Create a DSN string from a configuration. + * + * @param array $config + * @return string + */ + protected function getDsn(array $config) + { + // First we will create the basic DSN setup as well as the port if it is in + // in the configuration options. This will give us the basic DSN we will + // need to establish the PDO connections and return them back for use. + extract($config, EXTR_SKIP); + + $host = isset($host) ? "host={$host};" : ''; + + $dsn = "pgsql:{$host}dbname={$database}"; + + // If a port was specified, we will add it to this Postgres DSN connections + // format. Once we have done that we are ready to return this connection + // string back out for usage, as this has been fully constructed here. + if (isset($config['port'])) { + $dsn .= ";port={$port}"; + } + + if (isset($config['sslmode'])) { + $dsn .= ";sslmode={$sslmode}"; + } + + return $dsn; + } + + /** + * Format the schema for the DSN. + * + * @param array|string $schema + * @return string + */ + protected function formatSchema($schema) + { + if (is_array($schema)) { + return '"'.implode('", "', $schema).'"'; + } else { + return '"'.$schema.'"'; + } + } +} \ No newline at end of file diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Connectors/SQLiteConnector.php b/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Connectors/SQLiteConnector.php new file mode 100644 index 0000000..2c8643b --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Connectors/SQLiteConnector.php @@ -0,0 +1,40 @@ +getOptions($config); + + // SQLite supports "in-memory" databases that only last as long as the owning + // connection does. These are useful for tests or for short lifetime store + // querying. In-memory databases may only have a single open connection. + if ($config['database'] == ':memory:') { + return $this->createConnection('sqlite::memory:', $config, $options); + } + + $path = realpath($config['database']); + + // Here we'll verify that the SQLite database exists before going any further + // as the developer probably wants to know if the database exists and this + // SQLite driver will not throw any exception if it does not by default. + if ($path === false) { + throw new Exception("Database (${config['database']}) does not exist."); + } + + return $this->createConnection("sqlite:{$path}", $config, $options); + } +} diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Connectors/SqlServerConnector.php b/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Connectors/SqlServerConnector.php new file mode 100644 index 0000000..5f6e196 --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Connectors/SqlServerConnector.php @@ -0,0 +1,71 @@ + PDO::CASE_NATURAL, + PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, + PDO::ATTR_ORACLE_NULLS => PDO::NULL_NATURAL, + PDO::ATTR_STRINGIFY_FETCHES => false, + ); + + /** + * Establish a database connection. + * + * @param array $config + * @return PDO + */ + public function connect(array $config) + { + $options = $this->getOptions($config); + + return $this->createConnection($this->getDsn($config), $config, $options); + } + + /** + * Create a DSN string from a configuration. + * + * @param array $config + * @return string + */ + protected function getDsn(array $config) + { + extract($config); + + // First we will create the basic DSN setup as well as the port if it is in + // in the configuration options. This will give us the basic DSN we will + // need to establish the PDO connections and return them back for use. + $port = isset($config['port']) ? ','.$port : ''; + + if (in_array('dblib', $this->getAvailableDrivers())) + { + return "dblib:host={$host}{$port};dbname={$database}"; + } + else + { + $dbName = $database != '' ? ";Database={$database}" : ''; + + return "sqlsrv:Server={$host}{$port}{$dbName}"; + } + } + + /** + * Get the available PDO drivers. + * + * @return array + */ + protected function getAvailableDrivers() + { + return PDO::getAvailableDrivers(); + } + +} \ No newline at end of file diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Exceptions/IndexNotFoundException.php b/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Exceptions/IndexNotFoundException.php new file mode 100644 index 0000000..fb96ed7 --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Exceptions/IndexNotFoundException.php @@ -0,0 +1,9 @@ +indexName = $indexName; + + if (file_exists($this->config['storage'].$indexName)) { + unlink($this->config['storage'].$indexName); + } + + $this->index = new PDO('sqlite:'.$this->config['storage'].$indexName); + $this->index->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); + + $this->index->exec("CREATE TABLE IF NOT EXISTS locations ( + doc_id INTEGER, + longitude REAL, + latitude REAL, + cos_lat REAL, + sin_lat REAL, + cos_lng REAL, + sin_lng REAL + )"); + + $this->index->exec("CREATE INDEX location_index ON locations ('longitude', 'latitude');"); + + $this->index->exec("CREATE TABLE IF NOT EXISTS info (key TEXT, value INTEGER)"); + + $connector = $this->createConnector($this->config); + if (!$this->dbh) { + $this->dbh = $connector->connect($this->config); + } + return $this; + } + + public function processDocument($row) + { + $this->prepareInsertStatement(); + + $docId = $row->get($this->getPrimaryKey()); + $longitude = $row->get('longitude'); + $latitude = $row->get('latitude'); + $cos_lat = cos($latitude * pi() / 180); + $sin_lat = sin($latitude * pi() / 180); + $cos_lng = cos($longitude * pi() / 180); + $sin_lng = sin($longitude * pi() / 180); + + $this->insertStmt->bindParam(":doc_id", $docId); + $this->insertStmt->bindParam(":longitude", $longitude); + $this->insertStmt->bindParam(":latitude", $latitude); + $this->insertStmt->bindParam(":cos_lat", $cos_lat); + $this->insertStmt->bindParam(":sin_lat", $sin_lat); + $this->insertStmt->bindParam(":cos_lng", $cos_lng); + $this->insertStmt->bindParam(":sin_lng", $sin_lng); + $this->insertStmt->execute(); + } + + public function prepareInsertStatement() + { + if (isset($this->insertStmt)) { + return $this->insertStmt; + } + + $this->insertStmt = $this->index->prepare("INSERT INTO locations (doc_id, longitude, latitude, cos_lat, sin_lat, cos_lng, sin_lng) + VALUES (:doc_id, :longitude, :latitude, :cos_lat, :sin_lat, :cos_lng, :sin_lng)"); + } +} diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Indexer/TNTIndexer.php b/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Indexer/TNTIndexer.php new file mode 100644 index 0000000..4275568 --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Indexer/TNTIndexer.php @@ -0,0 +1,695 @@ +stemmer = new NoStemmer; + $this->tokenizer = new Tokenizer; + $this->filereader = new TextFileReader; + } + + /** + * @param TokenizerInterface $tokenizer + */ + public function setTokenizer(TokenizerInterface $tokenizer) + { + $this->tokenizer = $tokenizer; + $this->updateInfoTable('tokenizer', get_class($tokenizer)); + } + + public function setStopWords(array $stopWords) + { + $this->stopWords = $stopWords; + } + + /** + * @param array $config + */ + public function loadConfig(array $config) + { + $this->config = $config; + $this->config['storage'] = rtrim($this->config['storage'], '/').'/'; + + if (!isset($this->config['driver'])) { + $this->config['driver'] = ""; + } + + if (!isset($this->config['wal'])) { + $this->config['wal'] = true; + } + } + + /** + * @return string + */ + public function getStoragePath() + { + return $this->config['storage']; + } + + public function getStemmer() + { + return $this->stemmer; + } + + /** + * @return string + */ + public function getPrimaryKey() + { + if (isset($this->primaryKey)) { + return $this->primaryKey; + } + return 'id'; + } + + /** + * @param string $primaryKey + */ + public function setPrimaryKey($primaryKey) + { + $this->primaryKey = $primaryKey; + } + + public function excludePrimaryKey() + { + $this->excludePrimaryKey = true; + } + + public function includePrimaryKey() + { + $this->excludePrimaryKey = false; + } + + public function setStemmer($stemmer) + { + $this->stemmer = $stemmer; + $this->updateInfoTable('stemmer', get_class($stemmer)); + } + + public function setCroatianStemmer() + { + $this->setStemmer(new CroatianStemmer); + } + + /** + * @param string $language - one of: no, arabic, croatian, german, italian, porter, portuguese, russian, ukrainian + */ + public function setLanguage($language = 'no') + { + $class = 'TeamTNT\\TNTSearch\\Stemmer\\'.ucfirst(strtolower($language)).'Stemmer'; + $this->setStemmer(new $class); + } + + /** + * @param PDO $index + */ + public function setIndex($index) + { + $this->index = $index; + } + + public function setFileReader($filereader) + { + $this->filereader = $filereader; + } + + public function prepareStatementsForIndex() + { + if (!$this->statementsPrepared) { + $this->insertWordlistStmt = $this->index->prepare("INSERT INTO wordlist (term, num_hits, num_docs) VALUES (:keyword, :hits, :docs)"); + $this->selectWordlistStmt = $this->index->prepare("SELECT * FROM wordlist WHERE term like :keyword LIMIT 1"); + $this->updateWordlistStmt = $this->index->prepare("UPDATE wordlist SET num_docs = num_docs + :docs, num_hits = num_hits + :hits WHERE term = :keyword"); + $this->statementsPrepared = true; + } + } + + /** + * @param string $indexName + * + * @return TNTIndexer + */ + public function createIndex($indexName) + { + $this->indexName = $indexName; + + if (file_exists($this->config['storage'].$indexName)) { + unlink($this->config['storage'].$indexName); + } + + $this->index = new PDO('sqlite:'.$this->config['storage'].$indexName); + $this->index->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); + + if ($this->config['wal']) { + $this->index->exec("PRAGMA journal_mode=wal;"); + } + + $this->index->exec("CREATE TABLE IF NOT EXISTS wordlist ( + id INTEGER PRIMARY KEY, + term TEXT UNIQUE COLLATE nocase, + num_hits INTEGER, + num_docs INTEGER)"); + + $this->index->exec("CREATE UNIQUE INDEX 'main'.'index' ON wordlist ('term');"); + + $this->index->exec("CREATE TABLE IF NOT EXISTS doclist ( + term_id INTEGER, + doc_id INTEGER, + hit_count INTEGER)"); + + $this->index->exec("CREATE TABLE IF NOT EXISTS fields ( + id INTEGER PRIMARY KEY, + name TEXT)"); + + $this->index->exec("CREATE TABLE IF NOT EXISTS hitlist ( + term_id INTEGER, + doc_id INTEGER, + field_id INTEGER, + position INTEGER, + hit_count INTEGER)"); + + $this->index->exec("CREATE TABLE IF NOT EXISTS info ( + key TEXT, + value INTEGER)"); + + $this->index->exec("INSERT INTO info ( 'key', 'value') values ( 'total_documents', 0)"); + $this->index->exec("INSERT INTO info ( 'key', 'value') values ( 'stemmer', 'TeamTNT\TNTSearch\Stemmer\NoStemmer')"); + $this->index->exec("INSERT INTO info ( 'key', 'value') values ( 'tokenizer', 'TeamTNT\TNTSearch\Support\Tokenizer')"); + + $this->index->exec("CREATE INDEX IF NOT EXISTS 'main'.'term_id_index' ON doclist ('term_id' COLLATE BINARY);"); + $this->index->exec("CREATE INDEX IF NOT EXISTS 'main'.'doc_id_index' ON doclist ('doc_id');"); + + if (isset($this->config['stemmer'])) { + $this->setStemmer(new $this->config['stemmer']); + } + + if (isset($this->config['tokenizer'])) { + $this->setTokenizer(new $this->config['tokenizer']); + } + + if (!$this->dbh) { + $connector = $this->createConnector($this->config); + $this->dbh = $connector->connect($this->config); + } + return $this; + } + + public function indexBeginTransaction() + { + $this->index->beginTransaction(); + } + + public function indexEndTransaction() + { + $this->index->commit(); + } + + /** + * @param array $config + * + * @return FileSystemConnector|MySqlConnector|PostgresConnector|SQLiteConnector|SqlServerConnector + * @throws Exception + */ + public function createConnector(array $config) + { + if (!isset($config['driver'])) { + throw new Exception('A driver must be specified.'); + } + + switch ($config['driver']) { + case 'mysql': + return new MySqlConnector; + case 'pgsql': + return new PostgresConnector; + case 'sqlite': + return new SQLiteConnector; + case 'sqlsrv': + return new SqlServerConnector; + case 'filesystem': + return new FileSystemConnector; + } + throw new Exception("Unsupported driver [{$config['driver']}]"); + } + + /** + * @param PDO $dbh + */ + public function setDatabaseHandle(PDO $dbh) + { + $this->dbh = $dbh; + if ($this->dbh->getAttribute(PDO::ATTR_DRIVER_NAME) == 'mysql') { + $this->dbh->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false); + } + } + + public function query($query) + { + $this->query = $query; + } + + public function run() + { + if ($this->config['driver'] == "filesystem") { + return $this->readDocumentsFromFileSystem(); + } + + $result = $this->dbh->query($this->query); + + $counter = 0; + $this->index->beginTransaction(); + while ($row = $result->fetch(PDO::FETCH_ASSOC)) { + $counter++; + + $this->processDocument(new Collection($row)); + + if ($counter % $this->steps == 0) { + $this->info("Processed $counter rows"); + } + if ($counter % 10000 == 0) { + $this->index->commit(); + $this->index->beginTransaction(); + $this->info("Committed"); + } + } + $this->index->commit(); + + $this->updateInfoTable('total_documents', $counter); + + $this->info("Total rows $counter"); + } + + public function readDocumentsFromFileSystem() + { + $exclude = []; + if (isset($this->config['exclude'])) { + $exclude = $this->config['exclude']; + } + + $this->index->exec("CREATE TABLE IF NOT EXISTS filemap ( + id INTEGER PRIMARY KEY, + path TEXT)"); + $path = realpath($this->config['location']); + + $objects = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::SELF_FIRST); + $this->index->beginTransaction(); + $counter = 0; + + foreach ($objects as $name => $object) { + $name = str_replace($path.'/', '', $name); + + if (is_callable($this->config['extension'])) { + $includeFile = $this->config['extension']($object); + } elseif (is_array($this->config['extension'])) { + $includeFile = in_array($object->getExtension(), $this->config['extension']); + } else { + $includeFile = stringEndsWith($name, $this->config['extension']); + } + + if ($includeFile && !in_array($name, $exclude)) { + $counter++; + $file = [ + 'id' => $counter, + 'name' => $name, + 'content' => $this->filereader->read($object) + ]; + $fileCollection = new Collection($file); + + if (property_exists($this->filereader, 'fileFilterCallback') + && is_callable($this->filereader->fileFilterCallback)) { + $fileCollection = $fileCollection->filter($this->filereader->fileFilterCallback); + } + if (property_exists($this->filereader, 'fileMapCallback') + && is_callable($this->filereader->fileMapCallback)) { + $fileCollection = $fileCollection->map($this->filereader->fileMapCallback); + } + + $this->processDocument($fileCollection); + $statement = $this->index->prepare("INSERT INTO filemap ( 'id', 'path') values ( $counter, :object)"); + $statement->bindParam(':object', $object); + $statement->execute(); + $this->info("Processed $counter $object"); + } + } + + $this->index->commit(); + + $this->index->exec("INSERT INTO info ( 'key', 'value') values ( 'total_documents', $counter)"); + $this->index->exec("INSERT INTO info ( 'key', 'value') values ( 'driver', 'filesystem')"); + + $this->info("Total rows $counter"); + $this->info("Index created: {$this->config['storage']}"); + } + + public function processDocument($row) + { + $documentId = $row->get($this->getPrimaryKey()); + + if ($this->excludePrimaryKey) { + $row->forget($this->getPrimaryKey()); + } + + $stems = $row->map(function ($columnContent, $columnName) use ($row) { + return $this->stemText($columnContent); + }); + + $this->saveToIndex($stems, $documentId); + } + + public function insert($document) + { + $this->processDocument(new Collection($document)); + $total = $this->totalDocumentsInCollection() + 1; + $this->updateInfoTable('total_documents', $total); + } + + public function update($id, $document) + { + $this->delete($id); + $this->insert($document); + } + + public function delete($documentId) + { + $rows = $this->prepareAndExecuteStatement("SELECT * FROM doclist WHERE doc_id = :documentId;", [ + ['key' => ':documentId', 'value' => $documentId] + ])->fetchAll(PDO::FETCH_ASSOC); + + $updateStmt = $this->index->prepare("UPDATE wordlist SET num_docs = num_docs - 1, num_hits = num_hits - :hits WHERE id = :term_id"); + + foreach ($rows as $document) { + $updateStmt->bindParam(":hits", $document['hit_count']); + $updateStmt->bindParam(":term_id", $document['term_id']); + $updateStmt->execute(); + } + + $this->prepareAndExecuteStatement("DELETE FROM doclist WHERE doc_id = :documentId;", [ + ['key' => ':documentId', 'value' => $documentId] + ]); + + $res = $this->prepareAndExecuteStatement("DELETE FROM wordlist WHERE num_hits = 0"); + + $affected = $res->rowCount(); + + if ($affected) { + $total = $this->totalDocumentsInCollection() - 1; + $this->updateInfoTable('total_documents', $total); + } + } + + public function updateInfoTable($key, $value) + { + $this->updateInfoTableStmt = $this->index->prepare("UPDATE info SET value = :value WHERE key = :key"); + $this->updateInfoTableStmt->bindValue(':key', $key); + $this->updateInfoTableStmt->bindValue(':value', $value); + $this->updateInfoTableStmt->execute(); + } + + public function stemText($text) + { + $stemmer = $this->getStemmer(); + $words = $this->breakIntoTokens($text); + $stems = []; + foreach ($words as $word) { + $stems[] = $stemmer->stem($word); + } + return $stems; + } + + public function breakIntoTokens($text) + { + if ($this->decodeHTMLEntities) { + $text = html_entity_decode($text); + } + return $this->tokenizer->tokenize($text, $this->stopWords); + } + + public function decodeHtmlEntities($value = true) + { + $this->decodeHTMLEntities = $value; + } + + public function saveToIndex($stems, $docId) + { + $this->prepareStatementsForIndex(); + $terms = $this->saveWordlist($stems); + $this->saveDoclist($terms, $docId); + $this->saveHitList($stems, $docId, $terms); + } + + /** + * @param $stems + * + * @return array + */ + public function saveWordlist($stems) + { + $terms = []; + $stems->map(function ($column, $key) use (&$terms) { + foreach ($column as $term) { + if (array_key_exists($term, $terms)) { + $terms[$term]['hits']++; + $terms[$term]['docs'] = 1; + } else { + $terms[$term] = [ + 'hits' => 1, + 'docs' => 1, + 'id' => 0 + ]; + } + } + }); + + foreach ($terms as $key => $term) { + try { + $this->insertWordlistStmt->bindParam(":keyword", $key); + $this->insertWordlistStmt->bindParam(":hits", $term['hits']); + $this->insertWordlistStmt->bindParam(":docs", $term['docs']); + $this->insertWordlistStmt->execute(); + + $terms[$key]['id'] = $this->index->lastInsertId(); + if ($this->inMemory) { + $this->inMemoryTerms[$key] = $terms[$key]['id']; + } + } catch (\Exception $e) { + if ($e->getCode() == 23000) { + $this->updateWordlistStmt->bindValue(':docs', $term['docs']); + $this->updateWordlistStmt->bindValue(':hits', $term['hits']); + $this->updateWordlistStmt->bindValue(':keyword', $key); + $this->updateWordlistStmt->execute(); + if (!$this->inMemory) { + $this->selectWordlistStmt->bindValue(':keyword', $key); + $this->selectWordlistStmt->execute(); + $res = $this->selectWordlistStmt->fetch(PDO::FETCH_ASSOC); + $terms[$key]['id'] = $res['id']; + } else { + $terms[$key]['id'] = $this->inMemoryTerms[$key]; + } + } else { + echo "Error while saving wordlist: ".$e->getMessage()."\n"; + } + + // Statements must be refreshed, because in this state they have error attached to them. + $this->statementsPrepared = false; + $this->prepareStatementsForIndex(); + + } + } + return $terms; + } + + public function saveDoclist($terms, $docId) + { + $insert = "INSERT INTO doclist (term_id, doc_id, hit_count) VALUES (:id, :doc, :hits)"; + $stmt = $this->index->prepare($insert); + + foreach ($terms as $key => $term) { + $stmt->bindValue(':id', $term['id']); + $stmt->bindValue(':doc', $docId); + $stmt->bindValue(':hits', $term['hits']); + try { + $stmt->execute(); + } catch (\Exception $e) { + //we have a duplicate + echo $e->getMessage(); + } + } + } + + public function saveHitList($stems, $docId, $termsList) + { + return; + $fieldCounter = 0; + $fields = []; + + $insert = "INSERT INTO hitlist (term_id, doc_id, field_id, position, hit_count) + VALUES (:term_id, :doc_id, :field_id, :position, :hit_count)"; + $stmt = $this->index->prepare($insert); + + foreach ($stems as $field => $terms) { + $fields[$fieldCounter] = $field; + $positionCounter = 0; + $termCounts = array_count_values($terms); + foreach ($terms as $term) { + if (isset($termsList[$term])) { + $stmt->bindValue(':term_id', $termsList[$term]['id']); + $stmt->bindValue(':doc_id', $docId); + $stmt->bindValue(':field_id', $fieldCounter); + $stmt->bindValue(':position', $positionCounter); + $stmt->bindValue(':hit_count', $termCounts[$term]); + $stmt->execute(); + } + $positionCounter++; + } + $fieldCounter++; + } + } + + public function getWordFromWordList($word) + { + $selectStmt = $this->index->prepare("SELECT * FROM wordlist WHERE term like :keyword LIMIT 1"); + $selectStmt->bindValue(':keyword', $word); + $selectStmt->execute(); + return $selectStmt->fetch(PDO::FETCH_ASSOC); + } + + /** + * @param $word + * + * @return int + */ + public function countWordInWordList($word) + { + $res = $this->getWordFromWordList($word); + + if ($res) { + return $res['num_hits']; + } + return 0; + } + + /** + * @param $word + * + * @return int + */ + public function countDocHitsInWordList($word) + { + $res = $this->getWordFromWordList($word); + + if ($res) { + return $res['num_docs']; + } + return 0; + } + + public function buildDictionary($filename, $count = -1, $hits = true, $docs = false) + { + $selectStmt = $this->index->prepare("SELECT * FROM wordlist ORDER BY num_hits DESC;"); + $selectStmt->execute(); + + $dictionary = ""; + $counter = 0; + + while ($row = $selectStmt->fetch(PDO::FETCH_ASSOC)) { + $dictionary .= $row['term']; + if ($hits) { + $dictionary .= "\t".$row['num_hits']; + } + + if ($docs) { + $dictionary .= "\t".$row['num_docs']; + } + + $counter++; + if ($counter >= $count && $count > 0) { + break; + } + + $dictionary .= "\n"; + } + + file_put_contents($filename, $dictionary, LOCK_EX); + } + + /** + * @return int + */ + public function totalDocumentsInCollection() + { + $query = "SELECT * FROM info WHERE key = 'total_documents'"; + $docs = $this->index->query($query); + + return $docs->fetch(PDO::FETCH_ASSOC)['value']; + } + + /** + * @param $keyword + * + * @return string + */ + public function buildTrigrams($keyword) + { + $t = "__".$keyword."__"; + $trigrams = ""; + for ($i = 0; $i < strlen($t) - 2; $i++) { + $trigrams .= mb_substr($t, $i, 3)." "; + } + + return trim($trigrams); + } + + public function prepareAndExecuteStatement($query, $params = []) + { + $statemnt = $this->index->prepare($query); + foreach ($params as $param) { + $statemnt->bindParam($param['key'], $param['value']); + } + $statemnt->execute(); + return $statemnt; + } + + public function info($text) + { + if (!$this->disableOutput) { + echo $text.PHP_EOL; + } + } +} diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/src/KeywordExtraction/Rake.php b/plugins/tntsearch/vendor/teamtnt/tntsearch/src/KeywordExtraction/Rake.php new file mode 100644 index 0000000..191d5d4 --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/src/KeywordExtraction/Rake.php @@ -0,0 +1,147 @@ +stopwords = json_decode($stopwords); + } + + public function extractKeywords($text, $includeScores = true) + { + $phraseList = $this->generateCandidateKeywords($text); + $wordScores = $this->calculateWordScores($phraseList); + $phraseScores = $this->calculatePhraseScores($phraseList, $wordScores); + + arsort($phraseScores); + $oneThird = ceil(count($phraseScores) / 3) + 1; + + $phraseScores = array_slice($phraseScores, 0, $oneThird); + if ($includeScores) { + return $phraseScores; + } + return array_keys($phraseScores); + } + + public function generateCandidateKeywords($text) + { + $phraseList = []; + + $words = $this->tokenize($text); + $phrase = []; + + foreach ($words as $word) { + if (in_array($word, $this->stopwords) || ctype_punct($word)) { + if (count($phrase) > 0) { + $phraseList[] = $phrase; + $phrase = []; + } + } else { + $phrase[] = $word; + } + } + + if (count($phrase) > 0) { + $phraseList[] = $phrase; + $phrase = []; + } + + return $phraseList; + } + + public function calculatePhraseScores($phraseList, $wordScores) + { + + $result = []; + + foreach ($phraseList as $phrase) { + $wordScore = 0; + + foreach ($phrase as $word) { + $wordScore += $wordScores[$word]; + } + + $result[implode(" ", $phrase)] = $wordScore; + } + + return $result; + } + + public function calculateWordScores($phraseList) + { + $result = []; + + foreach ($phraseList as $phrase) { + foreach ($phrase as $word) { + $wordScore = $this->wordDegree($word, $phraseList) / $this->wordFrequency($word, $phraseList); + $result[$word] = $wordScore; + } + } + return $result; + } + + public function wordDegree($word, $phraseList) + { + $count = 0; + + foreach ($phraseList as $phrase) { + foreach ($phrase as $p) { + if ($p == $word) { + $count += count($phrase); + } + } + } + return $count; + } + + public function wordFrequency($word, $phraseList) + { + $count = 0; + + foreach ($phraseList as $phrase) { + foreach ($phrase as $p) { + if ($p == $word) { + $count++; + } + } + } + return $count; + } + + public function returnFormatedPharaseList($phraseList) + { + $formatedList = []; + foreach ($phraseList as $phrase) { + $formatedList[] = implode(" ", $phrase); + } + return $formatedList; + } + + public function tokenize($str) + { + $str = mb_strtolower($str); + + $arr = []; + // for the character classes + // see http://php.net/manual/en/regexp.reference.unicode.php + $pat = '/ + ([\pZ\pC]*) # match any separator or other + # in sequence + ( + [^\pP\pZ\pC]+ | # match a sequence of characters + # that are not punctuation, + # separator or other + . # match punctuations one by one + ) + ([\pZ\pC]*) # match a sequence of separators + # that follows + /xu'; + + preg_match_all($pat, $str, $arr); + return $arr[2]; + } + +} diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Spell/JaroWinklerDistance.php b/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Spell/JaroWinklerDistance.php new file mode 100644 index 0000000..1c4b147 --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Spell/JaroWinklerDistance.php @@ -0,0 +1,114 @@ +jaro($str1, $str2); + if ($j < $this->threshold) { + return $j; + } + + $lengthOfCommonPrefix = 0; + for ($i = 0; $i < min(strlen($str1), strlen($str2)); $i++) { + if ($str1[$i] == $str2[$i]) { + $lengthOfCommonPrefix++; + } else { + break; + } + } + + $lp = min(0.1, 1 / max(strlen($str1), strlen($str2))) * $lengthOfCommonPrefix; + $jw = $j + ($lp * (1 - $j)); + return $jw; + } + + public function jaro($str1, $str2) + { + // length of the strings + $str1_len = strlen($str1); + $str2_len = strlen($str2); + + // if both strings are empty return 1 + // if only one of the strings is empty return 0 + if ($str1_len == 0) { + return $str2_len == 0 ? 1 : 0; + } + + // max distance between two chars to be considered matching + $match_distance = max($str1_len, $str2_len) / 2 - 1; + + $str1_matches = array_fill(0, $str1_len, 0); + + $str2_matches = array_fill(0, $str2_len, 0); + + // number of matches and transpositions + $matches = 0; + $transpositions = 0; + + // find the matches + for ($i = 0; $i < $str1_len; $i++) { + // start and end take into account the match distance + $start = (int) max(0, $i - $match_distance); + $end = (int) min($i + $match_distance + 1, $str2_len); + + for ($k = $start; $k < $end; $k++) { + // if $str2 already has a match continue + if ($str2_matches[$k]) { + continue; + } + + // if str1 and str2 are not + if ($str1[$i] != $str2[$k]) { + continue; + } + + // otherwise assume there is a match + $str1_matches[$i] = true; + $str2_matches[$k] = true; + $matches++; + break; + } + } + + // if there are no matches return 0 + if ($matches == 0) { + return 0.0; + } + + // count transpositions + $k = 0; + for ($i = 0; $i < $str1_len; $i++) { + // if there are no matches in str1 continue + if (!$str1_matches[$i]) { + continue; + } + + // while there is no match in str2 increment k + while (!$str2_matches[$k]) { + $k++; + } + + // increment transpositions + if ($str1[$i] != $str2[$k]) { + $transpositions++; + } + + $k++; + } + + // divide the number of transpositions by two as per the algorithm specs + // this division is valid because the counted transpositions include both + // instances of the transposed characters. + $transpositions /= 2.0; + + // return the Jaro distance + return (($matches / $str1_len) + + ($matches / $str2_len) + + (($matches - $transpositions) / $matches)) / 3.0; + } +} diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Stemmer/ArabicStemmer.php b/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Stemmer/ArabicStemmer.php new file mode 100644 index 0000000..bc9decb --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Stemmer/ArabicStemmer.php @@ -0,0 +1,129 @@ + +*/ + +namespace TeamTNT\TNTSearch\Stemmer; +class ArabicStemmer implements Stemmer +{ + private static $_verbPre = 'وأسفلي'; + private static $_verbPost = 'ومكانيه'; + private static $_verbMay; + + private static $_verbMaxPre = 4; + private static $_verbMaxPost = 6; + private static $_verbMinStem = 2; + + private static $_nounPre = 'ابفكلوأ'; + private static $_nounPost = 'اتةكمنهوي'; + private static $_nounMay; + + private static $_nounMaxPre = 4; + private static $_nounMaxPost = 6; + private static $_nounMinStem = 2; + + /** + * Loads initialize values + * + * @ignore + */ + public function __construct() + { + self::$_verbMay = self::$_verbPre . self::$_verbPost; + self::$_nounMay = self::$_nounPre . self::$_nounPost; + } + + /** + * Get rough stem of the given Arabic word + * + * @param string $word Arabic word you would like to get its stem + * + * @return string Arabic stem of the word + * @author Khaled Al-Sham'aa + */ + public static function stem($word) + { + $nounStem = self::roughStem( + $word, self::$_nounMay, self::$_nounPre, self::$_nounPost, + self::$_nounMaxPre, self::$_nounMaxPost, self::$_nounMinStem + ); + $verbStem = self::roughStem( + $word, self::$_verbMay, self::$_verbPre, self::$_verbPost, + self::$_verbMaxPre, self::$_verbMaxPost, self::$_verbMinStem + ); + + if (mb_strlen($nounStem, 'UTF-8') < mb_strlen($verbStem, 'UTF-8')) { + $stem = $nounStem; + } else { + $stem = $verbStem; + } + + return $stem; + } + + /** + * Get rough stem of the given Arabic word (under specific rules) + * + * @param string $word Arabic word you would like to get its stem + * @param string $notChars Arabic chars those can't be in postfix or prefix + * @param string $preChars Arabic chars those may exists in the prefix + * @param string $postChars Arabic chars those may exists in the postfix + * @param integer $maxPre Max prefix length + * @param integer $maxPost Max postfix length + * @param integer $minStem Min stem length + * + * @return string Arabic stem of the word under giving rules + * @author Khaled Al-Sham'aa + */ + protected static function roughStem ( + $word, $notChars, $preChars, $postChars, $maxPre, $maxPost, $minStem + ) { + $right = -1; + $left = -1; + $max = mb_strlen($word, 'UTF-8'); + + for ($i=0; $i < $max; $i++) { + $needle = mb_substr($word, $i, 1, 'UTF-8'); + if (mb_strpos($notChars, $needle, 0, 'UTF-8') === false) { + if ($right == -1) { + $right = $i; + } + $left = $i; + } + } + + if ($right > $maxPre) { + $right = $maxPre; + } + + if ($max - $left - 1 > $maxPost) { + $left = $max - $maxPost -1; + } + + for ($i=0; $i < $right; $i++) { + $needle = mb_substr($word, $i, 1, 'UTF-8'); + if (mb_strpos($preChars, $needle, 0, 'UTF-8') === false) { + $right = $i; + break; + } + } + + for ($i=$max-1; $i>$left; $i--) { + $needle = mb_substr($word, $i, 1, 'UTF-8'); + if (mb_strpos($postChars, $needle, 0, 'UTF-8') === false) { + $left = $i; + break; + } + } + + if ($left - $right >= $minStem) { + $stem = mb_substr($word, $right, $left-$right+1, 'UTF-8'); + } else { + $stem = null; + } + + return $stem; + } +} diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Stemmer/CroatianStemmer.php b/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Stemmer/CroatianStemmer.php new file mode 100644 index 0000000..be525cb --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Stemmer/CroatianStemmer.php @@ -0,0 +1,315 @@ + 0) { + return true; + } + + return false; + } + + public static function transformiraj($pojavnica) + { + foreach (self::$transformations as $trazi => $zamijeni) { + if (self::endsWith($pojavnica, $trazi)) { + return substr($pojavnica, 0, -1 * strlen($trazi)) . $zamijeni; + } + } + return $pojavnica; + } + + public static function korjenuj($pojavnica) + { + foreach (self::$rules as $rule) { + $rules = explode(" ", $rule); + $osnova = $rules[0]; + $nastavak = $rules[1]; + preg_match("/^(" . $osnova . ")(" . $nastavak . ")$/", $pojavnica, $dioba); + if (!empty($dioba)) { + if (self::imaSamoglasnik($dioba[1]) && strlen($dioba[1]) > 1) { + return $dioba[1]; + } + } + } + return $pojavnica; + } + + public static function endsWith($haystack, $needle) + { + // search forward starting from end minus needle length characters + return $needle === "" || (($temp = strlen($haystack) - strlen($needle)) >= 0 && strpos($haystack, $needle, $temp) !== false); + } + + protected static $transformations = [ + 'lozi' => 'loga', + 'lozima' => 'loga', + 'pjesi' => 'pjeh', + 'pjesima' => 'pjeh', + 'vojci' => 'vojka', + 'bojci' => 'bojka', + 'jaci' => 'jak', + 'jacima' => 'jak', + 'čajan' => 'čajni', + 'ijeran' => 'ijerni', + 'laran' => 'larni', + 'ijesan' => 'ijesni', + 'anjac' => 'anjca', + 'ajac' => 'ajca', + 'ajaca' => 'ajca', + 'ljaca' => 'ljca', + 'ljac' => 'ljca', + 'ejac' => 'ejca', + 'ejaca' => 'ejca', + 'ojac' => 'ojca', + 'ojaca' => 'ojca', + 'ajaka' => 'ajka', + 'ojaka' => 'ojka', + 'šaca' => 'šca', + 'šac' => 'šca', + 'inzima' => 'ing', + 'inzi' => 'ing', + 'tvenici' => 'tvenik', + 'tetici' => 'tetika', + 'teticima' => 'tetika', + 'nstava' => 'nstva', + 'nicima' => 'nik', + 'ticima' => 'tik', + 'zicima' => 'zik', + 'snici' => 'snik', + 'kuse' => 'kusi', + 'kusan' => 'kusni', + 'kustava' => 'kustva', + 'dušan' => 'dušni', + 'antan' => 'antni', + 'bilan' => 'bilni', + 'tilan' => 'tilni', + 'avilan' => 'avilni', + 'silan' => 'silni', + 'gilan' => 'gilni', + 'rilan' => 'rilni', + 'nilan' => 'nilni', + 'alan' => 'alni', + 'ozan' => 'ozni', + 'rave' => 'ravi', + 'stavan' => 'stavni', + 'pravan' => 'pravni', + 'tivan' => 'tivni', + 'sivan' => 'sivni', + 'atan' => 'atni', + 'cenata' => 'centa', + 'denata' => 'denta', + 'genata' => 'genta', + 'lenata' => 'lenta', + 'menata' => 'menta', + 'jenata' => 'jenta', + 'venata' => 'venta', + 'tetan' => 'tetni', + 'pletan' => 'pletni', + 'šave' => 'šavi', + 'manata' => 'manta', + 'tanata' => 'tanta', + 'lanata' => 'lanta', + 'sanata' => 'santa', + 'ačak' => 'ačka', + 'ačaka' => 'ačka', + 'ušak' => 'uška', + 'atak' => 'atka', + 'ataka' => 'atka', + 'atci' => 'atka', + 'atcima' => 'atka', + 'etak' => 'etka', + 'etaka' => 'etka', + 'itak' => 'itka', + 'itaka' => 'itka', + 'itci' => 'itka', + 'otak' => 'otka', + 'otaka' => 'otka', + 'utak' => 'utka', + 'utaka' => 'utka', + 'utci' => 'utka', + 'utcima' => 'utka', + 'eskan' => 'eskna', + 'tičan' => 'tični', + 'ojsci' => 'ojska', + 'esama' => 'esma', + 'metara' => 'metra', + 'centar' => 'centra', + 'centara' => 'centra', + 'istara' => 'istra', + 'istar' => 'istra', + 'ošću' => 'osti', + 'daba' => 'dba', + 'čcima' => 'čka', + 'čci' => 'čka', + 'mac' => 'mca', + 'maca' => 'mca', + 'naca' => 'nca', + 'nac' => 'nca', + 'voljan' => 'voljni', + 'anaka' => 'anki', + 'vac' => 'vca', + 'vaca' => 'vca', + 'saca' => 'sca', + 'sac' => 'sca', + 'naca' => 'nca', + 'nac' => 'nca', + 'raca' => 'rca', + 'rac' => 'rca', + 'aoca' => 'alca', + 'alaca' => 'alca', + 'alac' => 'alca', + 'elaca' => 'elca', + 'elac' => 'elca', + 'olaca' => 'olca', + 'olac' => 'olca', + 'olce' => 'olca', + 'njac' => 'njca', + 'njaca' => 'njca', + 'ekata' => 'ekta', + 'ekat' => 'ekta', + 'izam' => 'izma', + 'izama' => 'izma', + 'jebe' => 'jebi', + 'baci' => 'baci', + 'ašan' => 'ašni', + ]; + + protected static $rules = [ + ".+(s|š)k ijima|ijega|ijemu|ijem|ijim|ijih|ijoj|ijeg|iji|ije|ija|oga|ome|omu|ima|og|om|im|ih|oj|i|e|o|a|u", + ".+(s|š)tv ima|om|o|a|u", + // N + ".+(t|m|p|r|g)anij ama|ima|om|a|u|e|i| ", + ".+an inom|ina|inu|ine|ima|in|om|u|i|a|e| ", + ".+in ima|ama|om|a|e|i|u|o| ", + ".+on ovima|ova|ove|ovi|ima|om|a|e|i|u| ", + ".+n ijima|ijega|ijemu|ijeg|ijem|ijim|ijih|ijoj|iji|ije|ija|iju|ima|ome|omu|oga|oj|om|ih|im|og|o|e|a|u|i| ", + // Ć + ".+(a|e|u)ć oga|ome|omu|ega|emu|ima|oj|ih|om|eg|em|og|uh|im|e|a", + // G + ".+ugov ima|i|e|a", + ".+ug ama|om|a|e|i|u|o", + ".+log ama|om|a|u|e| ", + ".+[^eo]g ovima|ama|ovi|ove|ova|om|a|e|i|u|o| ", + // I + ".+(rrar|ott|ss|ll)i jem|ja|ju|o| ", + // J + ".+uj ući|emo|ete|mo|em|eš|e|u| ", + ".+(c|č|ć|đ|l|r)aj evima|evi|eva|eve|ama|ima|em|a|e|i|u| ", + ".+(b|c|d|l|n|m|ž|g|f|p|r|s|t|z)ij ima|ama|om|a|e|i|u|o| ", + // L + //.+al inom|ina|inu|ine|ima|om|in|i|a|e + //.+[^(lo|ž)]il ima|om|a|e|u|i| + ".+[^z]nal ima|ama|om|a|e|i|u|o| ", + ".+ijal ima|ama|om|a|e|i|u|o| ", + ".+ozil ima|om|a|e|u|i| ", + ".+olov ima|i|a|e", + ".+ol ima|om|a|u|e|i| ", + // M + ".+lem ama|ima|om|a|e|i|u|o| ", + ".+ram ama|om|a|e|i|u|o", + //.+(es|e|u)m ama|om|a|e|i|u|o + // R + //.+(a|d|e|o|u)r ama|ima|om|u|a|e|i| + ".+(a|d|e|o)r ama|ima|om|u|a|e|i| ", + // S + ".+(e|i)s ima|om|e|a|u", + // Š + ".+(t|n|j|k|j|t|b|g|v)aš ama|ima|om|em|a|u|i|e| ", + ".+(e|i)š ima|ama|om|em|i|e|a|u| ", + // T + ".+ikat ima|om|a|e|i|u|o| ", + ".+lat ima|om|a|e|i|u|o| ", + ".+et ama|ima|om|a|e|i|u|o| ", + //.+ot ama|ima|om|a|u|e|i| + ".+(e|i|k|o)st ima|ama|om|a|e|i|u|o| ", + ".+išt ima|em|a|e|u", + //.+ut ovima|evima|ove|ovi|ova|eve|evi|eva|ima|om|a|u|e|i| + // V + ".+ova smo|ste|hu|ti|še|li|la|le|lo|t|h|o", + ".+(a|e|i)v ijemu|ijima|ijega|ijeg|ijem|ijim|ijih|ijoj|oga|ome|omu|ima|ama|iji|ije|ija|iju|im|ih|oj|om|og|i|a|u|e|o| ", + ".+[^dkml]ov ijemu|ijima|ijega|ijeg|ijem|ijim|ijih|ijoj|oga|ome|omu|ima|iji|ije|ija|iju|im|ih|oj|om|og|i|a|u|e|o| ", + ".+(m|l)ov ima|om|a|u|e|i| ", + // PRIDJEVI + ".+el ijemu|ijima|ijega|ijeg|ijem|ijim|ijih|ijoj|oga|ome|omu|ima|iji|ije|ija|iju|im|ih|oj|om|og|i|a|u|e|o| ", + ".+(a|e|š)nj ijemu|ijima|ijega|ijeg|ijem|ijim|ijih|ijoj|oga|ome|omu|ima|iji|ije|ija|iju|ega|emu|eg|em|im|ih|oj|om|og|a|e|i|o|u", + ".+čin ama|ome|omu|oga|ima|og|om|im|ih|oj|a|u|i|o|e| ", + ".+roši vši|smo|ste|še|mo|te|ti|li|la|lo|le|m|š|t|h|o", + ".+oš ijemu|ijima|ijega|ijeg|ijem|ijim|ijih|ijoj|oga|ome|omu|ima|iji|ije|ija|iju|im|ih|oj|om|og|i|a|u|e| ", + ".+(e|o)vit ijima|ijega|ijemu|ijem|ijim|ijih|ijoj|ijeg|iji|ije|ija|oga|ome|omu|ima|og|om|im|ih|oj|i|e|o|a|u| ", + //.+tit ijima|ijega|ijemu|ijem|ijim|ijih|ijoj|ijeg|iji|ije|ija|oga|ome|omu|ima|og|om|im|ih|oj|e|o|a|u|i| + ".+ast ijima|ijega|ijemu|ijem|ijim|ijih|ijoj|ijeg|iji|ije|ija|oga|ome|omu|ima|og|om|im|ih|oj|i|e|o|a|u| ", + ".+k ijemu|ijima|ijega|ijeg|ijem|ijim|ijih|ijoj|oga|ome|omu|ima|iji|ije|ija|iju|im|ih|oj|om|og|i|a|u|e|o| ", + // GLAGOLI + ".+(e|a|i|u)va jući|smo|ste|jmo|jte|ju|la|le|li|lo|mo|na|ne|ni|no|te|ti|še|hu|h|j|m|n|o|t|v|š| ", + ".+ir ujemo|ujete|ujući|ajući|ivat|ujem|uješ|ujmo|ujte|avši|asmo|aste|ati|amo|ate|aju|aše|ahu|ala|alo|ali|ale|uje|uju|uj|al|an|am|aš|at|ah|ao", + ".+ač ismo|iste|iti|imo|ite|iše|eći|ila|ilo|ili|ile|ena|eno|eni|ene|io|im|iš|it|ih|en|i|e", + ".+ača vši|smo|ste|smo|ste|hu|ti|mo|te|še|la|lo|li|le|ju|na|no|ni|ne|o|m|š|t|h|n", + //.+ači smo|ste|ti|li|la|lo|le|mo|te|še|m|š|t|h|o| + // Druga_vrsta + ".+n uvši|usmo|uste|ući|imo|ite|emo|ete|ula|ulo|ule|uli|uto|uti|uta|em|eš|uo|ut|e|u|i", + ".+ni vši|smo|ste|ti|mo|te|mo|te|la|lo|le|li|m|š|o", + // A + ".+((a|r|i|p|e|u)st|[^o]g|ik|uc|oj|aj|lj|ak|ck|čk|šk|uk|nj|im|ar|at|et|št|it|ot|ut|zn|zv)a jući|vši|smo|ste|jmo|jte|jem|mo|te|je|ju|ti|še|hu|la|li|le|lo|na|no|ni|ne|t|h|o|j|n|m|š", + ".+ur ajući|asmo|aste|ajmo|ajte|amo|ate|aju|ati|aše|ahu|ala|ali|ale|alo|ana|ano|ani|ane|al|at|ah|ao|aj|an|am|aš", + ".+(a|i|o)staj asmo|aste|ahu|ati|emo|ete|aše|ali|ući|ala|alo|ale|mo|ao|em|eš|at|ah|te|e|u| ", + ".+(b|c|č|ć|d|e|f|g|j|k|n|r|t|u|v)a lama|lima|lom|lu|li|la|le|lo|l", + ".+(t|č|j|ž|š)aj evima|evi|eva|eve|ama|ima|em|a|e|i|u| ", + //.+(e|j|k|r|u|v)al ama|ima|om|u|i|a|e|o| + //.+(e|j|k|r|t|u|v)al ih|im + ".+([^o]m|ič|nč|uč|b|c|ć|d|đ|h|j|k|l|n|p|r|s|š|v|z|ž)a jući|vši|smo|ste|jmo|jte|mo|te|ju|ti|še|hu|la|li|le|lo|na|no|ni|ne|t|h|o|j|n|m|š", + ".+(a|i|o)sta dosmo|doste|doše|nemo|demo|nete|dete|nimo|nite|nila|vši|nem|dem|neš|deš|doh|de|ti|ne|nu|du|la|li|lo|le|t|o", + ".+ta smo|ste|jmo|jte|vši|ti|mo|te|ju|še|la|lo|le|li|na|no|ni|ne|n|j|o|m|š|t|h", + ".+inj asmo|aste|ati|emo|ete|ali|ala|alo|ale|aše|ahu|em|eš|at|ah|ao", + ".+as temo|tete|timo|tite|tući|tem|teš|tao|te|li|ti|la|lo|le", + // I + ".+(elj|ulj|tit|ac|ič|od|oj|et|av|ov)i vši|eći|smo|ste|še|mo|te|ti|li|la|lo|le|m|š|t|h|o", + ".+(tit|jeb|ar|ed|uš|ič)i jemo|jete|jem|ješ|smo|ste|jmo|jte|vši|mo|še|te|ti|ju|je|la|lo|li|le|t|m|š|h|j|o", + ".+(b|č|d|l|m|p|r|s|š|ž)i jemo|jete|jem|ješ|smo|ste|jmo|jte|vši|mo|lu|še|te|ti|ju|je|la|lo|li|le|t|m|š|h|j|o", + ".+luč ujete|ujući|ujemo|ujem|uješ|ismo|iste|ujmo|ujte|uje|uju|iše|iti|imo|ite|ila|ilo|ili|ile|ena|eno|eni|ene|uj|io|en|im|iš|it|ih|e|i", + ".+jeti smo|ste|še|mo|te|ti|li|la|lo|le|m|š|t|h|o", + ".+e lama|lima|lom|lu|li|la|le|lo|l", + ".+i lama|lima|lom|lu|li|la|le|lo|l", + // Pridjev_t + ".+at ijega|ijemu|ijima|ijeg|ijem|ijih|ijim|ima|oga|ome|omu|iji|ije|ija|iju|oj|og|om|im|ih|a|u|i|e|o| ", + // Pridjev + ".+et avši|ući|emo|imo|em|eš|e|u|i", + ".+ ajući|alima|alom|avši|asmo|aste|ajmo|ajte|ivši|amo|ate|aju|ati|aše|ahu|ali|ala|ale|alo|ana|ano|ani|ane|am|aš|at|ah|ao|aj|an", + ".+ anje|enje|anja|enja|enom|enoj|enog|enim|enih|anom|anoj|anog|anim|anih|eno|ovi|ova|oga|ima|ove|enu|anu|ena|ama", + ".+ nijega|nijemu|nijima|nijeg|nijem|nijim|nijih|nima|niji|nije|nija|niju|noj|nom|nog|nim|nih|an|na|nu|ni|ne|no", + ".+ om|og|im|ih|em|oj|an|u|o|i|e|a", + ]; +} diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Stemmer/FrenchStemmer.php b/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Stemmer/FrenchStemmer.php new file mode 100644 index 0000000..90a381a --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Stemmer/FrenchStemmer.php @@ -0,0 +1,693 @@ +analyze($word); + } + + public function analyze($word) + { + $this->word = mb_strtolower($word); + + $this->plainVowels = implode('', static::$vowels); + + $this->step0(); + + $this->rv(); + $this->r1(); + $this->r2(); + + // to know if step1, 2a or 2b have altered the word + $this->originalWord = $this->word; + + $nextStep = $this->step1(); + + // Do step 2a if either no ending was removed by step 1, or if one of endings amment, emment, ment, ments was found. + if (($nextStep == 2) || ($this->originalWord === $this->word) ) { + $modified = $this->step2a(); + + if (!$modified) { + $this->step2b(); + } + } + + if ($this->word != $this->originalWord) { + $this->step3(); + + } else { + $this->step4(); + } + + $this->step5(); + $this->step6(); + $this->finish(); + + return $this->word; + } + + + /** + * Assume the word is in lower case. + * Then put into upper case u or i preceded and followed by a vowel, and y preceded or followed by a vowel. + * u after q is also put into upper case. For example, + * jouer -> joUer + * ennuie -> ennuIe + * yeux -> Yeux + * quand -> qUand + */ + private function step0() + { + $this->word = preg_replace('#([q])u#u', '$1U', $this->word); + $this->word = preg_replace('#(['.$this->plainVowels.'])y#u', '$1Y', $this->word); + $this->word = preg_replace('#y(['.$this->plainVowels.'])#u', 'Y$1', $this->word); + $this->word = preg_replace('#(['.$this->plainVowels.'])u(['.$this->plainVowels.'])#u', '$1U$2', $this->word); + $this->word = preg_replace('#(['.$this->plainVowels.'])i(['.$this->plainVowels.'])#u', '$1I$2', $this->word); + } + + /** + * Step 1 + * Search for the longest among the following suffixes, and perform the action indicated. + * + * @return integer Next step number + */ + private function step1() + { + // ance iqUe isme able iste eux ances iqUes ismes ables istes + // delete if in R2 + if (($position = $this->search([ + 'ances', 'iqUes', 'ismes', 'ables', 'istes', 'ance', 'iqUe','isme', 'able', 'iste', 'eux' + ])) !== false) { + if ($this->inR2($position)) { + $this->word = mb_substr($this->word, 0, $position); + } + + return 3; + } + + // atrice ateur ation atrices ateurs ations + // delete if in R2 + // if preceded by ic, delete if in R2, else replace by iqU + if (($position = $this->search(['atrices', 'ateurs', 'ations', 'atrice', 'ateur', 'ation'])) !== false) { + if ($this->inR2($position)) { + $this->word = mb_substr($this->word, 0, $position); + + if (($position2 = $this->searchIfInR2(['ic'])) !== false) { + $this->word = mb_substr($this->word, 0, $position2); + } else { + $this->word = preg_replace('#(ic)$#u', 'iqU', $this->word); + } + } + + return 3; + } + + // logie logies + // replace with log if in R2 + if (($position = $this->search(['logies', 'logie'])) !== false) { + if ($this->inR2($position)) { + $this->word = preg_replace('#(logies|logie)$#u', 'log', $this->word); + } + + return 3; + } + + // usion ution usions utions + // replace with u if in R2 + if (($position = $this->search(['usions', 'utions', 'usion', 'ution'])) !== false) { + if ($this->inR2($position)) { + $this->word = preg_replace('#(usion|ution|usions|utions)$#u', 'u', $this->word); + } + + return 3; + } + + // ence ences + // replace with ent if in R2 + if (($position = $this->search(['ences', 'ence'])) !== false) { + if ($this->inR2($position)) { + $this->word = preg_replace('#(ence|ences)$#u', 'ent', $this->word); + } + + return 3; + } + + // issement issements + // delete if in R1 and preceded by a non-vowel + if (($position = $this->search(['issements', 'issement'])) != false) { + if ($this->inR1($position)) { + $before = $position - 1; + $letter = mb_substr($this->word, $before, 1); + + if (! in_array($letter, static::$vowels)) { + $this->word = mb_substr($this->word, 0, $position); + } + } + + return 3; + } + + // ement ements + // delete if in RV + // if preceded by iv, delete if in R2 (and if further preceded by at, delete if in R2), otherwise, + // if preceded by eus, delete if in R2, else replace by eux if in R1, otherwise, + // if preceded by abl or iqU, delete if in R2, otherwise, + // if preceded by ièr or Ièr, replace by i if in RV + if (($position = $this->search(['ements', 'ement'])) !== false) { + if ($this->inRv($position)) { + $this->word = mb_substr($this->word, 0, $position); + } + + if (($position = $this->searchIfInR2(['iv'])) !== false) { + $this->word = mb_substr($this->word, 0, $position); + + if (($position2 = $this->searchIfInR2(['at'])) !== false) { + $this->word = mb_substr($this->word, 0, $position2); + } + } elseif (($position = $this->search(['eus'])) !== false) { + if ($this->inR2($position)) { + $this->word = mb_substr($this->word, 0, $position); + } elseif ($this->inR1($position)) { + $this->word = preg_replace('#(eus)$#u', 'eux', $this->word); + } + } elseif (($position = $this->searchIfInR2(['abl', 'iqU'])) !== false) { + $this->word = mb_substr($this->word, 0, $position); + } elseif (($this->searchIfInRv(['ièr', 'Ièr'])) !== false) { + $this->word = preg_replace('#(ièr|Ièr)$#u', 'i', $this->word); + } + + return 3; + } + + // ité ités + // delete if in R2 + // if preceded by abil, delete if in R2, else replace by abl, otherwise, + // if preceded by ic, delete if in R2, else replace by iqU, otherwise, + // if preceded by iv, delete if in R2 + if (($position = $this->search(['ités', 'ité'])) !== false) { + // delete if in R2 + if ($this->inR2($position)) { + $this->word = mb_substr($this->word, 0, $position); + } + + // if preceded by abil, delete if in R2, else replace by abl, otherwise, + if (($position = $this->search(['abil'])) !== false) { + if ($this->inR2($position)) { + $this->word = mb_substr($this->word, 0, $position); + } else { + $this->word = preg_replace('#(abil)$#u', 'abl', $this->word); + } + + // if preceded by ic, delete if in R2, else replace by iqU, otherwise, + } elseif (($position = $this->search(['ic'])) !== false) { + if ($this->inR2($position)) { + $this->word = mb_substr($this->word, 0, $position); + } else { + $this->word = preg_replace('#(ic)$#u', 'iqU', $this->word); + } + + // if preceded by iv, delete if in R2 + } elseif (($position = $this->searchIfInR2(['iv'])) !== false) { + $this->word = mb_substr($this->word, 0, $position); + } + + return 3; + } + + // if ive ifs ives + // delete if in R2 + // if preceded by at, delete if in R2 (and if further preceded by ic, delete if in R2, else replace by iqU) + if (($position = $this->search(['ifs', 'ives', 'if', 'ive'])) !== false) { + if ($this->inR2($position)) { + $this->word = mb_substr($this->word, 0, $position); + } + + if (($position = $this->searchIfInR2(['at'])) !== false) { + $this->word = mb_substr($this->word, 0, $position); + + if (($position2 = $this->search(['ic'])) !== false) { + if ($this->inR2($position2)) { + $this->word = mb_substr($this->word, 0, $position2); + } else { + $this->word = preg_replace('#(ic)$#u', 'iqU', $this->word); + } + } + } + + return 3; + } + + // eaux + // replace with eau + if (($this->search(['eaux'])) !== false) { + $this->word = preg_replace('#(eaux)$#u', 'eau', $this->word); + + return 3; + } + + // aux + // replace with al if in R1 + if (($position = $this->search(['aux'])) !== false) { + if ($this->inR1($position)) { + $this->word = preg_replace('#(aux)$#u', 'al', $this->word); + } + + return 3; + } + + // euse euses + // delete if in R2, else replace by eux if in R1 + if (($position = $this->search(['euses', 'euse'])) !== false) { + if ($this->inR2($position)) { + $this->word = mb_substr($this->word, 0, $position); + } elseif ($this->inR1($position)) { + $this->word = preg_replace('#(euses|euse)$#u', 'eux', $this->word); + + } + + return 3; + } + + // amment + // replace with ant if in RV + if ( ($position = $this->search(['amment'])) !== false) { + if ($this->inRv($position)) { + $this->word = preg_replace('#(amment)$#u', 'ant', $this->word); + } + return 2; + } + + // emment + // replace with ent if in RV + if (($position = $this->search(['emment'])) !== false) { + if ($this->inRv($position)) { + $this->word = preg_replace('#(emment)$#u', 'ent', $this->word); + } + + return 2; + } + + // ment ments + // delete if preceded by a vowel in RV + if (($position = $this->search(['ments', 'ment'])) != false) { + $before = $position - 1; + $letter = mb_substr($this->word, $before, 1); + + if ($this->inRv($before) && (in_array($letter, static::$vowels)) ) { + $this->word = mb_substr($this->word, 0, $position); + } + + return 2; + } + + return 2; + } + + /** + * Step 2a: Verb suffixes beginning i + * In steps 2a and 2b all tests are confined to the RV region. + * Search for the longest among the following suffixes and if found, delete if preceded by a non-vowel. + * îmes ît îtes i ie ies ir ira irai iraIent irais irait iras irent irez iriez + * irions irons iront is issaIent issais issait issant issante issantes issants isse + * issent isses issez issiez issions issons it + * (Note that the non-vowel itself must also be in RV.) + */ + private function step2a() + { + if (($position = $this->searchIfInRv([ + 'îmes', 'îtes', 'ît', 'ies', 'ie', 'iraIent', 'irais', 'irait', 'irai', 'iras', 'ira', 'irent', 'irez', 'iriez', + 'irions', 'irons', 'iront', 'ir', 'issaIent', 'issais', 'issait', 'issant', 'issantes', 'issante', 'issants', + 'issent', 'isses', 'issez', 'isse', 'issiez', 'issions', 'issons', 'is', 'it', 'i'])) !== false) { + + $before = $position - 1; + $letter = mb_substr($this->word, $before, 1); + + if ( $this->inRv($before) && (!in_array($letter, static::$vowels)) ) { + $this->word = mb_substr($this->word, 0, $position); + + return true; + } + } + + return false; + } + + /** + * Do step 2b if step 2a was done, but failed to remove a suffix. + * Step 2b: Other verb suffixes + */ + private function step2b() + { + // é ée ées és èrent er era erai eraIent erais erait eras erez eriez erions erons eront ez iez + // delete + if (($position = $this->searchIfInRv([ + 'ées', 'èrent', 'erais', 'erait', 'erai', 'eraIent', 'eras', 'erez', 'eriez', + 'erions', 'erons', 'eront', 'era', 'er', 'iez', 'ez','és', 'ée', 'é'])) !== false) { + + $this->word = mb_substr($this->word, 0, $position); + + return true; + } + + // âmes ât âtes a ai aIent ais ait ant ante antes ants as asse assent asses assiez assions + // delete + // if preceded by e, delete + if (($position = $this->searchIfInRv([ + 'âmes', 'âtes', 'ât', 'aIent', 'ais', 'ait', 'antes', 'ante', 'ants', 'ant', + 'assent', 'asses', 'assiez', 'assions', 'asse', 'as', 'ai', 'a'])) !== false) { + + $before = $position - 1; + $letter = mb_substr($this->word, $before, 1); + + if ( $this->inRv($before) && ($letter === 'e') ) { + $this->word = mb_substr($this->word, 0, $before); + } else { + $this->word = mb_substr($this->word, 0, $position); + } + + return true; + } + + // ions + // delete if in R2 + if ( ($position = $this->searchIfInRv(array('ions'))) !== false) { + if ($this->inR2($position)) { + $this->word = mb_substr($this->word, 0, $position); + } + + return true; + } + + return false; + } + + /** + * Step 3: Replace final Y with i or final ç with c + */ + private function step3() + { + $this->word = preg_replace('#(Y)$#u', 'i', $this->word); + $this->word = preg_replace('#(ç)$#u', 'c', $this->word); + } + + /** + * Step 4: Residual suffix + */ + private function step4() + { + //If the word ends s, not preceded by a, i, o, u, è or s, delete it. + if (preg_match('#[^aiouès]s$#', $this->word)) { + $this->word = mb_substr($this->word, 0, -1); + } + + // In the rest of step 4, all tests are confined to the RV region. + // ion + // delete if in R2 and preceded by s or t + if ((($position = $this->searchIfInRv(['ion'])) !== false) && ($this->inR2($position)) ) { + $before = $position - 1; + $letter = mb_substr($this->word, $before, 1); + + if ( $this->inRv($before) && (($letter === 's') || ($letter === 't')) ) { + $this->word = mb_substr($this->word, 0, $position); + } + + return true; + } + + // ier ière Ier Ière + // replace with i + if (($this->searchIfInRv(['ier', 'ière', 'Ier', 'Ière'])) !== false) { + $this->word = preg_replace('#(ier|ière|Ier|Ière)$#u', 'i', $this->word); + + return true; + } + + // e + // delete + if (($this->searchIfInRv(['e'])) !== false) { + $this->word = mb_substr($this->word, 0, -1); + + return true; + } + + // ë + // if preceded by gu, delete + if (($position = $this->searchIfInRv(['guë'])) !== false) { + if ($this->inRv($position + 2)) { + $this->word = mb_substr($this->word, 0, -1); + + return true; + } + } + + return false; + } + + /** + * Step 5: Undouble + * If the word ends enn, onn, ett, ell or eill, delete the last letter + */ + private function step5() + { + if ($this->search(['enn', 'onn', 'ett', 'ell', 'eill']) !== false) { + $this->word = mb_substr($this->word, 0, -1); + } + } + + /** + * Step 6: Un-accent + * If the words ends é or è followed by at least one non-vowel, remove the accent from the e. + */ + private function step6() + { + $this->word = preg_replace('#(é|è)([^'.$this->plainVowels.']+)$#u', 'e$2', $this->word); + } + + /** + * And finally: + * Turn any remaining I, U and Y letters in the word back into lower case. + */ + private function finish() + { + $this->word = str_replace(['I','U','Y'], ['i', 'u', 'y'], $this->word); + } + + /** + * If the word begins with two vowels, RV is the region after the third letter, + * otherwise the region after the first vowel not at the beginning of the word, + * or the end of the word if these positions cannot be found. + * (Exceptionally, par, col or tap, at the begining of a word is also taken to define RV as the region to their right.) + */ + protected function rv() + { + $length = mb_strlen($this->word); + + $this->rv = ''; + $this->rvIndex = $length; + + if ($length < 3) { + return true; + } + + // If the word begins with two vowels, RV is the region after the third letter + $first = mb_substr($this->word, 0, 1); + $second = mb_substr($this->word, 1, 1); + + if ( (in_array($first, static::$vowels)) && (in_array($second, static::$vowels)) ) { + $this->rv = mb_substr($this->word, 3); + $this->rvIndex = 3; + + return true; + } + + // (Exceptionally, par, col or tap, at the begining of a word is also taken to define RV as the region to their right.) + $begin3 = mb_substr($this->word, 0, 3); + + if (in_array($begin3, ['par', 'col', 'tap'])) { + $this->rv = mb_substr($this->word, 3); + $this->rvIndex = 3; + + return true; + } + + // otherwise the region after the first vowel not at the beginning of the word, + for ($i = 1; $i < $length; ++$i) { + $letter = mb_substr($this->word, $i, 1); + + if (in_array($letter, static::$vowels)) { + $this->rv = mb_substr($this->word, ($i + 1)); + $this->rvIndex = $i + 1; + + return true; + } + } + + return false; + } + + protected function inRv($position) + { + return ($position >= $this->rvIndex); + } + + protected function inR1($position) + { + return ($position >= $this->r1Index); + } + + protected function inR2($position) + { + return ($position >= $this->r2Index); + } + + protected function searchIfInRv($suffixes) + { + return $this->search($suffixes, $this->rvIndex); + } + + protected function searchIfInR2($suffixes) + { + return $this->search($suffixes, $this->r2Index); + } + + protected function search($suffixes, $offset = 0) + { + $length = mb_strlen($this->word); + + if ($offset > $length) { + return false; + } + + foreach ($suffixes as $suffixe) { + if ((($position = mb_strrpos($this->word, $suffixe, $offset)) !== false) + && ((mb_strlen($suffixe) + $position) == $length)) { + return $position; + } + } + + return false; + } + + /** + * R1 is the region after the first non-vowel following a vowel, or the end of the word if there is no such non-vowel. + */ + protected function r1() + { + list($this->r1Index, $this->r1) = $this->rx($this->word); + } + + /** + * R2 is the region after the first non-vowel following a vowel in R1, or the end of the word if there is no such non-vowel. + */ + protected function r2() + { + list($index, $value) = $this->rx($this->r1); + + $this->r2 = $value; + $this->r2Index = $this->r1Index + $index; + } + + /** + * Common function for R1 and R2 + * Search the region after the first non-vowel following a vowel in $word, or the end of the word if there is no such non-vowel. + * R1 : $in = $this->word + * R2 : $in = R1 + */ + protected function rx($in) + { + $length = mb_strlen($in); + + // defaults + $value = ''; + $index = $length; + + // we search all vowels + $vowels = []; + + for ($i = 0; $i < $length; ++$i) { + $letter = mb_substr($in, $i, 1); + + if (in_array($letter, static::$vowels)) { + $vowels[] = $i; + } + } + + // search the non-vowel following a vowel + foreach ($vowels as $position) { + $after = $position + 1; + $letter = mb_substr($in, $after, 1); + + if (!in_array($letter, static::$vowels)) { + $index = $after + 1; + $value = mb_substr($in, ($after + 1)); + + break; + } + } + + return [$index, $value]; + } +} diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Stemmer/GermanStemmer.php b/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Stemmer/GermanStemmer.php new file mode 100644 index 0000000..6e1ae90 --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Stemmer/GermanStemmer.php @@ -0,0 +1,248 @@ + + * @author Pascal Landau + */ + +class GermanStemmer implements Stemmer +{ + /** + * R1 and R2 regions (see the Porter algorithm) + */ + private static $R1; + private static $R2; + + private static $cache = array(); + + private static $vowels = array('a', 'e', 'i', 'o', 'u', 'y', 'ä', 'ö', 'ü'); + private static $s_ending = array('b', 'd', 'f', 'g', 'h', 'k', 'l', 'm', 'n', 'r', 't'); + private static $st_ending = array('b', 'd', 'f', 'g', 'h', 'k', 'l', 'm', 'n', 't'); + + /** + * Gets the stem of $word. + * @param string $word + * @return string + */ + public static function stem($word) + { + $word = mb_strtolower($word); + //check for invalid characters + preg_match("#.#u", $word); + if (preg_last_error() !== 0) { + throw new \InvalidArgumentException("Word '$word' seems to be errornous. Error code from preg_last_error(): " . preg_last_error()); + } + if (!isset(self::$cache[$word])) { + $result = self::getStem($word); + self::$cache[$word] = $result; + } + + return self::$cache[$word]; + } + + /** + * @param $word + * @return string + */ + private static function getStem($word) + { + $word = self::step0a($word); + $word = self::step1($word); + $word = self::step2($word); + $word = self::step3($word); + $word = self::step0b($word); + + return $word; + } + + /** + * Replaces to protect some characters + * @param string $word + * @return string mixed + */ + private static function step0a($word) + { + $vstr = implode('', self::$vowels); + $word = preg_replace('#([' . $vstr . '])u([' . $vstr . '])#u', '$1U$2', $word); + $word = preg_replace('#([' . $vstr . '])y([' . $vstr . '])#u', '$1Y$2', $word); + + return $word; + } + + /** + * Undo the initial replaces + * @param string $word + * @return string + */ + private static function step0b($word) + { + $word = str_replace(array('ä', 'ö', 'ü', 'U', 'Y'), array('a', 'o', 'u', 'u', 'y'), $word); + + return $word; + } + + private static function step1($word) + { + $word = str_replace('ß', 'ss', $word); + + self::getR($word); + + $replaceCount = 0; + + $arr = array('em', 'ern', 'er'); + foreach ($arr as $s) { + self::$R1 = preg_replace('#' . $s . '$#u', '', self::$R1, -1, $replaceCount); + if ($replaceCount > 0) { + $word = preg_replace('#' . $s . '$#u', '', $word); + } + } + + $arr = array('en', 'es', 'e'); + foreach ($arr as $s) { + self::$R1 = preg_replace('#' . $s . '$#u', '', self::$R1, -1, $replaceCount); + if ($replaceCount > 0) { + $word = preg_replace('#' . $s . '$#u', '', $word); + $word = preg_replace('#niss$#u', 'nis', $word); + } + } + + $word = preg_replace('/([' . implode('', self::$s_ending) . '])s$/u', '$1', $word); + + return $word; + } + + private static function step2($word) + { + self::getR($word); + + $replaceCount = 0; + + $arr = array('est', 'er', 'en'); + foreach ($arr as $s) { + self::$R1 = preg_replace('#' . $s . '$#u', '', self::$R1, -1, $replaceCount); + if ($replaceCount > 0) { + $word = preg_replace('#' . $s . '$#u', '', $word); + } + } + + if (strpos(self::$R1, 'st') !== false) { + self::$R1 = preg_replace('#st$#u', '', self::$R1); + $word = preg_replace('#(...[' . implode('', self::$st_ending) . '])st$#u', '$1', $word); + } + + return $word; + } + + private static function step3($word) + { + self::getR($word); + + $replaceCount = 0; + + $arr = array('end', 'ung'); + foreach ($arr as $s) { + if (preg_match('#' . $s . '$#u', self::$R2)) { + $word = preg_replace('#([^e])' . $s . '$#u', '$1', $word, -1, $replaceCount); + if ($replaceCount > 0) { + self::$R2 = preg_replace('#' . $s . '$#u', '', self::$R2, -1, $replaceCount); + } + } + } + + $arr = array('isch', 'ik', 'ig'); + foreach ($arr as $s) { + if (preg_match('#' . $s . '$#u', self::$R2)) { + $word = preg_replace('#([^e])' . $s . '$#u', '$1', $word, -1, $replaceCount); + if ($replaceCount > 0) { + self::$R2 = preg_replace('#' . $s . '$#u', '', self::$R2); + } + } + } + + $arr = array('lich', 'heit'); + foreach ($arr as $s) { + self::$R2 = preg_replace('#' . $s . '$#u', '', self::$R2, -1, $replaceCount); + if ($replaceCount > 0) { + $word = preg_replace('#' . $s . '$#u', '', $word); + } else { + if (preg_match('#' . $s . '$#u', self::$R1)) { + $word = preg_replace('#(er|en)' . $s . '$#u', '$1', $word, -1, $replaceCount); + if ($replaceCount > 0) { + self::$R1 = preg_replace('#' . $s . '$#u', '', self::$R1); + } + } + } + } + + $arr = array('keit'); + foreach ($arr as $s) { + self::$R2 = preg_replace('#' . $s . '$#u', '', self::$R2, -1, $replaceCount); + if ($replaceCount > 0) { + $word = preg_replace('#' . $s . '$#u', '', $word); + } + } + + return $word; + } + + /** + * Find R1 and R2 + * @param string $word + */ + private static function getR($word) + { + self::$R1 = ""; + self::$R2 = ""; + + $vowels = implode("", self::$vowels); + $vowelGroup = "[{$vowels}]"; + $nonVowelGroup = "[^{$vowels}]"; + // R1 is the region after the first non-vowel following a vowel, or is the null region at the end of the word if there is no such non-vowel. + $pattern = "#(?P.*?{$vowelGroup}{$nonVowelGroup})(?P.*)#u"; + if (preg_match($pattern, $word, $match)) { + $rest = $match["rest"]; + $r1 = $match["r"]; + // [...], but then R1 is adjusted so that the region before it contains at least 3 letters. + $cutOff = 3 - mb_strlen($rest); + if ($cutOff > 0) { + $r1 = mb_substr($r1, $cutOff); + } + self::$R1 = $r1; + } + + //R2 is the region after the first non-vowel following a vowel in R1, or is the null region at the end of the word if there is no such non-vowel. + if (preg_match($pattern, self::$R1, $match)) { + self::$R2 = $match["r"]; + } + } +} diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Stemmer/ItalianStemmer.php b/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Stemmer/ItalianStemmer.php new file mode 100644 index 0000000..764a5a5 --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Stemmer/ItalianStemmer.php @@ -0,0 +1,451 @@ +, + * was originally written by Roberto Mirizzi (, + * ) in February 2007. It was the PHP5 implementation + * of Martin Porter's stemming algorithm for Italian language. This algorithm can be found + * at the address: . + * + * It was rewritten in March 2017 for TNTSearch by GaspariLab S.r.l., . + */ + +/* + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +class ItalianStemmer implements Stemmer +{ + private static $cache = []; + + private static $vocali = ['a', 'e', 'i', 'o', 'u', 'à', 'è', 'ì', 'ò', 'ù']; + private static $consonanti = [ + 'b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'p', 'q', 'r', 's', 't', 'v', 'w', 'x', 'y', 'z', + 'I', 'U', + ]; + private static $accenti_acuti = ['á', 'é', 'í', 'ó', 'ú']; + private static $accenti_gravi = ['à', 'è', 'ì', 'ò', 'ù']; + + private static $suffissi_step0 = [ + 'ci', 'gli', 'la', 'le', 'li', 'lo', 'mi', 'ne', 'si', 'ti', 'vi', 'sene', + 'gliela', 'gliele', 'glieli', 'glielo', 'gliene', 'mela', 'mele', 'meli', 'melo', 'mene', 'tela', 'tele', + 'teli', 'telo', 'tene', 'cela', 'cele', 'celi', 'celo', 'cene', 'vela', 'vele', 'veli', 'velo', 'vene', + ]; + + private static $suffissi_step1_a = [ + 'anza', 'anze', 'ico', 'ici', 'ica', 'ice', 'iche', 'ichi', 'ismo', 'ismi', 'abile', 'abili', 'ibile', + 'ibili', 'ista', 'iste', 'isti', 'istà', 'istè', 'istì', 'oso', 'osi', 'osa', 'ose', 'mente', 'atrice', + 'atrici', 'ante', 'anti', + ]; + private static $suffissi_step1_b = ['azione', 'azioni', 'atore', 'atori']; + private static $suffissi_step1_c = ['logia', 'logie']; + private static $suffissi_step1_d = ['uzione', 'uzioni', 'usione', 'usioni']; + private static $suffissi_step1_e = ['enza', 'enze']; + private static $suffissi_step1_f = ['amento', 'amenti', 'imento', 'imenti']; + private static $suffissi_step1_g = ['amente']; + private static $suffissi_step1_h = ['ità']; + private static $suffissi_step1_i = ['ivo', 'ivi', 'iva', 'ive']; + + private static $suffissi_step2 = [ + 'ammo', 'ando', 'ano', 'are', 'arono', 'asse', 'assero', 'assi', 'assimo', 'ata', 'ate', 'ati', 'ato', 'ava', + 'avamo', 'avano', 'avate', 'avi', 'avo', 'emmo', 'enda', 'ende', 'endi', 'endo', 'erà', 'erai', 'eranno', + 'ere', 'erebbe', 'erebbero', 'erei', 'eremmo', 'eremo', 'ereste', 'eresti', 'erete', 'erò', 'erono', 'essero', + 'ete', 'eva', 'evamo', 'evano', 'evate', 'evi', 'evo', 'Yamo', 'iamo', 'immo', 'irà', 'irai', 'iranno', 'ire', + 'irebbe', 'irebbero', 'irei', 'iremmo', 'iremo', 'ireste', 'iresti', 'irete', 'irò', 'irono', 'isca', + 'iscano', 'isce', 'isci', 'isco', 'iscono', 'issero', 'ita', 'ite', 'iti', 'ito', 'iva', 'ivamo', 'ivano', + 'ivate', 'ivi', 'ivo', 'ono', 'uta', 'ute', 'uti', 'uto', 'ar', 'ir', + ]; + + private static $ante_suff_a = ['ando', 'endo']; + private static $ante_suff_b = ['ar', 'er', 'ir']; + + public function __construct() + { + usort(self::$suffissi_step0, function($a,$b) { return mb_strlen($a)>mb_strlen($b) ? -1 : 1; }); + usort(self::$suffissi_step1_a, function($a,$b) { return mb_strlen($a)>mb_strlen($b) ? -1 : 1;}); + usort(self::$suffissi_step2, function($a,$b) { return mb_strlen($a)>mb_strlen($b) ? -1 : 1;}); + } + + /** + * Gets the stem of $word. + * + * @param string $word + * + * @return string + */ + public static function stem($word) + { + $word = mb_strtolower($word); + + // Check for invalid characters + preg_match('#.#u', $word); + if (preg_last_error() !== 0) { + throw new \InvalidArgumentException('Word "'.$word.'" seems to be errornous. + Error code from preg_last_error(): '.preg_last_error()); + } + + if (!isset(self::$cache[$word])) { + $result = self::getStem($word); + self::$cache[$word] = $result; + } + + return self::$cache[$word]; + } + + /** + * @param $word + * + * @return string + */ + private static function getStem($word) + { + $str = self::trim($word); + $str = self::toLower($str); + $str = self::replaceAccAcuti($str); + $str = self::putUAfterQToUpper($str); + $str = self::IUBetweenVowToUpper($str); + $step0 = self::step0($str); + $step1 = self::step1($step0); + $step2 = self::step2($step0, $step1); + $step3a = self::step3a($step2); + $step3b = self::step3b($step3a); + $step4 = self::step4($step3b); + + return $step4; + } + + private static function trim($str) + { + return trim($str); + } + + private static function toLower($str) + { + return strtolower($str); + } + + private static function replaceAccAcuti($str) + { + return str_replace(self::$accenti_acuti, self::$accenti_gravi, $str); //strtr + } + + private static function putUAfterQToUpper($str) + { + return str_replace('qu', 'qU', $str); + } + + private static function IUBetweenVowToUpper($str) + { + $pattern = '/([aeiouàèìòù])([iu])([aeiouàèìòù])/'; + + return preg_replace_callback($pattern, function ($matches) { + return strtoupper($matches[0]); + }, $str); + } + + private static function returnRV($str) + { + /* + If the second letter is a consonant, RV is the region after the next following vowel, + or if the first two letters are vowels, RV is the region after the next consonant, and otherwise + (consonant-vowel case) RV is the region after the third letter. + But RV is the end of the word if these positions cannot be found. Example: + m a c h o [ho] o l i v a [va] t r a b a j o [bajo] á u r e o [eo] prezzo sprezzante + */ + + if (mb_strlen($str) < 2) { + return ''; + } //$str; + + if (in_array($str[1], self::$consonanti)) { + $str = mb_substr($str, 2); + $str = strpbrk($str, implode(self::$vocali)); + + return mb_substr($str, 1); //secondo me devo mettere 1 + } elseif (in_array($str[0], self::$vocali) && in_array($str[1], self::$vocali)) { + $str = strpbrk($str, implode(self::$consonanti)); + + return mb_substr($str, 1); + } elseif (in_array($str[0], self::$consonanti) && in_array($str[1], self::$vocali)) { + return mb_substr($str, 3); + } + } + + private static function returnR1($str) + { + /* + R1 is the region after the first non-vowel following a vowel, or is the null region at the end + of the word if there is no such non-vowel. Example: + beautiful [iful] beauty [y] beau [NULL] animadversion [imadversion] sprinkled [kled] eucharist [harist] + */ + + $pattern = '/['.implode(self::$vocali).']+'.'['.implode(self::$consonanti).']'.'(.*)/'; + preg_match($pattern, $str, $matches); + + return count($matches) >= 1 ? $matches[1] : ''; + } + + private static function returnR2($str) + { + /* + R2 is the region after the first non-vowel following a vowel in R1, or is the null region at the end + of the word if there is no such non-vowel. Example: + beautiful [ul] beauty [NULL] beau [NULL] animadversion [adversion] sprinkled [NULL] eucharist [ist] + */ + + $R1 = self::returnR1($str); + + $pattern = '/['.implode(self::$vocali).']+'.'['.implode(self::$consonanti).']'.'(.*)/'; + preg_match($pattern, $R1, $matches); + + return count($matches) >= 1 ? $matches[1] : ''; + } + + private static function step0($str) + { + //Step 0: Attached pronoun + //Always do steps 0 + + $str_len = mb_strlen($str); + $rv = self::returnRV($str); + $rv_len = mb_strlen($rv); + + $pos = 0; + foreach (self::$suffissi_step0 as $suff) { + if ($rv_len - mb_strlen($suff) < 0) { + continue; + } + $pos = mb_strpos($rv, $suff, $rv_len - mb_strlen($suff)); + if ($pos !== false) { + break; + } + } + + $ante_suff = mb_substr($rv, 0, $pos); + $ante_suff_len = mb_strlen($ante_suff); + + foreach (self::$ante_suff_a as $ante_a) { + if ($ante_suff_len - mb_strlen($ante_a) < 0) { + continue; + } + $pos_a = mb_strpos($ante_suff, $ante_a, $ante_suff_len - mb_strlen($ante_a)); + if ($pos_a !== false) { + return mb_substr($str, 0, $pos + $str_len - $rv_len); + } + } + + foreach (self::$ante_suff_b as $ante_b) { + if ($ante_suff_len - mb_strlen($ante_b) < 0) { + continue; + } + $pos_b = mb_strpos($ante_suff, $ante_b, $ante_suff_len - mb_strlen($ante_b)); + if ($pos_b !== false) { + return mb_substr($str, 0, $pos + $str_len - $rv_len).'e'; + } + } + + return $str; + } + + private static function deleteStuff($arr_suff, $str, $str_len, $where, $ovunque = false) + { + if ($where === 'r2') { + $r = self::returnR2($str); + } elseif ($where === 'rv') { + $r = self::returnRV($str); + } elseif ($where === 'r1') { + $r = self::returnR1($str); + } + + $r_len = mb_strlen($r); + + if ($ovunque) { + foreach ($arr_suff as $suff) { + if ($str_len - mb_strlen($suff) < 0) { + continue; + } + $pos = mb_strpos($str, $suff, $str_len - mb_strlen($suff)); + if ($pos !== false) { + $pattern = '/'.$suff.'$/'; + $ret_str = preg_match($pattern, $r) ? mb_substr($str, 0, $pos) : ''; + if ($ret_str !== '') { + return $ret_str; + } + break; + } + } + } else { + foreach ($arr_suff as $suff) { + if ($r_len - mb_strlen($suff) < 0) { + continue; + } + $pos = mb_strpos($r, $suff, $r_len - mb_strlen($suff)); + if ($pos !== false) { + return mb_substr($str, 0, $pos + $str_len - $r_len); + } + } + } + } + + private static function step1($str) + { + // Step 1: Standard suffix removal + // Always do steps 1 + + $str_len = mb_strlen($str); + + // Delete if in R1, if preceded by 'iv', delete if in R2 (and if further preceded by 'at', delete if in R2), + // otherwise, if preceded by 'os', 'ic' or 'abil', delete if in R2 + if (!empty($ret_str = self::deleteStuff(self::$suffissi_step1_g, $str, $str_len, 'r1'))) { + if (!empty($ret_str1 = self::deleteStuff(['iv'], $ret_str, mb_strlen($ret_str), 'r2'))) { + if (!empty($ret_str2 = self::deleteStuff(['at'], $ret_str1, mb_strlen($ret_str1), 'r2'))) { + return $ret_str2; + } else { + return $ret_str1; + } + } elseif (!empty( + $ret_str1 = self::deleteStuff(['os', 'ic', 'abil'], $ret_str, mb_strlen($ret_str), 'r2') + )) { + return $ret_str1; + } else { + return $ret_str; + } + } + + // Delete if in R2 + if (!empty($ret_str = self::deleteStuff(self::$suffissi_step1_a, $str, $str_len, 'r2', true))) { + return $ret_str; + } + + // Delete if in R2, if preceded by 'ic', delete if in R2 + if (!empty($ret_str = self::deleteStuff(self::$suffissi_step1_b, $str, $str_len, 'r2'))) { + if (!empty($ret_str1 = self::deleteStuff(['ic'], $ret_str, mb_strlen($ret_str), 'r2'))) { + return $ret_str1; + } else { + return $ret_str; + } + } + + // Replace with 'log' if in R2 + if (!empty($ret_str = self::deleteStuff(self::$suffissi_step1_c, $str, $str_len, 'r2'))) { + return $ret_str.'log'; + } + + // Replace with 'u' if in R2 + if (!empty($ret_str = self::deleteStuff(self::$suffissi_step1_d, $str, $str_len, 'r2'))) { + return $ret_str.'u'; + } + + // Replace with 'ente' if in R2 + if (!empty($ret_str = self::deleteStuff(self::$suffissi_step1_e, $str, $str_len, 'r2'))) { + return $ret_str.'ente'; + } + + // Delete if in RV + if (!empty($ret_str = self::deleteStuff(self::$suffissi_step1_f, $str, $str_len, 'rv'))) { + return $ret_str; + } + + // Delete if in R2, if preceded by 'abil', 'ic' or 'iv', delete if in R2 + if (!empty($ret_str = self::deleteStuff(self::$suffissi_step1_h, $str, $str_len, 'r2'))) { + if (!empty($ret_str1 = self::deleteStuff(['abil', 'ic', 'iv'], $ret_str, mb_strlen($ret_str), 'r2'))) { + return $ret_str1; + } else { + return $ret_str; + } + } + + // Delete if in R2, if preceded by 'at', delete if in R2 (and if further preceded by 'ic', delete if in R2) + if (!empty($ret_str = self::deleteStuff(self::$suffissi_step1_i, $str, $str_len, 'r2'))) { + if (!empty($ret_str1 = self::deleteStuff(['at'], $ret_str, mb_strlen($ret_str), 'r2'))) { + if (!empty($ret_str2 = self::deleteStuff(['ic'], $ret_str1, mb_strlen($ret_str1), 'r2'))) { + return $ret_str2; + } else { + return $ret_str1; + } + } else { + return $ret_str; + } + } + + return $str; + } + + private static function step2($str, $str_step1) + { + //Step 2: Verb suffixes + //Do step 2 if no ending was removed by step 1 + + if ($str != $str_step1) { + return $str_step1; + } + + $str_len = mb_strlen($str); + + if (!empty($ret_str = self::deleteStuff(self::$suffissi_step2, $str, $str_len, 'rv'))) { + return $ret_str; + } + + return $str; + } + + private static function step3a($str) + { + // Step 3a: Delete a final 'a', 'e', 'i', 'o',' à', 'è', 'ì' or 'ò' if it is in RV, + // and a preceding 'i' if it is in RV ('crocchi' -> 'crocch', 'crocchio' -> 'crocch') + // Always do steps 3a + + $vocale_finale = ['a', 'e', 'i', 'o', 'à', 'è', 'ì', 'ò']; + + $str_len = mb_strlen($str); + + if (!empty($ret_str = self::deleteStuff($vocale_finale, $str, $str_len, 'rv'))) { + if (!empty($ret_str1 = self::deleteStuff(['i'], $ret_str, mb_strlen($ret_str), 'rv'))) { + return $ret_str1; + } else { + return $ret_str; + } + } + + return $str; + } + + private static function step3b($str) + { + // Step 3b: Replace final 'ch' (or 'gh') with 'c' (or 'g') if in 'RV' ('crocch' -> 'crocc') + // Always do steps 3b + + $rv = self::returnRV($str); + + $pattern = '/([cg])h$/'; + + return mb_substr($str, 0, mb_strlen($str) - mb_strlen($rv)) + . preg_replace_callback( + $pattern, + function ($matches) { + return $matches[0]; + }, + $rv + ); + } + + private static function step4($str) + { + // Step 4: Finally, turn I and U back into lower case + + return strtolower($str); + } +} diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Stemmer/NoStemmer.php b/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Stemmer/NoStemmer.php new file mode 100644 index 0000000..abb8d8c --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Stemmer/NoStemmer.php @@ -0,0 +1,11 @@ + 7 && in_array(mb_substr($word, -5), array("zacja", "zacją", "zacji"))) { + return mb_substr($word, 0, -4); + } + if (strlen($word) > 6 && in_array(mb_substr($word, -4), array("acja", "acji", "acją", "tach", "anie", "enie", "eniu", "aniu"))) { + return mb_substr($word, 0, -4); + } + if (strlen($word) > 6 && (mb_substr($word, -4) == "tyka")) { + return mb_substr($word, 0, -2); + } + if (strlen($word) > 5 && in_array(mb_substr($word, -3), array("ach", "ami", "nia", "niu", "cia", "ciu"))) { + return mb_substr($word, 0, -3); + } + if (strlen($word) > 5 && in_array(mb_substr($word, -3), array("cji", "cja", "cją"))) { + return mb_substr($word, 0, -2); + } + if (strlen($word) > 5 && in_array(mb_substr($word, -2), array("ce", "ta"))) { + return mb_substr($word, 0, -2); + } + return $word; + } + + public static function removeDiminutive($word) + { + if (strlen($word) > 6) { + if (in_array(mb_substr($word, -5), array("eczek", "iczek", "iszek", "aszek", "uszek"))) { + return mb_substr($word, 0, -5); + } + if (in_array(mb_substr($word, -4), array("enek", "ejek", "erek"))) { + return mb_substr($word, 0, -2); + } + } + if (strlen($word) > 4) { + if (in_array(mb_substr($word, -2), array("ek", "ak"))) { + return mb_substr($word, 0, -2); + } + } + return $word; + } + + public static function removeAdjectiveEnds($word) + { + if (strlen($word) > 7 && (mb_substr($word, 0, 3) == "naj") && in_array(mb_substr($word, -3), array("sze", "szy"))) { + return mb_substr($word, 3, -3); + } + if (strlen($word) > 7 && (mb_substr($word, 0, 3) == "naj") && (mb_substr($word, 0, 5) == "szych")) { + return mb_substr($word, 3, -5); + } + if (strlen($word) > 6 && (mb_substr($word, -4) == "czny")) { + return mb_substr($word, 0, -4); + } + if (strlen($word) > 5 && in_array(mb_substr($word, -3), array("owy", "owa", "owe", "ych", "ego"))) { + return mb_substr($word, 0, -3); + } + if (strlen($word) > 5 && (mb_substr($word, -2) == "ej")) { + return mb_substr($word, 0, -2); + } + return $word; + } + + public static function removeVerbsEnds($word) + { + if (strlen($word) > 5 && (mb_substr($word, -3) == "bym")) { + return mb_substr($word, 0, -3); + } + if (strlen($word) > 5 && in_array(mb_substr($word, -3), array("esz", "asz", "cie", "eść", "aść", "łem", "amy", "emy"))) { + return mb_substr($word, 0, -3); + } + if (strlen($word) > 3 && in_array(mb_substr($word, -3), array("esz", "asz", "eść", "aść", "eć", "ać"))) { + return mb_substr($word, 0, -2); + } + if (strlen($word) > 3 && in_array(mb_substr($word, -2), array("aj"))) { + return mb_substr($word, 0, -1); + } + if (strlen($word) > 3 && in_array(mb_substr($word, -2), array("ać", "em", "am", "ał", "ił", "ić", "ąc"))) { + return mb_substr($word, 0, -2); + } + return $word; + } + + public static function removeAdverbsEnds($word) + { + if (strlen($word) > 4 && in_array(mb_substr($word, -3), array("nie", "wie", "rze"))) { + return mb_substr($word, 0, -2); + } + return $word; + } + + public static function removePluralForms($word) + { + if (strlen($word) > 4 && in_array(mb_substr($word, -2), array("ów", "om"))) { + return mb_substr($word, 0, -2); + } + if (strlen($word) > 4 && (mb_substr($word, -3) == "ami")) { + return mb_substr($word, 0, -3); + } + return $word; + } + + public static function removeGeneralEnds($word) + { + if (strlen($word) > 4 && in_array(substr($word, -2), array("ia", "ie"))) { + return substr($word, 0, -2); + } + if (strlen($word) > 4 && in_array(substr($word, -1), array("u", "ą", "i", "a", "ę", "y", "ę", "ł"))) { + return substr($word, 0, -1); + } + return $word; + } + + + public static function stem($word) + { + + $word = mb_strtolower($word); + + $stem = $word; + + $stem = self::removeNouns($stem); + $stem = self::removeDiminutive($stem); + $stem = self::removeAdjectiveEnds($stem); + $stem = self::removeVerbsEnds($stem); + $stem = self::removeAdverbsEnds($stem); + $stem = self::removePluralForms($stem); + $stem = self::removeGeneralEnds($stem); + + return $stem; + } +} diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Stemmer/PorterStemmer.php b/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Stemmer/PorterStemmer.php new file mode 100644 index 0000000..459da19 --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Stemmer/PorterStemmer.php @@ -0,0 +1,424 @@ + 1) { + self::replace($word, 'e', ''); + + } else if (self::m(substr($word, 0, -1)) == 1) { + + if (!self::cvc(substr($word, 0, -1))) { + self::replace($word, 'e', ''); + } + } + } + + // Part b + if (self::m($word) > 1 && self::doubleConsonant($word) && substr($word, -1) == 'l') { + $word = substr($word, 0, -1); + } + + return $word; + } + + /** + * Replaces the first string with the second, at the end of the string. If third + * arg is given, then the preceding string must match that m count at least. + * + * @param string $str String to check + * @param string $check Ending to check for + * @param string $repl Replacement string + * @param int $m Optional minimum number of m() to meet + * @return bool Whether the $check string was at the end + * of the $str string. True does not necessarily mean + * that it was replaced. + */ + private static function replace(&$str, $check, $repl, $m = null) + { + $len = 0 - strlen($check); + + if (substr($str, $len) == $check) { + $substr = substr($str, 0, $len); + if (is_null($m) || self::m($substr) > $m) { + $str = $substr.$repl; + } + + return true; + } + + return false; + } + + /** + * What, you mean it's not obvious from the name? + * + * m() measures the number of consonant sequences in $str. if c is + * a consonant sequence and v a vowel sequence, and <..> indicates arbitrary + * presence, + * + * gives 0 + * vc gives 1 + * vcvc gives 2 + * vcvcvc gives 3 + * + * @param string $str The string to return the m count for + * @return int The m count + */ + private static function m($str) + { + $c = self::$regex_consonant; + $v = self::$regex_vowel; + + $str = preg_replace("#^$c+#", '', $str); + $str = preg_replace("#$v+$#", '', $str); + + preg_match_all("#($v+$c+)#", $str, $matches); + + return count($matches[1]); + } + + /** + * Returns true/false as to whether the given string contains two + * of the same consonant next to each other at the end of the string. + * + * @param string $str String to check + * @return bool Result + */ + private static function doubleConsonant($str) + { + $c = self::$regex_consonant; + + return preg_match("#$c{2}$#", $str, $matches) && $matches[0][0] == $matches[0][1]; + } + + /** + * Checks for ending CVC sequence where second C is not W, X or Y + * + * @param string $str String to check + * @return bool Result + */ + private static function cvc($str) + { + $c = self::$regex_consonant; + $v = self::$regex_vowel; + + $matchFound = preg_match("#($c$v$c)$#", $str, $matches); + + $return = false; + + if ($matchFound && strlen($matches[1]) == 3) { + $return = true; + if (in_array($matches[1][2], ['w', 'x', 'y'])) { + $return = false; + } + } + + return $return; + + } +} diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Stemmer/PortugueseStemmer.php b/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Stemmer/PortugueseStemmer.php new file mode 100644 index 0000000..ab8c080 --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Stemmer/PortugueseStemmer.php @@ -0,0 +1,727 @@ +. + */ + +/** + * This is a reimplementation of the Porter Stemmer Algorithm for Portuguese. + * This script is based on the implementation found on + * and has been rewriten to work with TNTSearch by Lucas Padilha + * + * Takes a word and reduces it to its Portuguese stem using the Porter stemmer algorithm. + * + * References: + * - http://snowball.tartarus.org/algorithms/porter/stemmer.html + * - http://snowball.tartarus.org/algorithms/portuguese/stemmer.html + * + * Usage: + * $stem = PortugueseStemmer::stem($word); + * + * @author Lucas Padilha + */ + +class PortugueseStemmer implements Stemmer +{ + /** + * UTF-8 Case lookup table + * + * This lookuptable defines the upper case letters to their correspponding + * lower case letter in UTF-8 + * + * @author Andreas Gohr + */ + private static $utf8_lower_to_upper = array( + 0x0061=>0x0041, 0x03C6=>0x03A6, 0x0163=>0x0162, 0x00E5=>0x00C5, 0x0062=>0x0042, + 0x013A=>0x0139, 0x00E1=>0x00C1, 0x0142=>0x0141, 0x03CD=>0x038E, 0x0101=>0x0100, + 0x0491=>0x0490, 0x03B4=>0x0394, 0x015B=>0x015A, 0x0064=>0x0044, 0x03B3=>0x0393, + 0x00F4=>0x00D4, 0x044A=>0x042A, 0x0439=>0x0419, 0x0113=>0x0112, 0x043C=>0x041C, + 0x015F=>0x015E, 0x0144=>0x0143, 0x00EE=>0x00CE, 0x045E=>0x040E, 0x044F=>0x042F, + 0x03BA=>0x039A, 0x0155=>0x0154, 0x0069=>0x0049, 0x0073=>0x0053, 0x1E1F=>0x1E1E, + 0x0135=>0x0134, 0x0447=>0x0427, 0x03C0=>0x03A0, 0x0438=>0x0418, 0x00F3=>0x00D3, + 0x0440=>0x0420, 0x0454=>0x0404, 0x0435=>0x0415, 0x0449=>0x0429, 0x014B=>0x014A, + 0x0431=>0x0411, 0x0459=>0x0409, 0x1E03=>0x1E02, 0x00F6=>0x00D6, 0x00F9=>0x00D9, + 0x006E=>0x004E, 0x0451=>0x0401, 0x03C4=>0x03A4, 0x0443=>0x0423, 0x015D=>0x015C, + 0x0453=>0x0403, 0x03C8=>0x03A8, 0x0159=>0x0158, 0x0067=>0x0047, 0x00E4=>0x00C4, + 0x03AC=>0x0386, 0x03AE=>0x0389, 0x0167=>0x0166, 0x03BE=>0x039E, 0x0165=>0x0164, + 0x0117=>0x0116, 0x0109=>0x0108, 0x0076=>0x0056, 0x00FE=>0x00DE, 0x0157=>0x0156, + 0x00FA=>0x00DA, 0x1E61=>0x1E60, 0x1E83=>0x1E82, 0x00E2=>0x00C2, 0x0119=>0x0118, + 0x0146=>0x0145, 0x0070=>0x0050, 0x0151=>0x0150, 0x044E=>0x042E, 0x0129=>0x0128, + 0x03C7=>0x03A7, 0x013E=>0x013D, 0x0442=>0x0422, 0x007A=>0x005A, 0x0448=>0x0428, + 0x03C1=>0x03A1, 0x1E81=>0x1E80, 0x016D=>0x016C, 0x00F5=>0x00D5, 0x0075=>0x0055, + 0x0177=>0x0176, 0x00FC=>0x00DC, 0x1E57=>0x1E56, 0x03C3=>0x03A3, 0x043A=>0x041A, + 0x006D=>0x004D, 0x016B=>0x016A, 0x0171=>0x0170, 0x0444=>0x0424, 0x00EC=>0x00CC, + 0x0169=>0x0168, 0x03BF=>0x039F, 0x006B=>0x004B, 0x00F2=>0x00D2, 0x00E0=>0x00C0, + 0x0434=>0x0414, 0x03C9=>0x03A9, 0x1E6B=>0x1E6A, 0x00E3=>0x00C3, 0x044D=>0x042D, + 0x0436=>0x0416, 0x01A1=>0x01A0, 0x010D=>0x010C, 0x011D=>0x011C, 0x00F0=>0x00D0, + 0x013C=>0x013B, 0x045F=>0x040F, 0x045A=>0x040A, 0x00E8=>0x00C8, 0x03C5=>0x03A5, + 0x0066=>0x0046, 0x00FD=>0x00DD, 0x0063=>0x0043, 0x021B=>0x021A, 0x00EA=>0x00CA, + 0x03B9=>0x0399, 0x017A=>0x0179, 0x00EF=>0x00CF, 0x01B0=>0x01AF, 0x0065=>0x0045, + 0x03BB=>0x039B, 0x03B8=>0x0398, 0x03BC=>0x039C, 0x045C=>0x040C, 0x043F=>0x041F, + 0x044C=>0x042C, 0x00FE=>0x00DE, 0x00F0=>0x00D0, 0x1EF3=>0x1EF2, 0x0068=>0x0048, + 0x00EB=>0x00CB, 0x0111=>0x0110, 0x0433=>0x0413, 0x012F=>0x012E, 0x00E6=>0x00C6, + 0x0078=>0x0058, 0x0161=>0x0160, 0x016F=>0x016E, 0x03B1=>0x0391, 0x0457=>0x0407, + 0x0173=>0x0172, 0x00FF=>0x0178, 0x006F=>0x004F, 0x043B=>0x041B, 0x03B5=>0x0395, + 0x0445=>0x0425, 0x0121=>0x0120, 0x017E=>0x017D, 0x017C=>0x017B, 0x03B6=>0x0396, + 0x03B2=>0x0392, 0x03AD=>0x0388, 0x1E85=>0x1E84, 0x0175=>0x0174, 0x0071=>0x0051, + 0x0437=>0x0417, 0x1E0B=>0x1E0A, 0x0148=>0x0147, 0x0105=>0x0104, 0x0458=>0x0408, + 0x014D=>0x014C, 0x00ED=>0x00CD, 0x0079=>0x0059, 0x010B=>0x010A, 0x03CE=>0x038F, + 0x0072=>0x0052, 0x0430=>0x0410, 0x0455=>0x0405, 0x0452=>0x0402, 0x0127=>0x0126, + 0x0137=>0x0136, 0x012B=>0x012A, 0x03AF=>0x038A, 0x044B=>0x042B, 0x006C=>0x004C, + 0x03B7=>0x0397, 0x0125=>0x0124, 0x0219=>0x0218, 0x00FB=>0x00DB, 0x011F=>0x011E, + 0x043E=>0x041E, 0x1E41=>0x1E40, 0x03BD=>0x039D, 0x0107=>0x0106, 0x03CB=>0x03AB, + 0x0446=>0x0426, 0x00FE=>0x00DE, 0x00E7=>0x00C7, 0x03CA=>0x03AA, 0x0441=>0x0421, + 0x0432=>0x0412, 0x010F=>0x010E, 0x00F8=>0x00D8, 0x0077=>0x0057, 0x011B=>0x011A, + 0x0074=>0x0054, 0x006A=>0x004A, 0x045B=>0x040B, 0x0456=>0x0406, 0x0103=>0x0102, + 0x03BB=>0x039B, 0x00F1=>0x00D1, 0x043D=>0x041D, 0x03CC=>0x038C, 0x00E9=>0x00C9, + 0x00F0=>0x00D0, 0x0457=>0x0407, 0x0123=>0x0122, + ); + + private static $vowels = array('a', 'e', 'i', 'o', 'u', 'á', 'é', 'í', 'ó', 'ú', 'â', 'ê', 'ô'); + + public static function stem($word) + { + // we do ALL in UTF-8 + if (!self::check($word)) { + throw new \Exception('Word must be in UTF-8'); + } + + $word = self::strtolower($word); + $word = self::str_replace(array('ã', 'õ'), array('a~', 'o~'), $word); + + $rv = ''; + $rvIndex = ''; + self::rv($word, $rv, $rvIndex); + + $r1 = ''; + $r1Index = ''; + self::r1($word, $r1, $r1Index); + + $r2 = ''; + $r2Index = ''; + self::r2($r1, $r1Index, $r2, $r2Index); + + $initialWord = $word; + + self::step1($word, $r1Index, $r2Index, $rvIndex); + + if ($initialWord == $word) { + self::step2($word, $rvIndex); + } + + if ($initialWord != $word) { + self::step3($word, $rvIndex); + } else { + self::step4($word, $rvIndex); + } + + self::step5($word, $rvIndex); + + self::finish($word); + + return $word; + } + + /** + * R1 is the region after the first non-vowel following a vowel, or the end of the word if there is no such non-vowel. + */ + private static function r1($word, &$r1, &$r1Index) + { + list($index, $value) = self::rx($word); + + $r1 = $value; + $r1Index = $index; + + return true; + } + + /** + * R2 is the region after the first non-vowel following a vowel in R1, or the end of the word if there is no such non-vowel. + */ + private static function r2($r1, $r1Index, &$r2, &$r2Index) + { + list($index, $value) = self::rx($r1); + + $r2 = $value; + $r2Index = $r1Index + $index; + + return true; + } + + /** + * Common function for R1 and R2 + * Search the region after the first non-vowel following a vowel in $word, or the end of the word if there is no such non-vowel. + * R1 : $in = $this->word + * R2 : $in = R1 + */ + private static function rx($in) + { + $length = self::strlen($in); + + // Defaults + $value = ''; + $index = $length; + + // Search all vowels + $vowels = array(); + for ($i = 0; $i < $length; $i++) { + $letter = self::substr($in, $i, 1); + + if (in_array($letter, static::$vowels)) { + $vowels[] = $i; + } + } + + // Search the non-vowel following a vowel + foreach ($vowels as $position) { + $after = $position + 1; + $letter = self::substr($in, $after, 1); + + if (!in_array($letter, static::$vowels)) { + $index = $after + 1; + $value = self::substr($in, ($after+1)); + break; + } + } + + return array($index, $value); + } + + /** + * Used by spanish, italian, portuguese, etc (but not by french) + * + * If the second letter is a consonant, RV is the region after the next following vowel, + * or if the first two letters are vowels, RV is the region after the next consonant, + * and otherwise (consonant-vowel case) RV is the region after the third letter. + * But RV is the end of the word if these positions cannot be found. + */ + private static function rv($word, &$rv, &$rvIndex) + { + $length = self::strlen($word); + + if ($length < 3) { + return true; + } + + $first = self::substr($word, 0, 1); + $second = self::substr($word, 1, 1); + + // If the second letter is a consonant, RV is the region after the next following vowel, + if (!in_array($second, static::$vowels)) { + for ($i = 2; $i < $length; $i++) { + $letter = self::substr($word, $i, 1); + + if (in_array($letter, static::$vowels)) { + $rv = self::substr($word, ($i + 1)); + $rvIndex = $i + 1; + + return true; + } + } + } + + // or if the first two letters are vowels, RV is the region after the next consonant, + if ((in_array($first, static::$vowels)) && (in_array($second, static::$vowels))) { + for ($i = 2; $i < $length; $i++) { + $letter = self::substr($word, $i, 1); + + if (!in_array($letter, static::$vowels)) { + $rv = self::substr($word, ($i + 1)); + $rvIndex = $i + 1; + + return true; + } + } + } + + // and otherwise (consonant-vowel case) RV is the region after the third letter. + if ((!in_array($first, static::$vowels)) && (in_array($second, static::$vowels))) { + $rv = self::substr($word, 3); + $rvIndex = 3; + + return true; + } + + return false; + } + + private static function inRv($position, $rvIndex) + { + return ($position >= $rvIndex); + } + + private static function inR1($position, $r1Index) + { + return ($position >= $r1Index); + } + + private static function inR2($position, $r2Index) + { + return ($position >= $r2Index); + } + + private static function searchIfInRv($word, $suffixes, $rvIndex) + { + return self::search($word, $suffixes, $rvIndex); + } + + private static function searchIfInR2($word, $suffixes, $r2Index) + { + return self::search($word, $suffixes, $r2Index); + } + + private static function search($word, $suffixes, $offset = 0) + { + $length = self::strlen($word); + + if ($offset > $length) { + return false; + } + + foreach ($suffixes as $suffix) { + if ((($position = self::strrpos($word, $suffix, $offset)) !== false) && ((self::strlen($suffix) + $position) == $length)) { + return $position; + } + } + return false; + } + + /** + * Step 1: Standard suffix removal + */ + private static function step1(&$word, $r1Index, $r2Index, $rvIndex) + { + // delete if in R2 + if (($position = self::search($word, array('amentos', 'imentos', 'adoras', 'adores', 'amento', 'imento', 'adora', 'istas', 'ismos', 'antes', 'ância', 'ezas', 'eza', 'icos', 'icas', 'ismo', 'ável', 'ível', 'ista', 'oso', 'osos', 'osas', 'osa', 'ico', 'ica', 'ador', 'aça~o', 'aço~es' , 'ante'))) !== false) { + if (self::inR2($position, $r2Index)) { + $word = self::substr($word, 0, $position); + } + + return true; + } + + // replace with log if in R2 + if (($position = self::search($word, array('logías', 'logía'))) !== false) { + if (self::inR2($position, $r2Index)) { + $word = preg_replace('#(logías|logía)$#u', 'log', $word); + } + + return true; + } + + // replace with u if in R2 + if (($position = self::search($word, array('uciones', 'ución'))) !== false) { + if (self::inR2($position, $r2Index)) { + $word = preg_replace('#(uciones|ución)$#u', 'u', $word); + } + + return true; + } + + // replace with ente if in R2 + if (($position = self::search($word, array('ências', 'ência'))) !== false) { + if (self::inR2($position, $r2Index)) { + $word = preg_replace('#(ências|ência)$#u', 'ente', $word); + } + + return true; + } + + // delete if in R1 + // if preceded by iv, delete if in R2 (and if further preceded by at, delete if in R2), otherwise, + // if preceded by os, ic or ad, delete if in R2 + if (($position = self::search($word, array('amente'))) !== false) { + // delete if in R1 + if (self::inR1($position, $r1Index)) { + $word = self::substr($word, 0, $position); + } + + // if preceded by iv, delete if in R2 (and if further preceded by at, delete if in R2), otherwise, + if (($position2 = self::searchIfInR2($word, array('iv'), $r2Index)) !== false) { + $word = self::substr($word, 0, $position2); + + if (($position3 = self::searchIfInR2($word, array('at'), $r2Index)) !== false) { + $word = self::substr($word, 0, $position3); + } + + // if preceded by os, ic or ad, delete if in R2 + } elseif (($position4 = self::searchIfInR2($word, array('os', 'ic', 'ad'), $r2Index)) !== false) { + $word = self::substr($word, 0, $position4); + } + + return true; + } + + // delete if in R2 + // if preceded by ante, avel or ível, delete if in R2 + if (($position = self::search($word, array('mente'))) !== false) { + // delete if in R2 + if (self::inR2($position, $r2Index)) { + $word = self::substr($word, 0, $position); + } + + // if preceded by ante, avel or ível, delete if in R2 + if (($position2 = self::searchIfInR2($word, array('ante', 'avel', 'ível'), $r2Index)) != false) { + $word = self::substr($word, 0, $position2); + } + + return true; + } + + // delete if in R2 + // if preceded by abil, ic or iv, delete if in R2 + if (($position = self::search($word, array('idades', 'idade'))) !== false) { + // delete if in R2 + if (self::inR2($position, $r2Index)) { + $word = self::substr($word, 0, $position); + } + + // if preceded by abil, ic or iv, delete if in R2 + if (($position2 = self::searchIfInR2($word, array('abil', 'ic', 'iv'), $r2Index)) !== false) { + $word = self::substr($word, 0, $position2); + } + + return true; + } + + // delete if in R2 + // if preceded by at, delete if in R2 + if (($position = self::search($word, array('ivas', 'ivos', 'iva', 'ivo'))) !== false) { + // delete if in R2 + if (self::inR2($position, $r2Index)) { + $word = self::substr($word, 0, $position); + } + + // if preceded by at, delete if in R2 + if (($position2 = self::searchIfInR2($word, array('at'), $r2Index)) !== false) { + $word = self::substr($word, 0, $position2); + } + + return true; + } + + // replace with ir if in RV and preceded by e + if (($position = self::search($word, array('iras', 'ira'))) !== false) { + if (self::inRv($position, $rvIndex)) { + $before = $position - 1; + $letter = self::substr($word, $before, 1); + + if ($letter == 'e') { + $word = preg_replace('#(iras|ira)$#u', 'ir', $word); + } + } + + return true; + } + + return false; + } + + /** + * Step 2: Verb suffixes + * Search for the longest among the following suffixes in RV, and if found, delete. + */ + private static function step2(&$word, $rvIndex) + { + if (($position = self::searchIfInRv($word, array('aríamos', 'eríamos', 'iríamos', 'ássemos', 'êssemos', 'íssemos', 'aríeis', 'eríeis', 'iríeis', 'ásseis', 'ésseis', 'ísseis', 'áramos', 'éramos', 'íramos', 'ávamos', 'aremos', 'eremos', 'iremos', 'ariam', 'eriam', 'iriam', 'assem', 'essem', 'issem', 'arias', 'erias', 'irias', 'ardes', 'erdes', 'irdes', 'asses', 'esses', 'isses', 'astes', 'estes', 'istes', 'áreis', 'areis', 'éreis', 'ereis', 'íreis', 'ireis', 'áveis', 'íamos', 'armos', 'ermos', 'irmos', 'aria', 'eria', 'iria', 'asse', 'esse', 'isse', 'aste', 'este', 'iste', 'arei', 'erei', 'irei', 'adas', 'idas', 'aram', 'eram', 'iram', 'avam', 'arem', 'erem', 'irem', 'ando', 'endo', 'indo', 'ara~o', 'era~o', 'ira~o', 'arás', 'aras', 'erás', 'eras', 'irás', 'avas', 'ares', 'eres', 'ires', 'íeis', 'ados', 'idos', 'ámos', 'amos', 'emos', 'imos', 'iras', 'ada', 'ida', 'ará', 'ara', 'erá', 'era', 'irá', 'ava', 'iam', 'ado', 'ido', 'ias', 'ais', 'eis', 'ira', 'ia', 'ei', 'am', 'em', 'ar', 'er', 'ir', 'as', 'es', 'is', 'eu', 'iu', 'ou'), $rvIndex)) !== false) { + $word = self::substr($word, 0, $position); + + return true; + } + + return false; + } + + /** + * Step 3: d-suffixes + * + */ + private static function step3(&$word, $rvIndex) + { + // Delete suffix i if in RV and preceded by c + if (self::searchIfInRv($word, array('i'), $rvIndex) !== false) { + $letter = self::substr($word, -2, 1); + + if ($letter == 'c') { + $word = self::substr($word, 0, -1); + } + + return true; + } + + return false; + } + + /** + * Step 4 + */ + private static function step4(&$word, $rvIndex) + { + // If the word ends with one of the suffixes "os a i o á í ó" in RV, delete it + if (($position = self::searchIfInRv($word, array('os', 'a', 'i', 'o','á', 'í', 'ó'), $rvIndex)) !== false) { + $word = self::substr($word, 0, $position); + + return true; + } + + return false; + } + + /** + * Step 5 + */ + private static function step5(&$word, $rvIndex) + { + // If the word ends with one of "e é ê" in RV, delete it, and if preceded by gu (or ci) with the u (or i) in RV, delete the u (or i). + if (self::searchIfInRv($word, array('e', 'é', 'ê'), $rvIndex) !== false) { + $word = self::substr($word, 0, -1); + + if (($position2 = self::search($word, array('gu', 'ci'))) !== false) { + if (self::inRv(($position2 + 1), $rvIndex)) { + $word = self::substr($word, 0, -1); + } + } + + return true; + } elseif (self::search($word, array('ç')) !== false) { + $word = preg_replace('#(ç)$#u', 'c', $word); + + return true; + } + + return false; + } + + private static function finish(&$word) + { + // turn U and Y back into lower case, and remove the umlaut accent from a, o and u. + $word = self::str_replace(array('a~', 'o~'), array('ã', 'õ'), $word); + } + + /** + * Tries to detect if a string is in Unicode encoding + * + * @author + * @link http://www.php.net/manual/en/function.utf8-encode.php + */ + private static function check($str) + { + for ($i=0; $i + * @see strlen() + * @see utf8_decode() + */ + private static function strlen($string) + { + return strlen(utf8_decode($string)); + } + + /** + * Unicode aware replacement for substr() + * + * @author lmak at NOSPAM dot iti dot gr + * @link http://www.php.net/manual/en/function.substr.php + * @see substr() + */ + private static function substr($str,$start,$length=null) + { + $ar = array(); + preg_match_all("/./u", $str, $ar); + + if($length != null) { + return join("",array_slice($ar[0],$start,$length)); + } else { + return join("",array_slice($ar[0],$start)); + } + } + + /** + * Unicode aware replacement for strrepalce() + * + * @author Harry Fuecks + * @see strreplace(); + */ + private static function str_replace($s,$r,$str) + { + if(!is_array($s)){ + $s = '!'.preg_quote($s,'!').'!u'; + }else{ + foreach ($s as $k => $v) { + $s[$k] = '!'.preg_quote($v).'!u'; + } + } + return preg_replace($s,$r,$str); + } + + /** + * This is a unicode aware replacement for strtolower() + * + * Uses mb_string extension if available + * + * @author Andreas Gohr + * @see strtolower() + * @see utf8_strtoupper() + */ + private static function strtolower($string) + { + if(!defined('UTF8_NOMBSTRING') && function_exists('mb_strtolower')) + return mb_strtolower($string,'utf-8'); + + //global $utf8_upper_to_lower; + $utf8_upper_to_lower = array_flip(self::$utf8_lower_to_upper); + $uni = self::utf8_to_unicode($string); + $cnt = count($uni); + for ($i=0; $i < $cnt; $i++){ + if($utf8_upper_to_lower[$uni[$i]]){ + $uni[$i] = $utf8_upper_to_lower[$uni[$i]]; + } + } + return self::unicode_to_utf8($uni); + } + + /** + * This function returns any UTF-8 encoded text as a list of + * Unicode values: + * + * @author Scott Michael Reynen + * @link http://www.randomchaos.com/document.php?source=php_and_unicode + * @see unicode_to_utf8() + */ + private static function utf8_to_unicode( &$str ) + { + $unicode = array(); + $values = array(); + $looking_for = 1; + + for ($i = 0; $i < strlen( $str ); $i++ ) { + $this_value = ord( $str[ $i ] ); + if ( $this_value < 128 ) $unicode[] = $this_value; + else { + if ( count( $values ) == 0 ) $looking_for = ( $this_value < 224 ) ? 2 : 3; + $values[] = $this_value; + if ( count( $values ) == $looking_for ) { + $number = ( $looking_for == 3 ) ? + ( ( $values[0] % 16 ) * 4096 ) + ( ( $values[1] % 64 ) * 64 ) + ( $values[2] % 64 ): + ( ( $values[0] % 32 ) * 64 ) + ( $values[1] % 64 ); + $unicode[] = $number; + $values = array(); + $looking_for = 1; + } + } + } + return $unicode; + } + + /** + * This function converts a Unicode array back to its UTF-8 representation + * + * @author Scott Michael Reynen + * @link http://www.randomchaos.com/document.php?source=php_and_unicode + * @see utf8_to_unicode() + */ + private static function unicode_to_utf8( &$str ) + { + if (!is_array($str)) return ''; + + $utf8 = ''; + foreach( $str as $unicode ) { + if ( $unicode < 128 ) { + $utf8.= chr( $unicode ); + } elseif ( $unicode < 2048 ) { + $utf8.= chr( 192 + ( ( $unicode - ( $unicode % 64 ) ) / 64 ) ); + $utf8.= chr( 128 + ( $unicode % 64 ) ); + } else { + $utf8.= chr( 224 + ( ( $unicode - ( $unicode % 4096 ) ) / 4096 ) ); + $utf8.= chr( 128 + ( ( ( $unicode % 4096 ) - ( $unicode % 64 ) ) / 64 ) ); + $utf8.= chr( 128 + ( $unicode % 64 ) ); + } + } + return $utf8; + } + + /** + * This is an Unicode aware replacement for strrpos + * + * Uses mb_string extension if available + * + * @author Harry Fuecks + * @see strpos() + */ + private static function strrpos($haystack, $needle, $offset=0) + { + if(!defined('UTF8_NOMBSTRING') && function_exists('mb_strrpos')) + return mb_strrpos($haystack, $needle, $offset, 'utf-8'); + + if (!$offset) { + $ar = self::explode($needle, $haystack); + $count = count($ar); + if ( $count > 1 ) { + return self::strlen($haystack) - self::strlen($ar[($count-1)]) - self::strlen($needle); + } + return false; + } else { + if ( !is_int($offset) ) { + trigger_error('Offset must be an integer', E_USER_WARNING); + return false; + } + + $str = self::substr($haystack, $offset); + + if ( false !== ($pos = self::strrpos($str, $needle))){ + return $pos + $offset; + } + return false; + } + } + + /** + * Unicode aware replacement for explode + * + * @author Harry Fuecks + * @see explode(); + */ + private static function explode($sep, $str) + { + if ( $sep == '' ) { + trigger_error('Empty delimiter',E_USER_WARNING); + return FALSE; + } + + return preg_split('!'.preg_quote($sep,'!').'!u',$str); + } +} \ No newline at end of file diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Stemmer/RussianStemmer.php b/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Stemmer/RussianStemmer.php new file mode 100644 index 0000000..b7aa1d3 --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Stemmer/RussianStemmer.php @@ -0,0 +1,83 @@ +tokenize($text, $stopwords); + } +} diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Support/Collection.php b/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Support/Collection.php new file mode 100644 index 0000000..b66ca6f --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Support/Collection.php @@ -0,0 +1,164 @@ +items = $items; + } + + public function forget($key) + { + unset($this->items[$key]); + } + + /** + * @param callable $callback + * + * @return Collection + */ + public function each(callable $callback) + { + foreach ($this->items as $key => $item) { + if ($callback($item, $key) === false) { + break; + } + } + + return $this; + } + + /** + * @param callable|null $callback + * + * @return static + */ + public function filter(callable $callback = null) + { + if ($callback) { + $return = []; + + foreach ($this->items as $key => $value) { + if ($callback($value, $key)) { + $return[$key] = $value; + } + } + + return new static($return); + } + + return new static(array_filter($this->items)); + } + + /** + * @return bool + */ + public function isEmpty() + { + return empty($this->items); + } + + /** + * @param callable $callback + * + * @return static + */ + public function map(callable $callback) + { + $keys = array_keys($this->items); + + $items = array_map($callback, $this->items, $keys); + + return new static(array_combine($keys, $items)); + } + + /** + * @param callable $callback + * @param null $initial + * + * @return mixed + */ + public function reduce(callable $callback, $initial = null) + { + return array_reduce($this->items, $callback, $initial); + } + + public function get($key) + { + return $this->items[$key]; + } + + /** + * @param $value + * @param null $key + * + * @return array + */ + public function pluck($value, $key = null) + { + return array_column($this->items, $value, $key); + } + + /** + * @param $glue + * + * @return string + */ + public function implode($glue) + { + return implode($glue, $this->items); + } + + /** + * @return int + */ + public function count(): int + { + return count($this->items); + } + + /** + * @param int $offset + * @param int $length + * + * @return static + */ + public function slice($offset, $length = null) + { + return new static(array_slice($this->items, $offset, $length, true)); + } + + /** + * @param int $limit + * @return static + */ + public function take($limit) + { + return $this->slice(0, abs($limit)); + } + + /** + * @return ArrayIterator + */ + public function getIterator(): Traversable + { + return new ArrayIterator($this->items); + } + + /** + * @return array + */ + public function toArray() + { + return $this->items; + } +} diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Support/EdgeNgramTokenizer.php b/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Support/EdgeNgramTokenizer.php new file mode 100644 index 0000000..2cd6858 --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Support/EdgeNgramTokenizer.php @@ -0,0 +1,23 @@ +getPattern(), $text, -1, PREG_SPLIT_NO_EMPTY); + + foreach ($splits as $split) { + for ($i = 2; $i <= strlen($split); $i++) { + $ngrams[] = mb_substr($split, 0, $i); + } + } + + return $ngrams; + } +} diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Support/Expression.php b/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Support/Expression.php new file mode 100644 index 0000000..d1acc59 --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Support/Expression.php @@ -0,0 +1,116 @@ +lex($exp); + foreach ($tokens as $token) { + if ($this->isOperand($token)) { + $postfix[] = $token; + } else { + if ($token == ")") { + while (($top = array_pop($stack)) != "(" && !empty($top)) { + $postfix[] = $top; + } + + } else { + while ( + count($stack) && !(end($stack) == "(") && + ($this->priority(end($stack)) >= $this->priority($token)) + ) { + $postfix[] = array_pop($stack); + } + $stack[] = $token; + } + } + } + while (!empty($stack)) { + $postfix[] = array_pop($stack); + } + + return $postfix; + } + + public function isOperand($str) + { + + if ( + ($str == "|") || ($str == "&") || ($str == "~") || + ($str == "(") || ($str == ")") + ) { + return false; + } + + return true; + + } + + public function isOperator($str) + { + return !$this->isOperand($str); + } + + public function priority($operator) + { + + $priority = 0; + + if ($operator == ("&")) { + $priority = 2; + } + + if ($operator == "~") { + $priority = 3; + } + + if ($operator == "|") { + $priority = 1; + } + + if ($operator == "(" || $operator == ")") { + $priority = 4; + } + + return $priority; + + } + + public function lex($string) + { + $bad = [' or ', ' -', ' ']; + $good = ['|', '~', '&']; + + $string = str_replace($bad, $good, $string); + $string = mb_strtolower($string); + + $tokens = []; + $token = ""; + foreach (str_split($string) as $char) { + + if ($this->isOperator($char)) { + if ($token) { + $tokens[] = $token; + } + + $tokens[] = $char; + $token = ""; + } else { + $token .= $char; + } + } + if ($token) { + $tokens[] = $token; + } + + return $tokens; + } +} diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Support/FivegramTokenizer.php b/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Support/FivegramTokenizer.php new file mode 100644 index 0000000..9eb7e0c --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Support/FivegramTokenizer.php @@ -0,0 +1,12 @@ +tokenize($text, $stopwords); + } +} diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Support/FourgramTokenizer.php b/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Support/FourgramTokenizer.php new file mode 100644 index 0000000..9334b20 --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Support/FourgramTokenizer.php @@ -0,0 +1,12 @@ +tokenize($text, $stopwords); + } +} diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Support/Highlighter.php b/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Support/Highlighter.php new file mode 100644 index 0000000..9d82449 --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Support/Highlighter.php @@ -0,0 +1,220 @@ + false, + 'wholeWord' => true, + 'caseSensitive' => false, + 'stripLinks' => false, + 'tagOptions' => [ + // 'class' => 'search-term', // Example + // 'title' => 'You searched for this.', // Example + // 'data-toggle' => 'tooltip', // Example + ] + ]; + + protected $tokenizer; + + public function __construct(TokenizerInterface $tokenizer = null) + { + if (!empty($tokenizer)) { + $this->tokenizer = $tokenizer; + } else { + $this->tokenizer = new Tokenizer; + } + } + + /** + * @param $text + * @param $needle + * @param string $tag + * @param array $options + * + * @return string + */ + public function highlight($text, $needle, $tag = 'em', $options = []) + { + $this->options = array_merge($this->options, $options); + + $tagAttributes = ''; + if (count($this->options['tagOptions'])) { + foreach ($this->options['tagOptions'] as $attr => $value) { + $tagAttributes .= $attr . '="' . $value . '" '; + } + $tagAttributes = ' ' . trim($tagAttributes); + } + + $highlight = '<' . $tag . $tagAttributes .'>\1'; + $needle = preg_split($this->tokenizer->getPattern(), $needle, -1, PREG_SPLIT_NO_EMPTY); + + // Select pattern to use + if ($this->options['simple']) { + $pattern = '#(%s)#'; + $sl_pattern = '#(%s)#'; + } else { + $pattern = '#(?!<.*?)(%s)(?![^<>]*?>)#'; + $sl_pattern = '#(%s)#'; + } + + // Add Forgotten Unicode + $pattern .= 'u'; + + // Case sensitivity + if (!($this->options['caseSensitive'])) { + $pattern .= 'i'; + $sl_pattern .= 'i'; + } + + $needle = (array) $needle; + foreach ($needle as $needle_s) { + $needle_s = preg_quote($needle_s); + + // Escape needle with optional whole word check + if ($this->options['wholeWord']) { + $needle_s = '\b' . $needle_s . '\b'; + } + + // Strip links + if ($this->options['stripLinks']) { + $sl_regex = sprintf($sl_pattern, $needle_s); + $text = preg_replace($sl_regex, '\1', $text); + } + + $regex = sprintf($pattern, $needle_s); + $text = preg_replace($regex, $highlight, $text); + } + + return $text; + } + + /** + * find the locations of each of the words + * Nothing exciting here. The array_unique is required + * unless you decide to make the words unique before passing in + * + * @param $words + * @param $fulltext + * + * @return array + */ + public function _extractLocations($words, $fulltext) + { + $locations = array(); + foreach ($words as $word) { + $wordlen = mb_strlen($word); + $loc = mb_stripos($fulltext, $word); + while ($loc !== false) { + $locations[] = $loc; + $loc = mb_stripos($fulltext, $word, $loc + $wordlen); + } + } + $locations = array_unique($locations); + sort($locations); + + return $locations; + } + + /** + * Work out which is the most relevant portion to display + * This is done by looping over each match and finding the smallest distance between two found + * strings. The idea being that the closer the terms are the better match the snippet would be. + * When checking for matches we only change the location if there is a better match. + * The only exception is where we have only two matches in which case we just take the + * first as will be equally distant. + * + * @param $locations + * @param $prevcount + * + * @return int + */ + public function _determineSnipLocation($locations, $prevcount) + { + if (!isset($locations[0])) { + return -1; + } + + // If we only have 1 match we dont actually do the for loop so set to the first + $startpos = $locations[0]; + $loccount = count($locations); + $smallestdiff = PHP_INT_MAX; + // If we only have 2 skip as its probably equally relevant + if (count($locations) > 2) { + // skip the first as we check 1 behind + for ($i = 1; $i < $loccount; $i++) { + if ($i == $loccount - 1) { + // at the end + $diff = $locations[$i] - $locations[$i - 1]; + } else { + $diff = $locations[$i + 1] - $locations[$i]; + } + + if ($smallestdiff > $diff) { + $smallestdiff = $diff; + $startpos = $locations[$i]; + } + } + } + + $startpos = $startpos > $prevcount ? $startpos - $prevcount : 0; + return $startpos; + } + + /** + * 1/6 ratio on prevcount tends to work pretty well and puts the terms + * in the middle of the extract + * + * @param $words + * @param $fulltext + * @param int $rellength + * @param int $prevcount + * @param string $indicator + * + * @return bool|string + */ + public function extractRelevant($words, $fulltext, $rellength = 300, $prevcount = 50, $indicator = '...') + { + $words = preg_split($this->tokenizer->getPattern(), $words, -1, PREG_SPLIT_NO_EMPTY); + $textlength = mb_strlen($fulltext); + if ($textlength <= $rellength) { + return $fulltext; + } + + $locations = $this->_extractLocations($words, $fulltext); + $startpos = $this->_determineSnipLocation($locations, $prevcount); + // if we are going to snip too much... + if ($textlength - $startpos < $rellength) { + $startpos = $startpos - ($textlength - $startpos) / 2; + } + + // in case no match is found, reset position for proper math below + if ($startpos == -1) { + $startpos = 0; + } + + $reltext = mb_substr($fulltext, $startpos, $rellength); + preg_match_all($this->tokenizer->getPattern(), $reltext, $offset, PREG_OFFSET_CAPTURE); + // since PREG_OFFSET_CAPTURE returns offset in bytes we have to use mb_strlen(substr()) hack here + $last = mb_strlen(substr($reltext, 0, end($offset[0])[1])); + $first = mb_strlen(substr($reltext, 0, $offset[0][0][1])); + + // if no match is found, just return first $rellength characters without the last word + if (empty($locations)) { + return mb_substr($reltext, 0, $last) . $indicator; + } + + // check to ensure we dont snip the last word if thats the match + if ($startpos + $rellength < $textlength) { + $reltext = mb_substr($reltext, 0, $last) . $indicator; // remove last word + } + + // If we trimmed from the front add ... + if ($startpos != 0) { + $reltext = $indicator . mb_substr($reltext, $first + 1); // remove first word + } + + return $reltext; + } +} diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Support/NGramTokenizer.php b/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Support/NGramTokenizer.php new file mode 100644 index 0000000..ac938e9 --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Support/NGramTokenizer.php @@ -0,0 +1,34 @@ +min_gram = $min_gram; + $this->max_gram = $max_gram; + } + + protected static $pattern = '/[\s,\.]+/'; + + public function tokenize($text, $stopwords = []) + { + $text = mb_strtolower($text); + + $ngrams = []; + $splits = preg_split($this->getPattern(), $text, -1, PREG_SPLIT_NO_EMPTY); + + foreach ($splits as $split) { + for ($currentGram = $this->min_gram; $currentGram <= $this->max_gram; $currentGram++) { + for ($i = 0; $i <= strlen($split) - $currentGram; $i++) { + $ngrams[] = mb_substr($split, $i, $currentGram); + } + } + } + + return $ngrams; + } +} diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Support/ProductTokenizer.php b/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Support/ProductTokenizer.php new file mode 100644 index 0000000..e25c590 --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Support/ProductTokenizer.php @@ -0,0 +1,14 @@ +getPattern(), $text, -1, PREG_SPLIT_NO_EMPTY); + return array_diff($split, $stopwords); + } +} diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Support/Tokenizer.php b/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Support/Tokenizer.php new file mode 100644 index 0000000..8166e27 --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Support/Tokenizer.php @@ -0,0 +1,14 @@ +getPattern(), $text, -1, PREG_SPLIT_NO_EMPTY); + return array_diff($split, $stopwords); + } +} diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Support/TokenizerInterface.php b/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Support/TokenizerInterface.php new file mode 100644 index 0000000..56d4e2f --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/src/Support/TokenizerInterface.php @@ -0,0 +1,9 @@ +tokenize($text, $stopwords); + } +} diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/src/TNTFuzzyMatch.php b/plugins/tntsearch/vendor/teamtnt/tntsearch/src/TNTFuzzyMatch.php new file mode 100644 index 0000000..b1b7f41 --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/src/TNTFuzzyMatch.php @@ -0,0 +1,155 @@ +norm($a) * $this->norm($b)); + + if ($denominator == 0) { + return 0; + } + + return $this->dot($a, $b) / $denominator; + } + + public function hasCommonSubsequence($pattern, $str) + { + $pattern = mb_strtolower($pattern); + $str = mb_strtolower($str); + + $j = 0; + $patternLength = strlen($pattern); + $strLength = strlen($str); + + for ($i = 0; $i < $strLength && $j < $patternLength; $i++) { + if ($pattern[$j] == $str[$i]) { + $j++; + } + } + + return ($j == $patternLength); + } + + public function makeVectorSameLength($str, $pattern) + { + $j = 0; + $max = max(count($pattern), count($str)); + $a = []; + $b = []; + + for ($i = 0; $i < $max && $j < $max; $i++) { + if (isset($pattern[$j]) && isset($str[$i]) && $pattern[$j] == $str[$i]) { + $j++; + $b[] = $str[$i]; + } else { + $b[] = 0; + } + } + + return $b; + } + + public function fuzzyMatchFromFile($pattern, $path) + { + $res = []; + $lines = fopen($path, "r"); + if ($lines) { + while (!feof($lines)) { + $line = rtrim(fgets($lines, 4096)); + if ($this->hasCommonSubsequence($pattern, $line)) { + $res[] = $line; + } + } + fclose($lines); + } + + $paternVector = $this->wordToVector($pattern); + + $sorted = []; + foreach ($res as $caseSensitiveWord) { + $word = mb_strtolower(trim($caseSensitiveWord)); + $wordVector = $this->wordToVector($word); + $normalizedPaternVector = $this->makeVectorSameLength($wordVector, $paternVector); + + $angle = $this->angleBetweenVectors($wordVector, $normalizedPaternVector); + + if (strpos($word, $pattern) !== false) { + $angle += 0.2; + } + $sorted[$caseSensitiveWord] = $angle; + } + + arsort($sorted); + return $sorted; + } + + public function fuzzyMatch($pattern, $items) + { + $res = []; + + foreach ($items as $item) { + if ($this->hasCommonSubsequence($pattern, $item)) { + $res[] = $item; + } + } + + $paternVector = $this->wordToVector($pattern); + + $sorted = []; + foreach ($res as $word) { + $word = trim($word); + $wordVector = $this->wordToVector($word); + $normalizedPaternVector = $this->makeVectorSameLength($wordVector, $paternVector); + + $angle = $this->angleBetweenVectors($wordVector, $normalizedPaternVector); + + if (strpos($word, $pattern) !== false) { + $angle += 0.2; + } + + $sorted[$word] = $angle; + } + + arsort($sorted); + + return $sorted; + } +} diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/src/TNTGeoSearch.php b/plugins/tntsearch/vendor/teamtnt/tntsearch/src/TNTGeoSearch.php new file mode 100644 index 0000000..2e45f35 --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/src/TNTGeoSearch.php @@ -0,0 +1,91 @@ +buildQuery($currentLocation, $distance, $limit); + + $stopTimer = microtime(true); + + return [ + 'ids' => $res->pluck('doc_id'), + 'distances' => $res->pluck('distance'), + 'hits' => $res->count(), + 'execution_time' => round($stopTimer - $startTimer, 7) * 1000 ." ms" + ]; + } + + public function buildQuery($currentLocation, $distance, $limit) + { + + $query = " + SELECT doc_id, longitude, latitude, + :CUR_sin_lat * sin_lat + :CUR_cos_lat * cos_lat * (cos_lng * :CUR_cos_lng + sin_lng * :CUR_sin_lng) AS distance + FROM locations AS l + JOIN ( + SELECT :latpoint AS latpoint, :longpoint AS longpoint, + :radius AS radius, 111.045 AS distance_unit + ) AS p + WHERE l.latitude + BETWEEN p.latpoint - (p.radius / p.distance_unit) + AND p.latpoint + (p.radius / p.distance_unit) + AND l.longitude + BETWEEN p.longpoint - (p.radius / (p.distance_unit * :CUR_cos_lat)) + AND p.longpoint + (p.radius / (p.distance_unit * :CUR_cos_lat)) + ORDER BY distance DESC + LIMIT :limit"; + + $stmtDoc = $this->index->prepare($query); + + $cur_lat = $currentLocation['latitude']; + $cur_lng = $currentLocation['longitude']; + + $CUR_cos_lat = cos($cur_lat * pi() / 180); + $CUR_sin_lat = sin($cur_lat * pi() / 180); + $CUR_cos_lng = cos($cur_lng * pi() / 180); + $CUR_sin_lng = sin($cur_lng * pi() / 180); + + $stmtDoc->bindValue(':latpoint', $cur_lat); + $stmtDoc->bindValue(':longpoint', $cur_lng); + $stmtDoc->bindValue(':radius', $distance); + $stmtDoc->bindValue(':CUR_cos_lat', $CUR_cos_lat); + $stmtDoc->bindValue(':CUR_sin_lat', $CUR_sin_lat); + $stmtDoc->bindValue(':CUR_cos_lng', $CUR_cos_lng); + $stmtDoc->bindValue(':CUR_sin_lng', $CUR_sin_lng); + $stmtDoc->bindValue(':limit', $limit); + $stmtDoc->execute(); + $locations = new Collection($stmtDoc->fetchAll(PDO::FETCH_ASSOC)); + + $locations = $locations->map(function ($location) use ($distance) { + $location['distance'] = acos($location['distance']) * $this->earthRadius; + + if ($location['distance'] <= $distance) { + return $location; + } + + }); + + return $locations; + } + + public function getIndex() + { + $indexer = new TNTGeoIndexer; + $indexer->inMemory = false; + $indexer->setIndex($this->index); + return $indexer; + } +} diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/src/TNTSearch.php b/plugins/tntsearch/vendor/teamtnt/tntsearch/src/TNTSearch.php new file mode 100644 index 0000000..fabc66e --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/src/TNTSearch.php @@ -0,0 +1,513 @@ +config = $config; + $this->config['storage'] = rtrim($this->config['storage'], '/').'/'; + } + + public function __construct() + { + $this->tokenizer = new Tokenizer; + } + + /** + * @param PDO $dbh + */ + public function setDatabaseHandle(PDO $dbh) + { + $this->dbh = $dbh; + } + + /** + * @param string $indexName + * @param boolean $disableOutput + * + * @return TNTIndexer + */ + public function createIndex($indexName, $disableOutput = false) + { + $indexer = new TNTIndexer; + $indexer->loadConfig($this->config); + $indexer->disableOutput = $disableOutput; + + if ($this->dbh) { + $indexer->setDatabaseHandle($this->dbh); + } + return $indexer->createIndex($indexName); + } + + /** + * @param string $indexName + * + * @throws IndexNotFoundException + */ + public function selectIndex($indexName) + { + $pathToIndex = $this->config['storage'].$indexName; + if (!file_exists($pathToIndex)) { + throw new IndexNotFoundException("Index {$pathToIndex} does not exist", 1); + } + $this->index = new PDO('sqlite:'.$pathToIndex); + $this->index->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); + $this->setStemmer(); + $this->setTokenizer(); + } + + /** + * @param string $phrase + * @param int $numOfResults + * + * @return array + */ + public function search($phrase, $numOfResults = 100) + { + $startTimer = microtime(true); + $keywords = $this->breakIntoTokens($phrase); + $keywords = new Collection($keywords); + + $keywords = $keywords->map(function ($keyword) { + return $this->stemmer->stem($keyword); + }); + + $tfWeight = 1; + $dlWeight = 0.5; + $docScores = []; + $count = $this->totalDocumentsInCollection(); + + foreach ($keywords as $index => $term) { + $isLastKeyword = ($keywords->count() - 1) == $index; + $df = $this->totalMatchingDocuments($term, $isLastKeyword); + $idf = log($count / max(1, $df)); + foreach ($this->getAllDocumentsForKeyword($term, false, $isLastKeyword) as $document) { + $docID = $document['doc_id']; + $tf = $document['hit_count']; + $num = ($tfWeight + 1) * $tf; + $denom = $tfWeight + * ((1 - $dlWeight) + $dlWeight) + + $tf; + $score = $idf * ($num / $denom); + $docScores[$docID] = isset($docScores[$docID]) ? + $docScores[$docID] + $score : $score; + } + } + + arsort($docScores); + + $docs = new Collection($docScores); + + $totalHits = $docs->count(); + $docs = $docs->map(function ($doc, $key) { + return $key; + })->take($numOfResults); + $stopTimer = microtime(true); + + if ($this->isFileSystemIndex()) { + return $this->filesystemMapIdsToPaths($docs)->toArray(); + } + return [ + 'ids' => array_keys($docs->toArray()), + 'hits' => $totalHits, + 'execution_time' => round($stopTimer - $startTimer, 7) * 1000 ." ms" + ]; + } + + /** + * @param string $phrase + * @param int $numOfResults + * + * @return array + */ + public function searchBoolean($phrase, $numOfResults = 100) + { + $stack = []; + $startTimer = microtime(true); + + $expression = new Expression; + $postfix = $expression->toPostfix("|".$phrase); + + foreach ($postfix as $token) { + if ($token == '&') { + $left = array_pop($stack); + $right = array_pop($stack); + if (is_string($left)) { + $left = $this->getAllDocumentsForKeyword($this->stemmer->stem($left), true) + ->pluck('doc_id'); + } + if (is_string($right)) { + $right = $this->getAllDocumentsForKeyword($this->stemmer->stem($right), true) + ->pluck('doc_id'); + } + if (is_null($left)) { + $left = []; + } + + if (is_null($right)) { + $right = []; + } + $stack[] = array_values(array_intersect($left, $right)); + } else + if ($token == '|') { + $left = array_pop($stack); + $right = array_pop($stack); + + if (is_string($left)) { + $left = $this->getAllDocumentsForKeyword($this->stemmer->stem($left), true) + ->pluck('doc_id'); + } + if (is_string($right)) { + $right = $this->getAllDocumentsForKeyword($this->stemmer->stem($right), true) + ->pluck('doc_id'); + } + if (is_null($left)) { + $left = []; + } + + if (is_null($right)) { + $right = []; + } + $stack[] = array_unique(array_merge($left, $right)); + } else + if ($token == '~') { + $left = array_pop($stack); + if (is_string($left)) { + $left = $this->getAllDocumentsForWhereKeywordNot($this->stemmer->stem($left), true) + ->pluck('doc_id'); + } + if (is_null($left)) { + $left = []; + } + $stack[] = $left; + } else { + $stack[] = $token; + } + } + if (count($stack)) { + $docs = new Collection($stack[0]); + } else { + $docs = new Collection; + } + + $docs = $docs->take($numOfResults); + + $stopTimer = microtime(true); + + if ($this->isFileSystemIndex()) { + return $this->filesystemMapIdsToPaths($docs)->toArray(); + } + + return [ + 'ids' => $docs->toArray(), + 'hits' => $docs->count(), + 'execution_time' => round($stopTimer - $startTimer, 7) * 1000 ." ms" + ]; + } + + /** + * @param $keyword + * @param bool $noLimit + * @param bool $isLastKeyword + * + * @return Collection + */ + public function getAllDocumentsForKeyword($keyword, $noLimit = false, $isLastKeyword = false) + { + $word = $this->getWordlistByKeyword($keyword, $isLastKeyword); + if (!isset($word[0])) { + return new Collection([]); + } + if ($this->fuzziness) { + return $this->getAllDocumentsForFuzzyKeyword($word, $noLimit); + } + + return $this->getAllDocumentsForStrictKeyword($word, $noLimit); + } + + /** + * @param $keyword + * @param bool $noLimit + * + * @return Collection + */ + public function getAllDocumentsForWhereKeywordNot($keyword, $noLimit = false) + { + $word = $this->getWordlistByKeyword($keyword); + if (!isset($word[0])) { + return new Collection([]); + } + $query = "SELECT * FROM doclist WHERE doc_id NOT IN (SELECT doc_id FROM doclist WHERE term_id = :id) GROUP BY doc_id ORDER BY hit_count DESC LIMIT {$this->maxDocs}"; + if ($noLimit) { + $query = "SELECT * FROM doclist WHERE doc_id NOT IN (SELECT doc_id FROM doclist WHERE term_id = :id) GROUP BY doc_id ORDER BY hit_count DESC"; + } + $stmtDoc = $this->index->prepare($query); + + $stmtDoc->bindValue(':id', $word[0]['id']); + $stmtDoc->execute(); + return new Collection($stmtDoc->fetchAll(PDO::FETCH_ASSOC)); + } + + /** + * @param $keyword + * @param bool $isLastWord + * + * @return int + */ + public function totalMatchingDocuments($keyword, $isLastWord = false) + { + $occurance = $this->getWordlistByKeyword($keyword, $isLastWord); + if (isset($occurance[0])) { + return $occurance[0]['num_docs']; + } + + return 0; + } + + /** + * @param $keyword + * @param bool $isLastWord + * + * @return array + */ + public function getWordlistByKeyword($keyword, $isLastWord = false) + { + $searchWordlist = "SELECT * FROM wordlist WHERE term like :keyword LIMIT 1"; + $stmtWord = $this->index->prepare($searchWordlist); + + if ($this->asYouType && $isLastWord) { + $searchWordlist = "SELECT * FROM wordlist WHERE term like :keyword ORDER BY length(term) ASC, num_hits DESC LIMIT 1"; + $stmtWord = $this->index->prepare($searchWordlist); + $stmtWord->bindValue(':keyword', mb_strtolower($keyword)."%"); + } else { + $stmtWord->bindValue(':keyword', mb_strtolower($keyword)); + } + $stmtWord->execute(); + $res = $stmtWord->fetchAll(PDO::FETCH_ASSOC); + + if ($this->fuzziness && !isset($res[0])) { + return $this->fuzzySearch($keyword); + } + return $res; + } + + /** + * @param $keyword + * + * @return array + */ + public function fuzzySearch($keyword) + { + $prefix = mb_substr($keyword, 0, $this->fuzzy_prefix_length); + $searchWordlist = "SELECT * FROM wordlist WHERE term like :keyword ORDER BY num_hits DESC LIMIT {$this->fuzzy_max_expansions}"; + $stmtWord = $this->index->prepare($searchWordlist); + $stmtWord->bindValue(':keyword', mb_strtolower($prefix)."%"); + $stmtWord->execute(); + $matches = $stmtWord->fetchAll(PDO::FETCH_ASSOC); + + $resultSet = []; + foreach ($matches as $match) { + $distance = levenshtein($match['term'], $keyword); + if ($distance <= $this->fuzzy_distance) { + $match['distance'] = $distance; + $resultSet[] = $match; + } + } + + // Sort the data by distance, and than by num_hits + $distance = []; + $hits = []; + foreach ($resultSet as $key => $row) { + $distance[$key] = $row['distance']; + $hits[$key] = $row['num_hits']; + } + array_multisort($distance, SORT_ASC, $hits, SORT_DESC, $resultSet); + + return $resultSet; + } + + public function totalDocumentsInCollection() + { + return $this->getValueFromInfoTable('total_documents'); + } + + public function getStemmer() + { + return $this->stemmer; + } + + public function setStemmer() + { + $stemmer = $this->getValueFromInfoTable('stemmer'); + if ($stemmer) { + $this->stemmer = new $stemmer; + } else { + $this->stemmer = isset($this->config['stemmer']) ? new $this->config['stemmer'] : new NoStemmer; + } + } + + public function setTokenizer() + { + $tokenizer = $this->getValueFromInfoTable('tokenizer'); + if ($tokenizer) { + $this->tokenizer = new $tokenizer; + } else { + $this->tokenizer = isset($this->config['tokenizer']) ? new $this->config['tokenizer'] : new Tokenizer; + } + } + + /** + * @return bool + */ + public function isFileSystemIndex() + { + return $this->getValueFromInfoTable('driver') == 'filesystem'; + } + + public function getValueFromInfoTable($value) + { + $query = "SELECT * FROM info WHERE key = '$value'"; + $docs = $this->index->query($query); + + if ($ret = $docs->fetch(PDO::FETCH_ASSOC)) { + return $ret['value']; + } + + return null; + } + + public function filesystemMapIdsToPaths($docs) + { + $query = "SELECT * FROM filemap WHERE id in (".$docs->implode(', ').");"; + $res = $this->index->query($query)->fetchAll(PDO::FETCH_ASSOC); + + return $docs->map(function ($key) use ($res) { + $index = array_search($key, array_column($res, 'id')); + return $res[$index]; + }); + } + + public function info($str) + { + echo $str."\n"; + } + + public function breakIntoTokens($text) + { + return $this->tokenizer->tokenize($text); + } + + /** + * @param $text + * @param $needle + * @param string $tag + * @param array $options + * + * @return string + */ + public function highlight($text, $needle, $tag = 'em', $options = []) + { + $hl = new Highlighter($this->tokenizer); + return $hl->highlight($text, $needle, $tag, $options); + } + + public function snippet($words, $fulltext, $rellength = 300, $prevcount = 50, $indicator = '...') + { + $hl = new Highlighter($this->tokenizer); + return $hl->extractRelevant($words, $fulltext, $rellength, $prevcount, $indicator); + } + + /** + * @return TNTIndexer + */ + public function getIndex() + { + $indexer = new TNTIndexer; + $indexer->inMemory = false; + $indexer->setIndex($this->index); + $indexer->setStemmer($this->stemmer); + $indexer->setTokenizer($this->tokenizer); + return $indexer; + } + + /** + * @param $words + * @param $noLimit + * + * @return Collection + */ + private function getAllDocumentsForFuzzyKeyword($words, $noLimit) + { + $binding_params = implode(',', array_fill(0, count($words), '?')); + $query = "SELECT * FROM doclist WHERE term_id in ($binding_params) ORDER BY CASE term_id"; + $order_counter = 1; + + foreach ($words as $word) { + $query .= " WHEN ".$word['id']." THEN ".$order_counter++; + } + + $query .= " END"; + + if (!$noLimit) { + $query .= " LIMIT {$this->maxDocs}"; + } + + $stmtDoc = $this->index->prepare($query); + + $ids = null; + foreach ($words as $word) { + $ids[] = $word['id']; + } + + $stmtDoc->execute($ids); + return new Collection($stmtDoc->fetchAll(PDO::FETCH_ASSOC)); + } + + /** + * @param $word + * @param $noLimit + * + * @return Collection + */ + private function getAllDocumentsForStrictKeyword($word, $noLimit) + { + $query = "SELECT * FROM doclist WHERE term_id = :id ORDER BY hit_count DESC LIMIT {$this->maxDocs}"; + if ($noLimit) { + $query = "SELECT * FROM doclist WHERE term_id = :id ORDER BY hit_count DESC"; + } + $stmtDoc = $this->index->prepare($query); + + $stmtDoc->bindValue(':id', $word[0]['id']); + $stmtDoc->execute(); + return new Collection($stmtDoc->fetchAll(PDO::FETCH_ASSOC)); + } +} diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/TNTFuzzyMatchTest.php b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/TNTFuzzyMatchTest.php new file mode 100644 index 0000000..9d4e7e6 --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/TNTFuzzyMatchTest.php @@ -0,0 +1,115 @@ +fm = new TNTFuzzyMatch; + parent::__construct(); + } + + public function testNorm() + { + $vector = [3, 4]; + $normalized = $this->fm->norm($vector); + $this->assertEquals(5, $normalized); + + $vector = [1, 2, 3, 4, 5]; + $normalized = $this->fm->norm($vector); + $this->assertEquals(7.416198487095663, $normalized); + } + + public function testDot() + { + $vector1 = [1, 2, -5]; + $vector2 = [4, 8, 1]; + + $product = $this->fm->dot($vector1, $vector2); + + $this->assertEquals(15, $product); + } + + public function testWordToVector() + { + $word = "TNT"; + $vector = $this->fm->wordToVector($word); + $this->assertEquals($vector, [1000055, 1000039, 1000055]); + } + + public function testAngleBetweenVectors() + { + $vector1 = [1, 2, 3]; + $vector2 = [4, 5, 6]; + + $angle = $this->fm->angleBetweenVectors($vector1, $vector2); + + $this->assertEquals(0.97463184619707621, $angle); + } + + public function testHasCommonSubsequence() + { + $pattern1 = "tnsarh"; + $pattern2 = "ntnsearch"; + + $res1 = $this->fm->hasCommonSubsequence($pattern1, 'tntsearch'); + $res2 = $this->fm->hasCommonSubsequence($pattern2, 'tntsearch'); + + $this->assertEquals($res1, true); + $this->assertEquals($res2, false); + } + + public function testMakeVectorSameLength() + { + $wordVector = $this->fm->wordToVector("tntsearch"); + $patternVector = $this->fm->wordToVector("tnth"); + + $res = $this->fm->makeVectorSameLength($wordVector, $patternVector); + $this->assertEquals([1000054, 1000038, 1000054, 0, 0, 0, 0, 0, 1000026], $res); + } + + public function testFuzzyMatchFromFile() + { + $res = $this->fm->fuzzyMatchFromFile('search', __DIR__.'/_files/english_wordlist_2k.txt'); + + $equal = bccomp($res['search'], 1.2, 2); + $this->assertEquals(0, $equal); + + $equal = bccomp($res['research'], 1.06, 2); + $this->assertEquals(0, $equal); + } + + public function testFuzzyMatchFromFileFunction() + { + $res = fuzzyMatchFromFile('search', __DIR__.'/_files/english_wordlist_2k.txt'); + + $equal = bccomp($res['search'], 1.2, 2); + $this->assertEquals(0, $equal); + + $equal = bccomp($res['research'], 1.06, 2); + $this->assertEquals(0, $equal); + } + + public function testFuzzyMatch() + { + $res = $this->fm->fuzzyMatch('search', ['search', 'research', 'something']); + + $equal = bccomp($res['search'], 1.2, 2); + $this->assertEquals(0, $equal); + + $equal = bccomp($res['research'], 1.06, 2); + $this->assertEquals(0, $equal); + } + + public function testFuzzyMatchFunction() + { + $res = fuzzyMatch('search', ['search', 'research', 'something']); + + $equal = bccomp($res['search'], 1.2, 2); + $this->assertEquals(0, $equal); + + $equal = bccomp($res['research'], 1.06, 2); + $this->assertEquals(0, $equal); + } +} diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/TNTGeoSearchTest.php b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/TNTGeoSearchTest.php new file mode 100644 index 0000000..64a44e9 --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/TNTGeoSearchTest.php @@ -0,0 +1,41 @@ + __DIR__.'/_files/' + ]; + + /** + * If we're located in Munich, lets find 2 nearest cities around 50km + */ + public function testFindNearest() + { + $currentLocation = [ + 'longitude' => 11.576124, + 'latitude' => 48.137154 + ]; + + $distance = 50; //km + + $citiesIndex = new TNTGeoSearch(); + $citiesIndex->loadConfig($this->config); + $citiesIndex->selectIndex($this->indexName); + + $cities = $citiesIndex->findNearest($currentLocation, $distance, 2); + + $this->assertEquals([9389, 9407], $cities['ids']); + $this->assertEquals(2, $cities['hits']); + } + + public function tearDown(): void + { + if (file_exists(__DIR__.'/../_files/'.$this->indexName)) { + unlink(__DIR__.'/../_files/'.$this->indexName); + } + } +} diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/TNTSearchTest.php b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/TNTSearchTest.php new file mode 100644 index 0000000..d29f352 --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/TNTSearchTest.php @@ -0,0 +1,348 @@ + 'sqlite', + 'database' => __DIR__.'/_files/articles.sqlite', + 'host' => 'localhost', + 'username' => 'testUser', + 'password' => 'testPass', + 'storage' => __DIR__.'/_files/', + 'stemmer' => \TeamTNT\TNTSearch\Stemmer\PorterStemmer::class + ]; + + public function testLoadConfig() + { + $tnt = new TNTSearch(); + $tnt->loadConfig($this->config); + $this->assertArrayHasKey('driver', $tnt->config); + $this->assertArrayHasKey('database', $tnt->config); + $this->assertArrayHasKey('host', $tnt->config); + $this->assertArrayHasKey('username', $tnt->config); + $this->assertArrayHasKey('password', $tnt->config); + $this->assertArrayHasKey('storage', $tnt->config); + $this->assertArrayHasKey('stemmer', $tnt->config); + } + + public function testCreateIndex() + { + $tnt = new TNTSearch(); + $tnt->loadConfig($this->config); + $indexer = $tnt->createIndex($this->indexName); + + $this->assertInstanceOf('TeamTNT\TNTSearch\Indexer\TNTIndexer', $indexer); + $this->assertFileExists($indexer->getStoragePath().$this->indexName); + } + + public function testSearchBoolean() + { + $tnt = new TNTSearch; + + $tnt->loadConfig($this->config); + + $indexer = $tnt->createIndex($this->indexName); + $indexer->disableOutput = true; + $indexer->query('SELECT id, title, article FROM articles;'); + $indexer->run(); + + $tnt->selectIndex($this->indexName); + $res = $tnt->searchBoolean('romeo juliet queen'); + $this->assertEquals([7], $res['ids']); + + $res = $tnt->searchBoolean('Hamlet or Macbeth'); + $this->assertEquals([3, 4, 1, 2], $res['ids']); + $this->assertEquals(4, $res['hits']); + + $res = $tnt->searchBoolean('juliet ~well'); + $this->assertEquals([5, 6, 7, 8, 10], $res['ids']); + + $res = $tnt->searchBoolean('juliet ~romeo'); + $this->assertEquals([10], $res['ids']); + + $res = $tnt->searchBoolean('hamlet ~king'); + $this->assertEquals([2], $res['ids']); + + $res = $tnt->searchBoolean('hamlet superman'); + $this->assertEquals([], $res['ids']); + + $res = $tnt->searchBoolean('hamlet or superman'); + $this->assertEquals([1, 2], $res['ids']); + + $res = $tnt->searchBoolean('hamlet'); + $this->assertEquals([1, 2], $res['ids']); + + $res = $tnt->searchBoolean('eldred ~bar'); + $this->assertEquals([11], $res['ids']); + + $res = $tnt->searchBoolean('Eldred ~bar'); + $this->assertEquals([11], $res['ids']); + } + + /** + * https://github.com/teamtnt/tntsearch/issues/60 + */ + public function testTotalDocumentCountOnIndexUpdate() + { + $tnt = new TNTSearch; + + $tnt->loadConfig($this->config); + + $indexer = $tnt->createIndex($this->indexName); + $indexer->disableOutput = true; + $indexer->query('SELECT id, title, article FROM articles;'); + $indexer->run(); + + $tnt->selectIndex($this->indexName); + $this->assertEquals(12, $tnt->totalDocumentsInCollection()); + + $index = $tnt->getIndex(); + + //first we test if the total number of documents will decrease + $index->delete(12); + $this->assertEquals(11, $tnt->totalDocumentsInCollection()); + + //now we try with a document that does not exist, the total number should increase for 1 + $index->update(1234, ['id' => '1234', 'title' => 'updated title', 'article' => 'updated article']); + + $this->assertEquals(12, $tnt->totalDocumentsInCollection()); + } + + public function testPrimaryKeyIncludedInResult() + { + $tnt = new TNTSearch; + + $tnt->loadConfig($this->config); + + $indexer = $tnt->createIndex($this->indexName); + $indexer->disableOutput = true; + $indexer->query('SELECT id, title, article FROM articles;'); + $indexer->includePrimaryKey(); + $indexer->run(); + + $tnt->selectIndex($this->indexName); + $res = $tnt->search(3); + $this->assertEquals([3], $res['ids']); + + } + + public function testPrimaryKeyNotIncludedInResult() + { + $tnt = new TNTSearch; + + $tnt->loadConfig($this->config); + + $indexer = $tnt->createIndex($this->indexName); + $indexer->disableOutput = true; + $indexer->query('SELECT id, title, article FROM articles;'); + $indexer->run(); + + $tnt->selectIndex($this->indexName); + $res = $tnt->search(3); + $this->assertEquals([], $res['ids']); + } + + public function testIndexUpdate() + { + $tnt = new TNTSearch; + + $tnt->loadConfig($this->config); + + $indexer = $tnt->createIndex($this->indexName); + $indexer->disableOutput = true; + $indexer->query('SELECT id, title, article FROM articles;'); + $indexer->run(); + + $tnt->selectIndex($this->indexName); + + $index = $tnt->getIndex(); + $count = $index->countWordInWordList('titl'); + + $this->assertTrue($count == 0, 'Word titl should be 0'); + $index->insert(['id' => '11', 'title' => 'new title', 'article' => 'new article']); + + $count = $index->countWordInWordList('titl'); + $this->assertEquals(1, $count, 'Word titl should be 1'); + + $docCount = $index->countDocHitsInWordList('juliet'); + $this->assertEquals(6, $docCount, 'Juliet should occur in 6 documents'); + + $index->insert(['id' => '12', 'title' => 'juliet', 'article' => 'new article about juliet']); + $count = $index->countWordInWordList('juliet'); + $this->assertEquals(9, $count, 'Word juliet should be 9'); + + $docCount = $index->countDocHitsInWordList('juliet'); + $this->assertEquals(7, $docCount, 'Juliet should occur in 7 documents'); + + $index->delete(12); + $count = $index->countWordInWordList('juliet'); + $this->assertEquals(7, $count, 'Word juliet should be 7 after delete'); + + $docCount = $index->countDocHitsInWordList('juliet'); + $this->assertEquals(6, $docCount, 'Juliet should occur in 6 documents after delete'); + + $count = $index->countWordInWordList('romeo'); + $this->assertEquals(5, $count, 'Word romeo should be 5'); + + $index->update(11, ['id' => '11', 'title' => 'romeo', 'article' => 'new article about romeo']); + + $count = $index->countWordInWordList('romeo'); + $this->assertEquals(7, $count, 'Word romeo should be 7'); + } + + public function testMultipleSearch() + { + $tnt = new TNTSearch; + + $tnt->loadConfig($this->config); + + $indexer = $tnt->createIndex($this->indexName); + $indexer->disableOutput = true; + $indexer->query('SELECT id, title, article FROM articles;'); + $indexer->run(); + + $tnt->selectIndex($this->indexName); + + $res = $tnt->search('Othello'); + $this->assertEmpty($res['ids']); + $this->assertEquals(12, $tnt->totalDocumentsInCollection()); + + $index = $tnt->getIndex(); + + $count = $index->countWordInWordList('Othello'); + $this->assertTrue($count == 0, 'Word Othello should be 0'); + $index->insert(['id' => '13', 'title' => 'Othello', 'article' => 'For she had eyes and chose me.']); + + $count = $index->countWordInWordList('Othello'); + $this->assertEquals(1, $count, 'Word Othello should be 1'); + $this->assertEquals(13, $tnt->totalDocumentsInCollection()); + + $res = $tnt->search('Othello'); + $this->assertEquals([13], $res['ids']); + + } + + public function testAsYouType() + { + $tnt = new TNTSearch; + + $tnt->loadConfig($this->config); + + $indexer = $tnt->createIndex($this->indexName); + $indexer->disableOutput = true; + $indexer->query('SELECT id, title, article FROM articles;'); + $indexer->run(); + + $tnt->selectIndex($this->indexName); + $tnt->asYouType = true; + $res = $tnt->search('k'); + $this->assertEquals([1], $res['ids']); + } + + public function testHits() + { + $tnt = new TNTSearch; + + $tnt->loadConfig($this->config); + + $indexer = $tnt->createIndex($this->indexName); + $indexer->disableOutput = true; + $indexer->query('SELECT id, title, article FROM articles;'); + $indexer->run(); + + $tnt->selectIndex($this->indexName); + + $res = $tnt->search('juliet'); + $this->assertEquals(6, $res['hits']); + } + + public function testFuzzySearch() + { + $tnt = new TNTSearch; + + $tnt->loadConfig($this->config); + + $indexer = $tnt->createIndex($this->indexName); + $indexer->disableOutput = true; + $indexer->query('SELECT id, title, article FROM articles;'); + $indexer->run(); + + $tnt->selectIndex($this->indexName); + $tnt->fuzziness = true; + $res = $tnt->search('juleit'); + $this->assertEquals("9", $res['ids'][0]); + + $res = $tnt->search('quen'); + $this->assertEquals("7", $res['ids'][0]); + + $res = $tnt->search('asdf'); + $this->assertEquals([], $res['ids']); + } + + public function testFuzzySearchMultipleWordsFound() + { + $tnt = new TNTSearch(); + $tnt->loadConfig($this->config); + $indexer = $tnt->createIndex($this->indexName); + $indexer->disableOutput = true; + $indexer->query('SELECT id, title, article FROM articles;'); + $indexer->run(); + + $tnt->selectIndex($this->indexName); + $index = $tnt->getIndex(); + + $index->insert(['id' => '14', 'title' => '199x', 'article' => 'Nineties with the x...']); + $index->insert(['id' => '15', 'title' => '199y', 'article' => 'Nineties with the y...']); + $tnt->fuzziness = true; + $res = $tnt->search('199'); + $this->assertContains(14, $res['ids']); + $this->assertContains(15, $res['ids']); + } + + public function testIndexDoesNotExistException() + { + $this->expectException(IndexNotFoundException::class); + $this->expectExceptionCode(1); + $tnt = new TNTSearch; + $tnt->loadConfig($this->config); + $tnt->selectIndex('IndexThatDoesNotExist'); + } + + public function testStemmerIsSetOnNewIndexesBasedOnConfig() + { + $config = $this->config; + $config['stemmer'] = \TeamTNT\TNTSearch\Stemmer\GermanStemmer::class; + + $tnt = new TNTSearch(); + $tnt->loadConfig($config); + $tnt->createIndex($this->indexName); + $tnt->selectIndex($this->indexName); + + $this->assertInstanceOf(\TeamTNT\TNTSearch\Stemmer\GermanStemmer::class, $tnt->getStemmer()); + } + + public function testDefaultStemmerIsSetOnNewIndexesIfNoneConfigured() + { + $config = $this->config; + unset($config['stemmer']); + + $tnt = new TNTSearch(); + $tnt->loadConfig($config); + $tnt->createIndex($this->indexName); + $tnt->selectIndex($this->indexName); + + $this->assertInstanceOf(\TeamTNT\TNTSearch\Stemmer\NoStemmer::class, $tnt->getStemmer()); + } + + public function tearDown(): void + { + if (file_exists(__DIR__."/".$this->indexName)) { + unlink(__DIR__."/".$this->indexName); + } + } +} diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/_files/articles.sqlite b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/_files/articles.sqlite new file mode 100644 index 0000000..68ad52f Binary files /dev/null and b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/_files/articles.sqlite differ diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/_files/articles/1.txt b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/_files/articles/1.txt new file mode 100644 index 0000000..6a0061c --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/_files/articles/1.txt @@ -0,0 +1 @@ +first document \ No newline at end of file diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/_files/articles/2.txt b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/_files/articles/2.txt new file mode 100644 index 0000000..7f7336a --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/_files/articles/2.txt @@ -0,0 +1 @@ +second document \ No newline at end of file diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/_files/articles/3.txt b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/_files/articles/3.txt new file mode 100644 index 0000000..feafc0a --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/_files/articles/3.txt @@ -0,0 +1 @@ +third document \ No newline at end of file diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/_files/cities.sqlite b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/_files/cities.sqlite new file mode 100644 index 0000000..82e7c4f Binary files /dev/null and b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/_files/cities.sqlite differ diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/_files/english_wordlist_2k.txt b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/_files/english_wordlist_2k.txt new file mode 100644 index 0000000..08ada99 --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/_files/english_wordlist_2k.txt @@ -0,0 +1,1510 @@ +a +an +able +about +above +abuse +accept +accident +accuse +across +act +activist +actor +add +administration +admit +adult +advertise +advise +affect +afraid +after +again +against +age +agency +aggression +ago +agree +agriculture +aid +aim +air +air force +airplane +airport +album +alcohol +alive +all +ally +almost +alone +along +already +also +although +always +ambassador +amend +ammunition +among +amount +anarchy +ancestor +ancient +and +anger +animal +anniversary +announce +another +answer +any +apologize +appeal +appear +appoint +approve +archeology +area +argue +arms +army +around +arrest +arrive +art +artillery +as +ash +ask +assist +astronaut +astronomy +asylum +at +atmosphere +attach +attack +attempt +attend +attention +automobile +autumn +available +average +avoid +awake +award +away +baby +back +bad +balance +ball +balloon +ballot +ban +bank +bar +barrier +base +battle +be +beat +beauty +because +become +bed +before +begin +behavior +behind +believe +belong +below +best +betray +better +between +big +bill +biology +bird +bite +black +blame +bleed +blind +block +blood +blow +blue +boat +body +boil +bomb +bone +book +border +born +borrow +both +bottle +bottom +box +boy +boycott +brain +brave +bread +break +breathe +bridge +brief +bright +bring +broadcast +brother +brown +budget +build +building +bullet +burn +burst +bury +bus +business +busy +but +buy +by +cabinet +call +calm +camera +camp +campaign +can +cancel +cancer +candidate +capital +capture +car +care +career +careful +carry +case +cat +catch +cause +ceasefire +celebrate +center +century +ceremony +chairman +champion +chance +change +charge +chase +cheat +cheer +chemicals +chemistry +chief +child +children +choose +circle +citizen +city +civilian +civil rights +claim +clash +class +clean +clear +clergy +climate +climb +clock +close +cloth +clothes +cloud +coal +coalition +coast +coffee +cold +collapse +collect +college +colony +color +combine +come +command +comment +committee +common +communicate +community +company +compare +compete +complete +complex +compromise +computer +concern +condemn +condition +conference +confirm +conflict +congratulate +Congress +connect +conservative +consider +constitution +contact +contain +container +continent +continue +control +convention +cook +cool +cooperate +copy +corn +correct +corruption +cost +cotton +count +country +court +cover +cow +crash +create +creature +credit +crew +crime +criminal +crisis +criticize +crops +cross +crowd +crush +cry +culture +cure +curfew +current +custom +customs +cut +dam +damage +dance +danger +dark +date +daughter +day +dead +deaf +deal +debate +debt +decide +declare +decrease +deep +defeat +defend +deficit +define +degree +delay +delegate +demand +democracy +demonstrate +denounce +deny +depend +deplore +deploy +depression +describe +desert +design +desire +destroy +detail +detain +develop +device +dictator +die +diet +different +difficult +dig +dinner +diplomat +direct +direction +dirt +disappear +disarm +disaster +discover +discrimination +discuss +disease +dismiss +dispute +dissident +distance +dive +divide +do +doctor +document +dog +dollar +donate +door +double +down +dream +drink +drive +drop +drown +drug +dry +during +dust +duty +each +early +earn +earth +earthquake +ease +east +easy +eat +ecology +economy +edge +education +effect +effort +egg +either +elect +electricity +embassy +embryo +emergency +emotion +employ +empty +end +enemy +energy +enforce +engine +engineer +enjoy +enough +enter +environment +equal +equipment +escape +especially +establish +estimate +ethnic +evaporate +even +event +ever +every +evidence +evil +exact +examine +example +excellent +except +exchange +excuse +execute +exercise +exile +exist +expand +expect +expel +experience +experiment +expert +explain +explode +explore +export +express +extend +extra +extraordinary +extreme +extremist +face +fact +factory +fail +fair +fall +false +family +famous +fan +far +farm +fast +fat +father +favorite +fear +federal +feed +feel +female +fence +fertile +few +field +fierce +fight +fill +film +final +financial +find +fine +finish +fire +fireworks +firm +first +fish +fit +fix +flag +flat +flee +float +flood +floor +flow +flower +fluid +fly +fog +follow +food +fool +foot +for +force +foreign +forest +forget +forgive +form +former +forward +free +freedom +freeze +fresh +friend +frighten +from +front +fruit +fuel +full +fun +funeral +future +gain +game +gas +gather +general +generation +genocide +gentle +get +gift +girl +give +glass +go +goal +god +gold +good +goods +govern +government +grain +grass +gray +great +green +grind +ground +group +grow +guarantee +guard +guerrilla +guide +guilty +gun +hair +half +halt +hang +happen +happy +hard +harm +harvest +hat +hate +have +he +head +headquarters +heal +health +hear +heat +heavy +helicopter +help +here +hero +hide +high +hijack +hill +history +hit +hold +hole +holiday +holy +home +honest +honor +hope +horrible +horse +hospital +hostage +hostile +hot +hotel +hour +house +how +however +huge +human +humor +hunger +hunt +hurry +hurt +husband +I +ice +idea +identify +if +ignore +illegal +imagine +immediate +immigrant +import +important +improve +in +incident +incite +include +increase +independent +individual +industry +infect +inflation +influence +inform +information +inject +injure +innocent +insane +insect +inspect +instead +instrument +insult +intelligence +intelligent +intense +interest +interfere +international +Internet +intervene +invade +invent +invest +investigate +invite +involve +iron +island +issue +it +jail +jewel +job +join +joint +joke +judge +jump +jury +just +justice +keep +kick +kidnap +kill +kind +kiss +knife +know +knowledge +labor +laboratory +lack +lake +land +language +large +last +late +laugh +launch +law +lead +leak +learn +leave +left +legal +legislature +lend +less +let +letter +level +liberal +lie +life +lift +light +lightning +like +limit +line +link +liquid +list +listen +literature +little +live +load +loan +local +lonely +long +look +lose +loud +love +low +loyal +luck +machine +magazine +mail +main +major +majority +make +male +man +manufacture +many +map +march +mark +market +marry +mass +mate +material +mathematics +matter +may +mayor +meal +mean +measure +meat +media +medicine +meet +melt +member +memorial +memory +mental +message +metal +method +microscope +middle +militant +military +militia +milk +mind +mine +mineral +minister +minor +minority +minute +miss +missile +missing +mistake +mix +mob +model +moderate +modern +money +month +moon +moral +more +morning +most +mother +motion +mountain +mourn +move +movement +movie +much +murder +music +must +mystery +name +narrow +nation +native +natural +nature +navy +near +necessary +need +negotiate +neighbor +neither +neutral +never +new +news +next +nice +night +no +noise +nominate +noon +normal +north +not +note +nothing +now +nowhere +nuclear +number +obey +object +observe +occupy +ocean +of +off +offensive +offer +office +officer +official +often +oil +old +on +once +only +open +operate +opinion +oppose +opposite +oppress +or +orbit +order +organize +other +our +oust +out +over +overthrow +owe +own +pain +paint +paper +parachute +parade +pardon +parent +parliament +part +partner +party +pass +passenger +passport +past +path +patient +pay +peace +people +percent +perfect +perform +period +permanent +permit +person +persuade +physical +physics +picture +piece +pig +pilot +pipe +place +plan +planet +plant +plastic +play +please +plenty +plot +poem +point +poison +police +policy +politics +pollute +poor +popular +population +port +position +possess +possible +postpone +pour +poverty +power +praise +pray +predict +pregnant +present +president +press +pressure +prevent +price +prison +private +prize +probably +problem +process +produce +profession +professor +profit +program +progress +project +promise +propaganda +property +propose +protect +protest +prove +provide +public +publication +publish +pull +pump +punish +purchase +pure +purpose +push +put +quality +question +quick +quiet +race +radar +radiation +radio +raid +railroad +rain +raise +rape +rare +rate +reach +react +read +ready +real +realistic +reason +reasonable +rebel +receive +recent +recession +recognize +record +recover +red +reduce +reform +refugee +refuse +register +regret +reject +relations +release +religion +remain +remains +remember +remove +repair +repeat +report +represent +repress +request +require +rescue +research +resign +resist +resolution +resource +respect +responsible +rest +restaurant +restrain +restrict +result +retire +return +revolt +rice +rich +ride +right +riot +rise +risk +river +road +rob +rock +rocket +roll +room +root +rope +rough +round +rub +rubber +ruin +rule +run +rural +sabotage +sacrifice +sad +safe +sail +sailor +salt +same +sand +satellite +satisfy +save +say +school +science +sea +search +season +seat +second +secret +security +see +seed +seeking +seem +seize +self +sell +Senate +send +sense +sentence +separate +series +serious +serve +service +set +settle +several +severe +sex +shake +shape +share +sharp +she +sheep +shell +shelter +shine +ship +shock +shoe +shoot +short +should +shout +show +shrink +sick +sickness +side +sign +signal +silence +silver +similar +simple +since +sing +single +sink +sister +sit +situation +size +skeleton +skill +skin +sky +slave +sleep +slide +slow +small +smash +smell +smoke +smooth +snow +so +social +soft +soil +soldier +solid +solve +some +son +soon +sort +sound +south +space +speak +special +speech +speed +spend +spill +spirit +split +sport +spread +spring +spy +square +stab +stand +star +start +starve +state +station +statue +stay +steal +steam +steel +step +stick +still +stone +stop +store +storm +story +stove +straight +strange +street +stretch +strike +strong +structure +struggle +study +stupid +subject +submarine +substance +substitute +subversion +succeed +such +sudden +suffer +sugar +suggest +suicide +summer +sun +supervise +supply +support +suppose +suppress +sure +surface +surplus +surprise +surrender +surround +survive +suspect +suspend +swallow +swear in +sweet +swim +sympathy +system +take +talk +tall +tank +target +taste +tax +tea +teach +team +tear +technical +technology +telephone +telescope +television +tell +temperature +temporary +tense +term +terrible +territory +terror +terrorist +test +than +thank +that +the +theater +them +then +theory +there +these +they +thick +thin +thing +think +third +this +threaten +through +throw +tie +time +tired +to +today +together +tomorrow +tonight +too +tool +top +torture +total +touch +toward +town +trade +tradition +traffic +tragic +train +transport +transportation +trap +travel +treason +treasure +treat +treatment +treaty +tree +trial +tribe +trick +trip +troops +trouble +truce +truck +true +trust +try +tube +turn +under +understand +unite +universe +university +unless +until +up +urge +urgent +us +use +usual +vacation +vaccine +valley +value +vegetable +vehicle +version +very +veto +victim +victory +video +village +violate +violence +visa +visit +voice +volcano +volunteer +vote +wages +wait +walk +wall +want +war +warm +warn +wash +waste +watch +water +wave +way +we +weak +wealth +weapon +wear +weather +Web site +week +weigh +welcome +well +west +wet +what +wheat +wheel +when +where +whether +which +while +white +who +whole +why +wide +wife +wild +will +willing +win +wind +window +winter +wire +wise +wish +with +withdraw +without +witness +woman +wonder +wonderful +wood +word +work +world +worry +worse +worth +wound +wreck +wreckage +write +wrong +year +yellow +yes +yesterday +yet +you +young +zero +zoo \ No newline at end of file diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/_files/mnist/.gitignore b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/_files/mnist/.gitignore new file mode 100644 index 0000000..c96a04f --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/_files/mnist/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore \ No newline at end of file diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/_files/sms-texts.json b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/_files/sms-texts.json new file mode 100644 index 0000000..f92ce4b --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/_files/sms-texts.json @@ -0,0 +1 @@ +[{"label":"ham","message":"Go until jurong point, crazy.. Available only in bugis n great world la e buffet... Cine there got amore wat..."},{"label":"ham","message":"Ok lar... Joking wif u oni..."},{"label":"spam","message":"Free entry in 2 a wkly comp to win FA Cup final tkts 21st May 2005. Text FA to 87121 to receive entry question(std txt rate)T&C's apply 08452810075over18's"},{"label":"ham","message":"U dun say so early hor... U c already then say..."},{"label":"ham","message":"Nah I don't think he goes to usf, he lives around here though"},{"label":"spam","message":"FreeMsg Hey there darling it's been 3 week's now and no word back! I'd like some fun you up for it still? Tb ok! XxX std chgs to send, \u00a31.50 to rcv"},{"label":"ham","message":"Even my brother is not like to speak with me. They treat me like aids patent."},{"label":"ham","message":"As per your request 'Melle Melle (Oru Minnaminunginte Nurungu Vettam)' has been set as your callertune for all Callers. Press *9 to copy your friends Callertune"},{"label":"spam","message":"WINNER!! As a valued network customer you have been selected to receivea \u00a3900 prize reward! To claim call 09061701461. Claim code KL341. Valid 12 hours only."},{"label":"spam","message":"Had your mobile 11 months or more? U R entitled to Update to the latest colour mobiles with camera for Free! Call The Mobile Update Co FREE on 08002986030"},{"label":"ham","message":"I'm gonna be home soon and i don't want to talk about this stuff anymore tonight, k? I've cried enough today."},{"label":"spam","message":"SIX chances to win CASH! From 100 to 20,000 pounds txt> CSH11 and send to 87575. Cost 150p\/day, 6days, 16+ TsandCs apply Reply HL 4 info"},{"label":"spam","message":"URGENT! You have won a 1 week FREE membership in our \u00a3100,000 Prize Jackpot! Txt the word: CLAIM to No: 81010 T&C www.dbuk.net LCCLTD POBOX 4403LDNW1A7RW18"},{"label":"ham","message":"I've been searching for the right words to thank you for this breather. I promise i wont take your help for granted and will fulfil my promise. You have been wonderful and a blessing at all times."},{"label":"ham","message":"I HAVE A DATE ON SUNDAY WITH WILL!!"},{"label":"spam","message":"XXXMobileMovieClub: To use your credit, click the WAP link in the next txt message or click here>> http:\/\/wap. xxxmobilemovieclub.com?n=QJKGIGHJJGCBL"},{"label":"ham","message":"Oh k...i'm watching here:)"},{"label":"ham","message":"Eh u remember how 2 spell his name... Yes i did. He v naughty make until i v wet."},{"label":"ham","message":"Fine if that\u0092s the way u feel. That\u0092s the way its gota b"},{"label":"spam","message":"England v Macedonia - dont miss the goals\/team news. Txt ur national team to 87077 eg ENGLAND to 87077 Try:WALES, SCOTLAND 4txt\/\u00fa1.20 POBOXox36504W45WQ 16+"},{"label":"ham","message":"Is that seriously how you spell his name?"},{"label":"ham","message":"I\u2018m going to try for 2 months ha ha only joking"},{"label":"ham","message":"So \u00fc pay first lar... Then when is da stock comin..."},{"label":"ham","message":"Aft i finish my lunch then i go str down lor. Ard 3 smth lor. U finish ur lunch already?"},{"label":"ham","message":"Ffffffffff. Alright no way I can meet up with you sooner?"},{"label":"ham","message":"Just forced myself to eat a slice. I'm really not hungry tho. This sucks. Mark is getting worried. He knows I'm sick when I turn down pizza. Lol"},{"label":"ham","message":"Lol your always so convincing."},{"label":"ham","message":"Did you catch the bus ? Are you frying an egg ? Did you make a tea? Are you eating your mom's left over dinner ? Do you feel my Love ?"},{"label":"ham","message":"I'm back & we're packing the car now, I'll let you know if there's room"},{"label":"ham","message":"Ahhh. Work. I vaguely remember that! What does it feel like? Lol"},{"label":"ham","message":"Wait that's still not all that clear, were you not sure about me being sarcastic or that that's why x doesn't want to live with us"},{"label":"ham","message":"Yeah he got in at 2 and was v apologetic. n had fallen out and she was actin like spoilt child and he got caught up in that. Till 2! But we won't go there! Not doing too badly cheers. You?"},{"label":"ham","message":"K tell me anything about you."},{"label":"ham","message":"For fear of fainting with the of all that housework you just did? Quick have a cuppa"},{"label":"spam","message":"Thanks for your subscription to Ringtone UK your mobile will be charged \u00a35\/month Please confirm by replying YES or NO. If you reply NO you will not be charged"},{"label":"ham","message":"Yup... Ok i go home look at the timings then i msg \u00fc again... Xuhui going to learn on 2nd may too but her lesson is at 8am"},{"label":"ham","message":"Oops, I'll let you know when my roommate's done"},{"label":"ham","message":"I see the letter B on my car"},{"label":"ham","message":"Anything lor... U decide..."},{"label":"ham","message":"Hello! How's you and how did saturday go? I was just texting to see if you'd decided to do anything tomo. Not that i'm trying to invite myself or anything!"},{"label":"ham","message":"Pls go ahead with watts. I just wanted to be sure. Do have a great weekend. Abiola"},{"label":"ham","message":"Did I forget to tell you ? I want you , I need you, I crave you ... But most of all ... I love you my sweet Arabian steed ... Mmmmmm ... Yummy"},{"label":"spam","message":"07732584351 - Rodger Burns - MSG = We tried to call you re your reply to our sms for a free nokia mobile + free camcorder. Please call now 08000930705 for delivery tomorrow"},{"label":"ham","message":"WHO ARE YOU SEEING?"},{"label":"ham","message":"Great! I hope you like your man well endowed. I am <#> inches..."},{"label":"ham","message":"No calls..messages..missed calls"},{"label":"ham","message":"Didn't you get hep b immunisation in nigeria."},{"label":"ham","message":"Fair enough, anything going on?"},{"label":"ham","message":"Yeah hopefully, if tyler can't do it I could maybe ask around a bit"},{"label":"ham","message":"U don't know how stubborn I am. I didn't even want to go to the hospital. I kept telling Mark I'm not a weak sucker. Hospitals are for weak suckers."},{"label":"ham","message":"What you thinked about me. First time you saw me in class."},{"label":"ham","message":"A gram usually runs like <#> , a half eighth is smarter though and gets you almost a whole second gram for <#>"},{"label":"ham","message":"K fyi x has a ride early tomorrow morning but he's crashing at our place tonight"},{"label":"ham","message":"Wow. I never realized that you were so embarassed by your accomodations. I thought you liked it, since i was doing the best i could and you always seemed so happy about \"the cave\". I'm sorry I didn't and don't have more to give. I'm sorry i offered. I'm sorry your room was so embarassing."},{"label":"spam","message":"SMS. ac Sptv: The New Jersey Devils and the Detroit Red Wings play Ice Hockey. Correct or Incorrect? End? Reply END SPTV"},{"label":"ham","message":"Do you know what Mallika Sherawat did yesterday? Find out now @ <URL>"},{"label":"spam","message":"Congrats! 1 year special cinema pass for 2 is yours. call 09061209465 now! C Suprman V, Matrix3, StarWars3, etc all 4 FREE! bx420-ip4-5we. 150pm. Dont miss out!"},{"label":"ham","message":"Sorry, I'll call later in meeting."},{"label":"ham","message":"Tell where you reached"},{"label":"ham","message":"Yes..gauti and sehwag out of odi series."},{"label":"ham","message":"Your gonna have to pick up a $1 burger for yourself on your way home. I can't even move. Pain is killing me."},{"label":"ham","message":"Ha ha ha good joke. Girls are situation seekers."},{"label":"ham","message":"Its a part of checking IQ"},{"label":"ham","message":"Sorry my roommates took forever, it ok if I come by now?"},{"label":"ham","message":"Ok lar i double check wif da hair dresser already he said wun cut v short. He said will cut until i look nice."},{"label":"spam","message":"As a valued customer, I am pleased to advise you that following recent review of your Mob No. you are awarded with a \u00a31500 Bonus Prize, call 09066364589"},{"label":"ham","message":"Today is \"song dedicated day..\" Which song will u dedicate for me? Send this to all ur valuable frnds but first rply me..."},{"label":"spam","message":"Urgent UR awarded a complimentary trip to EuroDisinc Trav, Aco&Entry41 Or \u00a31000. To claim txt DIS to 87121 18+6*\u00a31.50(moreFrmMob. ShrAcomOrSglSuplt)10, LS1 3AJ"},{"label":"spam","message":"Did you hear about the new \"Divorce Barbie\"? It comes with all of Ken's stuff!"},{"label":"ham","message":"I plane to give on this month end."},{"label":"ham","message":"Wah lucky man... Then can save money... Hee..."},{"label":"ham","message":"Finished class where are you."},{"label":"ham","message":"HI BABE IM AT HOME NOW WANNA DO SOMETHING? XX"},{"label":"ham","message":"K..k:)where are you?how did you performed?"},{"label":"ham","message":"U can call me now..."},{"label":"ham","message":"I am waiting machan. Call me once you free."},{"label":"ham","message":"Thats cool. i am a gentleman and will treat you with dignity and respect."},{"label":"ham","message":"I like you peoples very much:) but am very shy pa."},{"label":"ham","message":"Does not operate after <#> or what"},{"label":"ham","message":"Its not the same here. Still looking for a job. How much do Ta's earn there."},{"label":"ham","message":"Sorry, I'll call later"},{"label":"ham","message":"K. Did you call me just now ah?"},{"label":"ham","message":"Ok i am on the way to home hi hi"},{"label":"ham","message":"You will be in the place of that man"},{"label":"ham","message":"Yup next stop."},{"label":"ham","message":"I call you later, don't have network. If urgnt, sms me."},{"label":"ham","message":"For real when u getting on yo? I only need 2 more tickets and one more jacket and I'm done. I already used all my multis."},{"label":"ham","message":"Yes I started to send requests to make it but pain came back so I'm back in bed. Double coins at the factory too. I gotta cash in all my nitros."},{"label":"ham","message":"I'm really not up to it still tonight babe"},{"label":"ham","message":"Ela kano.,il download, come wen ur free.."},{"label":"ham","message":"Yeah do! Don\u2018t stand to close tho- you\u2018ll catch something!"},{"label":"ham","message":"Sorry to be a pain. Is it ok if we meet another night? I spent late afternoon in casualty and that means i haven't done any of y stuff42moro and that includes all my time sheets and that. Sorry."},{"label":"ham","message":"Smile in Pleasure Smile in Pain Smile when trouble pours like Rain Smile when sum1 Hurts U Smile becoz SOMEONE still Loves to see u Smiling!!"},{"label":"spam","message":"Please call our customer service representative on 0800 169 6031 between 10am-9pm as you have WON a guaranteed \u00a31000 cash or \u00a35000 prize!"},{"label":"ham","message":"Havent planning to buy later. I check already lido only got 530 show in e afternoon. U finish work already?"},{"label":"spam","message":"Your free ringtone is waiting to be collected. Simply text the password \"MIX\" to 85069 to verify. Get Usher and Britney. FML, PO Box 5249, MK17 92H. 450Ppw 16"},{"label":"ham","message":"Watching telugu movie..wat abt u?"},{"label":"ham","message":"i see. When we finish we have loads of loans to pay"},{"label":"ham","message":"Hi. Wk been ok - on hols now! Yes on for a bit of a run. Forgot that i have hairdressers appointment at four so need to get home n shower beforehand. Does that cause prob for u?\""},{"label":"ham","message":"I see a cup of coffee animation"},{"label":"ham","message":"Please don't text me anymore. I have nothing else to say."},{"label":"ham","message":"Okay name ur price as long as its legal! Wen can I pick them up? Y u ave x ams xx"},{"label":"ham","message":"I'm still looking for a car to buy. And have not gone 4the driving test yet."},{"label":"ham","message":"As per your request 'Melle Melle (Oru Minnaminunginte Nurungu Vettam)' has been set as your callertune for all Callers. Press *9 to copy your friends Callertune"},{"label":"ham","message":"wow. You're right! I didn't mean to do that. I guess once i gave up on boston men and changed my search location to nyc, something changed. Cuz on my signin page it still says boston."},{"label":"ham","message":"Umma my life and vava umma love you lot dear"},{"label":"ham","message":"Thanks a lot for your wishes on my birthday. Thanks you for making my birthday truly memorable."},{"label":"ham","message":"Aight, I'll hit you up when I get some cash"},{"label":"ham","message":"How would my ip address test that considering my computer isn't a minecraft server"},{"label":"ham","message":"I know! Grumpy old people. My mom was like you better not be lying. Then again I am always the one to play jokes..."},{"label":"ham","message":"Dont worry. I guess he's busy."},{"label":"ham","message":"What is the plural of the noun research?"},{"label":"ham","message":"Going for dinner.msg you after."},{"label":"ham","message":"I'm ok wif it cos i like 2 try new things. But i scared u dun like mah. Cos u said not too loud."},{"label":"spam","message":"GENT! We are trying to contact you. Last weekends draw shows that you won a \u00a31000 prize GUARANTEED. Call 09064012160. Claim Code K52. Valid 12hrs only. 150ppm"},{"label":"ham","message":"Wa, ur openin sentence very formal... Anyway, i'm fine too, juz tt i'm eatin too much n puttin on weight...Haha... So anythin special happened?"},{"label":"ham","message":"As I entered my cabin my PA said, '' Happy B'day Boss !!''. I felt special. She askd me 4 lunch. After lunch she invited me to her apartment. We went there."},{"label":"spam","message":"You are a winner U have been specially selected 2 receive \u00a31000 or a 4* holiday (flights inc) speak to a live operator 2 claim 0871277810910p\/min (18+)"},{"label":"ham","message":"Goodo! Yes we must speak friday - egg-potato ratio for tortilla needed!"},{"label":"ham","message":"Hmm...my uncle just informed me that he's paying the school directly. So pls buy food."},{"label":"spam","message":"PRIVATE! Your 2004 Account Statement for 07742676969 shows 786 unredeemed Bonus Points. To claim call 08719180248 Identifier Code: 45239 Expires"},{"label":"spam","message":"URGENT! Your Mobile No. was awarded \u00a32000 Bonus Caller Prize on 5\/9\/03 This is our final try to contact U! Call from Landline 09064019788 BOX42WR29C, 150PPM"},{"label":"ham","message":"here is my new address -apples&pairs&all that malarky"},{"label":"spam","message":"Todays Voda numbers ending 7548 are selected to receive a $350 award. If you have a match please call 08712300220 quoting claim code 4041 standard rates app"},{"label":"ham","message":"I am going to sao mu today. Will be done only at 12"},{"label":"ham","message":"\u00dc predict wat time \u00fc'll finish buying?"},{"label":"ham","message":"Good stuff, will do."},{"label":"ham","message":"Just so that you know,yetunde hasn't sent money yet. I just sent her a text not to bother sending. So its over, you dont have to involve yourself in anything. I shouldn't have imposed anything on you in the first place so for that, i apologise."},{"label":"ham","message":"Are you there in room."},{"label":"ham","message":"HEY GIRL. HOW R U? HOPE U R WELL ME AN DEL R BAK! AGAIN LONG TIME NO C! GIVE ME A CALL SUM TIME FROM LUCYxx"},{"label":"ham","message":"K..k:)how much does it cost?"},{"label":"ham","message":"I'm home."},{"label":"ham","message":"Dear, will call Tmorrow.pls accomodate."},{"label":"ham","message":"First answer my question."},{"label":"spam","message":"Sunshine Quiz Wkly Q! Win a top Sony DVD player if u know which country the Algarve is in? Txt ansr to 82277. \u00a31.50 SP:Tyrone"},{"label":"spam","message":"Want 2 get laid tonight? Want real Dogging locations sent direct 2 ur mob? Join the UK's largest Dogging Network bt Txting GRAVEL to 69888! Nt. ec2a. 31p.msg@150p"},{"label":"ham","message":"I only haf msn. It's yijue@hotmail.com"},{"label":"ham","message":"He is there. You call and meet him"},{"label":"ham","message":"No no. I will check all rooms befor activities"},{"label":"spam","message":"You'll not rcv any more msgs from the chat svc. For FREE Hardcore services text GO to: 69988 If u get nothing u must Age Verify with yr network & try again"},{"label":"ham","message":"Got c... I lazy to type... I forgot \u00fc in lect... I saw a pouch but like not v nice..."},{"label":"ham","message":"K, text me when you're on the way"},{"label":"ham","message":"Sir, Waiting for your mail."},{"label":"ham","message":"A swt thought: \"Nver get tired of doing little things 4 lovable persons..\" Coz..somtimes those little things occupy d biggest part in their Hearts.. Gud ni8"},{"label":"ham","message":"I know you are. Can you pls open the back?"},{"label":"ham","message":"Yes see ya not on the dot"},{"label":"ham","message":"Whats the staff name who is taking class for us?"},{"label":"spam","message":"FreeMsg Why haven't you replied to my text? I'm Randy, sexy, female and live local. Luv to hear from u. Netcollex Ltd 08700621170150p per msg reply Stop to end"},{"label":"ham","message":"Ummma.will call after check in.our life will begin from qatar so pls pray very hard."},{"label":"ham","message":"K..i deleted my contact that why?"},{"label":"ham","message":"Sindu got job in birla soft .."},{"label":"ham","message":"The wine is flowing and i'm i have nevering.."},{"label":"ham","message":"Yup i thk cine is better cos no need 2 go down 2 plaza mah."},{"label":"ham","message":"Ok... Ur typical reply..."},{"label":"ham","message":"As per your request 'Melle Melle (Oru Minnaminunginte Nurungu Vettam)' has been set as your callertune for all Callers. Press *9 to copy your friends Callertune"},{"label":"ham","message":"You are everywhere dirt, on the floor, the windows, even on my shirt. And sometimes when i open my mouth, you are all that comes flowing out. I dream of my world without you, then half my chores are out too. A time of joy for me, lots of tv shows i.ll see. But i guess like all things you just must exist, like rain, hail and mist, and when my time here is done, you and i become one."},{"label":"ham","message":"Aaooooright are you at work?"},{"label":"ham","message":"I'm leaving my house now..."},{"label":"ham","message":"Hello, my love. What are you doing? Did you get to that interview today? Are you you happy? Are you being a good boy? Do you think of me?Are you missing me ?"},{"label":"spam","message":"Customer service annoncement. You have a New Years delivery waiting for you. Please call 07046744435 now to arrange delivery"},{"label":"spam","message":"You are a winner U have been specially selected 2 receive \u00a31000 cash or a 4* holiday (flights inc) speak to a live operator 2 claim 0871277810810"},{"label":"ham","message":"Keep yourself safe for me because I need you and I miss you already and I envy everyone that see's you in real life"},{"label":"ham","message":"New car and house for my parents.:)i have only new job in hand:)"},{"label":"ham","message":"I'm so in love with you. I'm excited each day i spend with you. You make me so happy."},{"label":"spam","message":"-PLS STOP bootydelious (32\/F) is inviting you to be her friend. Reply YES-434 or NO-434 See her: www.SMS.ac\/u\/bootydelious STOP? Send STOP FRND to 62468"},{"label":"spam","message":"BangBabes Ur order is on the way. U SHOULD receive a Service Msg 2 download UR content. If U do not, GoTo wap. bangb. tv on UR mobile internet\/service menu"},{"label":"ham","message":"I place all ur points on e cultures module already."},{"label":"spam","message":"URGENT! We are trying to contact you. Last weekends draw shows that you have won a \u00a3900 prize GUARANTEED. Call 09061701939. Claim code S89. Valid 12hrs only"},{"label":"ham","message":"Hi frnd, which is best way to avoid missunderstding wit our beloved one's?"},{"label":"ham","message":"Great escape. I fancy the bridge but needs her lager. See you tomo"},{"label":"ham","message":"Yes :)it completely in out of form:)clark also utter waste."},{"label":"ham","message":"Sir, I need AXIS BANK account no and bank address."},{"label":"ham","message":"Hmmm.. Thk sure got time to hop ard... Ya, can go 4 free abt... Muz call u to discuss liao..."},{"label":"ham","message":"What time you coming down later?"},{"label":"ham","message":"Bloody hell, cant believe you forgot my surname Mr . Ill give u a clue, its spanish and begins with m..."},{"label":"ham","message":"Well, i'm gonna finish my bath now. Have a good...fine night."},{"label":"ham","message":"Let me know when you've got the money so carlos can make the call"},{"label":"ham","message":"U still going to the mall?"},{"label":"ham","message":"Turns out my friends are staying for the whole show and won't be back til ~ <#> , so feel free to go ahead and smoke that $ <#> worth"},{"label":"ham","message":"Text her. If she doesnt reply let me know so i can have her log in"},{"label":"ham","message":"Hi! You just spoke to MANEESHA V. We'd like to know if you were satisfied with the experience. Reply Toll Free with Yes or No."},{"label":"ham","message":"You lifted my hopes with the offer of money. I am in need. Especially when the end of the month approaches and it hurts my studying. Anyways have a gr8 weekend"},{"label":"ham","message":"Lol no. U can trust me."},{"label":"ham","message":"ok. I am a gentleman and will treat you with dignity and respect."},{"label":"ham","message":"He will, you guys close?"},{"label":"ham","message":"Going on nothing great.bye"},{"label":"ham","message":"Hello handsome ! Are you finding that job ? Not being lazy ? Working towards getting back that net for mummy ? Where's my boytoy now ? Does he miss me ?"},{"label":"ham","message":"Haha awesome, be there in a minute"},{"label":"spam","message":"Please call our customer service representative on FREEPHONE 0808 145 4742 between 9am-11pm as you have WON a guaranteed \u00a31000 cash or \u00a35000 prize!"},{"label":"ham","message":"Have you got Xmas radio times. If not i will get it now"},{"label":"ham","message":"I jus reached home. I go bathe first. But my sis using net tell u when she finishes k..."},{"label":"spam","message":"Are you unique enough? Find out from 30th August. www.areyouunique.co.uk"},{"label":"ham","message":"I'm sorry. I've joined the league of people that dont keep in touch. You mean a great deal to me. You have been a friend at all times even at great personal cost. Do have a great week.|"},{"label":"ham","message":"Hi :)finally i completed the course:)"},{"label":"ham","message":"It will stop on itself. I however suggest she stays with someone that will be able to give ors for every stool."},{"label":"ham","message":"How are you doing? Hope you've settled in for the new school year. Just wishin you a gr8 day"},{"label":"ham","message":"Gud mrng dear hav a nice day"},{"label":"ham","message":"Did u got that persons story"},{"label":"ham","message":"is your ster dead? Hey so tmr i meet you at 1pm orchard mrt?"},{"label":"ham","message":"Hi its Kate how is your evening? I hope i can see you tomorrow for a bit but i have to bloody babyjontet! Txt back if u can. :) xxx"},{"label":"ham","message":"Found it, ENC <#> , where you at?"},{"label":"ham","message":"I sent you <#> bucks"},{"label":"ham","message":"Hello darlin ive finished college now so txt me when u finish if u can love Kate xxx"},{"label":"ham","message":"Your account has been refilled successfully by INR <DECIMAL> . Your KeralaCircle prepaid account balance is Rs <DECIMAL> . Your Transaction ID is KR <#> ."},{"label":"ham","message":"Goodmorning sleeping ga."},{"label":"ham","message":"U call me alter at 11 ok."},{"label":"ham","message":"\u00dc say until like dat i dun buy ericsson oso cannot oredi lar..."},{"label":"ham","message":"As I entered my cabin my PA said, '' Happy B'day Boss !!''. I felt special. She askd me 4 lunch. After lunch she invited me to her apartment. We went there."},{"label":"ham","message":"Aight yo, dats straight dogg"},{"label":"ham","message":"You please give us connection today itself before <DECIMAL> or refund the bill"},{"label":"ham","message":"Both :) i shoot big loads so get ready!"},{"label":"ham","message":"What's up bruv, hope you had a great break. Do have a rewarding semester."},{"label":"ham","message":"Home so we can always chat"},{"label":"ham","message":"K:)k:)good:)study well."},{"label":"ham","message":"Yup... How \u00fc noe leh..."},{"label":"ham","message":"Sounds great! Are you home now?"},{"label":"ham","message":"Finally the match heading towards draw as your prediction."},{"label":"ham","message":"Tired. I haven't slept well the past few nights."},{"label":"ham","message":"Easy ah?sen got selected means its good.."},{"label":"ham","message":"I have to take exam with march 3"},{"label":"ham","message":"Yeah you should. I think you can use your gt atm now to register. Not sure but if there's anyway i can help let me know. But when you do be sure you are ready."},{"label":"ham","message":"Ok no prob. Take ur time."},{"label":"ham","message":"There is os called ubandu which will run without installing in hard disk...you can use that os to copy the important files in system and give it to repair shop.."},{"label":"ham","message":"Sorry, I'll call later"},{"label":"ham","message":"U say leh... Of course nothing happen lar. Not say v romantic jus a bit only lor. I thk e nite scenery not so nice leh."},{"label":"spam","message":"500 New Mobiles from 2004, MUST GO! Txt: NOKIA to No: 89545 & collect yours today!From ONLY \u00a31 www.4-tc.biz 2optout 087187262701.50gbp\/mtmsg18"},{"label":"ham","message":"Would really appreciate if you call me. Just need someone to talk to."},{"label":"spam","message":"Will u meet ur dream partner soon? Is ur career off 2 a flyng start? 2 find out free, txt HORO followed by ur star sign, e. g. HORO ARIES"},{"label":"ham","message":"Hey company elama po mudyadhu."},{"label":"ham","message":"Life is more strict than teacher... Bcoz Teacher teaches lesson & then conducts exam, But Life first conducts Exam & then teaches Lessons. Happy morning. . ."},{"label":"ham","message":"Dear good morning now only i am up"},{"label":"ham","message":"Get down in gandhipuram and walk to cross cut road. Right side <#> street road and turn at first right."},{"label":"ham","message":"Dear we are going to our rubber place"},{"label":"ham","message":"Sorry battery died, yeah I'm here"},{"label":"ham","message":"Yes:)here tv is always available in work place.."},{"label":"spam","message":"Text & meet someone sexy today. U can find a date or even flirt its up to U. Join 4 just 10p. REPLY with NAME & AGE eg Sam 25. 18 -msg recd@thirtyeight pence"},{"label":"ham","message":"I have printed it oh. So <#> come upstairs"},{"label":"ham","message":"Or ill be a little closer like at the bus stop on the same street"},{"label":"ham","message":"Where are you?when wil you reach here?"},{"label":"ham","message":"New Theory: Argument wins d SITUATION, but loses the PERSON. So dont argue with ur friends just.. . . . kick them & say, I'm always correct.!"},{"label":"spam","message":"U 447801259231 have a secret admirer who is looking 2 make contact with U-find out who they R*reveal who thinks UR so special-call on 09058094597"},{"label":"ham","message":"Tomarrow final hearing on my laptop case so i cant."},{"label":"ham","message":"PLEASSSSSSSEEEEEE TEL ME V AVENT DONE SPORTSx"},{"label":"ham","message":"Okay. No no, just shining on. That was meant to be signing, but that sounds better."},{"label":"ham","message":"Although i told u dat i'm into baig face watches now but i really like e watch u gave cos it's fr u. Thanx 4 everything dat u've done today, i'm touched..."},{"label":"ham","message":"U don't remember that old commercial?"},{"label":"ham","message":"Too late. I said i have the website. I didn't i have or dont have the slippers"},{"label":"ham","message":"I asked you to call him now ok"},{"label":"ham","message":"Kallis wont bat in 2nd innings."},{"label":"ham","message":"It didnt work again oh. Ok goodnight then. I.ll fix and have it ready by the time you wake up. You are very dearly missed have a good night sleep."},{"label":"spam","message":"Congratulations ur awarded 500 of CD vouchers or 125gift guaranteed & Free entry 2 100 wkly draw txt MUSIC to 87066 TnCs www.Ldew.com1win150ppmx3age16"},{"label":"ham","message":"Ranjith cal drpd Deeraj and deepak 5min hold"},{"label":"ham","message":"Wen ur lovable bcums angry wid u, dnt take it seriously.. Coz being angry is d most childish n true way of showing deep affection, care n luv!.. kettoda manda... Have nice day da."},{"label":"ham","message":"What you doing?how are you?"},{"label":"ham","message":"Ups which is 3days also, and the shipping company that takes 2wks. The other way is usps which takes a week but when it gets to lag you may have to bribe nipost to get your stuff."},{"label":"ham","message":"I'm back, lemme know when you're ready"},{"label":"ham","message":"Don't necessarily expect it to be done before you get back though because I'm just now headin out"},{"label":"ham","message":"Mmm so yummy babe ... Nice jolt to the suzy"},{"label":"ham","message":"Where are you lover ? I need you ..."},{"label":"spam","message":"We tried to contact you re your reply to our offer of a Video Handset? 750 anytime networks mins? UNLIMITED TEXT? Camcorder? Reply or call 08000930705 NOW"},{"label":"ham","message":"I\u2018m parked next to a MINI!!!! When are you coming in today do you think?"},{"label":"ham","message":"Yup"},{"label":"ham","message":"Anyway i'm going shopping on my own now. Cos my sis not done yet. Dun disturb u liao."},{"label":"ham","message":"MY NO. IN LUTON 0125698789 RING ME IF UR AROUND! H*"},{"label":"spam","message":"Hey I am really horny want to chat or see me naked text hot to 69698 text charged at 150pm to unsubscribe text stop 69698"},{"label":"ham","message":"Why you Dint come with us."},{"label":"ham","message":"Same. Wana plan a trip sometme then"},{"label":"ham","message":"Not sure yet, still trying to get a hold of him"},{"label":"spam","message":"Ur ringtone service has changed! 25 Free credits! Go to club4mobiles.com to choose content now! Stop? txt CLUB STOP to 87070. 150p\/wk Club4 PO Box1146 MK45 2WT"},{"label":"ham","message":"The evo. I just had to download flash. Jealous?"},{"label":"spam","message":"Ringtone Club: Get the UK singles chart on your mobile each week and choose any top quality ringtone! This message is free of charge."},{"label":"ham","message":"Come to mu, we're sorting out our narcotics situation"},{"label":"ham","message":"Night has ended for another day, morning has come in a special way. May you smile like the sunny rays and leaves your worries at the blue blue bay."},{"label":"spam","message":"HMV BONUS SPECIAL 500 pounds of genuine HMV vouchers to be won. Just answer 4 easy questions. Play Now! Send HMV to 86688 More info:www.100percent-real.com"},{"label":"ham","message":"Usf I guess, might as well take 1 car"},{"label":"ham","message":"No objection. My bf not coming."},{"label":"ham","message":"Thanx..."},{"label":"ham","message":"Tell rob to mack his gf in the theater"},{"label":"ham","message":"Awesome, I'll see you in a bit"},{"label":"ham","message":"Just sent it. So what type of food do you like?"},{"label":"ham","message":"All done? All handed in? Celebrations in full swing yet?"},{"label":"ham","message":"You got called a tool?"},{"label":"ham","message":"\"Wen u miss someone, the person is definitely special for u..... But if the person is so special, why to miss them, just Keep-in-touch\" gdeve.."},{"label":"ham","message":"Ok. I asked for money how far"},{"label":"ham","message":"Okie..."},{"label":"ham","message":"Yeah I think my usual guy's still passed out from last night, if you get ahold of anybody let me know and I'll throw down"},{"label":"ham","message":"K, I might come by tonight then if my class lets out early"},{"label":"ham","message":"Ok.."},{"label":"ham","message":"hi baby im cruisin with my girl friend what r u up 2? give me a call in and hour at home if thats alright or fone me on this fone now love jenny xxx"},{"label":"ham","message":"My life Means a lot to me, Not because I love my life, But because I love the people in my life, The world calls them friends, I call them my World:-).. Ge:-).."},{"label":"ham","message":"Dear,shall mail tonite.busy in the street,shall update you tonite.things are looking ok.varunnathu edukkukayee raksha ollu.but a good one in real sense."},{"label":"ham","message":"Hey you told your name to gaut ah?"},{"label":"ham","message":"Haf u found him? I feel so stupid da v cam was working."},{"label":"ham","message":"Oops. 4 got that bit."},{"label":"ham","message":"Are you this much buzy"},{"label":"ham","message":"I accidentally deleted the message. Resend please."},{"label":"spam","message":"T-Mobile customer you may now claim your FREE CAMERA PHONE upgrade & a pay & go sim card for your loyalty. Call on 0845 021 3680.Offer ends 28thFeb.T&C's apply"},{"label":"ham","message":"Unless it's a situation where YOU GO GURL would be more appropriate"},{"label":"ham","message":"Hurt me... Tease me... Make me cry... But in the end of my life when i die plz keep one rose on my grave and say STUPID I MISS U.. HAVE A NICE DAY BSLVYL"},{"label":"ham","message":"I cant pick the phone right now. Pls send a message"},{"label":"ham","message":"Need a coffee run tomo?Can't believe it's that time of week already"},{"label":"ham","message":"Awesome, I remember the last time we got somebody high for the first time with diesel :V"},{"label":"ham","message":"Shit that is really shocking and scary, cant imagine for a second. Def up for night out. Do u think there is somewhere i could crash for night, save on taxi?"},{"label":"ham","message":"Oh and by the way you do have more food in your fridge! Want to go out for a meal tonight?"},{"label":"ham","message":"He is a womdarfull actor"},{"label":"spam","message":"SMS. ac Blind Date 4U!: Rodds1 is 21\/m from Aberdeen, United Kingdom. Check Him out http:\/\/img. sms. ac\/W\/icmb3cktz8r7!-4 no Blind Dates send HIDE"},{"label":"ham","message":"Yup... From what i remb... I think should be can book..."},{"label":"ham","message":"Jos ask if u wana meet up?"},{"label":"ham","message":"Lol yes. Our friendship is hanging on a thread cause u won't buy stuff."},{"label":"spam","message":"TheMob> Check out our newest selection of content, Games, Tones, Gossip, babes and sport, Keep your mobile fit and funky text WAP to 82468"},{"label":"ham","message":"Where are the garage keys? They aren't on the bookshelf"},{"label":"ham","message":"Today is ACCEPT DAY..U Accept me as? Brother Sister Lover Dear1 Best1 Clos1 Lvblefrnd Jstfrnd Cutefrnd Lifpartnr Belovd Swtheart Bstfrnd No rply means enemy"},{"label":"spam","message":"Think ur smart ? Win \u00a3200 this week in our weekly quiz, text PLAY to 85222 now!T&Cs WinnersClub PO BOX 84, M26 3UZ. 16+. GBP1.50\/week"},{"label":"ham","message":"He says he'll give me a call when his friend's got the money but that he's definitely buying before the end of the week"},{"label":"ham","message":"Hi the way I was with u 2day, is the normal way&this is the real me. UR unique&I hope I know u 4 the rest of mylife. Hope u find wot was lost."},{"label":"ham","message":"You made my day. Do have a great day too."},{"label":"ham","message":"K.k:)advance happy pongal."},{"label":"ham","message":"Hmmm... Guess we can go 4 kb n power yoga... Haha, dunno we can tahan power yoga anot... Thk got lo oso, forgot liao..."},{"label":"ham","message":"Not really dude, have no friends i'm afraid :("},{"label":"spam","message":"December only! Had your mobile 11mths+? You are entitled to update to the latest colour camera mobile for Free! Call The Mobile Update Co FREE on 08002986906"},{"label":"ham","message":"Coffee cake, i guess..."},{"label":"ham","message":"Merry Christmas to you too babe, i love ya *kisses*"},{"label":"ham","message":"Hey... Why dont we just go watch x men and have lunch... Haha"},{"label":"ham","message":"cud u tell ppl im gona b a bit l8 cos 2 buses hav gon past cos they were full & im still waitin 4 1. Pete x"},{"label":"ham","message":"That would be great. We'll be at the Guild. Could meet on Bristol road or somewhere - will get in touch over weekend. Our plans take flight! Have a good week"},{"label":"ham","message":"No problem. How are you doing?"},{"label":"ham","message":"No calls..messages..missed calls"},{"label":"ham","message":"Hi da:)how is the todays class?"},{"label":"ham","message":"I'd say that's a good sign but, well, you know my track record at reading women"},{"label":"ham","message":"Cool, text me when you're parked"},{"label":"ham","message":"I'm reading the text i just sent you. Its meant to be a joke. So read it in that light"},{"label":"ham","message":"K.k:)apo k.good movie."},{"label":"ham","message":"Maybe i could get book out tomo then return it immediately ..? Or something."},{"label":"spam","message":"Call Germany for only 1 pence per minute! Call from a fixed line via access number 0844 861 85 85. No prepayment. Direct access!"},{"label":"ham","message":"Any chance you might have had with me evaporated as soon as you violated my privacy by stealing my phone number from your employer's paperwork. Not cool at all. Please do not contact me again or I will report you to your supervisor."},{"label":"spam","message":"Valentines Day Special! Win over \u00a31000 in our quiz and take your partner on the trip of a lifetime! Send GO to 83600 now. 150p\/msg rcvd. CustCare:08718720201."},{"label":"ham","message":"Ta-Daaaaa! I am home babe, are you still up ?"},{"label":"ham","message":"Cool. So how come you havent been wined and dined before?"},{"label":"ham","message":"Just sleeping..and surfing"},{"label":"ham","message":"Sorry, I'll call later"},{"label":"ham","message":"U calling me right? Call my hand phone..."},{"label":"ham","message":"Ok that's great thanx a lot."},{"label":"ham","message":"I take it the post has come then! You must have 1000s of texts now! Happy reading. My one from wiv hello caroline at the end is my favourite. Bless him"},{"label":"ham","message":"Where u been hiding stranger?"},{"label":"ham","message":"Am not interested to do like that."},{"label":"ham","message":"My sister cleared two round in birla soft yesterday."},{"label":"ham","message":"Gudnite....tc...practice going on"},{"label":"ham","message":"Dis is yijue. I jus saw ur mail. In case huiming havent sent u my num. Dis is my num."},{"label":"ham","message":"One small prestige problem now."},{"label":"spam","message":"Fancy a shag? I do.Interested? sextextuk.com txt XXUK SUZY to 69876. Txts cost 1.50 per msg. TnCs on website. X"},{"label":"ham","message":"Just checking in on you. Really do miss seeing Jeremiah. Do have a great month"},{"label":"ham","message":"Nah can't help you there, I've never had an iphone"},{"label":"ham","message":"If you're not in my car in an hour and a half I'm going apeshit"},{"label":"ham","message":"TODAY is Sorry day.! If ever i was angry with you, if ever i misbehaved or hurt you? plz plz JUST SLAP URSELF Bcoz, Its ur fault, I'm basically GOOD"},{"label":"ham","message":"Yo you guys ever figure out how much we need for alcohol? Jay and I are trying to figure out how much we can safely spend on weed"},{"label":"ham","message":"<#> ISH MINUTES WAS 5 MINUTES AGO. WTF."},{"label":"ham","message":"Thank You for calling.Forgot to say Happy Onam to you Sirji.I am fine here and remembered you when i met an insurance person.Meet You in Qatar Insha Allah.Rakhesh, ex Tata AIG who joined TISSCO,Tayseer."},{"label":"spam","message":"Congratulations ur awarded 500 of CD vouchers or 125gift guaranteed & Free entry 2 100 wkly draw txt MUSIC to 87066 TnCs www.Ldew.com1win150ppmx3age16"},{"label":"spam","message":"Ur cash-balance is currently 500 pounds - to maximize ur cash-in now send CASH to 86688 only 150p\/msg. CC: 08708800282 HG\/Suite342\/2Lands Row\/W1J6HL"},{"label":"ham","message":"I'm an actor. When i work, i work in the evening and sleep late. Since i'm unemployed at the moment, i ALWAYS sleep late. When you're unemployed, every day is saturday."},{"label":"ham","message":"Hello! Just got here, st andrews-boy its a long way! Its cold. I will keep you posted"},{"label":"ham","message":"Ha ha cool cool chikku chikku:-):-DB-)"},{"label":"ham","message":"Oh ok no prob.."},{"label":"ham","message":"Check audrey's status right now"},{"label":"ham","message":"Busy here. Trying to finish for new year. I am looking forward to finally meeting you..."},{"label":"ham","message":"Good afternoon sunshine! How dawns that day ? Are we refreshed and happy to be alive? Do we breathe in the air and smile ? I think of you, my love ... As always"},{"label":"ham","message":"Well i know Z will take care of me. So no worries."},{"label":"spam","message":"Update_Now - Xmas Offer! Latest Motorola, SonyEricsson & Nokia & FREE Bluetooth! Double Mins & 1000 Txt on Orange. Call MobileUpd8 on 08000839402 or call2optout\/F4Q="},{"label":"spam","message":"Here is your discount code RP176781. To stop further messages reply stop. www.regalportfolio.co.uk. Customer Services 08717205546"},{"label":"ham","message":"Wat uniform? In where get?"},{"label":"ham","message":"Cool, text me when you're ready"},{"label":"ham","message":"Hello my boytoy ... Geeee I miss you already and I just woke up. I wish you were here in bed with me, cuddling me. I love you ..."},{"label":"ham","message":"I will spoil you in bed as well :)"},{"label":"ham","message":"I'm going for bath will msg you next <#> min.."},{"label":"ham","message":"I cant keep talking to people if am not sure i can pay them if they agree to price. So pls tell me what you want to really buy and how much you are willing to pay"},{"label":"spam","message":"Thanks for your Ringtone Order, Reference T91. You will be charged GBP 4 per week. You can unsubscribe at anytime by calling customer services on 09057039994"},{"label":"ham","message":"Can you say what happen"},{"label":"ham","message":"You could have seen me..i did't recognise you Face.:)"},{"label":"ham","message":"Well there's not a lot of things happening in Lindsay on New years *sighs* Some bars in Ptbo and the blue heron has something going"},{"label":"ham","message":"Keep my payasam there if rinu brings"},{"label":"ham","message":"I taught that Ranjith sir called me. So only i sms like that. Becaus hes verifying about project. Prabu told today so only pa dont mistake me.."},{"label":"ham","message":"I guess that's why you re worried. You must know that there's a way the body repairs itself. And i'm quite sure you shouldn't worry. We'll take it slow. First the tests, they will guide when your ovulation is then just relax. Nothing you've said is a reason to worry but i.ll keep on followin you up."},{"label":"ham","message":"Yeah sure, give me a couple minutes to track down my wallet"},{"label":"ham","message":"Hey leave it. not a big deal:-) take care."},{"label":"ham","message":"Hey i will be late ah... Meet you at 945+"},{"label":"spam","message":"Double mins and txts 4 6months FREE Bluetooth on Orange. Available on Sony, Nokia Motorola phones. Call MobileUpd8 on 08000839402 or call2optout\/N9DX"},{"label":"ham","message":"It took Mr owl 3 licks"},{"label":"ham","message":"Customer place i will call you."},{"label":"ham","message":"Mm that time you dont like fun"},{"label":"spam","message":"4mths half price Orange line rental & latest camera phones 4 FREE. Had your phone 11mths ? Call MobilesDirect free on 08000938767 to update now! or2stoptxt"},{"label":"ham","message":"Yup having my lunch buffet now.. U eat already?"},{"label":"ham","message":"Huh so late... Fr dinner?"},{"label":"ham","message":"Hey so this sat are we going for the intro pilates only? Or the kickboxing too?"},{"label":"ham","message":"Morning only i can ok."},{"label":"ham","message":"Yes i think so. I am in office but my lap is in room i think thats on for the last few days. I didnt shut that down"},{"label":"ham","message":"Pick you up bout 7.30ish? What time are and that going?"},{"label":"ham","message":"From here after The performance award is calculated every two month.not for current one month period.."},{"label":"ham","message":"Was actually sleeping and still might when u call back. So a text is gr8. You rock sis. Will send u a text wen i wake."},{"label":"ham","message":"You are always putting your business out there. You put pictures of your ass on facebook. You are one of the most open people i've ever met. Why would i think a picture of your room would hurt you, make you feel violated."},{"label":"ham","message":"Good evening Sir, Al Salam Wahleykkum.sharing a happy news.By the grace of God, i got an offer from Tayseer,TISSCO and i joined.Hope you are fine.Inshah Allah,meet you sometime.Rakhesh,visitor from India."},{"label":"ham","message":"Hmmm...k...but i want to change the field quickly da:-)i wanna get system administrator or network administrator.."},{"label":"spam","message":"FREE RINGTONE text FIRST to 87131 for a poly or text GET to 87131 for a true tone! Help? 0845 2814032 16 after 1st free, tones are 3x\u00a3150pw to e\u00a3nd txt stop"},{"label":"ham","message":"Dear how is chechi. Did you talk to her"},{"label":"ham","message":"The hair cream has not been shipped."},{"label":"ham","message":"None of that's happening til you get here though"},{"label":"ham","message":"Yep, the great loxahatchee xmas tree burning of <#> starts in an hour"},{"label":"ham","message":"Haha get used to driving to usf man, I know a lot of stoners"},{"label":"ham","message":"All was well until slightly disastrous class this pm with my fav darlings! Hope day off ok. Coffee wld be good as can't stay late tomorrow. Same time + place as always?"},{"label":"ham","message":"Hello! Good week? Fancy a drink or something later?"},{"label":"ham","message":"Headin towards busetop"},{"label":"ham","message":"Message:some text missing* Sender:Name Missing* *Number Missing *Sent:Date missing *Missing U a lot thats y everything is missing sent via fullonsms.com"},{"label":"ham","message":"Come by our room at some point so we can iron out the plan for this weekend"},{"label":"ham","message":"Cos i want it to be your thing"},{"label":"ham","message":"Okies... I'll go yan jiu too... We can skip ard oso, go cine den go mrt one, blah blah blah..."},{"label":"ham","message":"Bring home some Wendy =D"},{"label":"spam","message":"100 dating service cal;l 09064012103 box334sk38ch"},{"label":"ham","message":"Whatsup there. Dont u want to sleep"},{"label":"ham","message":"Alright i have a new goal now"},{"label":"spam","message":"FREE entry into our \u00a3250 weekly competition just text the word WIN to 80086 NOW. 18 T&C www.txttowin.co.uk"},{"label":"ham","message":"Alright, I'll head out in a few minutes, text me where to meet you"},{"label":"spam","message":"Send a logo 2 ur lover - 2 names joined by a heart. Txt LOVE NAME1 NAME2 MOBNO eg LOVE ADAM EVE 07123456789 to 87077 Yahoo! POBox36504W45WQ TxtNO 4 no ads 150p"},{"label":"ham","message":"Yes:)from last week itself i'm taking live call."},{"label":"spam","message":"Someone has contacted our dating service and entered your phone because they fancy you! To find out who it is call from a landline 09111032124 . PoBox12n146tf150p"},{"label":"ham","message":"Siva is in hostel aha:-."},{"label":"spam","message":"URGENT! Your Mobile number has been awarded with a \u00a32000 prize GUARANTEED. Call 09058094455 from land line. Claim 3030. Valid 12hrs only"},{"label":"ham","message":"Send this to ur friends and receive something about ur voice..... How is my speaking expression? 1.childish 2.naughty 3.Sentiment 4.rowdy 5.ful of attitude 6.romantic 7.shy 8.Attractive 9.funny <#> .irritating <#> .lovable. reply me.."},{"label":"ham","message":"Ok. She'll be ok. I guess"},{"label":"ham","message":"aathi..where are you dear.."},{"label":"ham","message":"Any pain on urination any thing else?"},{"label":"ham","message":"7 at esplanade.. Do \u00fc mind giving me a lift cos i got no car today.."},{"label":"ham","message":"I wnt to buy a BMW car urgently..its vry urgent.but hv a shortage of <#> Lacs.there is no source to arng dis amt. <#> lacs..thats my prob"},{"label":"ham","message":"At home watching tv lor."},{"label":"ham","message":"Does she usually take fifteen fucking minutes to respond to a yes or no question"},{"label":"spam","message":"Congrats! Nokia 3650 video camera phone is your Call 09066382422 Calls cost 150ppm Ave call 3mins vary from mobiles 16+ Close 300603 post BCM4284 Ldn WC1N3XX"},{"label":"ham","message":"Booked ticket for pongal?"},{"label":"ham","message":"You available now? I'm like right around hillsborough & <#> th"},{"label":"ham","message":"The message sent is askin for <#> dollars. Shoul i pay <#> or <#> ?"},{"label":"ham","message":"Ask g or iouri, I've told the story like ten times already"},{"label":"ham","message":"How long does applebees fucking take"},{"label":"ham","message":"Hi hope u get this txt~journey hasnt been gd,now about 50 mins late I think."},{"label":"ham","message":"But i have to. I like to have love and arrange."},{"label":"ham","message":"Yes..he is really great..bhaji told kallis best cricketer after sachin in world:).very tough to get out."},{"label":"ham","message":"You were supposed to wake ME up >:("},{"label":"ham","message":"Oic... I saw him too but i tot he din c me... I found a group liao..."},{"label":"ham","message":"Sorry, I'll call later"},{"label":"ham","message":"\"HEY HEY WERETHE MONKEESPEOPLE SAY WE MONKEYAROUND! HOWDY GORGEOUS, HOWU DOIN? FOUNDURSELF A JOBYET SAUSAGE?LOVE JEN XXX\""},{"label":"ham","message":"Sorry, my battery died, I can come by but I'm only getting a gram for now, where's your place?"},{"label":"ham","message":"Well done, blimey, exercise, yeah, i kinda remember wot that is, hmm."},{"label":"ham","message":"I wont get concentration dear you know you are my mind and everything :-)"},{"label":"ham","message":"LOL ... Have you made plans for new years?"},{"label":"ham","message":"10 min later k..."},{"label":"ham","message":"hanks lotsly!"},{"label":"ham","message":"Thanks for this hope you had a good day today"},{"label":"ham","message":"K:)k:)what are detail you want to transfer?acc no enough?"},{"label":"ham","message":"Ok i will tell her to stay out. Yeah its been tough but we are optimistic things will improve this month."},{"label":"spam","message":"Loan for any purpose \u00a3500 - \u00a375,000. Homeowners + Tenants welcome. Have you been previously refused? We can still help. Call Free 0800 1956669 or text back 'help'"},{"label":"ham","message":"Si si. I think ill go make those oreo truffles."},{"label":"ham","message":"LOOK AT AMY URE A BEAUTIFUL, INTELLIGENT WOMAN AND I LIKE U A LOT. I KNOW U DON\u0092T LIKE ME LIKE THAT SO DON\u0092T WORRY."},{"label":"ham","message":"I hope you that's the result of being consistently intelligent and kind. Start asking him about practicum links and keep your ears open and all the best. ttyl"},{"label":"ham","message":"1.20 that call cost. Which i guess isnt bad. Miss ya, need ya, want ya, love ya"},{"label":"ham","message":"Going thru a very different feeling.wavering decisions and coping up with the same is the same individual.time will heal everything i believe."},{"label":"ham","message":"Where did u go? My phone is gonna die you have to stay in here"},{"label":"ham","message":"Great. Never been better. Each day gives even more reasons to thank God"},{"label":"spam","message":"UpgrdCentre Orange customer, you may now claim your FREE CAMERA PHONE upgrade for your loyalty. Call now on 0207 153 9153. Offer ends 26th July. T&C's apply. Opt-out available"},{"label":"ham","message":"Sorry, I'll call later ok bye"},{"label":"ham","message":"Ok i am on the way to railway"},{"label":"ham","message":"great princess! I love giving and receiving oral. Doggy style is my fave position. How about you? I enjoy making love <#> times per night :)"},{"label":"ham","message":"They don't put that stuff on the roads to keep it from getting slippery over there?"},{"label":"ham","message":"When are you going to ride your bike?"},{"label":"ham","message":"Yup, no need. I'll jus wait 4 e rain 2 stop."},{"label":"ham","message":"There are many company. Tell me the language."},{"label":"spam","message":"okmail: Dear Dave this is your final notice to collect your 4* Tenerife Holiday or #5000 CASH award! Call 09061743806 from landline. TCs SAE Box326 CW25WX 150ppm"},{"label":"ham","message":"How long has it been since you screamed, princess?"},{"label":"ham","message":"Nothing. I meant that once the money enters your account here, the bank will remove its flat rate. Someone transfered <#> to my account and <#> dollars got removed. So the banks differ and charges also differ.be sure you trust the 9ja person you are sending account details to cos..."},{"label":"spam","message":"Want 2 get laid tonight? Want real Dogging locations sent direct 2 ur Mob? Join the UK's largest Dogging Network by txting MOAN to 69888Nyt. ec2a. 31p.msg@150p"},{"label":"ham","message":"Nice line said by a broken heart- Plz don't cum 1 more times infront of me... Other wise once again I ll trust U... Good 9t:)"},{"label":"ham","message":"Ok I'm gonna head up to usf in like fifteen minutes"},{"label":"ham","message":"Love you aathi..love u lot.."},{"label":"ham","message":"Tension ah?what machi?any problem?"},{"label":"ham","message":"K, can I pick up another 8th when you're done?"},{"label":"ham","message":"When're you guys getting back? G said you were thinking about not staying for mcr"},{"label":"ham","message":"Almost there, see u in a sec"},{"label":"ham","message":"Yo carlos, a few friends are already asking me about you, you working at all this weekend?"},{"label":"ham","message":"Watching tv lor..."},{"label":"ham","message":"Thank you baby! I cant wait to taste the real thing..."},{"label":"ham","message":"You should change your fb to jaykwon thuglyfe falconerf"},{"label":"ham","message":"If we win its really no 1 side for long time."},{"label":"spam","message":"FREE MESSAGE Activate your 500 FREE Text Messages by replying to this message with the word FREE For terms & conditions, visit www.07781482378.com"},{"label":"ham","message":"Dear reached railway. What happen to you"},{"label":"ham","message":"Depends on quality. If you want the type i sent boye, faded glory, then about 6. If you want ralphs maybe 2"},{"label":"ham","message":"I think i've fixed it can you send a test message?"},{"label":"ham","message":"Sorry man my account's dry or I would, if you want we could trade back half or I could buy some shit with my credit card"},{"label":"spam","message":"Congrats! 1 year special cinema pass for 2 is yours. call 09061209465 now! C Suprman V, Matrix3, StarWars3, etc all 4 FREE! bx420-ip4-5we. 150pm. Dont miss out!"},{"label":"ham","message":"Sorry,in meeting I'll call later"},{"label":"ham","message":"What class of <#> reunion?"},{"label":"ham","message":"Are you free now?can i call now?"},{"label":"ham","message":"Got meh... When?"},{"label":"ham","message":"Nope... Think i will go for it on monday... Sorry i replied so late"},{"label":"ham","message":"Some of them told accenture is not confirm. Is it true."},{"label":"ham","message":"Kate jackson rec center before 7ish, right?"},{"label":"ham","message":"Dear i have reache room"},{"label":"ham","message":"Fighting with the world is easy, u either win or lose bt fightng with some1 who is close to u is dificult if u lose - u lose if u win - u still lose."},{"label":"ham","message":"When can \u00fc come out?"},{"label":"ham","message":"Check with nuerologist."},{"label":"ham","message":"Lolnice. I went from a fish to ..water.?"},{"label":"spam","message":"+123 Congratulations - in this week's competition draw u have won the \u00a31450 prize to claim just call 09050002311 b4280703. T&Cs\/stop SMS 08718727868. Over 18 only 150ppm"},{"label":"ham","message":"No it's waiting in e car dat's bored wat. Cos wait outside got nothing 2 do. At home can do my stuff or watch tv wat."},{"label":"ham","message":"Maybe westshore or hyde park village, the place near my house?"},{"label":"ham","message":"You should know now. So how's anthony. Are you bringing money. I've school fees to pay and rent and stuff like that. Thats why i need your help. A friend in need....|"},{"label":"ham","message":"What's the significance?"},{"label":"ham","message":"Your opinion about me? 1. Over 2. Jada 3. Kusruthi 4. Lovable 5. Silent 6. Spl character 7. Not matured 8. Stylish 9. Simple Pls reply.."},{"label":"ham","message":"8 at the latest, g's still there if you can scrounge up some ammo and want to give the new ak a try"},{"label":"ham","message":"Prabha..i'm soryda..realy..frm heart i'm sory"},{"label":"ham","message":"Lol ok your forgiven :)"},{"label":"ham","message":"No..jst change tat only.."},{"label":"spam","message":"You are guaranteed the latest Nokia Phone, a 40GB iPod MP3 player or a \u00a3500 prize! Txt word: COLLECT to No: 83355! IBHltd LdnW15H 150p\/Mtmsgrcvd18+"},{"label":"ham","message":"S:)no competition for him."},{"label":"spam","message":"Boltblue tones for 150p Reply POLY# or MONO# eg POLY3 1. Cha Cha Slide 2. Yeah 3. Slow Jamz 6. Toxic 8. Come With Me or STOP 4 more tones txt MORE"},{"label":"spam","message":"Your credits have been topped up for http:\/\/www.bubbletext.com Your renewal Pin is tgxxrz"},{"label":"ham","message":"That way transport is less problematic than on sat night. By the way, if u want to ask n to join my bday, feel free. But need to know definite nos as booking on fri."},{"label":"ham","message":"Usually the person is unconscious that's in children but in adults they may just behave abnormally. I.ll call you now"},{"label":"ham","message":"But that's on ebay it might be less elsewhere."},{"label":"ham","message":"Shall i come to get pickle"},{"label":"ham","message":"Were gonna go get some tacos"},{"label":"ham","message":"That's very rude, you on campus?"},{"label":"spam","message":"URGENT!: Your Mobile No. was awarded a \u00a32,000 Bonus Caller Prize on 02\/09\/03! This is our 2nd attempt to contact YOU! Call 0871-872-9755 BOX95QU"},{"label":"ham","message":"Hi i won't b ard 4 christmas. But do enjoy n merry x'mas."},{"label":"spam","message":"Today's Offer! Claim ur \u00a3150 worth of discount vouchers! Text YES to 85023 now! SavaMob, member offers mobile! T Cs 08717898035. \u00a33.00 Sub. 16 . Unsub reply X"},{"label":"ham","message":"Yes! How is a pretty lady like you single?"},{"label":"spam","message":"You will recieve your tone within the next 24hrs. For Terms and conditions please see Channel U Teletext Pg 750"},{"label":"ham","message":"Jay says that you're a double-faggot"},{"label":"spam","message":"PRIVATE! Your 2003 Account Statement for 07815296484 shows 800 un-redeemed S.I.M. points. Call 08718738001 Identifier Code 41782 Expires 18\/11\/04"},{"label":"ham","message":"What Today-sunday..sunday is holiday..so no work.."},{"label":"ham","message":"Gudnite....tc...practice going on"},{"label":"ham","message":"I'll be late..."},{"label":"ham","message":"I've not called you in a while. This is hoping it was l8r malaria and that you know that we miss you guys. I miss Bani big, so pls give her my love especially. Have a great day."},{"label":"ham","message":"Good afternoon, my love! How goes that day ? I hope maybe you got some leads on a job. I think of you, boytoy and send you a passionate kiss from across the sea"},{"label":"ham","message":"Probably gonna be here for a while, see you later tonight <)"},{"label":"ham","message":"Or maybe my fat fingers just press all these buttons and it doesn't know what to do."},{"label":"ham","message":"Ummmmmaah Many many happy returns of d day my dear sweet heart.. HAPPY BIRTHDAY dear"},{"label":"ham","message":"I am in tirupur da, once you started from office call me."},{"label":"spam","message":"from www.Applausestore.com MonthlySubscription@50p\/msg max6\/month T&CsC web age16 2stop txt stop"},{"label":"ham","message":"A famous quote : when you develop the ability to listen to 'anything' unconditionally without losing your temper or self confidence, it means you are ......... 'MARRIED'"},{"label":"ham","message":"But am going to college pa. What to do. are else ill come there it self. Pa."},{"label":"ham","message":"4 oclock at mine. Just to bash out a flat plan."},{"label":"ham","message":"This girl does not stay in bed. This girl doesn't need recovery time. Id rather pass out while having fun then be cooped up in bed"},{"label":"ham","message":"Then any special there?"},{"label":"ham","message":"I know but you need to get hotel now. I just got my invitation but i had to apologise. Cali is to sweet for me to come to some english bloke's weddin"},{"label":"ham","message":"Sorry that took so long, omw now"},{"label":"ham","message":"Wait <#> min.."},{"label":"ham","message":"Ok give me 5 minutes I think I see her. BTW you're my alibi. You were cutting my hair the whole time."},{"label":"ham","message":"Imagine you finally get to sink into that bath after I have put you through your paces, maybe even having you eat me for a while before I left ... But also imagine the feel of that cage on your cock surrounded by the bath water, reminding you always who owns you ... Enjoy, my cuck"},{"label":"ham","message":"Hurry up, I've been weed-deficient for like three days"},{"label":"ham","message":"Sure, if I get an acknowledgement from you that it's astoundingly tactless and generally faggy to demand a blood oath fo"},{"label":"ham","message":"Ok. Every night take a warm bath drink a cup of milk and you'll see a work of magic. You still need to loose weight. Just so that you know"},{"label":"ham","message":"I\u2018ll have a look at the frying pan in case it\u2018s cheap or a book perhaps. No that\u2018s silly a frying pan isn\u2018t likely to be a book"},{"label":"ham","message":"O. Well uv causes mutations. Sunscreen is like essential thesedays"},{"label":"ham","message":"Having lunch:)you are not in online?why?"},{"label":"ham","message":"I know that my friend already told that."},{"label":"ham","message":"Hi Princess! Thank you for the pics. You are very pretty. How are you?"},{"label":"ham","message":"Aiyo... U always c our ex one... I dunno abt mei, she haven reply... First time u reply so fast... Y so lucky not workin huh, got bao by ur sugardad ah...gee.."},{"label":"ham","message":"Hi msg me:)i'm in office.."},{"label":"ham","message":"Thanx 4 e brownie it's v nice..."},{"label":"ham","message":"Geeeee ... I love you so much I can barely stand it"},{"label":"spam","message":"GENT! We are trying to contact you. Last weekends draw shows that you won a \u00a31000 prize GUARANTEED. Call 09064012160. Claim Code K52. Valid 12hrs only. 150ppm"},{"label":"ham","message":"Fuck babe ... I miss you already, you know ? Can't you let me send you some money towards your net ? I need you ... I want you ... I crave you ..."},{"label":"ham","message":"Ill call u 2mrw at ninish, with my address that icky American freek wont stop callin me 2 bad Jen k eh?"},{"label":"ham","message":"Oooh bed ridden ey? What are YOU thinking of?"},{"label":"ham","message":"So anyways, you can just go to your gym or whatever, my love *smiles* I hope your ok and having a good day babe ... I miss you so much already"},{"label":"ham","message":"Love it! Daddy will make you scream with pleasure! I am going to slap your ass with my dick!"},{"label":"ham","message":"WOT U WANNA DO THEN MISSY?"},{"label":"ham","message":"Yar lor wait 4 my mum 2 finish sch then have lunch lor... I whole morning stay at home clean my room now my room quite clean... Hee..."},{"label":"ham","message":"Do you know where my lab goggles went"},{"label":"ham","message":"Can you open the door?"},{"label":"ham","message":"Waiting for your call."},{"label":"ham","message":"Nope i waiting in sch 4 daddy..."},{"label":"spam","message":"You have won ?1,000 cash or a ?2,000 prize! To claim, call09050000327"},{"label":"ham","message":"I'm tired of arguing with you about this week after week. Do what you want and from now on, i'll do the same."},{"label":"ham","message":"\u00dc wait 4 me in sch i finish ard 5.."},{"label":"spam","message":"our mobile number has won \u00a35000, to claim calls us back or ring the claims hot line on 09050005321."},{"label":"ham","message":"Arngd marriage is while u r walkin unfortuntly a snake bites u. bt love marriage is dancing in frnt of d snake & sayin Bite me, bite me."},{"label":"ham","message":"Huh so early.. Then \u00fc having dinner outside izzit?"},{"label":"ham","message":"Ok anyway no need to change with what you said"},{"label":"spam","message":"We tried to contact you re your reply to our offer of 750 mins 150 textand a new video phone call 08002988890 now or reply for free delivery tomorrow"},{"label":"ham","message":"my ex-wife was not able to have kids. Do you want kids one day?"},{"label":"ham","message":"So how's scotland. Hope you are not over showing your JJC tendencies. Take care. Live the dream"},{"label":"ham","message":"Tell them u have a headache and just want to use 1 hour of sick time."},{"label":"ham","message":"I dun thk i'll quit yet... Hmmm, can go jazz ? Yogasana oso can... We can go meet em after our lessons den..."},{"label":"ham","message":"\"Pete can you please ring meive hardly gotany credit\""},{"label":"ham","message":"Ya srsly better than yi tho"},{"label":"ham","message":"I'm in a meeting, call me later at"},{"label":"spam","message":"For ur chance to win a \u00a3250 wkly shopping spree TXT: SHOP to 80878. T's&C's www.txt-2-shop.com custcare 08715705022, 1x150p\/wk"},{"label":"spam","message":"You have been specially selected to receive a 2000 pound award! Call 08712402050 BEFORE the lines close. Cost 10ppm. 16+. T&Cs apply. AG Promo"},{"label":"spam","message":"PRIVATE! Your 2003 Account Statement for 07753741225 shows 800 un-redeemed S. I. M. points. Call 08715203677 Identifier Code: 42478 Expires 24\/10\/04"},{"label":"ham","message":"You still at grand prix?"},{"label":"ham","message":"I met you as a stranger and choose you as my friend. As long as the world stands, our friendship never ends. Lets be Friends forever!!! Gud nitz..."},{"label":"ham","message":"I am great! How are you?"},{"label":"ham","message":"Gud mrng dear have a nice day"},{"label":"spam","message":"You have an important customer service announcement. Call FREEPHONE 0800 542 0825 now!"},{"label":"ham","message":"Will do. Was exhausted on train this morning. Too much wine and pie. You sleep well too"},{"label":"ham","message":"I'm going out to buy mum's present ar."},{"label":"ham","message":"Mind blastin.. No more Tsunamis will occur from now on.. Rajnikant stopped swimming in Indian Ocean..:-D"},{"label":"ham","message":"If u sending her home first it's ok lor. I'm not ready yet."},{"label":"ham","message":"Speaking of does he have any cash yet?"},{"label":"ham","message":"Be happy there. I will come after noon"},{"label":"ham","message":"Meet after lunch la..."},{"label":"ham","message":"TaKe CaRE n gET WeLL sOOn"},{"label":"spam","message":"XCLUSIVE@CLUBSAISAI 2MOROW 28\/5 SOIREE SPECIALE ZOUK WITH NICHOLS FROM PARIS.FREE ROSES 2 ALL LADIES !!! info: 07946746291\/07880867867"},{"label":"ham","message":"what I meant to say is cant wait to see u again getting bored of this bridgwater banter"},{"label":"ham","message":"Neva mind it's ok.."},{"label":"ham","message":"It's fine, imma get a drink or somethin. Want me to come find you?"},{"label":"spam","message":"22 days to kick off! For Euro2004 U will be kept up to date with the latest news and results daily. To be removed send GET TXT STOP to 83222"},{"label":"ham","message":"Its a valentine game. . . Send dis msg to all ur friends. .. If 5 answers r d same then someone really loves u. Ques- which colour suits me the best?rply me"},{"label":"ham","message":"I have many dependents"},{"label":"ham","message":"THANX4 TODAY CER IT WAS NICE 2 CATCH UP BUT WE AVE 2 FIND MORE TIME MORE OFTEN OH WELL TAKE CARE C U SOON.C"},{"label":"ham","message":"I called and said all to him:)then he have to choose this future."},{"label":"ham","message":"\"Happy valentines day\" I know its early but i have hundreds of handsomes and beauties to wish. So i thought to finish off aunties and uncles 1st..."},{"label":"ham","message":"He like not v shock leh. Cos telling shuhui is like telling leona also. Like dat almost all know liao. He got ask me abt ur reaction lor."},{"label":"ham","message":"For my family happiness.."},{"label":"ham","message":"I come n pick \u00fc up... Come out immediately aft ur lesson..."},{"label":"ham","message":"Let there be snow. Let there be snow. This kind of weather brings ppl together so friendships can grow."},{"label":"ham","message":"Dear we got <#> dollars hi hi"},{"label":"ham","message":"Good words.... But words may leave u in dismay many times."},{"label":"ham","message":"MAKE SURE ALEX KNOWS HIS BIRTHDAY IS OVER IN FIFTEEN MINUTES AS FAR AS YOU'RE CONCERNED"},{"label":"ham","message":"sorry, no, have got few things to do. may be in pub later."},{"label":"ham","message":"Nah it's straight, if you can just bring bud or drinks or something that's actually a little more useful than straight cash"},{"label":"ham","message":"Haha good to hear, I'm officially paid and on the market for an 8th"},{"label":"ham","message":"How many licks does it take to get to the center of a tootsie pop?"},{"label":"ham","message":"Yup i thk they r e teacher said that will make my face look longer. Darren ask me not 2 cut too short."},{"label":"spam","message":"New TEXTBUDDY Chat 2 horny guys in ur area 4 just 25p Free 2 receive Search postcode or at gaytextbuddy.com. TXT ONE name to 89693"},{"label":"spam","message":"Todays Vodafone numbers ending with 4882 are selected to a receive a \u00a3350 award. If your number matches call 09064019014 to receive your \u00a3350 award."},{"label":"ham","message":"Please dont say like that. Hi hi hi"},{"label":"ham","message":"Thank u!"},{"label":"ham","message":"Oh that was a forwarded message. I thought you send that to me"},{"label":"ham","message":"Got it. Seventeen pounds for seven hundred ml \u2013 hope ok."},{"label":"spam","message":"Dear Voucher Holder, 2 claim this weeks offer, at your PC go to http:\/\/www.e-tlp.co.uk\/expressoffer Ts&Cs apply.2 stop texts txt STOP to 80062."},{"label":"ham","message":"Me n him so funny..."},{"label":"ham","message":"Sweetheart, hope you are not having that kind of day! Have one with loads of reasons to smile. Biola"},{"label":"ham","message":"When \u00fc login dat time... Dad fetching \u00fc home now?"},{"label":"ham","message":"What will we do in the shower, baby?"},{"label":"ham","message":"I had askd u a question some hours before. Its answer"},{"label":"ham","message":"Well imma definitely need to restock before thanksgiving, I'll let you know when I'm out"},{"label":"ham","message":"said kiss, kiss, i can't do the sound effects! He is a gorgeous man isn't he! Kind of person who needs a smile to brighten his day!"},{"label":"ham","message":"Probably gonna swing by in a wee bit"},{"label":"ham","message":"Ya very nice. . .be ready on thursday"},{"label":"ham","message":"Allo! We have braved the buses and taken on the trains and triumphed. I mean we\u2018re in b\u2018. Have a jolly good rest of week"},{"label":"ham","message":"Watching cartoon, listening music & at eve had to go temple & church.. What about u?"},{"label":"ham","message":"Do you mind if I ask what happened? You dont have to say if it is uncomfortable."},{"label":"spam","message":"PRIVATE! Your 2003 Account Statement for shows 800 un-redeemed S. I. M. points. Call 08715203694 Identifier Code: 40533 Expires 31\/10\/04"},{"label":"ham","message":"No prob. I will send to your email."},{"label":"spam","message":"You have won ?1,000 cash or a ?2,000 prize! To claim, call09050000327. T&C: RSTM, SW7 3SS. 150ppm"},{"label":"ham","message":"Thats cool! Sometimes slow and gentle. Sonetimes rough and hard :)"},{"label":"ham","message":"I'm gonna say no. Sorry. I would but as normal am starting to panic about time. Sorry again! Are you seeing on Tuesday?"},{"label":"ham","message":"Wait, do you know if wesleys in town? I bet she does hella drugs!"},{"label":"ham","message":"Fine i miss you very much."},{"label":"ham","message":"Did u got that persons story"},{"label":"ham","message":"Tell them the drug dealer's getting impatient"},{"label":"ham","message":"Sun cant come to earth but send luv as rays. cloud cant come to river but send luv as rain. I cant come to meet U, but can send my care as msg to U. Gud evng"},{"label":"ham","message":"You will be in the place of that man"},{"label":"ham","message":"It doesnt make sense to take it there unless its free. If you need to know more, wikipedia.com"},{"label":"spam","message":"88800 and 89034 are premium phone services call 08718711108"},{"label":"ham","message":"Under the sea, there lays a rock. In the rock, there is an envelope. In the envelope, there is a paper. On the paper, there are 3 words... '"},{"label":"ham","message":"Then mum's repent how?"},{"label":"ham","message":"Sorry me going home first... Daddy come fetch \u00fc later..."},{"label":"ham","message":"Leave it de:-). Start Prepare for next:-).."},{"label":"ham","message":"Yes baby! We can study all the positions of the kama sutra ;)"},{"label":"ham","message":"En chikku nange bakra msg kalstiya..then had tea\/coffee?"},{"label":"ham","message":"Carlos'll be here in a minute if you still need to buy"},{"label":"ham","message":"This pay is <DECIMAL> lakhs:)"},{"label":"ham","message":"Have a good evening! Ttyl"},{"label":"ham","message":"Did u receive my msg?"},{"label":"ham","message":"Ho ho - big belly laugh! See ya tomo"},{"label":"spam","message":"SMS. ac sun0819 posts HELLO:\"You seem cool, wanted to say hi. HI!!!\" Stop? Send STOP to 62468"},{"label":"spam","message":"Get ur 1st RINGTONE FREE NOW! Reply to this msg with TONE. Gr8 TOP 20 tones to your phone every week just \u00a31.50 per wk 2 opt out send STOP 08452810071 16"},{"label":"ham","message":"Ditto. And you won't have to worry about me saying ANYTHING to you anymore. Like i said last night, you do whatever you want and i'll do the same. Peace."},{"label":"ham","message":"I've got <#> , any way I could pick up?"},{"label":"ham","message":"I dont knw pa, i just drink milk.."},{"label":"ham","message":"Maybe?! Say hi to and find out if got his card. Great escape or wetherspoons?"},{"label":"ham","message":"Piggy, r u awake? I bet u're still sleeping. I'm going 4 lunch now..."},{"label":"ham","message":"Cause I'm not freaky lol"},{"label":"ham","message":"Missed your call cause I was yelling at scrappy. Miss u. Can't wait for u to come home. I'm so lonely today."},{"label":"ham","message":"What is this 'hex' place you talk of? Explain!"},{"label":"ham","message":"\u00dc log off 4 wat. It's sdryb8i"},{"label":"ham","message":"Is xy going 4 e lunch?"},{"label":"spam","message":"Hi I'm sue. I am 20 years old and work as a lapdancer. I love sex. Text me live - I'm i my bedroom now. text SUE to 89555. By TextOperator G2 1DA 150ppmsg 18+"},{"label":"ham","message":"I wanted to ask \u00fc to wait 4 me to finish lect. Cos my lect finishes in an hour anyway."},{"label":"ham","message":"Have you finished work yet? :)"},{"label":"ham","message":"Every King Was Once A Crying Baby And Every Great Building Was Once A Map.. Not Imprtant Where U r TODAY, BUT Where U Wil Reach TOMORW. Gud ni8"},{"label":"ham","message":"Dear,Me at cherthala.in case u r coming cochin pls call bfore u start.i shall also reach accordingly.or tell me which day u r coming.tmorow i am engaged ans its holiday."},{"label":"ham","message":"Thanks love. But am i doing torch or bold."},{"label":"spam","message":"Please CALL 08712404000 immediately as there is an urgent message waiting for you."},{"label":"ham","message":"Was the farm open?"},{"label":"ham","message":"Sorry to trouble u again. Can buy 4d for my dad again? 1405, 1680, 1843. All 2 big 1 small, sat n sun. Thanx."},{"label":"ham","message":"My sister in law, hope you are having a great month. Just saying hey. Abiola"},{"label":"ham","message":"Will purchase d stuff today and mail to you. Do you have a po box number?"},{"label":"ham","message":"Ah poop. Looks like ill prob have to send in my laptop to get fixed cuz it has a gpu problem"},{"label":"ham","message":"Good. Good job. I like entrepreneurs"},{"label":"ham","message":"Aight, you close by or still down around alex's place?"},{"label":"ham","message":"meet you in corporation st outside gap \u2026 you can see how my mind is working!"},{"label":"ham","message":"Mum ask \u00fc to buy food home..."},{"label":"ham","message":"K..u also dont msg or reply to his msg.."},{"label":"ham","message":"How much r \u00fc willing to pay?"},{"label":"ham","message":"Sorry, I'll call later"},{"label":"ham","message":"What is important is that you prevent dehydration by giving her enough fluids"},{"label":"ham","message":"Thats a bit weird, even ?- where is the do supposed to be happening? But good idea, sure they will be in pub!"},{"label":"ham","message":"True dear..i sat to pray evening and felt so.so i sms'd you in some time..."},{"label":"ham","message":"I don't think I can get away for a trek that long with family in town, sorry"},{"label":"ham","message":"So when do you wanna gym harri"},{"label":"ham","message":"Quite late lar... Ard 12 anyway i wun b drivin..."},{"label":"spam","message":"To review and KEEP the fantastic Nokia N-Gage game deck with Club Nokia, go 2 www.cnupdates.com\/newsletter. unsubscribe from alerts reply with the word OUT"},{"label":"spam","message":"4mths half price Orange line rental & latest camera phones 4 FREE. Had your phone 11mths+? Call MobilesDirect free on 08000938767 to update now! or2stoptxt T&Cs"},{"label":"ham","message":"Height of Confidence: All the Aeronautics professors wer calld & they wer askd 2 sit in an aeroplane. Aftr they sat they wer told dat the plane ws made by their students. Dey all hurried out of d plane.. Bt only 1 didnt move... He said:\"if it is made by my students,this wont even start........ Datz confidence.."},{"label":"ham","message":"It just seems like weird timing that the night that all you and g want is for me to come smoke is the same day as when a shitstorm is attributed to me always coming over and making everyone smoke"},{"label":"spam","message":"08714712388 between 10am-7pm Cost 10p"},{"label":"ham","message":"Save yourself the stress. If the person has a dorm account, just send your account details and the money will be sent to you."},{"label":"ham","message":"He also knows about lunch menu only da. . I know"},{"label":"ham","message":"When i have stuff to sell i.ll tell you"},{"label":"spam","message":"+449071512431 URGENT! This is the 2nd attempt to contact U!U have WON \u00a31250 CALL 09071512433 b4 050703 T&CsBCM4235WC1N3XX. callcost 150ppm mobilesvary. max\u00a37. 50"},{"label":"ham","message":"Book which lesson? then you msg me... I will call up after work or sth... I'm going to get specs. My membership is PX3748"},{"label":"spam","message":"You have WON a guaranteed \u00a31000 cash or a \u00a32000 prize. To claim yr prize call our customer service representative on 08714712394 between 10am-7pm"},{"label":"ham","message":"Macha dont feel upset.i can assume your mindset.believe me one evening with me and i have some wonderful plans for both of us.LET LIFE BEGIN AGAIN.call me anytime"},{"label":"ham","message":"Oh is it? Send me the address"},{"label":"ham","message":"S'fine. Anytime. All the best with it."},{"label":"ham","message":"That is wondar full flim."},{"label":"ham","message":"Ya even those cookies have jelly on them"},{"label":"ham","message":"The world is running and i am still.maybe all are feeling the same,so be it.or i have to admit,i am mad.then where is the correction?or let me call this is life.and keep running with the world,may be u r also running.lets run."},{"label":"ham","message":"Got it! It looks scrumptious... daddy wants to eat you all night long!"},{"label":"ham","message":"Of cos can lar i'm not so ba dao ok... 1 pm lor... Y u never ask where we go ah... I said u would ask on fri but he said u will ask today..."},{"label":"ham","message":"Alright omw, gotta change my order to a half8th"},{"label":"ham","message":"Exactly. Anyways how far. Is jide her to study or just visiting"},{"label":"ham","message":"Dunno y u ask me."},{"label":"spam","message":"Email AlertFrom: Jeri StewartSize: 2KBSubject: Low-cost prescripiton drvgsTo listen to email call 123"},{"label":"ham","message":"No he didn't. Spring is coming early yay!"},{"label":"ham","message":"Lol you won't feel bad when I use her money to take you out to a steak dinner =D"},{"label":"ham","message":"Even u dont get in trouble while convincing..just tel him once or twice and just tel neglect his msgs dont c and read it..just dont reply"},{"label":"ham","message":"Leaving to qatar tonite in search of an opportunity.all went fast.pls add me in ur prayers dear.Rakhesh"},{"label":"ham","message":"Then why no one talking to me"},{"label":"ham","message":"Thanks for looking out for me. I really appreciate."},{"label":"spam","message":"Hi. Customer Loyalty Offer:The NEW Nokia6650 Mobile from ONLY \u00a310 at TXTAUCTION! Txt word: START to No: 81151 & get yours Now! 4T&Ctxt TC 150p\/MTmsg"},{"label":"ham","message":"Wish i were with you now!"},{"label":"ham","message":"Haha mayb u're rite... U know me well. Da feeling of being liked by someone is gd lor. U faster go find one then all gals in our group attached liao."},{"label":"ham","message":"Yes i will be there. Glad you made it."},{"label":"ham","message":"Do well :)all will for little time. Thing of good times ahead:"},{"label":"ham","message":"Just got up. have to be out of the room very soon. \u2026. i hadn't put the clocks back til at 8 i shouted at everyone to get up and then realised it was 7. wahay. another hour in bed."},{"label":"ham","message":"Ok. There may be a free gym about."},{"label":"ham","message":"Men like shorter ladies. Gaze up into his eyes."},{"label":"ham","message":"Dunno he jus say go lido. Same time 930."},{"label":"ham","message":"I promise to take good care of you, princess. I have to run now. Please send pics when you get a chance. Ttyl!"},{"label":"spam","message":"U are subscribed to the best Mobile Content Service in the UK for \u00a33 per 10 days until you send STOP to 82324. Helpline 08706091795"},{"label":"ham","message":"Is there a reason we've not spoken this year? Anyways have a great week and all the best in your exam"},{"label":"ham","message":"By monday next week. Give me the full gist"},{"label":"spam","message":"Do you realize that in about 40 years, we'll have thousands of old ladies running around with tattoos?"},{"label":"spam","message":"You have an important customer service announcement from PREMIER."},{"label":"ham","message":"Dont gimme that lip caveboy"},{"label":"ham","message":"When did you get to the library"},{"label":"ham","message":"Realy sorry-i don't recognise this number and am now confused :) who r u please?!"},{"label":"ham","message":"So why didnt you holla?"},{"label":"ham","message":"Cant think of anyone with * spare room off * top of my head"},{"label":"ham","message":"Faith makes things possible,Hope makes things work,Love makes things beautiful,May you have all three this Christmas!Merry Christmas!"},{"label":"ham","message":"U should have made an appointment"},{"label":"ham","message":"Call me when you\/carlos is\/are here, my phone's vibrate is acting up and I might not hear texts"},{"label":"spam","message":"Romantic Paris. 2 nights, 2 flights from \u00a379 Book now 4 next year. Call 08704439680Ts&Cs apply."},{"label":"ham","message":"We are at grandmas. Oh dear, u still ill? I felt Shit this morning but i think i am just hungover! Another night then. We leave on sat."},{"label":"spam","message":"Urgent Ur \u00a3500 guaranteed award is still unclaimed! Call 09066368327 NOW closingdate04\/09\/02 claimcode M39M51 \u00a31.50pmmorefrommobile2Bremoved-MobyPOBox734LS27YF"},{"label":"ham","message":"Nothing but we jus tot u would ask cos u ba gua... But we went mt faber yest... Yest jus went out already mah so today not going out... Jus call lor..."},{"label":"ham","message":"Wishing you and your family Merry \"X\" mas and HAPPY NEW Year in advance.."},{"label":"spam","message":"UR awarded a City Break and could WIN a \u00a3200 Summer Shopping spree every WK. Txt STORE to 88039 . SkilGme. TsCs087147403231Winawk!Age16 \u00a31.50perWKsub"},{"label":"ham","message":"I'm nt goin, got somethin on, unless they meetin 4 dinner lor... Haha, i wonder who will go tis time..."},{"label":"ham","message":"Sorry, I'll call later"},{"label":"ham","message":"I cant pick the phone right now. Pls send a message"},{"label":"ham","message":"Lol I know! They're so dramatic. Schools already closed for tomorrow. Apparently we can't drive in the inch of snow were supposed to get."},{"label":"ham","message":"Not getting anywhere with this damn job hunting over here!"},{"label":"ham","message":"Lol! U drunkard! Just doing my hair at d moment. Yeah still up 4 tonight. Wats the plan?"},{"label":"ham","message":"idc get over here, you are not weaseling your way out of this shit twice in a row"},{"label":"ham","message":"I wil be there with in <#> minutes. Got any space"},{"label":"ham","message":"Just sleeping..and surfing"},{"label":"ham","message":"Thanks for picking up the trash."},{"label":"ham","message":"Why don't you go tell your friend you're not sure you want to live with him because he smokes too much then spend hours begging him to come smoke"},{"label":"ham","message":"\"Hi its Kate it was lovely to see you tonight and ill phone you tomorrow. I got to sing and a guy gave me his card! xxx\""},{"label":"ham","message":"Happy New year my dear brother. I really do miss you. Just got your number and decided to send you this text wishing you only happiness. Abiola"},{"label":"ham","message":"That means get the door"},{"label":"ham","message":"Your opinion about me? 1. Over 2. Jada 3. Kusruthi 4. Lovable 5. Silent 6. Spl character 7. Not matured 8. Stylish 9. Simple Pls reply.."},{"label":"ham","message":"Hmmm ... I thought we said 2 hours slave, not 3 ... You are late ... How should I punish you ?"},{"label":"ham","message":"Beerage?"},{"label":"spam","message":"You have an important customer service announcement from PREMIER. Call FREEPHONE 0800 542 0578 now!"},{"label":"ham","message":"Dont think so. It turns off like randomlly within 5min of opening"},{"label":"ham","message":"She was supposed to be but couldn't make it, she's still in town though"},{"label":"ham","message":"It does it on its own. Most of the time it fixes my spelling. But sometimes it gets a completely diff word. Go figure"},{"label":"spam","message":"Ever thought about living a good life with a perfect partner? Just txt back NAME and AGE to join the mobile community. (100p\/SMS)"},{"label":"spam","message":"5 Free Top Polyphonic Tones call 087018728737, National Rate. Get a toppoly tune sent every week, just text SUBPOLY to 81618, \u00a33 per pole. UnSub 08718727870."},{"label":"ham","message":"Gud mrng dear hav a nice day"},{"label":"ham","message":"This is hoping you enjoyed your game yesterday. Sorry i've not been in touch but pls know that you are fondly bein thot off. Have a great week. Abiola"},{"label":"ham","message":"All e best 4 ur driving tmr :-)"},{"label":"ham","message":"Y?WHERE U AT DOGBREATH? ITS JUST SOUNDING LIKE JAN C THAT\u0092S AL!!!!!!!!!"},{"label":"ham","message":"Omg I want to scream. I weighed myself and I lost more weight! Woohoo!"},{"label":"ham","message":"There generally isn't one. It's an uncountable noun - u in the dictionary. pieces of research?"},{"label":"ham","message":"it's really getting me down just hanging around."},{"label":"spam","message":"Orange customer, you may now claim your FREE CAMERA PHONE upgrade for your loyalty. Call now on 0207 153 9996. Offer ends 14thMarch. T&C's apply. Opt-out availa"},{"label":"ham","message":"\"Petey boy whereare you me and all your friendsare in theKingshead come down if you canlove Nic\""},{"label":"ham","message":"Ok i msg u b4 i leave my house."},{"label":"ham","message":"\"Gimme a few\" was <#> minutes ago"},{"label":"spam","message":"Last Chance! Claim ur \u00a3150 worth of discount vouchers today! Text SHOP to 85023 now! SavaMob, offers mobile! T Cs SavaMob POBOX84, M263UZ. \u00a33.00 Sub. 16"},{"label":"ham","message":"Appt is at <TIME> am. Not my fault u don't listen. I told u twice"},{"label":"spam","message":"FREE for 1st week! No1 Nokia tone 4 ur mobile every week just txt NOKIA to 8077 Get txting and tell ur mates. www.getzed.co.uk POBox 36504 W45WQ 16+ norm150p\/tone"},{"label":"spam","message":"You have won a guaranteed \u00a3200 award or even \u00a31000 cashto claim UR award call free on 08000407165 (18+) 2 stop getstop on 88222 PHP. RG21 4JX"},{"label":"ham","message":"K I'll be there before 4."},{"label":"ham","message":"I dled 3d its very imp"},{"label":"ham","message":"sure, but make sure he knows we ain't smokin yet"},{"label":"ham","message":"Boooo you always work. Just quit."},{"label":"ham","message":"I am taking half day leave bec i am not well"},{"label":"ham","message":"Ugh I don't wanna get out of bed. It's so warm."},{"label":"ham","message":"S:)s.nervous <#> :)"},{"label":"ham","message":"So there's a ring that comes with the guys costumes. It's there so they can gift their future yowifes. Hint hint"},{"label":"spam","message":"Congratulations ur awarded either \u00a3500 of CD gift vouchers & Free entry 2 our \u00a3100 weekly draw txt MUSIC to 87066 TnCs www.Ldew.com1win150ppmx3age16"},{"label":"ham","message":"I borrow ur bag ok."},{"label":"spam","message":"U were outbid by simonwatson5120 on the Shinco DVD Plyr. 2 bid again, visit sms. ac\/smsrewards 2 end bid notifications, reply END OUT"},{"label":"ham","message":"Where's my boytoy? I miss you ... What happened?"},{"label":"ham","message":"He has lots of used ones babe, but the model doesn't help. Youi have to bring it over and he'll match it up"},{"label":"ham","message":"Also are you bringing galileo or dobby"},{"label":"ham","message":"Then why you not responding"},{"label":"ham","message":"\"BOO BABE! U ENJOYIN YOURJOB? U SEEMED 2 B GETTIN ON WELL HUNNY!HOPE URE OK?TAKE CARE & I\u0092LLSPEAK 2U SOONLOTS OF LOVEME XXXX.\""},{"label":"ham","message":"Good afternoon starshine! How's my boytoy? Does he crave me yet? Ache to fuck me ? *sips cappuccino* I miss you babe *teasing kiss*"},{"label":"ham","message":"On the road so cant txt"},{"label":"spam","message":"SMSSERVICES. for yourinclusive text credits, pls goto www.comuk.net login= 3qxj9 unsubscribe with STOP, no extra charge. help 08702840625.COMUK. 220-CM2 9AE"},{"label":"spam","message":"25p 4 alfie Moon's Children in need song on ur mob. Tell ur m8s. Txt Tone charity to 8007 for Nokias or Poly charity for polys: zed 08701417012 profit 2 charity."},{"label":"ham","message":"Have a good evening! Ttyl"},{"label":"ham","message":"Hmm .. Bits and pieces lol ... *sighs* ..."},{"label":"ham","message":"Hahaha..use your brain dear"},{"label":"ham","message":"Hey. You got any mail?"},{"label":"ham","message":"Sorry light turned green, I meant another friend wanted <#> worth but he may not be around"},{"label":"ham","message":"Thanks for yesterday sir. You have been wonderful. Hope you enjoyed the burial. MojiBiola"},{"label":"spam","message":"U have a secret admirer. REVEAL who thinks U R So special. Call 09065174042. To opt out Reply REVEAL STOP. 1.50 per msg recd. Cust care 07821230901"},{"label":"ham","message":"Hi mate its RV did u hav a nice hol just a message 3 say hello coz haven\u0092t sent u 1 in ages started driving so stay off roads!RVx"},{"label":"spam","message":"Dear Voucher Holder, To claim this weeks offer, at you PC please go to http:\/\/www.e-tlp.co.uk\/expressoffer Ts&Cs apply. To stop texts, txt STOP to 80062"},{"label":"ham","message":"Thank you so much. When we skyped wit kz and sura, we didnt get the pleasure of your company. Hope you are good. We've given you ultimatum oh! We are countin down to aburo. Enjoy! This is the message i sent days ago"},{"label":"ham","message":"Surely result will offer:)"},{"label":"ham","message":"Good Morning my Dear........... Have a great & successful day."},{"label":"spam","message":"Do you want 750 anytime any network mins 150 text and a NEW VIDEO phone for only five pounds per week call 08002888812 or reply for delivery tomorrow"},{"label":"ham","message":"Sir, I have been late in paying rent for the past few months and had to pay a $ <#> charge. I felt it would be inconsiderate of me to nag about something you give at great cost to yourself and that's why i didnt speak up. I however am in a recession and wont be able to pay the charge this month hence my askin well ahead of month's end. Can you please help. Thanks"},{"label":"spam","message":"We tried to contact you re our offer of New Video Phone 750 anytime any network mins HALF PRICE Rental camcorder call 08000930705 or reply for delivery Wed"},{"label":"spam","message":"Last chance 2 claim ur \u00a3150 worth of discount vouchers-Text YES to 85023 now!SavaMob-member offers mobile T Cs 08717898035. \u00a33.00 Sub. 16 . Remove txt X or STOP"},{"label":"ham","message":"I luv u soo much u don\u0092t understand how special u r 2 me ring u 2morrow luv u xxx"},{"label":"ham","message":"Pls send me a comprehensive mail about who i'm paying, when and how much."},{"label":"ham","message":"Our Prashanthettan's mother passed away last night. pray for her and family."},{"label":"spam","message":"Urgent! call 09066350750 from your landline. Your complimentary 4* Ibiza Holiday or 10,000 cash await collection SAE T&Cs PO BOX 434 SK3 8WP 150 ppm 18+"},{"label":"ham","message":"K.k:)when are you going?"},{"label":"ham","message":"Meanwhile in the shit suite: xavier decided to give us <#> seconds of warning that samantha was coming over and is playing jay's guitar to impress her or some shit. Also I don't think doug realizes I don't live here anymore"},{"label":"ham","message":"My stomach has been thru so much trauma I swear I just can't eat. I better lose weight."},{"label":"ham","message":"I am in office:)whats the matter..msg me now.i will call you at break:)."},{"label":"ham","message":"Yeah there's barely enough room for the two of us, x has too many fucking shoes. Sorry man, see you later"},{"label":"spam","message":"Today's Offer! Claim ur \u00a3150 worth of discount vouchers! Text YES to 85023 now! SavaMob, member offers mobile! T Cs 08717898035. \u00a33.00 Sub. 16 . Unsub reply X"},{"label":"ham","message":"U reach orchard already? U wan 2 go buy tickets first?"},{"label":"ham","message":"I am real, baby! I want to bring out your inner tigress..."},{"label":"ham","message":"No da if you run that it activate the full version da."},{"label":"ham","message":"\"AH POOR BABY!HOPE URFEELING BETTERSN LUV! PROBTHAT OVERDOSE OF WORK HEY GO CAREFUL SPK 2 U SN LOTS OF LOVEJEN XXX.\""},{"label":"ham","message":"Stop the story. I've told him i've returned it and he's saying i should not re order it."},{"label":"spam","message":"Talk sexy!! Make new friends or fall in love in the worlds most discreet text dating service. Just text VIP to 83110 and see who you could meet."},{"label":"ham","message":"Going to take your babe out ?"},{"label":"ham","message":"Hai ana tomarrow am coming on morning. <DECIMAL> ill be there in sathy then we ll go to RTO office. Reply me after came to home."},{"label":"ham","message":"Spoons it is then okay?"},{"label":"ham","message":"Did he just say somebody is named tampa"},{"label":"ham","message":"In work now. Going have in few min."},{"label":"ham","message":"Your brother is a genius"},{"label":"ham","message":"Sorry, I guess whenever I can get a hold of my connections, maybe an hour or two? I'll text you"},{"label":"ham","message":"Did u find out what time the bus is at coz i need to sort some stuff out."},{"label":"ham","message":"Dude ive been seeing a lotta corvettes lately"},{"label":"spam","message":"Congratulations ur awarded either a yrs supply of CDs from Virgin Records or a Mystery Gift GUARANTEED Call 09061104283 Ts&Cs www.smsco.net \u00a31.50pm approx 3mins"},{"label":"ham","message":"Same here, but I consider walls and bunkers and shit important just because I never play on peaceful but I guess your place is high enough that it don't matter"},{"label":"spam","message":"PRIVATE! Your 2003 Account Statement for 07808 XXXXXX shows 800 un-redeemed S. I. M. points. Call 08719899217 Identifier Code: 41685 Expires 07\/11\/04"},{"label":"spam","message":"Hello. We need some posh birds and chaps to user trial prods for champneys. Can i put you down? I need your address and dob asap. Ta r"},{"label":"spam","message":"What do U want for Xmas? How about 100 free text messages & a new video phone with half price line rental? Call free now on 0800 0721072 to find out more!"},{"label":"ham","message":"Well am officially in a philosophical hole, so if u wanna call am at home ready to be saved!"},{"label":"ham","message":"Its going good...no problem..but still need little experience to understand american customer voice..."},{"label":"ham","message":"I'll text you when I drop x off"},{"label":"ham","message":"Ugh its been a long day. I'm exhausted. Just want to cuddle up and take a nap"},{"label":"ham","message":"Talk With Yourself Atleast Once In A Day...!!! Otherwise You Will Miss Your Best FRIEND In This WORLD...!!! -Shakespeare- SHESIL <#>"},{"label":"spam","message":"Shop till u Drop, IS IT YOU, either 10K, 5K, \u00a3500 Cash or \u00a3100 Travel voucher, Call now, 09064011000. NTT PO Box CR01327BT fixedline Cost 150ppm mobile vary"},{"label":"ham","message":"Are you in castor? You need to see something"},{"label":"spam","message":"Sunshine Quiz Wkly Q! Win a top Sony DVD player if u know which country Liverpool played in mid week? Txt ansr to 82277. \u00a31.50 SP:Tyrone"},{"label":"spam","message":"U have a secret admirer who is looking 2 make contact with U-find out who they R*reveal who thinks UR so special-call on 09058094565"},{"label":"spam","message":"U have a Secret Admirer who is looking 2 make contact with U-find out who they R*reveal who thinks UR so special-call on 09065171142-stopsms-08"},{"label":"spam","message":"Reminder: You have not downloaded the content you have already paid for. Goto http:\/\/doit. mymoby. tv\/ to collect your content."},{"label":"ham","message":"see, i knew giving you a break a few times woul lead to you always wanting to miss curfew. I was gonna gibe you 'til one, but a MIDNIGHT movie is not gonna get out til after 2. You need to come home. You need to getsleep and, if anything, you need to b studdying ear training."},{"label":"ham","message":"I love to give massages. I use lots of baby oil... What is your fave position?"},{"label":"ham","message":"Dude we should go sup again"},{"label":"ham","message":"Yoyyooo u know how to change permissions for a drive in mac. My usb flash drive"},{"label":"ham","message":"Gibbs unsold.mike hussey"},{"label":"ham","message":"I like to talk pa but am not able to. I dont know y."},{"label":"ham","message":"Y dun cut too short leh. U dun like ah? She failed. She's quite sad."},{"label":"ham","message":"You unbelievable faglord"},{"label":"ham","message":"Wife.how she knew the time of murder exactly"},{"label":"ham","message":"Why do you ask princess?"},{"label":"ham","message":"I am great princess! What are you thinking about me? :)"},{"label":"ham","message":"Nutter. Cutter. Ctter. Cttergg. Cttargg. Ctargg. Ctagg. ie you"},{"label":"ham","message":"It's ok i noe u're busy but i'm really too bored so i msg u. I oso dunno wat colour she choose 4 me one."},{"label":"ham","message":"Doesn't g have class early tomorrow and thus shouldn't be trying to smoke at <#>"},{"label":"ham","message":"Superb Thought- \"Be grateful that u dont have everything u want. That means u still have an opportunity to be happier tomorrow than u are today.\":-)"},{"label":"ham","message":"Hope you are having a good week. Just checking in"},{"label":"ham","message":"I'm used to it. I just hope my agents don't drop me since i've only booked a few things this year. This whole me in boston, them in nyc was an experiment."},{"label":"ham","message":"Thursday night? Yeah, sure thing, we'll work it out then"},{"label":"spam","message":"Your free ringtone is waiting to be collected. Simply text the password \"MIX\" to 85069 to verify. Get Usher and Britney. FML, PO Box 5249, MK17 92H. 450Ppw 16"},{"label":"ham","message":"Probably money worries. Things are coming due and i have several outstanding invoices for work i did two and three months ago."},{"label":"ham","message":"How is it possible to teach you. And where."},{"label":"ham","message":"I wonder if your phone battery went dead ? I had to tell you, I love you babe"},{"label":"ham","message":"Lovely smell on this bus and it ain't tobacco..."},{"label":"ham","message":"We're all getting worried over here, derek and taylor have already assumed the worst"},{"label":"ham","message":"Hey what's up charles sorry about the late reply."},{"label":"spam","message":"all the lastest from Stereophonics, Marley, Dizzee Racal, Libertines and The Strokes! Win Nookii games with Flirt!! Click TheMob WAP Bookmark or text WAP to 82468"},{"label":"ham","message":"I.ll give her once i have it. Plus she said grinule greet you whenever we speak"},{"label":"ham","message":"WHITE FUDGE OREOS ARE IN STORES"},{"label":"spam","message":"January Male Sale! Hot Gay chat now cheaper, call 08709222922. National rate from 1.5p\/min cheap to 7.8p\/min peak! To stop texts call 08712460324 (10p\/min)"},{"label":"ham","message":"My love ! How come it took you so long to leave for Zaher's? I got your words on ym and was happy to see them but was sad you had left. I miss you"},{"label":"ham","message":"I am sorry it hurt you."},{"label":"ham","message":"Can't. I feel nauseous. I'm so pissed. I didn't eat any sweets all week cause today I was planning to pig out. I was dieting all week. And now I'm not hungry :\/"},{"label":"ham","message":"Ok lor but not too early. Me still having project meeting now."},{"label":"ham","message":"Call me da, i am waiting for your call."},{"label":"ham","message":"I could ask carlos if we could get more if anybody else can chip in"},{"label":"ham","message":"Was actually about to send you a reminder today. Have a wonderful weekend"},{"label":"ham","message":"When people see my msgs, They think Iam addicted to msging... They are wrong, Bcoz They don\\'t know that Iam addicted to my sweet Friends..!! BSLVYL"},{"label":"ham","message":"Hey you gave them your photo when you registered for driving ah? Tmr wanna meet at yck?"},{"label":"ham","message":"Dont talk to him ever ok its my word."},{"label":"ham","message":"When u wana see it then"},{"label":"ham","message":"On ma way to school. Can you pls send me ashley's number"},{"label":"ham","message":"It shall be fine. I have avalarr now. Will hollalater"},{"label":"ham","message":"She went to attend another two rounds today..but still did't reach home.."},{"label":"ham","message":"Actually i deleted my old website..now i m blogging at magicalsongs.blogspot.com"},{"label":"ham","message":"K, wait chikku..il send aftr <#> mins"},{"label":"ham","message":"But I'm on a diet. And I ate 1 too many slices of pizza yesterday. Ugh I'm ALWAYS on a diet."},{"label":"ham","message":"K:)i will give my kvb acc details:)"},{"label":"ham","message":"Oh all have to come ah?"},{"label":"spam","message":"money!!! you r a lucky winner ! 2 claim your prize text money 2 88600 over \u00a31million to give away ! ppt150x3+normal text rate box403 w1t1jy"},{"label":"ham","message":"I'm really sorry i won't b able 2 do this friday.hope u can find an alternative.hope yr term's going ok:-)"},{"label":"ham","message":"Congratulations ore mo owo re wa. Enjoy it and i wish you many happy moments to and fro wherever you go"},{"label":"ham","message":"So do you have samus shoulders yet"},{"label":"ham","message":"What time you think you'll have it? Need to know when I should be near campus"},{"label":"spam","message":"Dear Matthew please call 09063440451 from a landline, your complimentary 4*Lux Tenerife holiday or \u00a31000 CASH await collection. ppm150 SAE T&Cs Box334 SK38XH."},{"label":"ham","message":"Then dun wear jeans lor..."},{"label":"ham","message":"Since when, which side, any fever, any vomitin."},{"label":"ham","message":"K:)k.are you in college?"},{"label":"spam","message":"Urgent! call 09061749602 from Landline. Your complimentary 4* Tenerife Holiday or \u00a310,000 cash await collection SAE T&Cs BOX 528 HP20 1YF 150ppm 18+"},{"label":"ham","message":"Better. Made up for Friday and stuffed myself like a pig yesterday. Now I feel bleh. But at least its not writhing pain kind of bleh."},{"label":"ham","message":"No we sell it all so we'll have tons if coins. Then sell our coins to someone thru paypal. Voila! Money back in life pockets:)"},{"label":"ham","message":"Theyre doing it to lots of places. Only hospitals and medical places are safe."},{"label":"spam","message":"How about getting in touch with folks waiting for company? Just txt back your NAME and AGE to opt in! Enjoy the community (150p\/SMS)"},{"label":"ham","message":"And also I've sorta blown him off a couple times recently so id rather not text him out of the blue looking for weed"},{"label":"ham","message":"I sent my scores to sophas and i had to do secondary application for a few schools. I think if you are thinking of applying, do a research on cost also. Contact joke ogunrinde, her school is one me the less expensive ones"},{"label":"ham","message":"I cant wait to see you! How were the photos were useful? :)"},{"label":"spam","message":"Ur cash-balance is currently 500 pounds - to maximize ur cash-in now send GO to 86688 only 150p\/msg. CC: 08718720201 PO BOX 114\/14 TCR\/W1"},{"label":"ham","message":"Hey i booked the kb on sat already... what other lessons are we going for ah? Keep your sat night free we need to meet and confirm our lodging"},{"label":"ham","message":"Chk in ur belovd ms dict"},{"label":"ham","message":"Is that what time you want me to come?"},{"label":"ham","message":"Awesome, lemme know whenever you're around"},{"label":"ham","message":"Shb b ok lor... Thanx..."},{"label":"ham","message":"Beautiful Truth against Gravity.. Read carefully: \"Our heart feels light when someone is in it.. But it feels very heavy when someone leaves it..\" GOOD NIGHT"},{"label":"ham","message":"Also remember to get dobby's bowl from your car"},{"label":"spam","message":"Filthy stories and GIRLS waiting for your"},{"label":"ham","message":"Sorry i now then c ur msg... Yar lor so poor thing... But only 4 one night... Tmr u'll have a brand new room 2 sleep in..."},{"label":"ham","message":"Love isn't a decision, it's a feeling. If we could decide who to love, then, life would be much simpler, but then less magical"},{"label":"ham","message":"Welp apparently he retired"},{"label":"ham","message":"My sort code is and acc no is . The bank is natwest. Can you reply to confirm i've sent this to the right person!"},{"label":"ham","message":"Where @"},{"label":"ham","message":"U sure u can't take any sick time?"},{"label":"spam","message":"URGENT! We are trying to contact U. Todays draw shows that you have won a \u00a3800 prize GUARANTEED. Call 09050001808 from land line. Claim M95. Valid12hrs only"},{"label":"ham","message":"Watching cartoon, listening music & at eve had to go temple & church.. What about u?"},{"label":"ham","message":"Yo chad which gymnastics class do you wanna take? The site says Christians class is full.."},{"label":"ham","message":"Are you this much buzy"},{"label":"ham","message":"Or better still can you catch her and let ask her if she can sell <#> for me."},{"label":"ham","message":"I am not sure about night menu. . . I know only about noon menu"},{"label":"ham","message":"What do u want when i come back?.a beautiful necklace as a token of my heart for you.thats what i will give but ONLY to MY WIFE OF MY LIKING.BE THAT AND SEE..NO ONE can give you that.dont call me.i will wait till i come."},{"label":"ham","message":"Are you willing to go for aptitude class."},{"label":"ham","message":"It wont b until 2.15 as trying 2 sort house out, is that ok?"},{"label":"ham","message":"Yar lor he wan 2 go c horse racing today mah, so eat earlier lor. I ate chicken rice. U?"},{"label":"ham","message":"Haha awesome, omw back now then"},{"label":"ham","message":"Yup i thk so until e shop closes lor."},{"label":"ham","message":"what is your account number?"},{"label":"ham","message":"Eh u send wrongly lar..."},{"label":"ham","message":"Hey no I ad a crap nite was borin without ya 2 boggy with me u boring biatch! Thanx but u wait til nxt time il ave ya"},{"label":"ham","message":"Ok i shall talk to him"},{"label":"ham","message":"Dont hesitate. You know this is the second time she has had weakness like that. So keep i notebook of what she eat and did the day before or if anything changed the day before so that we can be sure its nothing"},{"label":"ham","message":"Hey you can pay. With salary de. Only <#> ."},{"label":"ham","message":"Another month. I need chocolate weed and alcohol."},{"label":"ham","message":"If he started searching he will get job in few days.he have great potential and talent."},{"label":"ham","message":"Reckon need to be in town by eightish to walk from * carpark."},{"label":"spam","message":"Congrats! 2 mobile 3G Videophones R yours. call 09063458130 now! videochat wid your mates, play java games, Dload polyPH music, noline rentl."},{"label":"ham","message":"LOOK AT THE FUCKIN TIME. WHAT THE FUCK YOU THINK IS UP"},{"label":"ham","message":"Yo guess what I just dropped"},{"label":"ham","message":"Carlos says he'll be at mu in <#> minutes"},{"label":"ham","message":"I'm in office now . I will call you <#> min:)"},{"label":"ham","message":"Geeee ... I miss you already, you know ? Your all I can think about. Fuck, I can't wait till next year when we will be together ... *loving kiss*"},{"label":"ham","message":"Yun ah.the ubi one say if \u00fc wan call by tomorrow.call 67441233 look for irene.ere only got bus8,22,65,61,66,382. Ubi cres,ubi tech park.6ph for 1st 5wkg days.\u00e8n"},{"label":"ham","message":"Ugh. Gotta drive back to sd from la. My butt is sore."},{"label":"ham","message":"26th OF JULY"},{"label":"ham","message":"Hi im having the most relaxing time ever! we have to get up at 7am every day! was the party good the other night? I get home tomorrow at 5ish."},{"label":"ham","message":"Up to \u00fc... \u00dc wan come then come lor... But i din c any stripes skirt..."},{"label":"ham","message":"The Xmas story is peace.. The Xmas msg is love.. The Xmas miracle is jesus.. Hav a blessed month ahead & wish U Merry Xmas..."},{"label":"ham","message":"I can't, I don't have her number!"},{"label":"ham","message":"Change again... It's e one next to escalator..."},{"label":"ham","message":"Yetunde i'm in class can you not run water on it to make it ok. Pls now."},{"label":"ham","message":"Not a lot has happened here. Feels very quiet. Beth is at her aunts and charlie is working lots. Just me and helen in at the mo. How have you been?"},{"label":"ham","message":"Then \u00fc wait 4 me at bus stop aft ur lect lar. If i dun c \u00fc then i go get my car then come back n pick \u00fc."},{"label":"ham","message":"Aight will do, thanks again for comin out"},{"label":"ham","message":"No..but heard abt tat.."},{"label":"spam","message":"Please call our customer service representative on FREEPHONE 0808 145 4742 between 9am-11pm as you have WON a guaranteed \u00a31000 cash or \u00a35000 prize!"},{"label":"ham","message":"Yes..he is really great..bhaji told kallis best cricketer after sachin in world:).very tough to get out."},{"label":"ham","message":"<#> am I think? Should say on syllabus"},{"label":"ham","message":"Umma. Did she say anything"},{"label":"ham","message":"Give me a sec to think think about it"},{"label":"spam","message":"Panasonic & BluetoothHdset FREE. Nokia FREE. Motorola FREE & DoubleMins & DoubleTxt on Orange contract. Call MobileUpd8 on 08000839402 or call 2optout"},{"label":"ham","message":"I don't quite know what to do. I still can't get hold of anyone. I cud pick you up bout 7.30pm and we can see if they're in the pub?"},{"label":"ham","message":"Poyyarikatur,kolathupalayam,unjalur post,erode dis, <#> ."},{"label":"ham","message":"Dear Hero,i am leaving to qatar tonite for an apt opportunity.pls do keep in touch at <EMAIL> ,kerala"},{"label":"ham","message":"Lol I would but my mom would have a fit and tell the whole family how crazy and terrible I am"},{"label":"ham","message":"I just got home babe, are you still awake ?"},{"label":"ham","message":"I dunno they close oredi not... \u00dc v ma fan..."},{"label":"ham","message":"Just buy a pizza. Meat lovers or supreme. U get to pick."},{"label":"ham","message":"Ya, told..she was asking wats matter?"},{"label":"ham","message":"Dear,regret i cudnt pick call.drove down frm ctla now at cochin home.left mobile in car..ente style ishtamayoo?happy bakrid!"},{"label":"spam","message":"FREE for 1st week! No1 Nokia tone 4 ur mob every week just txt NOKIA to 8007 Get txting and tell ur mates www.getzed.co.uk POBox 36504 W45WQ norm150p\/tone 16+"},{"label":"ham","message":"Shall i send that exe to your mail id."},{"label":"ham","message":"Nope watching tv at home... Not going out. V bored..."},{"label":"ham","message":"Don know..wait i will check it."},{"label":"ham","message":"Good afternoon on this glorious anniversary day, my sweet J !! I hope this finds you happy and content, my Prey. I think of you and send a teasing kiss from across the sea coaxing images of fond souveniers ... You Cougar-Pen"},{"label":"spam","message":"Guess what! Somebody you know secretly fancies you! Wanna find out who it is? Give us a call on 09065394514 From Landline DATEBox1282EssexCM61XN 150p\/min 18"},{"label":"ham","message":"We still on for tonight?"},{"label":"ham","message":"May i call You later Pls"},{"label":"ham","message":"Hasn't that been the pattern recently crap weekends?"},{"label":"ham","message":"I have a sore throat. It's scratches when I talk"},{"label":"ham","message":"Yes da. Any plm at ur office"},{"label":"ham","message":"Are you not around or just still asleep? :V"},{"label":"ham","message":"Lol you forgot it eh ? Yes, I'll bring it in babe"},{"label":"ham","message":"Its good, we'll find a way"},{"label":"ham","message":"Can not use foreign stamps in this country. Good lecture ."},{"label":"ham","message":"Yup bathe liao..."},{"label":"ham","message":"HAPPY NEW YEAR MY NO.1 MAN"},{"label":"ham","message":"OH MR SHEFFIELD! You wanna play THAT game, okay. You're the boss and I'm the nanny. You give me a raise and I'll give YOU one!!"},{"label":"ham","message":"ZOE IT JUST HIT ME 2 IM FUCKING SHITIN MYSELF IL DEFO TRY MY HARDEST 2 CUM 2MOROW LUV U MILLIONS LEKDOG"},{"label":"ham","message":"Hello baby, did you get back to your mom's ? Are you setting up the computer now ? Filling your belly ? How goes it loverboy ? I miss you already ... *sighs*"},{"label":"ham","message":"No my blankets are sufficient, thx"},{"label":"ham","message":"naughty little thought: 'its better to flirt, flirt n flirt, rather than loving someone n gettin hurt, hurt n hurt...:-) Gud nyt"},{"label":"ham","message":"Edison has rightly said, \"A fool can ask more questions than a wise man can answer\" Now you know why all of us are speechless during ViVa.. GM,GN,GE,GNT:-)"},{"label":"ham","message":"They just talking thats it de. They wont any other."},{"label":"ham","message":"Today am going to college so am not able to atten the class."},{"label":"ham","message":"I'm in class. Will holla later"},{"label":"ham","message":"Easy ah?sen got selected means its good.."},{"label":"ham","message":"Mmm thats better now i got a roast down me! i\u0092d b better if i had a few drinks down me 2! Good indian?"},{"label":"spam","message":"We know someone who you know that fancies you. Call 09058097218 to find out who. POBox 6, LS15HB 150p"},{"label":"ham","message":"Come round, it's ."},{"label":"ham","message":"Do 1 thing! Change that sentence into: \"Because i want 2 concentrate in my educational career im leaving here..\""},{"label":"spam","message":"1000's flirting NOW! Txt GIRL or BLOKE & ur NAME & AGE, eg GIRL ZOE 18 to 8007 to join and get chatting!"},{"label":"ham","message":"I walked an hour 2 c u! doesn\u0092t that show I care y wont u believe im serious?"},{"label":"spam","message":"18 days to Euro2004 kickoff! U will be kept informed of all the latest news and results daily. Unsubscribe send GET EURO STOP to 83222."},{"label":"ham","message":"Are you available for soiree on June 3rd?"},{"label":"ham","message":"Do u noe wat time e place dat sells 4d closes?"},{"label":"ham","message":"I got another job! The one at the hospital doing data analysis or something, starts on monday! Not sure when my thesis will got finished"},{"label":"ham","message":"Jay's getting really impatient and belligerent"},{"label":"ham","message":"HIYA COMIN 2 BRISTOL 1 ST WEEK IN APRIL. LES GOT OFF + RUDI ON NEW YRS EVE BUT I WAS SNORING.THEY WERE DRUNK! U BAK AT COLLEGE YET? MY WORK SENDS INK 2 BATH."},{"label":"ham","message":"I'm at work. Please call"},{"label":"ham","message":"Then u drive lor."},{"label":"ham","message":"Ard 515 like dat. Y?"},{"label":"ham","message":"Tell me they're female :V how're you throwing in? We're deciding what all to get now"},{"label":"spam","message":"EASTENDERS TV Quiz. What FLOWER does DOT compare herself to? D= VIOLET E= TULIP F= LILY txt D E or F to 84025 NOW 4 chance 2 WIN \u00a3100 Cash WKENT\/150P16+"},{"label":"ham","message":"I'm working technical support :)voice process.networking field."},{"label":"ham","message":"I might come to kerala for 2 days.so you can be prepared to take a leave once i finalise .dont plan any travel during my visit.need to finish urgent works."},{"label":"ham","message":"Ok. Not sure what time tho as not sure if can get to library before class. Will try. See you at some point! Have good eve."},{"label":"spam","message":"We have new local dates in your area - Lots of new people registered in YOUR AREA. Reply DATE to start now! 18 only www.flirtparty.us REPLYS150"},{"label":"ham","message":"That's fine, I'll bitch at you about it later then"},{"label":"ham","message":"No my mum went 2 dentist."},{"label":"ham","message":"Once free call me sir. I am waiting for you."},{"label":"ham","message":"Meeting u is my work. . . Tel me when shall i do my work tomorrow"},{"label":"spam","message":"Someone U know has asked our dating service 2 contact you! Cant Guess who? CALL 09058091854 NOW all will be revealed. PO BOX385 M6 6WU"},{"label":"ham","message":"Jus finish bathing..."},{"label":"ham","message":"alright, I'll make sure the car is back tonight"},{"label":"spam","message":"URGENT! We are trying to contact U. Todays draw shows that you have won a \u00a3800 prize GUARANTEED. Call 09050003091 from land line. Claim C52. Valid12hrs only"},{"label":"spam","message":"Dear U've been invited to XCHAT. This is our final attempt to contact u! Txt CHAT to 86688"},{"label":"ham","message":"Lul im gettin some juicy gossip at the hospital. Two nurses are talking about how fat they are gettin. And one thinks shes obese. Oyea."},{"label":"ham","message":"Aight ill get on fb in a couple minutes"},{"label":"ham","message":"Oi. Ami parchi na re. Kicchu kaaj korte iccha korche na. Phone ta tul na. Plz. Plz."},{"label":"ham","message":"Where can download clear movies. Dvd copies."},{"label":"ham","message":"Yep, by the pretty sculpture"},{"label":"ham","message":"Convey my regards to him"},{"label":"ham","message":"Me too watching surya movie only. . .after 6 pm vijay movie POKKIRI"},{"label":"ham","message":"You tell what happen dont behave like this to me. Ok no need to say"},{"label":"ham","message":"Can u get pic msgs to your phone?"},{"label":"ham","message":"Send to someone else :-)"},{"label":"ham","message":"Wat makes some people dearer is not just de happiness dat u feel when u meet them but de pain u feel when u miss dem!!!"},{"label":"ham","message":"For me the love should start with attraction.i should feel that I need her every time around me.she should be the first thing which comes in my thoughts.I would start the day and end it with her.she should be there every time I dream.love will be then when my every breath has her name.my life should happen around her.my life will be named to her.I would cry for her.will give all my happiness and take all her sorrows.I will be ready to fight with anyone for her.I will be in love when I will be doing the craziest things for her.love will be when I don't have to proove anyone that my girl is the most beautiful lady on the whole planet.I will always be singing praises for her.love will be when I start up making chicken curry and end up makiing sambar.life will be the most beautiful then.will get every morning and thank god for the day because she is with me.I would like to say a lot..will tell later.."},{"label":"ham","message":"FR'NDSHIP is like a needle of a clock. Though V r in d same clock, V r nt able 2 met. Evn if V meet,itz only 4few seconds. Bt V alwys stay conected. Gud 9t;-)"},{"label":"ham","message":"I don't think he has spatula hands!"},{"label":"ham","message":"You can never do NOTHING"},{"label":"spam","message":"You are awarded a SiPix Digital Camera! call 09061221061 from landline. Delivery within 28days. T Cs Box177. M221BP. 2yr warranty. 150ppm. 16 . p p\u00a33.99"},{"label":"ham","message":"Goodmorning today i am late for <DECIMAL> min."},{"label":"spam","message":"WIN URGENT! Your mobile number has been awarded with a \u00a32000 prize GUARANTEED call 09061790121 from land line. claim 3030 valid 12hrs only 150ppm"},{"label":"ham","message":"Please da call me any mistake from my side sorry da. Pls da goto doctor."},{"label":"ham","message":"Where r we meeting?"},{"label":"ham","message":"Well the weather in cali's great. But its complexities are great. You need a car to move freely, its taxes are outrageous. But all in all its a great place. The sad part is i missing home."},{"label":"ham","message":"Now only i reached home. . . I am very tired now. . I will come tomorro"},{"label":"ham","message":"Ryder unsold.now gibbs."},{"label":"spam","message":"Dear Subscriber ur draw 4 \u00a3100 gift voucher will b entered on receipt of a correct ans. When was Elvis Presleys Birthday? TXT answer to 80062"},{"label":"ham","message":"Don't fret. I'll buy the ovulation test strips and send them to you. You wont get them til like march. Can you send me your postal address.u'll be alright.Okay."},{"label":"ham","message":"NO GIFTS!! You trying to get me to throw myself off a cliff or something?"},{"label":"ham","message":"Been up to ne thing interesting. Did you have a good birthday? When are u wrking nxt? I started uni today."},{"label":"ham","message":"You busy or can I come by at some point and figure out what we're doing tomorrow"},{"label":"ham","message":"Yeah go on then, bored and depressed sittin waitin for phone to ring... Hope the wind drops though, scary"},{"label":"ham","message":"Black shirt n blue jeans... I thk i c \u00fc..."},{"label":"ham","message":"Aiyah sorry lor... I watch tv watch until i forgot 2 check my phone."},{"label":"spam","message":"Message Important information for O2 user. Today is your lucky day! 2 find out why log onto http:\/\/www.urawinner.com there is a fantastic surprise awaiting you"},{"label":"ham","message":"on hen night. Going with a swing"},{"label":"ham","message":"Good afternoon, my love. How goes your day ? What are you up to ? I woke early and am online waiting for you ... Hmmm ... Italian boy is online I see . *grins*"},{"label":"ham","message":"From someone not to smoke when every time I've smoked in the last two weeks is because of you calling or texting me that you wanted to smoke"},{"label":"ham","message":"No you'll just get a headache trying to figure it out. U can trust me to do the math. I promise. O:-)"},{"label":"ham","message":"S s..first time..dhoni rocks..."},{"label":"ham","message":"Ok ill tell the company"},{"label":"ham","message":"Awesome, think we can get an 8th at usf some time tonight?"},{"label":"ham","message":"So that means you still think of teju"},{"label":"ham","message":"No I'm good for the movie, is it ok if I leave in an hourish?"},{"label":"ham","message":"No no:)this is kallis home ground.amla home town is durban:)"},{"label":"ham","message":"So lets make it saturday or monday as per convenience."},{"label":"ham","message":"Hey... What time is your driving on fri? We go for evaluation on fri?"},{"label":"spam","message":"449050000301 You have won a \u00a32,000 price! To claim, call 09050000301."},{"label":"ham","message":"I'm going 4 lunch now wif my family then aft dat i go str 2 orchard lor."},{"label":"spam","message":"Bored of speed dating? Try SPEEDCHAT, txt SPEEDCHAT to 80155, if you don't like em txt SWAP and get a new chatter! Chat80155 POBox36504W45WQ 150p\/msg rcd 16"},{"label":"ham","message":"Cancel cheyyamo?and get some money back?"},{"label":"spam","message":"Do you want 750 anytime any network mins 150 text and a NEW video phone for only five pounds per week call 08000776320 now or reply for delivery Tomorrow"},{"label":"ham","message":"Ok.ok ok..then..whats ur todays plan"},{"label":"ham","message":"Good morning princess! How are you?"},{"label":"ham","message":"Aiyar sorry lor forgot 2 tell u..."},{"label":"spam","message":"For taking part in our mobile survey yesterday! You can now have 500 texts 2 use however you wish. 2 get txts just send TXT to 80160 T&C www.txt43.com 1.50p"},{"label":"ham","message":"Not tonight mate. Catching up on some sleep. This is my new number by the way."},{"label":"ham","message":"Height of \"Oh shit....!!\" situation: A guy throws a luv letter on a gal but falls on her brothers head whos a gay,.;-):-D"},{"label":"spam","message":"Ur HMV Quiz cash-balance is currently \u00a3500 - to maximize ur cash-in now send HMV1 to 86688 only 150p\/msg"},{"label":"ham","message":"So check your errors and if you had difficulties, do correction."},{"label":"ham","message":"Howz pain?hope u r fine.."},{"label":"ham","message":"Sorry, I'll call later"},{"label":"ham","message":"Good morning princess! How are you?"},{"label":"ham","message":"As I entered my cabin my PA said, '' Happy B'day Boss !!''. I felt special. She askd me 4 lunch. After lunch she invited me to her apartment. We went there."},{"label":"ham","message":"U wake up already? Thanx 4 e tau sar piah it's quite nice."},{"label":"ham","message":"K do I need a login or anything"},{"label":"spam","message":"Dont forget you can place as many FREE Requests with 1stchoice.co.uk as you wish. For more Information call 08707808226."},{"label":"ham","message":"LOL ... No just was busy"},{"label":"ham","message":"What * u wearing?"},{"label":"ham","message":"Message:some text missing* Sender:Name Missing* *Number Missing *Sent:Date missing *Missing U a lot thats y everything is missing sent via fullonsms.com"},{"label":"ham","message":"Oh:)as usual vijay film or its different?"},{"label":"spam","message":"I don't know u and u don't know me. Send CHAT to 86688 now and let's find each other! Only 150p\/Msg rcvd. HG\/Suite342\/2Lands\/Row\/W1J6HL LDN. 18 years or over."},{"label":"ham","message":"Have you had a good day? Mine was really busy are you up to much tomorrow night?"},{"label":"ham","message":"And is there a way you can send shade's stuff to her. And she has been wonderful too."},{"label":"ham","message":"Really... I tot ur paper ended long ago... But wat u copied jus now got use? U happy lar... I still haf 2 study :-("},{"label":"spam","message":"Thank you, winner notified by sms. Good Luck! No future marketing reply STOP to 84122 customer services 08450542832"},{"label":"ham","message":"Babe ? I lost you ... :-("},{"label":"ham","message":"Ok... Help me ask if she's working tmr a not?"},{"label":"ham","message":"I'm not driving... Raining! Then i'll get caught at e mrt station lor."},{"label":"ham","message":"Not a drop in the tank"},{"label":"ham","message":"(That said can you text him one more time?)"},{"label":"ham","message":"Sorry, I'll call later"},{"label":"ham","message":"Ok i go change also..."},{"label":"spam","message":"1000's of girls many local 2 u who r virgins 2 this & r ready 2 4fil ur every sexual need. Can u 4fil theirs? text CUTE to 69911(\u00a31.50p. m)"},{"label":"ham","message":"Did u find a sitter for kaitlyn? I was sick and slept all day yesterday."},{"label":"ham","message":"Sorry man, accidentally left my phone on silent last night and didn't check it til I got up"},{"label":"ham","message":"Hey.. Something came up last min.. Think i wun be signing up tmr.. Hee"},{"label":"ham","message":"He's an adult and would learn from the experience. There's no real danger. I just dont like peeps using drugs they dont need. But no comment"},{"label":"ham","message":"Hey! There's veggie pizza... :\/"},{"label":"ham","message":"Yun buying... But school got offer 2000 plus only..."},{"label":"ham","message":"You sure your neighbors didnt pick it up"},{"label":"ham","message":"K. I will sent it again"},{"label":"spam","message":"Free entry in 2 a wkly comp to win FA Cup final tkts 21st May 2005. Text FA to 87121 to receive entry question(std txt rate)T&C's apply 08452810075over18's"},{"label":"ham","message":"New Theory: Argument wins d SITUATION, but loses the PERSON. So dont argue with ur friends just.. . . . kick them & say, I'm always correct.!"},{"label":"ham","message":"Well. Im computerless. Time to make some oreo truffles"},{"label":"ham","message":"Haha yeah I see that now, be there in a sec"},{"label":"ham","message":"I am not having her number sir"},{"label":"ham","message":"Lol now I'm after that hot air balloon!"},{"label":"ham","message":"Ok . . now i am in bus. . If i come soon i will come otherwise tomorrow"},{"label":"ham","message":"Msgs r not time pass.They silently say that I am thinking of U right now and also making U think of me at least 4 a moment. Gd nt.swt drms @Shesil"},{"label":"ham","message":"Yeah, we can probably swing by once my roommate finishes up with his girl"},{"label":"spam","message":"Got what it takes 2 take part in the WRC Rally in Oz? U can with Lucozade Energy! Text RALLY LE to 61200 (25p), see packs or lucozade.co.uk\/wrc & itcould be u!"},{"label":"ham","message":"Happy new years melody!"},{"label":"ham","message":"\u00dc dun need to pick ur gf?"},{"label":"ham","message":"Yay! You better not have told that to 5 other girls either."},{"label":"ham","message":"Horrible u eat macs eat until u forgot abt me already rite... U take so long 2 reply. I thk it's more toot than b4 so b prepared. Now wat shall i eat?"},{"label":"ham","message":"Did he say how fantastic I am by any chance, or anything need a bigger life lift as losing the will 2 live, do you think I would be the first person 2 die from N V Q?"},{"label":"ham","message":"Just nw i came to hme da.."},{"label":"ham","message":"I'm outside islands, head towards hard rock and you'll run into me"},{"label":"ham","message":"To day class is there are no class."},{"label":"ham","message":"I'm in chennai velachery:)"},{"label":"ham","message":"You flippin your shit yet?"},{"label":"ham","message":"K give me a sec, breaking a <#> at cstore"},{"label":"ham","message":"Am i that much bad to avoid like this?"},{"label":"ham","message":"Yo, you around? Just got my car back"},{"label":"ham","message":"Annoying isn't it."},{"label":"ham","message":"Goodmorning, Today i am late for <#> min."},{"label":"ham","message":"There's no point hangin on to mr not right if he's not makin u happy"},{"label":"ham","message":"All will come alive.better correct any good looking figure there itself.."},{"label":"ham","message":"In that case I guess I'll see you at campus lodge"},{"label":"ham","message":"We're done..."},{"label":"ham","message":"Come to my home for one last time i wont do anything. Trust me."},{"label":"ham","message":"I was up all night too worrying about this appt. It's a se we missed a girls night out with quizzes popcorn and you doing my hair."},{"label":"spam","message":"Sex up ur mobile with a FREE sexy pic of Jordan! Just text BABE to 88600. Then every wk get a sexy celeb! PocketBabe.co.uk 4 more pics. 16 \u00a33\/wk 087016248"},{"label":"ham","message":"Ok... C ya..."},{"label":"spam","message":"You have 1 new voicemail. Please call 08719181503"},{"label":"ham","message":"What he said is not the matter. My mind saying some other matter is there."},{"label":"ham","message":"He also knows about lunch menu only da. . I know"},{"label":"ham","message":"Al he does is moan at me if n e thin goes wrong its my fault&al de arguments r my fault&fed up of him of himso y bother? Hav 2go, thanx.xx"},{"label":"ham","message":"NEFT Transaction with reference number <#> for Rs. <DECIMAL> has been credited to the beneficiary account on <#> at <TIME> : <#>"},{"label":"ham","message":"Otherwise had part time job na-tuition.."},{"label":"ham","message":"I know she called me"},{"label":"ham","message":"Me also da, i feel yesterday night wait til 2day night dear."},{"label":"ham","message":"Thanks for understanding. I've been trying to tell sura that."},{"label":"spam","message":"WIN a year supply of CDs 4 a store of ur choice worth \u00a3500 & enter our \u00a3100 Weekly draw txt MUSIC to 87066 Ts&Cs www.Ldew.com.subs16+1win150ppmx3"},{"label":"ham","message":"The whole car appreciated the last two! Dad and are having a map reading semi argument but apart from that things are going ok. P."},{"label":"spam","message":"As a SIM subscriber, you are selected to receive a Bonus! Get it delivered to your door, Txt the word OK to No: 88600 to claim. 150p\/msg, EXP. 30Apr"},{"label":"ham","message":"I need you to be in my strong arms..."},{"label":"ham","message":"Also maaaan are you missing out"},{"label":"ham","message":"His bday real is in april ."},{"label":"ham","message":"Guessin you ain't gonna be here before 9?"},{"label":"ham","message":"Ok then i will come to ur home after half an hour"},{"label":"ham","message":"Yo, the game almost over? Want to go to walmart soon"},{"label":"ham","message":"Yeah, probably but not sure. Ilol let u know, but personally I wuldnt bother, then again if ur goin to then I mite as well!!"},{"label":"ham","message":"I'll text now! All creepy like so he won't think that we forgot"},{"label":"ham","message":"that would be good \u2026 I'll phone you tomo lunchtime, shall I, to organise something?"},{"label":"spam","message":"You have 1 new voicemail. Please call 08719181513."},{"label":"ham","message":"Damn, can you make it tonight or do you want to just wait til tomorrow"},{"label":"ham","message":"K..k..i'm also fine:)when will you complete the course?"},{"label":"ham","message":"True. It is passable. And if you get a high score and apply for phd, you get 5years of salary. So it makes life easier."},{"label":"spam","message":"No. 1 Nokia Tone 4 ur mob every week! Just txt NOK to 87021. 1st Tone FREE ! so get txtin now and tell ur friends. 150p\/tone. 16 reply HL 4info"},{"label":"ham","message":"Prakesh is there know."},{"label":"ham","message":"Teach me apps da. When you come to college."},{"label":"ham","message":"Rofl betta invest in some anti aging products"},{"label":"spam","message":"You are a winner U have been specially selected 2 receive \u00a31000 cash or a 4* holiday (flights inc) speak to a live operator 2 claim 0871277810810"},{"label":"ham","message":"sir, you will receive the account no another 1hr time. Sorry for the delay."},{"label":"spam","message":"Reply with your name and address and YOU WILL RECEIVE BY POST a weeks completely free accommodation at various global locations www.phb1.com ph:08700435505150p"},{"label":"ham","message":"So \u00fc'll be submitting da project tmr rite?"},{"label":"spam","message":"FREE entry into our \u00a3250 weekly comp just send the word ENTER to 84128 NOW. 18 T&C www.textcomp.com cust care 08712405020."},{"label":"ham","message":"Jus ans me lar. U'll noe later."},{"label":"ham","message":"I want to send something that can sell fast. <#> k is not easy money."},{"label":"ham","message":"have got * few things to do. may be in * pub later."},{"label":"ham","message":"1's finish meeting call me."},{"label":"ham","message":"Lol ok. I'll snatch her purse too."},{"label":"ham","message":"\"Hello-\/@drivby-:0quit edrunk sorry iff pthis makes no senrd-dnot no how ^ dancce 2 drum n basq!ihave fun 2nhite x ros xxxxxxx\""},{"label":"ham","message":"Your opinion about me? 1. Over 2. Jada 3. Kusruthi 4. Lovable 5. Silent 6. Spl character 7. Not matured 8. Stylish 9. Simple Pls reply.."},{"label":"ham","message":"How much are we getting?"},{"label":"ham","message":"Is ur paper in e morn or aft tmr?"},{"label":"ham","message":"Dear relieved of westonzoyland, all going to plan this end too!"},{"label":"ham","message":"Hope you are having a great new semester. Do wish you the very best. You are made for greatness."},{"label":"ham","message":"Oh yes I can speak txt 2 u no! Hmm. Did u get email?"},{"label":"ham","message":"I want to show you the world, princess :) how about europe?"},{"label":"ham","message":"Nobody can decide where to eat and dad wants Chinese"},{"label":"ham","message":"No shoot me. I'm in the docs waiting room. :\/"},{"label":"ham","message":"Now? I'm going out 4 dinner soon.."},{"label":"ham","message":"Hello which the site to download songs its urgent pls"},{"label":"ham","message":"I do know what u mean, is the king of not havin credit! I'm goin2bed now. Night night sweet! Only1more sleep!"},{"label":"ham","message":"Horrible gal. Me in sch doing some stuff. How come u got mc?"},{"label":"ham","message":"HI HUN! IM NOT COMIN 2NITE-TELL EVERY1 IM SORRY 4 ME, HOPE U AVA GOODTIME!OLI RANG MELNITE IFINK IT MITE B SORTED,BUT IL EXPLAIN EVERYTHIN ON MON.L8RS.x"},{"label":"ham","message":"I call you later, don't have network. If urgnt, sms me."},{"label":"ham","message":"Ummmmmaah Many many happy returns of d day my dear sweet heart.. HAPPY BIRTHDAY dear"},{"label":"spam","message":"Please CALL 08712402779 immediately as there is an urgent message waiting for you"},{"label":"ham","message":"Yeah like if it goes like it did with my friends imma flip my shit in like half an hour"},{"label":"ham","message":"Mum say we wan to go then go... Then she can shun bian watch da glass exhibition..."},{"label":"ham","message":"What your plan for pongal?"},{"label":"ham","message":"Just wait till end of march when el nino gets himself. Oh."},{"label":"ham","message":"Not yet chikku..going to room nw, i'm in bus.."},{"label":"ham","message":"Am also doing in cbe only. But have to pay."},{"label":"ham","message":"Honey boo I'm missing u."},{"label":"ham","message":"We have sent JD for Customer Service cum Accounts Executive to ur mail id, For details contact us"},{"label":"ham","message":"Yo, I'm at my parents' gettin cash. Good news: we picked up a downstem"},{"label":"ham","message":"Thank you so much. When we skyped wit kz and sura, we didnt get the pleasure of your company. Hope you are good. We've given you ultimatum oh! We are countin down to aburo. Enjoy!"},{"label":"spam","message":"Hungry gay guys feeling hungry and up 4 it, now. Call 08718730555 just 10p\/min. To stop texts call 08712460324 (10p\/min)"},{"label":"ham","message":"Ok. No wahala. Just remember that a friend in need ..."},{"label":"ham","message":"I will see in half an hour"},{"label":"ham","message":"Im in inperialmusic listening2the weirdest track ever by\u0094leafcutter john\u0094-sounds like insects being molested&someone plumbing,remixed by evil men on acid!"},{"label":"ham","message":"\"Hey sorry I didntgive ya a a bellearlier hunny,just been in bedbut mite go 2 thepub l8tr if uwana mt up?loads a luv Jenxxx.\""},{"label":"ham","message":"SERIOUSLY. TELL HER THOSE EXACT WORDS RIGHT NOW."},{"label":"spam","message":"Can U get 2 phone NOW? I wanna chat 2 set up meet Call me NOW on 09096102316 U can cum here 2moro Luv JANE xx Calls\u00a31\/minmoremobsEMSPOBox45PO139WA"},{"label":"ham","message":"Tee hee. Off to lecture, cheery bye bye."},{"label":"ham","message":"Sorry chikku, my cell got some problem thts y i was nt able to reply u or msg u.."},{"label":"ham","message":"If you still havent collected the dough pls let me know so i can go to the place i sent it to get the control number"},{"label":"ham","message":"Ok..."},{"label":"spam","message":"network operator. The service is free. For T & C's visit 80488.biz"},{"label":"ham","message":"Let me know how to contact you. I've you settled in a room. Lets know you are ok."},{"label":"ham","message":"Wot u up 2 u weirdo?"},{"label":"ham","message":"Can do lor..."},{"label":"ham","message":"Dont put your phone on silent mode ok"},{"label":"ham","message":"Can i meet \u00fc at 5.. As 4 where depends on where \u00fc wan 2 in lor.."},{"label":"ham","message":"Waiting 4 my tv show 2 start lor... U leh still busy doing ur report?"},{"label":"ham","message":"Oh ho. Is this the first time u use these type of words"},{"label":"ham","message":"Am I the only one who doesn't stalk profiles?"},{"label":"ham","message":"Ever green quote ever told by Jerry in cartoon \"A Person Who Irritates u Always Is the one Who Loves u Vry Much But Fails to Express It...!..!! :-) :-) gud nyt"},{"label":"ham","message":"Yes i thought so. Thanks."},{"label":"ham","message":"But if she.s drinkin i'm ok."},{"label":"ham","message":"Just wondering, the others just took off"},{"label":"ham","message":"Night has ended for another day, morning has come in a special way. May you smile like the sunny rays and leaves your worries at the blue blue bay. Gud mrng"},{"label":"ham","message":"What do you do, my dog ? Must I always wait till the end of your day to have word from you ? Did you run out of time on your cell already?"},{"label":"ham","message":"Happy new year to u too!"},{"label":"ham","message":"Hey...Great deal...Farm tour 9am to 5pm $95\/pax, $50 deposit by 16 May"},{"label":"ham","message":"Eat jap done oso aft ur lect wat... \u00dc got lect at 12 rite..."},{"label":"ham","message":"Hey babe! I saw you came online for a second and then you disappeared, what happened ?"},{"label":"ham","message":"Da my birthdate in certificate is in april but real date is today. But dont publish it. I shall give you a special treat if you keep the secret. Any way thanks for the wishes"},{"label":"ham","message":"Happy birthday... May all ur dreams come true..."},{"label":"ham","message":"Aiyah u did ok already lar. E nydc at wheellock?"},{"label":"ham","message":"TELL HER I SAID EAT SHIT."},{"label":"ham","message":"Sure! I am driving but will reach my destination soon."},{"label":"ham","message":"K so am I, how much for an 8th? Fifty?"},{"label":"ham","message":"Your daily text from me \u2013 a favour this time"},{"label":"ham","message":"Great to hear you are settling well. So what's happenin wit ola?"},{"label":"ham","message":"Those cocksuckers. If it makes you feel better ipads are worthless garbage novelty items and you should feel bad for even wanting one"},{"label":"ham","message":"I tot u reach liao. He said t-shirt."},{"label":"ham","message":"FRAN I DECIDED 2 GO N E WAY IM COMPLETELY BROKE AN KNACKERED I GOT UP BOUT 3 C U 2MRW LOVE JANX P.S THIS IS MY DADS FONE, -NO CREDIT"},{"label":"ham","message":"I cant pick the phone right now. Pls send a message"},{"label":"ham","message":"Your right! I'll make the appointment right now."},{"label":"ham","message":"Designation is software developer and may be she get chennai:)"},{"label":"spam","message":"Enjoy the jamster videosound gold club with your credits for 2 new videosounds+2 logos+musicnews! get more fun from jamster.co.uk! 16+only Help? call: 09701213186"},{"label":"spam","message":"Get 3 Lions England tone, reply lionm 4 mono or lionp 4 poly. 4 more go 2 www.ringtones.co.uk, the original n best. Tones 3GBP network operator rates apply"},{"label":"ham","message":"I jokin oni lar.. \u00dc busy then i wun disturb \u00fc."},{"label":"ham","message":"Ok, be careful ! Don't text and drive !"},{"label":"ham","message":"I.ll always be there, even if its just in spirit. I.ll get a bb soon. Just trying to be sure i need it."},{"label":"ham","message":"U r too much close to my heart. If u go away i will be shattered. Plz stay with me."},{"label":"ham","message":"I love u 2 babe! R u sure everything is alrite. Is he being an idiot? Txt bak girlie"},{"label":"ham","message":"How abt making some of the pics bigger?"},{"label":"ham","message":"Got but got 2 colours lor. One colour is quite light n e other is darker lor. Actually i'm done she's styling my hair now."},{"label":"ham","message":"Whenevr ur sad, Whenevr ur gray, Remembr im here 2 listn 2 watevr u wanna say, Jus walk wid me a little while,& I promise I'll bring back ur smile.:-)"},{"label":"ham","message":"Why nothing. Ok anyway give me treat"},{"label":"spam","message":"Win the newest \u201cHarry Potter and the Order of the Phoenix (Book 5) reply HARRY, answer 5 questions - chance to be the first among readers!"},{"label":"ham","message":"Ok..."},{"label":"ham","message":"Correct. So how was work today"},{"label":"ham","message":"Just sent again. Do you scream and moan in bed, princess?"},{"label":"ham","message":"I wake up long ago already... Dunno, what other thing?"},{"label":"ham","message":"Oh just getting even with u.... u?"},{"label":"ham","message":"I thk 50 shd be ok he said plus minus 10.. Did \u00fc leave a line in between paragraphs?"},{"label":"ham","message":"Can you call me plz. Your number shows out of coveragd area. I have urgnt call in vasai & have to reach before 4'o clock so call me plz"},{"label":"ham","message":"Yeah jay's sort of a fucking retard"},{"label":"ham","message":"Sorry, was in the bathroom, sup"},{"label":"spam","message":"Ur balance is now \u00a3500. Ur next question is: Who sang 'Uptown Girl' in the 80's ? 2 answer txt ur ANSWER to 83600. Good luck!"},{"label":"ham","message":"My exam is for february 4. Wish you a great day."},{"label":"ham","message":"I dont know what to do to come out of this so only am ask questions like this dont mistake me."},{"label":"ham","message":"Aight no rush, I'll ask jay"},{"label":"ham","message":"Good Morning plz call me sir"},{"label":"ham","message":"It's ok lar. U sleep early too... Nite..."},{"label":"ham","message":"Oh... Icic... K lor, den meet other day..."},{"label":"ham","message":"Oh ! A half hour is much longer in Syria than Canada, eh ? Wow you must get SO much more work done in a day than us with all that extra time ! *grins*"},{"label":"ham","message":"Sometimes we put walls around our hearts,not just to be safe from getting hurt.. But to find out who cares enough to break the walls & get closer.. GOODNOON:)"},{"label":"ham","message":"Sweet, we may or may not go to 4U to meet carlos so gauge patty's interest in that"},{"label":"ham","message":"Then she buying today? \u00dc no need to c meh..."},{"label":"ham","message":"Aight sorry I take ten years to shower. What's the plan?"},{"label":"ham","message":"Every monday..nxt week vl be completing.."},{"label":"ham","message":"Might ax well im there."},{"label":"ham","message":"Just chill for another 6hrs. If you could sleep the pain is not a surgical emergency so see how it unfolds. Okay"},{"label":"ham","message":"Yeah I'll try to scrounge something up"},{"label":"ham","message":"Crazy ar he's married. \u00dc like gd looking guys not me. My frens like say he's korean leona's fave but i dun thk he is. Aft some thinking mayb most prob i'll go."},{"label":"ham","message":"Were somewhere on Fredericksburg"},{"label":"ham","message":"Que pases un buen tiempo or something like that"},{"label":"ham","message":"Is it ok if I stay the night here? Xavier has a sleeping bag and I'm getting tired"},{"label":"ham","message":"She doesnt need any test."},{"label":"ham","message":"Nothing much, chillin at home. Any super bowl plan?"},{"label":"spam","message":"FREE2DAY sexy St George's Day pic of Jordan!Txt PIC to 89080 dont miss out, then every wk a saucy celeb!4 more pics c PocketBabe.co.uk 0870241182716 \u00a33\/wk"},{"label":"ham","message":"Bugis oso near wat..."},{"label":"ham","message":"Yo theres no class tmrw right?"},{"label":"ham","message":"Let Ur Heart Be Ur Compass Ur Mind Ur Map Ur Soul Ur Guide And U Will Never loose in world....gnun - Sent via WAY2SMS.COM"},{"label":"ham","message":"Goodnight, sleep well da please take care pa. Please."},{"label":"ham","message":"Baaaaabe! I misss youuuuu ! Where are you ? I have to go and teach my class at 5 ..."},{"label":"ham","message":"Convey my regards to him"},{"label":"ham","message":"U ned to convince him tht its not possible witot hurting his feeling its the main"},{"label":"ham","message":"Good afternoon loverboy ! How goes you day ? Any luck come your way? I think of you, sweetie and send my love across the sea to make you smile and happy"},{"label":"ham","message":"If i start sending blackberry torch to nigeria will you find buyer for me?like 4a month. And tell dad not to buy bb from anyone oh."},{"label":"ham","message":"<#> %of pple marry with their lovers... becz they hav gud undrstndng dat avoids problems. i sent dis 2 u, u wil get gud news on friday by d person you like. And tomorrow will be the best day of your life. Dont break this chain. If you break you will suffer. send this to <#> frnds in <#> mins whn u read..."},{"label":"ham","message":"Yo dude guess who just got arrested the other day"},{"label":"ham","message":"Shuhui say change 2 suntec steamboat? U noe where? Where r u now?"},{"label":"ham","message":"What does the dance river do?"},{"label":"ham","message":"Yetunde, i'm sorry but moji and i seem too busy to be able to go shopping. Can you just please find some other way to get what you wanted us to get. Please forgive me. You can reply free via yahoo messenger."},{"label":"ham","message":"Hey i will be really pretty late... You want to go for the lesson first? I will join you. I'm only reaching tp mrt"},{"label":"spam","message":"HOT LIVE FANTASIES call now 08707509020 Just 20p per min NTT Ltd, PO Box 1327 Croydon CR9 5WB 0870..k"},{"label":"ham","message":"Bbq this sat at mine from 6ish. Ur welcome 2 come"},{"label":"ham","message":"I don't know, same thing that's wrong everyso often, he panicks starts goin on bout not bein good enough \u2026"},{"label":"ham","message":"Alright. I'm out--have a good night!"},{"label":"ham","message":"Did you try making another butt."},{"label":"ham","message":"Hope you are feeling great. Pls fill me in. Abiola"},{"label":"ham","message":"I though we shd go out n have some fun so bar in town or something \u2013 sound ok?"},{"label":"ham","message":"1) Go to write msg 2) Put on Dictionary mode 3)Cover the screen with hand, 4)Press <#> . 5)Gently remove Ur hand.. Its interesting..:)"},{"label":"spam","message":"Bears Pic Nick, and Tom, Pete and ... Dick. In fact, all types try gay chat with photo upload call 08718730666 (10p\/min). 2 stop texts call 08712460324"},{"label":"spam","message":"500 New Mobiles from 2004, MUST GO! Txt: NOKIA to No: 89545 & collect yours today!From ONLY \u00a31 www.4-tc.biz 2optout 087187262701.50gbp\/mtmsg18 TXTAUCTION"},{"label":"ham","message":"We're finally ready fyi"},{"label":"ham","message":"Auntie huai juan never pick up her phone"},{"label":"spam","message":"Double Mins & Double Txt & 1\/2 price Linerental on Latest Orange Bluetooth mobiles. Call MobileUpd8 for the very latest offers. 08000839402 or call2optout\/LF56"},{"label":"ham","message":"Ya tel, wats ur problem.."},{"label":"spam","message":"No. 1 Nokia Tone 4 ur mob every week! Just txt NOK to 87021. 1st Tone FREE ! so get txtin now and tell ur friends. 150p\/tone. 16 reply HL 4info"},{"label":"ham","message":"i dnt wnt to tlk wid u"},{"label":"ham","message":"We spend our days waiting for the ideal path to appear in front of us.. But what we forget is.. \"paths are made by walking.. not by waiting..\" Goodnight!"},{"label":"ham","message":"Its ok my arm is feeling weak cuz i got a shot so we can go another time"},{"label":"ham","message":"Please reserve ticket on saturday eve from chennai to thirunelvali and again from tirunelvali to chennai on sunday eve...i already see in net..no ticket available..i want to book ticket through tackle .."},{"label":"ham","message":"Storming msg: Wen u lift d phne, u say \"HELLO\" Do u knw wt is d real meaning of HELLO?? . . . It's d name of a girl..! . . . Yes.. And u knw who is dat girl?? \"Margaret Hello\" She is d girlfrnd f Grahmbell who invnted telphone... . . . . Moral:One can 4get d name of a person, bt not his girlfrnd... G o o d n i g h t . . .@"},{"label":"ham","message":"That's ok. I popped in to ask bout something and she said you'd been in. Are you around tonght wen this girl comes?"},{"label":"ham","message":"All e best 4 ur exam later."},{"label":"ham","message":"Hope ur head doesn't hurt 2 much ! Am ploughing my way through a pile of ironing ! Staying in with a chinky tonight come round if you like."},{"label":"ham","message":"Oh k.i think most of wi and nz players unsold."},{"label":"ham","message":"Haha... Where got so fast lose weight, thk muz go 4 a month den got effect... Gee,later we go aust put bk e weight."},{"label":"ham","message":"I wonder how you got online, my love ? Had you gone to the net cafe ? Did you get your phone recharged ? Were you on a friends net ? I think of you, boytoy"},{"label":"ham","message":"Haha just kidding, papa needs drugs"},{"label":"ham","message":"Thk shld b can... Ya, i wana go 4 lessons... Haha, can go for one whole stretch..."},{"label":"ham","message":"Oh ok.."},{"label":"ham","message":"R we still meeting 4 dinner tonight?"},{"label":"ham","message":"Thats cool! I am a gentleman and will treat you with dignity and respect."},{"label":"ham","message":"Shall i start from hear."},{"label":"ham","message":"Then we wait 4 u lor... No need 2 feel bad lar..."},{"label":"ham","message":"No did you check? I got his detailed message now"},{"label":"ham","message":"You have registered Sinco as Payee. Log in at icicibank.com and enter URN <#> to confirm. Beware of frauds. Do NOT share or disclose URN to anyone."},{"label":"ham","message":"No, I decided that only people who care about stuff vote and caring about stuff is for losers"},{"label":"ham","message":"Kaiez... Enjoy ur tuition... Gee... Thk e second option sounds beta... I'll go yan jiu den msg u..."},{"label":"ham","message":"You have registered Sinco as Payee. Log in at icicibank.com and enter URN <#> to confirm. Beware of frauds. Do NOT share or disclose URN to anyone."},{"label":"ham","message":"cool. We will have fun practicing making babies!"},{"label":"ham","message":"Actually getting ready to leave the house."},{"label":"ham","message":"K..k..any special today?"},{"label":"spam","message":"URGENT, IMPORTANT INFORMATION FOR O2 USER. TODAY IS YOUR LUCKY DAY! 2 FIND OUT WHY LOG ONTO HTTP:\/\/WWW.URAWINNER.COM THERE IS A FANTASTIC SURPRISE AWAITING FOR YOU"},{"label":"ham","message":"Then we gotta do it after that"},{"label":"ham","message":"I've got ten bucks, jay is being noncomittal"},{"label":"ham","message":"Where at were hungry too"},{"label":"ham","message":"Pls speak to that customer machan."},{"label":"ham","message":"somewhere out there beneath the pale moon light someone think in of u some where out there where dreams come true... goodnite & sweet dreams"},{"label":"ham","message":"Wen ur lovable bcums angry wid u, dnt take it seriously.. Coz being angry is d most childish n true way of showing deep affection, care n luv!.. kettoda manda... Have nice day da."},{"label":"spam","message":"Dear U've been invited to XCHAT. This is our final attempt to contact u! Txt CHAT to 86688 150p\/MsgrcvdHG\/Suite342\/2Lands\/Row\/W1J6HL LDN 18 yrs"},{"label":"ham","message":"So wats ur opinion abt him and how abt is character?"},{"label":"ham","message":"Jay is snickering and tells me that x is totally fucking up the chords as we speak"},{"label":"ham","message":"No..few hours before.went to hair cut ."},{"label":"ham","message":"No wonder... Cos i dun rem seeing a silver car... But i thk i saw a black one..."},{"label":"ham","message":"Lmao. Take a pic and send it to me."},{"label":"ham","message":"\"Speak only when you feel your words are better than the silence...\" Gud mrng:-)"},{"label":"ham","message":"No. She's currently in scotland for that."},{"label":"ham","message":"Do you work all this week ?"},{"label":"spam","message":"Congratulations ur awarded either \u00a3500 of CD gift vouchers & Free entry 2 our \u00a3100 weekly draw txt MUSIC to 87066 TnCs www.Ldew.com 1 win150ppmx3age16"},{"label":"ham","message":"Lol great now im getting hungry."},{"label":"ham","message":"Yes.. now only saw your message.."},{"label":"ham","message":"I'll be at mu in like <#> seconds"},{"label":"ham","message":"Ok..."},{"label":"ham","message":"THING R GOOD THANX GOT EXAMS IN MARCH IVE DONE NO REVISION? IS FRAN STILL WITH BOYF? IVE GOTTA INTERVIW 4 EXETER BIT WORRIED!x"},{"label":"ham","message":"Tell you what, if you make a little spreadsheet and track whose idea it was to smoke to determine who \"smokes too much\" for the entire month of february, I'll come up"},{"label":"spam","message":"For sale - arsenal dartboard. Good condition but no doubles or trebles!"},{"label":"ham","message":"Don't look back at the building because you have no coat and i don't want you to get more sick. Just hurry home and wear a coat to the gym!!!"},{"label":"ham","message":"My painful personal thought- \"I always try to keep everybody happy all the time. But nobody recognises me when i am alone\""},{"label":"ham","message":"Thanks for ve lovely wisheds. You rock"},{"label":"ham","message":"You intrepid duo you! Have a great time and see you both soon."},{"label":"ham","message":"I asked sen to come chennai and search for job."},{"label":"ham","message":"Dad went out oredi..."},{"label":"ham","message":"I jus hope its true that missin me cos i'm really missin him! You haven't done anything to feel guilty about, yet."},{"label":"ham","message":"Wat so late still early mah. Or we juz go 4 dinner lor. Aiya i dunno..."},{"label":"ham","message":"Arms fine, how's Cardiff and uni?"},{"label":"ham","message":"In fact when do you leave? I think addie goes back to school tues or wed"},{"label":"ham","message":"Cool breeze... Bright sun... Fresh flower... Twittering birds... All these waiting to wish u: \"GOODMORNING & HAVE A NICE DAY\" :)"},{"label":"ham","message":"Ya:)going for restaurant.."},{"label":"ham","message":"Its ok., i just askd did u knw tht no?"},{"label":"spam","message":"Free 1st week entry 2 TEXTPOD 4 a chance 2 win 40GB iPod or \u00a3250 cash every wk. Txt POD to 84128 Ts&Cs www.textpod.net custcare 08712405020."},{"label":"ham","message":"Those ducking chinchillas"},{"label":"ham","message":"I am in a marriage function"},{"label":"ham","message":"Looks like u wil b getting a headstart im leaving here bout 2.30ish but if u r desperate for my company I could head in earlier-we were goin to meet in rummer."},{"label":"ham","message":"Don\u2018t give a flying monkeys wot they think and I certainly don\u2018t mind. Any friend of mine and all that!"},{"label":"spam","message":"As a registered optin subscriber ur draw 4 \u00a3100 gift voucher will be entered on receipt of a correct ans to 80062 Whats No1 in the BBC charts"},{"label":"ham","message":"say thanks2."},{"label":"ham","message":"Msg me when rajini comes."},{"label":"ham","message":"Ya! when are \u00fc taking ure practical lessons? I start in june.."},{"label":"ham","message":"That's good, because I need drugs"},{"label":"ham","message":"Stupid.its not possible"},{"label":"ham","message":"Can \u00fc all decide faster cos my sis going home liao.."},{"label":"spam","message":"Summers finally here! Fancy a chat or flirt with sexy singles in yr area? To get MATCHED up just reply SUMMER now. Free 2 Join. OptOut txt STOP Help08714742804"},{"label":"ham","message":"U sleeping now.. Or you going to take? Haha.. I got spys wat.. Me online checking n replying mails lor.."},{"label":"spam","message":"CLAIRE here am havin borin time & am now alone U wanna cum over 2nite? Chat now 09099725823 hope 2 C U Luv CLAIRE xx Calls\u00a31\/minmoremobsEMSPOBox45PO139WA"},{"label":"ham","message":"Fighting with the world is easy, u either win or lose bt fightng with some1 who is close to u is dificult if u lose - u lose if u win - u still lose."},{"label":"spam","message":"Bought one ringtone and now getting texts costing 3 pound offering more tones etc"},{"label":"ham","message":"Yalru lyfu astne chikku.. Bt innu mundhe lyf ali halla ke bilo (marriage)program edhae, so lyf is nt yet ovr chikku..ali vargu lyfu meow meow:-D"},{"label":"ham","message":"Kinda. First one gets in at twelve! Aah. Speak tomo"},{"label":"spam","message":"09066362231 URGENT! Your mobile No 07xxxxxxxxx won a \u00a32,000 bonus caller prize on 02\/06\/03! this is the 2nd attempt to reach YOU! call 09066362231 ASAP!"},{"label":"ham","message":"Ok good then i later come find \u00fc... C lucky i told \u00fc to go earlier... Later pple take finish \u00fc no more again..."},{"label":"ham","message":"Wat makes u thk i'll fall down. But actually i thk i'm quite prone 2 falls. Lucky my dad at home i ask him come n fetch me already."},{"label":"spam","message":"YOU 07801543489 are guaranteed the latests Nokia Phone, a 40GB iPod MP3 player or a \u00a3500 prize! Txt word:COLLECT to No:83355! TC-LLC NY-USA 150p\/Mt msgrcvd18+"},{"label":"ham","message":"Your account has been refilled successfully by INR <DECIMAL> . Your KeralaCircle prepaid account balance is Rs <DECIMAL> . Your Transaction ID is KR <#> ."},{"label":"ham","message":"I wont touch you with out your permission."},{"label":"spam","message":"Hi its LUCY Hubby at meetins all day Fri & I will B alone at hotel U fancy cumin over? Pls leave msg 2day 09099726395 Lucy x Calls\u00a31\/minMobsmoreLKPOBOX177HP51FL"},{"label":"ham","message":"7 wonders in My WORLD 7th You 6th Ur style 5th Ur smile 4th Ur Personality 3rd Ur Nature 2nd Ur SMS and 1st \"Ur Lovely Friendship\"... good morning dear"},{"label":"ham","message":"Take some small dose tablet for fever"},{"label":"ham","message":"Oh. U must have taken your REAL Valentine out shopping first."},{"label":"ham","message":"Just sent you an email \u2013 to an address with incomm in it, is that right?"},{"label":"ham","message":"Will do, you gonna be at blake's all night? I might be able to get out of here a little early"},{"label":"ham","message":"Friendship is not a game to play, It is not a word to say, It doesn\\'t start on March and ends on May, It is tomorrow, yesterday, today and e"},{"label":"ham","message":"Nice. Wait...should you be texting right now? I'm not gonna pay your ticket, ya know!"},{"label":"ham","message":"I'm watching lotr w my sis dis aft. So u wan 2 meet me 4 dinner at nite a not?"},{"label":"ham","message":"Why you keeping me away like this"},{"label":"ham","message":"I think its far more than that but find out. Check google maps for a place from your dorm."},{"label":"ham","message":"My trip was ok but quite tiring lor. Uni starts today but it's ok 4 me cos i'm not taking any modules but jus concentrating on my final yr project."},{"label":"ham","message":"Have you always been saying welp?"},{"label":"ham","message":"I'm a guy, browsin is compulsory"},{"label":"ham","message":"Ok..."},{"label":"ham","message":"Purity of friendship between two is not about smiling after reading the forwarded message..Its about smiling just by seeing the name. Gud evng musthu"},{"label":"ham","message":"Sorry, I'll call later"},{"label":"ham","message":"(I should add that I don't really care and if you can't I can at least get this dude to fuck off but hey, your money if you want it)"},{"label":"ham","message":"Hello lover! How goes that new job? Are you there now? Are you happy? Do you think of me? I wake, my slave and send you a teasing kiss from across the sea"},{"label":"ham","message":"I told your number to gaut.."},{"label":"ham","message":"Tell them no need to investigate about me anywhere."},{"label":"ham","message":"Ok i juz receive.."},{"label":"ham","message":"Cant believe i said so many things to you this morning when all i really wanted to say was good morning, i love you! Have a beautiful morning. See you in the library later."},{"label":"spam","message":"Your account has been credited with 500 FREE Text Messages. To activate, just txt the word: CREDIT to No: 80488 T&Cs www.80488.biz"},{"label":"ham","message":"In the end she might still vomit but its okay. Not everything will come out."},{"label":"ham","message":"How are you with moneY...as in to you...money aint a thing....how are you sha!"},{"label":"ham","message":"It has everything to do with the weather. Keep extra warm. Its a cold but nothing serious. Pls lots of vitamin c"},{"label":"ham","message":"Hey gals.. Anyone of u going down to e driving centre tmr?"},{"label":"ham","message":"I'm always on yahoo messenger now. Just send the message to me and i.ll get it you may have to send it in the mobile mode sha but i.ll get it. And will reply."},{"label":"ham","message":"I'm putting it on now. It should be ready for <TIME>"},{"label":"ham","message":"Time n Smile r the two crucial things in our life. Sometimes time makes us to forget smile, and sometimes someone's smile makes us to forget time gud noon"},{"label":"spam","message":"SMS. ac JSco: Energy is high, but u may not know where 2channel it. 2day ur leadership skills r strong. Psychic? Reply ANS w\/question. End? Reply END JSCO"},{"label":"ham","message":"Host-based IDPS for linux systems."},{"label":"spam","message":"HOT LIVE FANTASIES call now 08707509020 Just 20p per min NTT Ltd, PO Box 1327 Croydon CR9 5WB 0870 is a national rate call"},{"label":"ham","message":"Don no da:)whats you plan?"},{"label":"ham","message":"Ill be there on <#> ok."},{"label":"ham","message":"Oh my God. I'm almost home"},{"label":"ham","message":"Total video converter free download type this in google search:)"},{"label":"spam","message":"Thanks for the Vote. Now sing along with the stars with Karaoke on your mobile. For a FREE link just reply with SING now."},{"label":"ham","message":"Wen ur lovable bcums angry wid u, dnt take it seriously.. Coz being angry is d most childish n true way of showing deep affection, care n luv!.. kettoda manda... Have nice day da."},{"label":"ham","message":"Sounds like something that someone testing me would sayy"},{"label":"ham","message":"When u love someone Dont make them to love u as much as u do. But Love them so much that they dont want to be loved by anyone except you... Gud nit."},{"label":"ham","message":"Pete,is this your phone still? Its Jenny from college and Leanne.what are you up to now?:)"},{"label":"ham","message":"Oops sorry. Just to check that you don't mind picking me up tomo at half eight from station. Would that be ok?"},{"label":"ham","message":"Hey sweet, I was wondering when you had a moment if you might come to me ? I want to send a file to someone but it won't go over yahoo for them because their connection sucks, remember when you set up that page for me to go to and download the format disc ? Could you tell me how to do that ? Or do you know some other way to download big files ? Because they can download stuff directly from the internet. Any help would be great, my prey ... *teasing kiss*"},{"label":"ham","message":"Hows the cp just leaving glasgow!"},{"label":"ham","message":"K:)all the best:)congrats..."},{"label":"ham","message":"I wonder if you'll get this text?"},{"label":"ham","message":"I need to come home and give you some good lovin..."},{"label":"spam","message":"Our brand new mobile music service is now live. The free music player will arrive shortly. Just install on your phone to browse content from the top artists."},{"label":"ham","message":"Shall i ask one thing if you dont mistake me."},{"label":"ham","message":"Check wid corect speling i.e. Sarcasm"},{"label":"spam","message":"URGENT! Your Mobile No was awarded a \u00a32,000 Bonus Caller Prize on 1\/08\/03! This is our 2nd attempt to contact YOU! Call 0871-4719-523 BOX95QU BT National Rate"},{"label":"ham","message":"Are you angry with me. What happen dear"},{"label":"ham","message":"I thk u dun haf 2 hint in e forum already lor... Cos i told ron n darren is going 2 tell shuhui."},{"label":"ham","message":"Yup ok thanx..."},{"label":"ham","message":"Hi:)cts employee how are you?"},{"label":"ham","message":"Pls pls find out from aunt nike."},{"label":"ham","message":"Wow ... I love you sooo much, you know ? I can barely stand it ! I wonder how your day goes and if you are well, my love ... I think of you and miss you"},{"label":"ham","message":"No screaming means shouting.."},{"label":"ham","message":"Hey what happen de. Are you alright."},{"label":"ham","message":"Should I have picked up a receipt or something earlier"},{"label":"ham","message":"I think chennai well settled?"},{"label":"ham","message":"Oh dang! I didn't mean o send that to you! Lol!"},{"label":"ham","message":"Unfortunately i've just found out that we have to pick my sister up from the airport that evening so don't think i'll be going out at all. We should try to go out one of th"},{"label":"ham","message":"Horrible bf... I now v hungry..."},{"label":"ham","message":"Remember on that day.."},{"label":"spam","message":"You have won a Nokia 7250i. This is what you get when you win our FREE auction. To take part send Nokia to 86021 now. HG\/Suite342\/2Lands Row\/W1JHL 16+"},{"label":"ham","message":"How's it feel? Mr. Your not my real Valentine just my yo Valentine even tho u hardly play!!"},{"label":"ham","message":"All sounds good. Fingers . Makes it difficult to type"},{"label":"ham","message":"Midnight at the earliest"},{"label":"ham","message":"You're not sure that I'm not trying to make xavier smoke because I don't want to smoke after being told I smoke too much?"},{"label":"ham","message":"K come to nordstrom when you're done"},{"label":"ham","message":"Do u konw waht is rael FRIENDSHIP Im gving yuo an exmpel: Jsut ese tihs msg.. Evrey splleing of tihs msg is wrnog.. Bt sitll yuo can raed it wihtuot ayn mitsake.. GOODNIGHT & HAVE A NICE SLEEP..SWEET DREAMS.."},{"label":"ham","message":"Now press conference da:)"},{"label":"spam","message":"Hello from Orange. For 1 month's free access to games, news and sport, plus 10 free texts and 20 photo messages, reply YES. Terms apply: www.orange.co.uk\/ow"},{"label":"ham","message":"After completed degree. There is no use in joining finance."},{"label":"ham","message":"Good afternoon, my love ! Any job prospects ? Are you missing me ? What do you do ? Are you being lazy and bleak, hmmm ? Or happy and filled with my love ?"},{"label":"ham","message":"Shant disturb u anymore... Jia you..."},{"label":"ham","message":"Bishan lar nearer... No need buy so early cos if buy now i gotta park my car..."},{"label":"ham","message":"Me, i dont know again oh"},{"label":"ham","message":"Dude sux for snake. He got old and raiden got buff"},{"label":"ham","message":"He says hi and to get your ass back to south tampa (preferably at a kegger)"},{"label":"ham","message":"In e msg jus now. U said thanks for gift."},{"label":"ham","message":"U too..."},{"label":"ham","message":"Ok how you dear. Did you call chechi"},{"label":"ham","message":"Yeah we do totes. When u wanna?"},{"label":"ham","message":"Ok i found dis pierre cardin one which looks normal costs 20 its on sale."},{"label":"ham","message":"Good sleep is about rhythm. The person has to establish a rhythm that the body will learn and use. If you want to know more :-)"},{"label":"ham","message":"Wat r u doing?"},{"label":"ham","message":"Message from . I am at Truro Hospital on ext. You can phone me here. as I have a phone by my side"},{"label":"ham","message":"Single line with a big meaning::::: \"Miss anything 4 ur \"Best Life\" but, don't miss ur best life for anything... Gud nyt..."},{"label":"ham","message":"Just got some gas money, any chance you and the gang want to go on a grand nature adventure?"},{"label":"ham","message":"Dnt worry...use ice pieces in a cloth pack.also take 2 tablets."},{"label":"ham","message":"Dude just saw a parked car with its sunroof popped up. Sux"},{"label":"ham","message":"Get ready to put on your excellent sub face :)"},{"label":"ham","message":"Tmrw. Im finishing 9 doors"},{"label":"ham","message":"The <#> g that i saw a few days ago, the guy wants sell wifi only for <#> and with 3g for <#> . That's why i blanked him."},{"label":"ham","message":"I am late. I will be there at"},{"label":"ham","message":"whatever, im pretty pissed off."},{"label":"ham","message":"Today is ACCEPT DAY..U Accept me as? Brother Sister Lover Dear1 Best1 Clos1 Lvblefrnd Jstfrnd Cutefrnd Lifpartnr Belovd Swtheart Bstfrnd No rply means enemy"},{"label":"ham","message":"I dont have that much image in class."},{"label":"ham","message":"No:-)i got rumour that you going to buy apartment in chennai:-)"},{"label":"ham","message":"Near kalainar tv office.thenampet"},{"label":"spam","message":"Ur cash-balance is currently 500 pounds - to maximize ur cash-in now send GO to 86688 only 150p\/msg. CC 08718720201 HG\/Suite342\/2Lands Row\/W1J6HL"},{"label":"spam","message":"SMS AUCTION - A BRAND NEW Nokia 7250 is up 4 auction today! Auction is FREE 2 join & take part! Txt NOKIA to 86021 now! HG\/Suite342\/2Lands Row\/W1J6HL"},{"label":"ham","message":"My sis is catching e show in e afternoon so i'm not watching w her. So c u wan 2 watch today or tmr lor."},{"label":"ham","message":"Sounds gd... Haha... Can... Wah, u yan jiu so fast liao..."},{"label":"ham","message":"No. To be nosy I guess. Idk am I over reacting if I'm freaked?"},{"label":"ham","message":"Remember all those whom i hurt during days of satanic imposter in me.need to pay a price,so be it.may destiny keep me going and as u said pray that i get the mind to get over the same."},{"label":"ham","message":"How to Make a girl Happy? It's not at all difficult to make girls happy. U only need to be... 1. A friend 2. Companion 3. Lover 4. Chef . . . <#> . Good listener <#> . Organizer <#> . Good boyfriend <#> . Very clean <#> . Sympathetic <#> . Athletic <#> . Warm . . . <#> . Courageous <#> . Determined <#> . True <#> . Dependable <#> . Intelligent . . . <#> . Psychologist <#> . Pest exterminator <#> . Psychiatrist <#> . Healer . . <#> . Stylist <#> . Driver . . Aaniye pudunga venaam.."},{"label":"ham","message":"Why is that, princess? I bet the brothas are all chasing you!"},{"label":"ham","message":"I shall book chez jules for half eight, if that's ok with you?"},{"label":"ham","message":"Hhahhaahahah rofl wtf nig was leonardo in your room or something"},{"label":"ham","message":"Yep, at derek's house now, see you Sunday <3"},{"label":"ham","message":"It's cool, let me know before it kicks off around <#> , I'll be out and about all day"},{"label":"ham","message":"Sorry, I'll call later"},{"label":"ham","message":"I was wondering if it would be okay for you to call uncle john and let him know that things are not the same in nigeria as they r here. That <#> dollars is 2years sent and that you know its a strain but i plan to pay back every dime he gives. Every dime so for me to expect anything from you is not practical. Something like that."},{"label":"ham","message":"There are no other charges after transfer charges and you can withdraw anyhow you like"},{"label":"ham","message":"Dont search love, let love find U. Thats why its called falling in love, bcoz U dont force yourself, U just fall and U know there is smeone to hold U... BSLVYL"},{"label":"ham","message":"At 4. Let's go to bill millers"},{"label":"ham","message":"I love you. You set my soul on fire. It is not just a spark. But it is a flame. A big rawring flame. XoXo"},{"label":"ham","message":"Somewhr someone is surely made 4 u. And God has decided a perfect time to make u meet dat person. . . . till den, . . . . . Enjoy ur crushes..!!!;-)"},{"label":"ham","message":"That's my honeymoon outfit. :)"},{"label":"ham","message":"Will it help if we propose going back again tomorrow"},{"label":"spam","message":"PRIVATE! Your 2003 Account Statement for shows 800 un-redeemed S. I. M. points. Call 08719899230 Identifier Code: 41685 Expires 07\/11\/04"},{"label":"ham","message":"Never blame a day in ur life. Good days give u happiness. Bad days give u experience. Both are essential in life! All are Gods blessings! good morning.:"},{"label":"ham","message":"Pls confirm the time to collect the cheque."},{"label":"spam","message":"As a Registered Subscriber yr draw 4 a \u00a3100 gift voucher will b entered on receipt of a correct ans. When are the next olympics. Txt ans to 80062"},{"label":"spam","message":"URGENT! Your Mobile number has been awarded with a \u00a32000 prize GUARANTEED. Call 09061790121 from land line. Claim 3030. Valid 12hrs only 150ppm"},{"label":"ham","message":"Daddy will take good care of you :)"},{"label":"ham","message":"Yeah probably, I still gotta check out with leo"},{"label":"ham","message":"K.then any other special?"},{"label":"ham","message":"Carlos is taking his sweet time as usual so let me know when you and patty are done\/want to smoke and I'll tell him to haul ass"},{"label":"ham","message":"Ok pa. Nothing problem:-)"},{"label":"ham","message":"Have you heard about that job? I'm going to that wildlife talk again tonight if u want2come. Its that2worzels and a wizzle or whatever it is?!"},{"label":"ham","message":"God picked up a flower and dippeditinaDEW, lovingly touched itwhichturnedinto u, and the he gifted tomeandsaid,THIS FRIEND IS 4U"},{"label":"ham","message":"When you came to hostel."},{"label":"ham","message":"Ok no prob... I'll come after lunch then..."},{"label":"ham","message":"Jus telling u dat i'll b leaving 4 shanghai on 21st instead so we'll haf more time 2 meet up cya..."},{"label":"ham","message":"Are your freezing ? Are you home yet ? Will you remember to kiss your mom in the morning? Do you love me ? Do you think of me ? Are you missing me yet ?"},{"label":"ham","message":"You all ready for * big day tomorrow?"},{"label":"ham","message":"I'll probably be around mu a lot"},{"label":"ham","message":"645"},{"label":"spam","message":"RT-KIng Pro Video Club>> Need help? info@ringtoneking.co.uk or call 08701237397 You must be 16+ Club credits redeemable at www.ringtoneking.co.uk! Enjoy!"},{"label":"ham","message":"Thnx dude. u guys out 2nite?"},{"label":"ham","message":"Me sef dey laugh you. Meanwhile how's my darling anjie!"},{"label":"ham","message":"Mm i had my food da from out"},{"label":"ham","message":"K, makes sense, btw carlos is being difficult so you guys are gonna smoke while I go pick up the second batch and get gas"},{"label":"ham","message":"Did u download the fring app?"},{"label":"ham","message":"The 2 oz guy is being kinda flaky but one friend is interested in picking up $ <#> worth tonight if possible"},{"label":"ham","message":"Friends that u can stay on fb chat with"},{"label":"ham","message":"Fuck babe, I miss you sooooo much !! I wish you were here to sleep with me ... My bed is so lonely ... I go now, to sleep ... To dream of you, my love ..."},{"label":"ham","message":"Living is very simple.. Loving is also simple.. Laughing is too simple.. Winning is tooo simple.. But, being 'SIMPLE' is very difficult.. Gud nte.:-"},{"label":"spam","message":"U have a secret admirer who is looking 2 make contact with U-find out who they R*reveal who thinks UR so special-call on 09058094599"},{"label":"ham","message":"Ah, well that confuses things, doesn\u2018t it?"},{"label":"spam","message":"500 free text msgs. Just text ok to 80488 and we'll credit your account"},{"label":"ham","message":"Hi Dear Call me its urgnt. I don't know whats your problem. You don't want to work or if you have any other problem at least tell me. Wating for your reply."},{"label":"ham","message":"Dear how you. Are you ok?"},{"label":"spam","message":"You have been selected to stay in 1 of 250 top British hotels - FOR NOTHING! Holiday Worth \u00a3350! To Claim, Call London 02072069400. Bx 526, SW73SS"},{"label":"ham","message":"Yes princess! I want to make you happy..."},{"label":"ham","message":"Sounds like you have many talents! would you like to go on a dinner date next week?"},{"label":"ham","message":"I am going to film 2day da. At 6pm. Sorry da."},{"label":"ham","message":"We not watching movie already. Xy wants 2 shop so i'm shopping w her now."},{"label":"ham","message":"Hello my little party animal! I just thought I'd buzz you as you were with your friends ...*grins*... Reminding you were loved and send a naughty adoring kiss"},{"label":"ham","message":"Yesterday its with me only . Now am going home."},{"label":"spam","message":"Eerie Nokia tones 4u, rply TONE TITLE to 8007 eg TONE DRACULA to 8007 Titles: GHOST, ADDAMSFA, MUNSTERS, EXORCIST, TWILIGHT www.getzed.co.uk POBox36504W45WQ 150p"},{"label":"ham","message":"You have come into my life and brought the sun ..Shiny down on me, warming my heart. Putting a constant smile on my face ... Making me feel loved and cared for"},{"label":"ham","message":"No shit, but I wasn't that surprised, so I went and spent the evening with that french guy I met in town here and we fooled around a bit but I didn't let him fuck me"},{"label":"spam","message":"0A$NETWORKS allow companies to bill for SMS, so they are responsible for their \"suppliers\", just as a shop has to give a guarantee on what they sell. B. G."},{"label":"ham","message":"Great comedy..cant stop laughing da:)"},{"label":"spam","message":"FreeMsg:Feelin kinda lnly hope u like 2 keep me company! Jst got a cam moby wanna c my pic?Txt or reply DATE to 82242 Msg150p 2rcv Hlp 08712317606 stop to 82242"},{"label":"ham","message":"Alright, we're all set here, text the man"},{"label":"ham","message":"Hi , where are you? We're at and they're not keen to go out i kind of am but feel i shouldn't so can we go out tomo, don't mind do you?"},{"label":"ham","message":"Sleeping nt feeling well"},{"label":"ham","message":"U WILL SWITCH YOUR FONE ON DAMMIT!!"},{"label":"ham","message":"India have to take lead:)"},{"label":"ham","message":"I.ll post her out l8r. In class"},{"label":"ham","message":"Thts wat Wright Brother did to fly.."},{"label":"ham","message":"Evening * v good if somewhat event laden. Will fill you in, don't you worry \u2026 Head * ok but throat * wrecked. See you at six then!"},{"label":"ham","message":"If u laugh really loud.. If u talk spontaneously.. If u dont care what others feel.. U are probably with your dear & best friends.. GOODEVENING Dear..:)"},{"label":"ham","message":"ITS A LAPTOP TAKE IT WITH YOU."},{"label":"ham","message":"I dont have any of your file in my bag..i was in work when you called me.i 'll tell you if i find anything in my room."},{"label":"ham","message":"I wan but too early lei... Me outside now wun b home so early... Neva mind then..."},{"label":"spam","message":"For ur chance to win a \u00a3250 cash every wk TXT: ACTION to 80608. T's&C's www.movietrivia.tv custcare 08712405022, 1x150p\/wk"},{"label":"ham","message":"I was at bugis juz now wat... But now i'm walking home oredi... \u00dc so late then reply... I oso saw a top dat i like but din buy... Where r \u00fc now?"},{"label":"ham","message":"Wishing you and your family Merry \"X\" mas and HAPPY NEW Year in advance.."},{"label":"ham","message":"At 7 we will go ok na."},{"label":"ham","message":"Yes I posted a couple of pics on fb. There's still snow outside too. I'm just waking up :)"},{"label":"ham","message":"S:-)if we have one good partnership going we will take lead:)"},{"label":"spam","message":"RGENT! This is the 2nd attempt to contact U!U have WON \u00a31250 CALL 09071512433 b4 050703 T&CsBCM4235WC1N3XX. callcost 150ppm mobilesvary. max\u00a37. 50"},{"label":"ham","message":"Yeah, where's your class at?"},{"label":"ham","message":"No just send to you. Bec you in temple na."},{"label":"ham","message":"You aren't coming home between class, right? I need to work out and shower!"},{"label":"spam","message":"Hi if ur lookin 4 saucy daytime fun wiv busty married woman Am free all next week Chat now 2 sort time 09099726429 JANINExx Calls\u00a31\/minMobsmoreLKPOBOX177HP51FL"},{"label":"ham","message":"S but mostly not like that."},{"label":"ham","message":"\u00dc v ma fan..."},{"label":"ham","message":"Dunno cos i was v late n when i reach they inside already... But we ate spageddies lor... It's e gals who r laughing at me lor..."},{"label":"ham","message":"Guess who spent all last night phasing in and out of the fourth dimension"},{"label":"ham","message":"So now my dad is gonna call after he gets out of work and ask all these crazy questions."},{"label":"ham","message":"Yes..but they said its IT.,"},{"label":"ham","message":"Very hurting n meaningful lines ever: \"I compromised everything for my love, But at d end my love compromised me for everything:-(\".. Gud mornin:-)"},{"label":"ham","message":"Lmao!nice 1"},{"label":"ham","message":"Glad to see your reply."},{"label":"spam","message":"URGENT! We are trying to contact U. Todays draw shows that you have won a \u00a3800 prize GUARANTEED. Call 09050001295 from land line. Claim A21. Valid 12hrs only"},{"label":"spam","message":"Monthly password for wap. mobsi.com is 391784. Use your wap phone not PC."},{"label":"ham","message":"Nah dub but je still buff"},{"label":"ham","message":"Painful words- \"I thought being Happy was the most toughest thing on Earth... But, the toughest is acting Happy with all unspoken pain inside..\""},{"label":"ham","message":"Yeah, that's fine! It's \u00a36 to get in, is that ok?"},{"label":"ham","message":"Lol where do u come up with these ideas?"},{"label":"ham","message":"So many people seems to be special at first sight, But only very few will remain special to you till your last sight.. Maintain them till life ends.. Sh!jas"},{"label":"ham","message":"Today is \"song dedicated day..\" Which song will u dedicate for me? Send this to all ur valuable frnds but first rply me..."},{"label":"ham","message":"Okay... We wait ah"},{"label":"ham","message":"Y lei?"},{"label":"ham","message":"HI BABE U R MOST LIKELY TO BE IN BED BUT IM SO SORRY ABOUT TONIGHT! I REALLY WANNA SEE U TOMORROW SO CALL ME AT 9. LOVE ME XXX"},{"label":"ham","message":"Already am squatting is the new way of walking"},{"label":"ham","message":"Do you want bold 2 or bb torch"},{"label":"ham","message":"Cramps stopped. Going back to sleep"},{"label":"spam","message":"todays vodafone numbers ending with 0089(my last four digits) are selected to received a \u00a3350 award. If your number matches please call 09063442151 to claim your \u00a3350 award"},{"label":"spam","message":"Free Top ringtone -sub to weekly ringtone-get 1st week free-send SUBPOLY to 81618-?3 per week-stop sms-08718727870"},{"label":"ham","message":"Nan sonathaya soladha. Why boss?"},{"label":"ham","message":"Bring tat cd don forget"},{"label":"spam","message":"Sunshine Quiz Wkly Q! Win a top Sony DVD player if u know which country the Algarve is in? Txt ansr to 82277. \u00a31.50 SP:Tyrone"},{"label":"ham","message":"I don't know but I'm raping dudes at poker"},{"label":"ham","message":"Weightloss! No more girl friends. Make loads of money on ebay or something. And give thanks to God."},{"label":"ham","message":"Was gr8 to see that message. So when r u leaving? Congrats dear. What school and wat r ur plans."},{"label":"ham","message":"\u00dc eatin later but i'm eatin wif my frens now lei... \u00dc going home first?"},{"label":"ham","message":"Finish already... Yar they keep saying i mushy... I so embarrassed ok..."},{"label":"ham","message":"Sorry man, my stash ran dry last night and I can't pick up more until sunday"},{"label":"ham","message":"Hai priya are you right. What doctor said pa. Where are you."},{"label":"spam","message":"Free msg. Sorry, a service you ordered from 81303 could not be delivered as you do not have sufficient credit. Please top up to receive the service."},{"label":"ham","message":"Ok..."},{"label":"ham","message":"Please ask mummy to call father"},{"label":"ham","message":"Can come my room but cannot come my house cos my house still messy... Haha..."},{"label":"ham","message":"I have lost 10 kilos as of today!"},{"label":"ham","message":"Just taste fish curry :-P"},{"label":"ham","message":"What can i do? Might accidant tookplace between somewhere ghodbandar rd. Traffic moves slovely. So plz slip & don't worry."},{"label":"ham","message":"Yun ah.now \u00fc wkg where?btw if \u00fc go nus sc. \u00dc wana specialise in wad?"},{"label":"ham","message":"Yes! I am a one woman man! Please tell me your likes and dislikes in bed..."},{"label":"ham","message":"Was doing my test earlier. I appreciate you. Will call you tomorrow."},{"label":"ham","message":"How's my loverboy doing ? What does he do that keeps him from coming to his Queen, hmmm ? Doesn't he ache to speak to me ? Miss me desparately ?"},{"label":"ham","message":"U meet other fren dun wan meet me ah... Muz b a guy rite..."},{"label":"ham","message":"(No promises on when though, haven't even gotten dinner yet)"},{"label":"ham","message":"I got your back! Do you have any dislikes in bed?"},{"label":"ham","message":"o turns out i had stereo love on mi phone under the unknown album."},{"label":"spam","message":"Hard LIVE 121 chat just 60p\/min. Choose your girl and connect LIVE. Call 09094646899 now! Cheap Chat UK's biggest live service. VU BCM1896WC1N3XX"},{"label":"ham","message":"Yeah I don't see why not"},{"label":"ham","message":"Asking do u knw them or nt? May be ur frnds or classmates?"},{"label":"ham","message":"Sorry about earlier. Putting out fires.Are you around to talk after 9? Or do you actually have a life, lol!"},{"label":"spam","message":"WOW! The Boys R Back. TAKE THAT 2007 UK Tour. Win VIP Tickets & pre-book with VIP Club. Txt CLUB to 81303. Trackmarque Ltd info@vipclub4u."},{"label":"ham","message":"As in missionary hook up, doggy hook up, standing...|"},{"label":"ham","message":"Then u better go sleep.. Dun disturb u liao.. U wake up then msg me lor.."},{"label":"ham","message":"Fighting with the world is easy, u either win or lose bt fightng with some1 who is close to u is dificult if u lose - u lose if u win - u still lose."},{"label":"ham","message":"Am watching house \u2013 very entertaining \u2013 am getting the whole hugh laurie thing \u2013 even with the stick \u2013 indeed especially with the stick."},{"label":"ham","message":"Thought praps you meant another one. Goodo! I'll look tomorrow"},{"label":"ham","message":"Hi Jon, Pete here, Ive bin 2 Spain recently & hav sum dinero left, Bill said u or ur \u0091rents mayb interested in it, I hav 12,000pes, so around \u00a348, tb, James."},{"label":"ham","message":"There bold 2 <#> . Is that yours"},{"label":"ham","message":"You know there is. I shall speak to you in <#> minutes then"},{"label":"ham","message":"\"ALRITE HUNNY!WOT U UP 2 2NITE? DIDNT END UP GOIN DOWN TOWN JUS DA PUB INSTEAD! JUS CHILLIN AT DA MO IN ME BEDROOM!LOVE JEN XXX.\""},{"label":"ham","message":"I went to project centre"},{"label":"ham","message":"As per your request 'Maangalyam (Alaipayuthe)' has been set as your callertune for all Callers. Press *9 to copy your friends Callertune"},{"label":"ham","message":"Lol yeah at this point I guess not"},{"label":"ham","message":"Doing project w frens lor."},{"label":"ham","message":"Lol. Well quality aint bad at all so i aint complaining"},{"label":"ham","message":"K, can that happen tonight?"},{"label":"spam","message":"Hi, this is Mandy Sullivan calling from HOTMIX FM...you are chosen to receive \u00a35000.00 in our Easter Prize draw.....Please telephone 09041940223 to claim before 29\/03\/05 or your prize will be transferred to someone else...."},{"label":"ham","message":"I think we're going to finn's now, come"},{"label":"ham","message":"Why tired what special there you had"},{"label":"ham","message":"I will come tomorrow di"},{"label":"ham","message":"I cant pick the phone right now. Pls send a message"},{"label":"ham","message":"K go and sleep well. Take rest:-)."},{"label":"ham","message":"U guys never invite me anywhere :("},{"label":"spam","message":"UR GOING 2 BAHAMAS! CallFREEFONE 08081560665 and speak to a live operator to claim either Bahamas cruise of\u00a32000 CASH 18+only. To opt out txt X to 07786200117"},{"label":"ham","message":"I can do that! I want to please you both inside and outside the bedroom..."},{"label":"ham","message":"\"EY! CALM DOWNON THEACUSATIONS.. ITXT U COS IWANA KNOW WOTU R DOIN AT THEW\/END... HAVENTCN U IN AGES..RING ME IF UR UP4 NETHING SAT.LOVE J XXX.\""},{"label":"ham","message":"I love to wine and dine my lady!"},{"label":"spam","message":"Someone has conacted our dating service and entered your phone because they fancy you!To find out who it is call from landline 09111030116. PoBox12n146tf15"},{"label":"ham","message":"I\u0092m cool ta luv but v.tired 2 cause i have been doin loads of planning all wk, we have got our social services inspection at the nursery! Take care & spk sn x."},{"label":"ham","message":"I don know account details..i will ask my mom and send you.my mom is out of reach now."},{"label":"ham","message":"I think u have the wrong number."},{"label":"ham","message":"Feel Yourself That You Are Always Happy.. Slowly It Becomes Your Habit & Finally It Becomes Part Of Your Life.. Follow It.. Happy Morning & Have A Happy Day:)"},{"label":"ham","message":"DO NOT B LATE LOVE MUM"},{"label":"ham","message":"Got it..mail panren paru.."},{"label":"ham","message":"* Was thinking about chuckin ur red green n black trainners 2 save carryin them bac on train"},{"label":"ham","message":"Give one miss from that number please"},{"label":"ham","message":"Jus came back fr lunch wif my sis only. U leh?"},{"label":"ham","message":"How is your schedule next week? I am out of town this weekend."},{"label":"ham","message":"Really good:)dhanush rocks once again:)"},{"label":"ham","message":"Lmao ok I wont be needing u to do my hair anymore."},{"label":"ham","message":"Miss ya, need ya, want ya, love ya."},{"label":"ham","message":"Sorry i'm not free..."},{"label":"ham","message":"Do u ever get a song stuck in your head for no reason and it won't go away til u listen to it like 5 times?"},{"label":"ham","message":"Nt yet chikku..simple habba..hw abt u?"},{"label":"ham","message":"Got ur mail Dileep.thank you so muchand look forward to lots of support...very less contacts here,remember one venugopal you mentioned.tomorrow if not late,i shall try to come up till there.goodnight dear."},{"label":"ham","message":"Sometimes Heart Remembrs someone Very much... Forgets someone soon... Bcoz Heart will not like everyone. But liked ones will be Remembered Everytime... BSLVYL"},{"label":"ham","message":"Joy's father is John. Then John is the NAME of Joy's father. Mandan"},{"label":"spam","message":"Hi 07734396839 IBH Customer Loyalty Offer: The NEW NOKIA6600 Mobile from ONLY \u00a310 at TXTAUCTION!Txt word:START to No:81151 & get Yours Now!4T&"},{"label":"ham","message":"Hi this is yijue... It's regarding the 3230 textbook it's intro to algorithms second edition... I'm selling it for $50..."},{"label":"spam","message":"SMS AUCTION You have won a Nokia 7250i. This is what you get when you win our FREE auction. To take part send Nokia to 86021 now. HG\/Suite342\/2Lands Row\/W1JHL 16+"},{"label":"ham","message":"K, want us to come by now?"},{"label":"ham","message":"How. Its a little difficult but its a simple way to enter this place"},{"label":"ham","message":"Ha... Both of us doing e same thing. But i got tv 2 watch. U can thk of where 2 go tonight or u already haf smth in mind..."},{"label":"ham","message":"Dont show yourself. How far. Put new pictures up on facebook."},{"label":"ham","message":"Watching tv now. I got new job :)"},{"label":"ham","message":"Good afternoon sexy buns! How goes the job search ? I wake and you are my first thought as always, my love. I wish your fine and happy and know I adore you!"},{"label":"ham","message":"I'm not coming over, do whatever you want"},{"label":"ham","message":"Its ok chikku, and its my 1 of favourite song..:-)"},{"label":"ham","message":"Did u see what I posted on your Facebook?"},{"label":"spam","message":"Call FREEPHONE 0800 542 0578 now!"},{"label":"spam","message":"Buy Space Invaders 4 a chance 2 win orig Arcade Game console. Press 0 for Games Arcade (std WAP charge) See o2.co.uk\/games 4 Terms + settings. No purchase"},{"label":"ham","message":"7 wonders in My WORLD 7th You 6th Ur style 5th Ur smile 4th Ur Personality 3rd Ur Nature 2nd Ur SMS and 1st \"Ur Lovely Friendship\"... good morning dear"},{"label":"spam","message":"Loan for any purpose \u00a3500 - \u00a375,000. Homeowners + Tenants welcome. Have you been previously refused? We can still help. Call Free 0800 1956669 or text back 'help'"},{"label":"spam","message":"BIG BROTHER ALERT! The computer has selected u for 10k cash or #150 voucher. Call 09064018838. NTT PO Box CRO1327 18+ BT Landline Cost 150ppm mobiles vary"},{"label":"ham","message":";-( oh well, c u later"},{"label":"ham","message":"My uncles in Atlanta. Wish you guys a great semester."},{"label":"ham","message":"No dear i do have free messages without any recharge. Hi hi hi"},{"label":"ham","message":"Dont search love, let love find U. Thats why its called falling in love, bcoz U dont force yourself, U just fall and U know there is smeone to hold U... BSLVYL"},{"label":"ham","message":"I dun believe u. I thk u told him."},{"label":"ham","message":"Do you know why god created gap between your fingers..? So that, One who is made for you comes & fills those gaps by holding your hand with LOVE..!"},{"label":"ham","message":"Yes:)sura in sun tv.:)lol."},{"label":"ham","message":"Arun can u transfr me d amt"},{"label":"ham","message":"Takin a shower now but yeah I'll leave when I'm done"},{"label":"ham","message":"Am not working but am up to eyes in philosophy so will text u later when a bit more free for chat..."},{"label":"ham","message":"U haven\u0092t lost me ill always b here 4u.i didn\u0092t intend 2 hurt u but I never knew how u felt about me when Iwas+marine&that\u0092s what itried2tell urmom.i careabout u"},{"label":"spam","message":"WIN: We have a winner! Mr. T. Foley won an iPod! More exciting prizes soon, so keep an eye on ur mobile or visit www.win-82050.co.uk"},{"label":"ham","message":"You bad girl. I can still remember them"},{"label":"ham","message":"How much i gave to you. Morning."},{"label":"ham","message":"I hope your alright babe? I worry that you might have felt a bit desparate when you learned the job was a fake ? I am here waiting when you come back, my love"},{"label":"ham","message":"Hey, can you tell me blake's address? Carlos wanted me to meet him there but I got lost and he's not answering his phone"},{"label":"ham","message":"Can i get your opinion on something first?"},{"label":"ham","message":"That one week leave i put know that time. Why."},{"label":"ham","message":"If we hit it off, you can move in with me :)"},{"label":"ham","message":"excellent. I spent <#> years in the Air Force. Iraq and afghanistan. I am stable and honest. do you like traveling?"},{"label":"ham","message":"I wanna watch that movie"},{"label":"ham","message":"Ok lor thanx... \u00dc in school?"},{"label":"ham","message":"I'm in class. Did you get my text."},{"label":"ham","message":"The bus leaves at <#>"},{"label":"ham","message":"God bless.get good sleep my dear...i will pray!"},{"label":"spam","message":"Todays Voda numbers ending 1225 are selected to receive a \u00a350award. If you have a match please call 08712300220 quoting claim code 3100 standard rates app"},{"label":"ham","message":"Do have a nice day today. I love you so dearly."},{"label":"ham","message":"Aiyo a bit pai seh \u00fc noe... Scared he dun rem who i am then die... Hee... But he become better lookin oredi leh..."},{"label":"ham","message":"Aight, I'll ask a few of my roommates"},{"label":"ham","message":"Now, whats your house # again ? And do you have any beer there ?"},{"label":"ham","message":"Do \u00fc all wan 2 meet up n combine all the parts? How's da rest of da project going?"},{"label":"ham","message":"\"Getting tickets 4 walsall tue 6 th march. My mate is getting me them on sat. ill pay my treat. Want 2 go. Txt bak .Terry\""},{"label":"ham","message":"Yes we are chatting too."},{"label":"ham","message":"HI ITS JESS I DONT KNOW IF YOU ARE AT WORK BUT CALL ME WHEN U CAN IM AT HOME ALL EVE. XXX"},{"label":"ham","message":"Sian... Aft meeting supervisor got work 2 do liao... U working now?"},{"label":"ham","message":"Are you going to write ccna exam this week??"},{"label":"ham","message":"Well i will watch shrek in 3D!!B)"},{"label":"ham","message":"Am i that much dirty fellow?"},{"label":"ham","message":"Dunno dat's wat he told me. Ok lor..."},{"label":"ham","message":"I'll probably be by tomorrow (or even later tonight if something's going on)"},{"label":"ham","message":"I couldn't say no as he is a dying man and I feel sad for him so I will go and I just wanted you to know I would probably be gone late into your night"},{"label":"ham","message":"If you're thinking of lifting me one then no."},{"label":"ham","message":"Same as u... Dun wan... Y u dun like me already ah... Wat u doing now? Still eating?"},{"label":"ham","message":"Sent me ur email id soon"},{"label":"ham","message":"Wat makes some people dearer is not just de happiness dat u feel when u meet them but de pain u feel when u miss dem!!!"},{"label":"ham","message":"Dude. What's up. How Teresa. Hope you have been okay. When i didnt hear from these people, i called them and they had received the package since dec <#> . Just thot you'ld like to know. Do have a fantastic year and all the best with your reading. Plus if you can really really Bam first aid for Usmle, then your work is done."},{"label":"ham","message":"Hey gorgeous man. My work mobile number is. Have a good one babe. Squishy Mwahs."},{"label":"ham","message":"May i call You later Pls"},{"label":"spam","message":"Hottest pics straight to your phone!! See me getting Wet and Wanting, just for you xx Text PICS to 89555 now! txt costs 150p textoperator g696ga 18 XxX"},{"label":"ham","message":"That's the way you should stay oh."},{"label":"ham","message":"Hello- thanx for taking that call. I got a job! Starts on monday!"},{"label":"ham","message":"What time is ur flight tmr?"},{"label":"ham","message":"When should I come over?"},{"label":"ham","message":"I have a rather prominent bite mark on my right cheek"},{"label":"ham","message":"* Will be september by then!"},{"label":"ham","message":"Are you wet right now?"},{"label":"ham","message":"And how's your husband."},{"label":"spam","message":"Hack Chat. Get backdoor entry into 121 chat rooms at a fraction of the cost. Reply NEO69 or call 09050280520, to subscribe 25p pm. DPS, Bcm box 8027 Ldn, wc1n3xx"},{"label":"ham","message":"Are we doing the norm tomorrow? I finish just a 4.15 cos of st tests. Need to sort library stuff out at some point tomo - got letter from today - access til end march so i better get move on!"},{"label":"ham","message":"Yeah. I got a list with only u and Joanna if I'm feeling really anti social"},{"label":"ham","message":"I am in your office na."},{"label":"ham","message":"\"Are you comingdown later?\""},{"label":"ham","message":"Super da:)good replacement for murali"},{"label":"ham","message":"Da is good good player.why he is unsold."},{"label":"ham","message":"Hi. || Do u want | to join me with sts later? || Meeting them at five. || Call u after class."},{"label":"ham","message":"Its on in engalnd! But telly has decided it won't let me watch it and mia and elliot were kissing! Damn it!"},{"label":"spam","message":"FREE NOKIA Or Motorola with upto 12mths 1\/2price linerental, 500 FREE x-net mins&100txt\/mth FREE B'tooth*. Call Mobileupd8 on 08001950382 or call 2optout\/D3WV"},{"label":"ham","message":"I dont want to hear philosophy. Just say what happen"},{"label":"ham","message":"You got job in wipro:)you will get every thing in life in 2 or 3 years."},{"label":"ham","message":"Then cant get da laptop? My matric card wif \u00fc lei..."},{"label":"ham","message":"Dunno da next show aft 6 is 850. Toa payoh got 650."},{"label":"spam","message":"This is the 2nd time we have tried 2 contact u. U have won the 750 Pound prize. 2 claim is easy, call 08718726970 NOW! Only 10p per min. BT-national-rate"},{"label":"ham","message":"I just made some payments so dont have that much. Sorry. Would you want it fedex or the other way."},{"label":"ham","message":"They did't play one day last year know even though they have very good team.. Like india."},{"label":"ham","message":"K.:)you are the only girl waiting in reception ah?"},{"label":"ham","message":"Say this slowly.? GOD,I LOVE YOU & I NEED YOU,CLEAN MY HEART WITH YOUR BLOOD.Send this to Ten special people & u c miracle tomorrow, do it,pls,pls do it..."},{"label":"ham","message":"I hate when she does this. She turns what should be a fun shopping trip into an annoying day of how everything would look in her house."},{"label":"ham","message":"Sir, i am waiting for your call."},{"label":"ham","message":"What's up. Do you want me to come online?"},{"label":"ham","message":"It could work, we'll reach a consensus at the next meeting"},{"label":"ham","message":"Aiyah then i wait lor. Then u entertain me. Hee..."},{"label":"ham","message":"The last thing i ever wanted to do was hurt you. And i didn't think it would have. You'd laugh, be embarassed, delete the tag and keep going. But as far as i knew, it wasn't even up. The fact that you even felt like i would do it to hurt you shows you really don't know me at all. It was messy wednesday, but it wasn't bad. The problem i have with it is you HAVE the time to clean it, but you choose not to. You skype, you take pictures, you sleep, you want to go out. I don't mind a few things here and there, but when you don't make the bed, when you throw laundry on top of it, when i can't have a friend in the house because i'm embarassed that there's underwear and bras strewn on the bed, pillows on the floor, that's something else. You used to be good about at least making the bed."},{"label":"ham","message":"I'll let you know when it kicks in"},{"label":"ham","message":"You call him now ok i said call him"},{"label":"ham","message":"Call to the number which is available in appointment. And ask to connect the call to waheed fathima."},{"label":"ham","message":"Or \u00fc go buy wif him then i meet \u00fc later can?"},{"label":"ham","message":"Mmmm ... Fuck ... Not fair ! You know my weaknesses ! *grins* *pushes you to your knee's* *exposes my belly and pulls your head to it* Don't forget ... I know yours too *wicked smile*"},{"label":"ham","message":"Today my system sh get ready.all is well and i am also in the deep well"},{"label":"ham","message":"Mom wants to know where you at"},{"label":"ham","message":"Aight, I'll text you when I'm back"},{"label":"ham","message":"Dont know supports ass and srt i thnk. I think ps3 can play through usb too"},{"label":"ham","message":"Oh ok i didnt know what you meant. Yep i am baby jontin"},{"label":"spam","message":"You have WON a guaranteed \u00a31000 cash or a \u00a32000 prize.To claim yr prize call our customer service representative on"},{"label":"spam","message":"Would you like to see my XXX pics they are so hot they were nearly banned in the uk!"},{"label":"spam","message":"HMV BONUS SPECIAL 500 pounds of genuine HMV vouchers to be won. Just answer 4 easy questions. Play Now! Send HMV to 86688 More info:www.100percent-real.com"},{"label":"ham","message":"Watching tv now. I got new job :)"},{"label":"ham","message":"This pen thing is beyond a joke. Wont a Biro do? Don't do a masters as can't do this ever again!"},{"label":"ham","message":"I AM AT A PARTY WITH ALEX NICHOLS"},{"label":"spam","message":"U have a secret admirer who is looking 2 make contact with U-find out who they R*reveal who thinks UR so special-call on 09058094594"},{"label":"ham","message":"Just seeing your missed call my dear brother. Do have a gr8 day."},{"label":"ham","message":"Ok.. \u00dc finishing soon?"},{"label":"ham","message":"Sorry, I can't help you on this."},{"label":"ham","message":"Come to me, slave. Your doing it again ... Going into your shell and unconsciously avoiding me ... You are making me unhappy :-("},{"label":"ham","message":"I love your ass! Do you enjoy doggy style? :)"},{"label":"ham","message":"I think asking for a gym is the excuse for lazy people. I jog."},{"label":"spam","message":"Dear 0776xxxxxxx U've been invited to XCHAT. This is our final attempt to contact u! Txt CHAT to 86688 150p\/MsgrcvdHG\/Suite342\/2Lands\/Row\/W1J6HL LDN 18yrs"},{"label":"spam","message":"Urgent! Please call 09061743811 from landline. Your ABTA complimentary 4* Tenerife Holiday or \u00a35000 cash await collection SAE T&Cs Box 326 CW25WX 150ppm"},{"label":"ham","message":"No. On the way home. So if not for the long dry spell the season would have been over"},{"label":"ham","message":"I gotta collect da car at 6 lei."},{"label":"ham","message":"Ok but knackered. Just came home and went to sleep! Not good at this full time work lark."},{"label":"ham","message":"Probably earlier than that if the station's where I think it is"},{"label":"spam","message":"CALL 09090900040 & LISTEN TO EXTREME DIRTY LIVE CHAT GOING ON IN THE OFFICE RIGHT NOW TOTAL PRIVACY NO ONE KNOWS YOUR [sic] LISTENING 60P MIN 24\/7MP 0870753331018+"},{"label":"ham","message":"Good Morning plz call me sir"},{"label":"spam","message":"FreeMsg Hey U, i just got 1 of these video\/pic fones, reply WILD to this txt & ill send U my pics, hurry up Im so bored at work xxx (18 150p\/rcvd STOP2stop)"},{"label":"ham","message":"Uh, heads up we don't have THAT much left"},{"label":"ham","message":"I tot u outside cos darren say u come shopping. Of course we nice wat. We jus went sim lim look at mp3 player."},{"label":"ham","message":"Aight, sounds good. When do you want me to come down?"},{"label":"ham","message":"Wat would u like 4 ur birthday?"},{"label":"ham","message":"I love working from home :)"},{"label":"ham","message":"And miss vday the parachute and double coins??? U must not know me very well..."},{"label":"ham","message":"Sorry, I'll call later"},{"label":"ham","message":"My sister got placed in birla soft da:-)"},{"label":"spam","message":"Free entry in 2 a weekly comp for a chance to win an ipod. Txt POD to 80182 to get entry (std txt rate) T&C's apply 08452810073 for details 18+"},{"label":"ham","message":"Wah... Okie okie... Muz make use of e unlimited... Haha..."},{"label":"ham","message":"There're some people by mu, I'm at the table by lambda"},{"label":"ham","message":"And stop being an old man. You get to build snowman snow angels and snowball fights."},{"label":"ham","message":"ELLO BABE U OK?"},{"label":"ham","message":"Hello beautiful r u ok? I've kinda ad a row wiv and he walked out the pub?? I wanted a night wiv u Miss u"},{"label":"ham","message":"Then u going ikea str aft dat?"},{"label":"ham","message":"Becoz its <#> jan whn al the post ofice is in holiday so she cn go fr the post ofice...got it duffer"},{"label":"ham","message":"Lol grr my mom is taking forever with my prescription. Pharmacy is like 2 minutes away. Ugh."},{"label":"ham","message":"For real tho this sucks. I can't even cook my whole electricity is out. And I'm hungry."},{"label":"ham","message":"You want to go?"},{"label":"spam","message":"New TEXTBUDDY Chat 2 horny guys in ur area 4 just 25p Free 2 receive Search postcode or at gaytextbuddy.com. TXT ONE name to 89693. 08715500022 rpl Stop 2 cnl"},{"label":"ham","message":"Its not that time of the month nor mid of the time?"},{"label":"ham","message":"Fffff. Can you text kadeem or are you too far gone"},{"label":"ham","message":"We not leaving yet. Ok lor then we go elsewhere n eat. U thk..."},{"label":"ham","message":"Is fujitsu s series lifebook good?"},{"label":"ham","message":"Yar i wanted 2 scold u yest but late already... I where got zhong se qing you? If u ask me b4 he ask me then i'll go out w u all lor. N u still can act so real."},{"label":"ham","message":"Dont know you bring some food"},{"label":"ham","message":"No current and food here. I am alone also"},{"label":"ham","message":"I'll be in sch fr 4-6... I dun haf da book in sch... It's at home..."},{"label":"ham","message":"Hello. They are going to the village pub at 8 so either come here or there accordingly. Ok?"},{"label":"ham","message":"Ok"},{"label":"ham","message":"We don call like <#> times oh. No give us hypertension oh."},{"label":"ham","message":"Dont give a monkeys wot they think and i certainly don't mind. Any friend of mine&all that! Just don't sleep wiv , that wud be annoyin!"},{"label":"ham","message":"Omg it could snow here tonite!"},{"label":"spam","message":"Call from 08702490080 - tells u 2 call 09066358152 to claim \u00a35000 prize. U have 2 enter all ur mobile & personal details @ the prompts. Careful!"},{"label":"spam","message":"Free 1st week entry 2 TEXTPOD 4 a chance 2 win 40GB iPod or \u00a3250 cash every wk. Txt VPOD to 81303 Ts&Cs www.textpod.net custcare 08712405020."},{"label":"ham","message":"Carry on not disturbing both of you"},{"label":"ham","message":"What pa tell me.. I went to bath:-)"},{"label":"ham","message":"Jus finished avatar nigro"},{"label":"ham","message":"R u over scratching it?"},{"label":"ham","message":"Hope you are having a great day."},{"label":"ham","message":"Did either of you have any idea's? Do you know of anyplaces doing something?"},{"label":"ham","message":"My planning usually stops at \"find hella weed, smoke hella weed\""},{"label":"ham","message":"The fact that you're cleaning shows you know why i'm upset. Your priority is constantly \"what i want to do,\" not \"what i need to do.\""},{"label":"ham","message":"Excellent! Are you ready to moan and scream in ecstasy?"},{"label":"spam","message":"More people are dogging in your area now. Call 09090204448 and join like minded guys. Why not arrange 1 yourself. There's 1 this evening. A\u00a31.50 minAPN LS278BB"},{"label":"ham","message":"Dude avatar 3d was imp. At one point i thought there were actually flies in the room and almost tried hittng one as a reflex"},{"label":"spam","message":"WELL DONE! Your 4* Costa Del Sol Holiday or \u00a35000 await collection. Call 09050090044 Now toClaim. SAE, TCs, POBox334, Stockport, SK38xh, Cost\u00a31.50\/pm, Max10mins"},{"label":"ham","message":"K...k:)why cant you come here and search job:)"},{"label":"ham","message":"I got lousy sleep. I kept waking up every 2 hours to see if my cat wanted to come in. I worry about him when its cold :("},{"label":"ham","message":"Yeah, I'll leave in a couple minutes & let you know when I get to mu"},{"label":"ham","message":"Can \u00fc call me at 10:10 to make sure dat i've woken up..."},{"label":"ham","message":"Hey we can go jazz power yoga hip hop kb and yogasana"},{"label":"ham","message":"The battery is for mr adewale my uncle. Aka Egbon"},{"label":"ham","message":"I cant pick the phone right now. Pls send a message"},{"label":"ham","message":"Wait 2 min..stand at bus stop"},{"label":"ham","message":"Oh ic. I thought you meant mary jane."},{"label":"ham","message":"Haha... Really oh no... How? Then will they deduct your lesson tmr?"},{"label":"ham","message":"Nah im goin 2 the wrks with j wot bout u?"},{"label":"ham","message":"Then just eat a shit and wait for ur monkey face bitch.......... U asshole.................."},{"label":"ham","message":"Good night. Am going to sleep."},{"label":"ham","message":"Aight I'll grab something to eat too, text me when you're back at mu"},{"label":"ham","message":"K...k:)why cant you come here and search job:)"},{"label":"ham","message":"Take something for pain. If it moves however to any side in the next 6hrs see a doctor."},{"label":"ham","message":"Lol ... Oh no babe, I wont be sliding into your place after midnight, but thanks for the invite"},{"label":"ham","message":"Howz that persons story"},{"label":"spam","message":"Guess what! Somebody you know secretly fancies you! Wanna find out who it is? Give us a call on 09065394973 from Landline DATEBox1282EssexCM61XN 150p\/min 18"},{"label":"ham","message":"LOL that would be awesome payback."},{"label":"spam","message":"it to 80488. Your 500 free text messages are valid until 31 December 2005."},{"label":"ham","message":"Yes :)it completely in out of form:)clark also utter waste."},{"label":"ham","message":"Honeybee Said: *I'm d Sweetest in d World* God Laughed & Said: *Wait,U Havnt Met d Person Reading This Msg* MORAL: Even GOD Can Crack Jokes! GM+GN+GE+GN:)"},{"label":"ham","message":"Thanks. It was only from tescos but quite nice. All gone now. Speak soon"},{"label":"ham","message":"What's a feathery bowa? Is that something guys have that I don't know about?"},{"label":"ham","message":"Even i cant close my eyes you are in me our vava playing umma :-D"},{"label":"ham","message":"2 laptop... I noe infra but too slow lar... I wan fast one"},{"label":"spam","message":"You have won a guaranteed \u00a3200 award or even \u00a31000 cashto claim UR award call free on 08000407165 (18+) 2 stop getstop on 88222 PHP"},{"label":"ham","message":"Nvm it's ok..."},{"label":"ham","message":"Enjoy ur life. . Good night"},{"label":"ham","message":"Yes but can we meet in town cos will go to gep and then home. You could text at bus stop. And don't worry we'll have finished by march \u2026 ish!"},{"label":"ham","message":"I had askd u a question some hours before. Its answer"},{"label":"ham","message":"Thats cool. Where should i cum? On you or in you? :)"},{"label":"ham","message":"Delhi and chennai still silent."},{"label":"ham","message":"Lol alright i was thinkin that too haha"},{"label":"spam","message":"Reply to win \u00a3100 weekly! Where will the 2006 FIFA World Cup be held? Send STOP to 87239 to end service"},{"label":"ham","message":"No I'm in the same boat. Still here at my moms. Check me out on yo. I'm half naked."},{"label":"ham","message":"Shhhhh nobody is supposed to know!"},{"label":"ham","message":"Sorry, I'll call later"},{"label":"ham","message":"Sorry, I'll call later in meeting any thing related to trade please call Arul. <#>"},{"label":"ham","message":"Hey i will be late... i'm at amk. Need to drink tea or coffee"},{"label":"ham","message":"I wnt to buy a BMW car urgently..its vry urgent.but hv a shortage of <#> Lacs.there is no source to arng dis amt. <#> lacs..thats my prob"},{"label":"spam","message":"Urgent! Please call 09061743810 from landline. Your ABTA complimentary 4* Tenerife Holiday or #5000 cash await collection SAE T&Cs Box 326 CW25WX 150 ppm"},{"label":"ham","message":"The length is e same but e top shorter n i got a fringe now. I thk i'm not going liao. Too lazy. Dun wan 2 distract u also."},{"label":"ham","message":"S..antha num corrct dane"},{"label":"ham","message":"No calls..messages..missed calls"},{"label":"ham","message":"Sorry, I'll call later"},{"label":"ham","message":"The basket's gettin full so I might be by tonight"},{"label":"ham","message":"HI DARLIN IVE JUST GOT BACK AND I HAD A REALLY NICE NIGHT AND THANKS SO MUCH FOR THE LIFT SEE U TOMORROW XXX"},{"label":"ham","message":"No other Valentines huh? The proof is on your fb page. Ugh I'm so glad I really DIDN'T watch your rupaul show you TOOL!"},{"label":"spam","message":"Free tones Hope you enjoyed your new content. text stop to 61610 to unsubscribe. help:08712400602450p Provided by tones2you.co.uk"},{"label":"ham","message":"Eh den sat u book e kb liao huh..."},{"label":"ham","message":"Have you been practising your curtsey?"},{"label":"ham","message":"Shall i come to get pickle"},{"label":"ham","message":"Lol boo I was hoping for a laugh"},{"label":"ham","message":"\"YEH I AM DEF UP4 SOMETHING SAT,JUST GOT PAYED2DAY & I HAVBEEN GIVEN A\u00a350 PAY RISE 4MY WORK & HAVEBEEN MADE PRESCHOOLCO-ORDINATOR 2I AM FEELINGOOD LUV\""},{"label":"ham","message":"Well, I have to leave for my class babe ... You never came back to me ... :-( ... Hope you have a nice sleep, my love"},{"label":"ham","message":"LMAO where's your fish memory when I need it?"},{"label":"ham","message":"But i'll b going 2 sch on mon. My sis need 2 take smth."},{"label":"ham","message":"Idea will soon get converted to live:)"},{"label":"spam","message":"TheMob>Yo yo yo-Here comes a new selection of hot downloads for our members to get for FREE! Just click & open the next link sent to ur fone..."},{"label":"ham","message":"S....s...india going to draw the series after many years in south african soil.."},{"label":"ham","message":"Goodmorning, today i am late for <DECIMAL> min."},{"label":"ham","message":"Can't take any major roles in community outreach. You rock mel"},{"label":"ham","message":"Shopping lor. Them raining mah hard 2 leave orchard."},{"label":"ham","message":"Hi here. have birth at on the to at 8lb 7oz. Mother and baby doing brilliantly."},{"label":"ham","message":"See the forwarding message for proof"},{"label":"ham","message":"I can't keep going through this. It was never my intention to run you out, but if you choose to do that rather than keep the room clean so *I* don't have to say no to visitors, then maybe that's the best choice. Yes, I wanted you to be embarassed, so maybe you'd feel for once how I feel when i have a friend who wants to drop buy and i have to say no, as happened this morning. I've tried everything. I don't know what else to do."},{"label":"ham","message":"Dunno lei... I thk mum lazy to go out... I neva ask her yet..."},{"label":"ham","message":"Do whatever you want. You know what the rules are. We had a talk earlier this week about what had to start happening, you showing responsibility. Yet, every week it's can i bend the rule this way? What about that way? Do whatever. I'm tired of having thia same argument with you every week. And a <#> movie DOESNT inlude the previews. You're still getting in after 1."},{"label":"ham","message":"Beautiful Truth against Gravity.. Read carefully: \"Our heart feels light when someone is in it.. But it feels very heavy when someone leaves it..\" GOODMORNING"},{"label":"spam","message":"Great News! Call FREEFONE 08006344447 to claim your guaranteed \u00a31000 CASH or \u00a32000 gift. Speak to a live operator NOW!"},{"label":"ham","message":"Ambrith..madurai..met u in arun dha marrge..remembr?"},{"label":"ham","message":"Just re read it and I have no se but tell me how he takes it and if he runs I will blame u 4 ever!! Not really 4 ever just a long time"},{"label":"ham","message":"Princess, is your kitty shaved or natural?"},{"label":"ham","message":"Better than bb. If he wont use it, his wife will or them doctor"},{"label":"ham","message":"Ya it came a while ago"},{"label":"ham","message":"From tomorrow onwards eve 6 to 3 work."},{"label":"ham","message":"Anything lor but toa payoh got place 2 walk meh..."},{"label":"ham","message":"I don't have anybody's number, I still haven't thought up a tactful way to ask alex"},{"label":"spam","message":"U can WIN \u00a3100 of Music Gift Vouchers every week starting NOW Txt the word DRAW to 87066 TsCs www.ldew.com SkillGame,1Winaweek, age16.150ppermessSubscription"},{"label":"ham","message":"Is there any movie theatre i can go to and watch unlimited movies and just pay once?"},{"label":"ham","message":"U having lunch alone? I now so bored..."},{"label":"ham","message":"Yes obviously, but you are the eggs-pert and the potato head\u2026 Speak soon!"},{"label":"ham","message":"Nah man, my car is meant to be crammed full of people"},{"label":"ham","message":"No got new job at bar in airport on satsgettin 4.47per hour but means no lie in! keep in touch"},{"label":"ham","message":"Kallis is ready for bat in 2nd innings"},{"label":"ham","message":"Thanx but my birthday is over already."},{"label":"ham","message":"Ugh y can't u just apologize, admit u were wrong and ask me to take u back?"},{"label":"ham","message":"I noe la... U wana pei bf oso rite... K lor, other days den..."},{"label":"ham","message":"Yes, i'm small kid.. And boost is the secret of my energy.."},{"label":"ham","message":"IM GONNA MISS U SO MUCH"},{"label":"ham","message":"Is avatar supposed to have subtoitles"},{"label":"ham","message":"Simply sitting and watching match in office.."},{"label":"ham","message":"You can jot down things you want to remember later."},{"label":"ham","message":"Oh sorry please its over"},{"label":"ham","message":"Hey are we going for the lo lesson or gym?"},{"label":"ham","message":"Dont pack what you can buy at any store.like cereals. If you must pack food, pack gari or something 9ja that you will miss."},{"label":"ham","message":"You always make things bigger than they are"},{"label":"ham","message":"\u00dc dun wan to watch infernal affair?"},{"label":"ham","message":"Me not waking up until 4 in the afternoon, sup"},{"label":"spam","message":"4mths half price Orange line rental & latest camera phones 4 FREE. Had your phone 11mths ? Call MobilesDirect free on 08000938767 to update now! or2stoptxt"},{"label":"ham","message":"I can send you a pic if you like :)"},{"label":"ham","message":"Okay... I booked all already... Including the one at bugis."},{"label":"ham","message":"Aight fuck it, I'll get it later"},{"label":"ham","message":"No de. But call me after some time. Ill tell you k"},{"label":"ham","message":"So dont use hook up any how"},{"label":"ham","message":"How much is blackberry bold2 in nigeria."},{"label":"ham","message":"Hi where you. You in home or calicut?"},{"label":"ham","message":"Hey darlin.. i can pick u up at college if u tell me wen & where 2 mt.. love Pete xx"},{"label":"spam","message":"Call 09094100151 to use ur mins! Calls cast 10p\/min (mob vary). Service provided by AOM, just GBP5\/month. AOM Box61,M60 1ER until u stop. Ages 18+ only!"},{"label":"ham","message":"Oh... I was thkin of goin yogasana at 10 den no nd to go at 3 den can rush to parco 4 nb... Okie lor, u call me when ready..."},{"label":"ham","message":"Y so late but i need to go n get da laptop..."},{"label":"ham","message":"Sir, I am waiting for your mail."},{"label":"ham","message":".Please charge my mobile when you get up in morning."},{"label":"ham","message":"Nothing, i got msg frm tht unknown no.."},{"label":"ham","message":"Ugh fuck it I'm resubbing to eve"},{"label":"ham","message":"He didn't see his shadow. We get an early spring yay"},{"label":"ham","message":"I did. One slice and one breadstick. Lol"},{"label":"ham","message":"Hey ! I want you ! I crave you ! I miss you ! I need you ! I love you, Ahmad Saeed al Hallaq ..."},{"label":"ham","message":"Is there any training tomorrow?"},{"label":"spam","message":"URGENT! Your mobile No *********** WON a \u00a32,000 Bonus Caller Prize on 02\/06\/03! This is the 2nd attempt to reach YOU! Call 09066362220 ASAP! BOX97N7QP, 150ppm"},{"label":"ham","message":"Pass dis to all ur contacts n see wat u get! Red;i'm in luv wid u. Blue;u put a smile on my face. Purple;u r realy hot. Pink;u r so swt. Orange;i thnk i lyk u. Green;i realy wana go out wid u. Yelow;i wnt u bck. Black;i'm jealous of u. Brown;i miss you Nw plz giv me one color"},{"label":"ham","message":"Cos daddy arranging time c wat time fetch \u00fc mah..."},{"label":"ham","message":"Then. You are eldest know."},{"label":"ham","message":"Who's there say hi to our drugdealer"},{"label":"ham","message":"Its hard to believe things like this. All can say lie but think twice before saying anything to me."},{"label":"spam","message":"Eerie Nokia tones 4u, rply TONE TITLE to 8007 eg TONE DRACULA to 8007 Titles: GHOST, ADDAMSFA, MUNSTERS, EXORCIST, TWILIGHT www.getzed.co.uk POBox36504W45WQ 150p"},{"label":"spam","message":"Sexy Singles are waiting for you! Text your AGE followed by your GENDER as wither M or F E.G.23F. For gay men text your AGE followed by a G. e.g.23G."},{"label":"ham","message":"Good night my dear.. Sleepwell&Take care"},{"label":"ham","message":"That is wondarfull song"},{"label":"spam","message":"FreeMsg: Claim ur 250 SMS messages-Text OK to 84025 now!Use web2mobile 2 ur mates etc. Join Txt250.com for 1.50p\/wk. T&C BOX139, LA32WU. 16 . Remove txtX or stop"},{"label":"ham","message":"Yar lor actually we quite fast... Cos da ge slow wat... Haha..."},{"label":"ham","message":"Must come later.. I normally bathe him in da afternoon mah.."},{"label":"ham","message":"Trust me. Even if isn't there, its there."},{"label":"ham","message":"Hey hun-onbus goin 2 meet him. He wants 2go out 4a meal but I donyt feel like it cuz have 2 get last bus home!But hes sweet latelyxxx"},{"label":"spam","message":"85233 FREE>Ringtone!Reply REAL"},{"label":"ham","message":"I can take you at like noon"},{"label":"ham","message":"Where is it. Is there any opening for mca."},{"label":"ham","message":"I'm aight. Wat's happening on your side."},{"label":"ham","message":"I'm done oredi..."},{"label":"ham","message":"you are sweet as well, princess. Please tell me your likes and dislikes in bed..."},{"label":"ham","message":"How are you. Wish you a great semester"},{"label":"ham","message":"Moji i love you more than words. Have a rich day"},{"label":"ham","message":"Dude how do you like the buff wind."},{"label":"ham","message":"\"alright babe, justthought i\u0092d sayhey! how u doin?nearly the endof me wk offdam nevamind!We will have 2Hook up sn if uwant m8? loveJen x.\""},{"label":"spam","message":"Well done ENGLAND! Get the official poly ringtone or colour flag on yer mobile! text TONE or FLAG to 84199 NOW! Opt-out txt ENG STOP. Box39822 W111WX \u00a31.50"},{"label":"ham","message":"No i'm not. I can't give you everything you want and need. You actually could do better for yourself on yor own--you've got more money than i do. I can't get work, i can't get a man, i can't pay the rent, i can't even fill my fucking gas tank. yes, i'm stressed and depressed. I didn't even call home for thanksgiving cuz i'll have to tell them i,m up to nothing."},{"label":"ham","message":"S:-)kallis wont play in first two odi:-)"},{"label":"ham","message":"Then get some cash together and I'll text jason"},{"label":"ham","message":"Oh, my love, it's soooo good to hear from you. Omg I missed you so much today. I'm sorry your having problems with the provider but thank you for tming me"},{"label":"spam","message":"Final Chance! Claim ur \u00a3150 worth of discount vouchers today! Text YES to 85023 now! SavaMob, member offers mobile! T Cs SavaMob POBOX84, M263UZ. \u00a33.00 Subs 16"},{"label":"spam","message":"PRIVATE! Your 2004 Account Statement for 07742676969 shows 786 unredeemed Bonus Points. To claim call 08719180248 Identifier Code: 45239 Expires"},{"label":"ham","message":"Probably, want to pick up more?"},{"label":"ham","message":"I'm done..."},{"label":"ham","message":"Are you the cutest girl in the world or what"},{"label":"ham","message":"No dice, art class 6 thru 9 :( thanks though. Any idea what time I should come tomorrow?"},{"label":"spam","message":"SMS SERVICES. for your inclusive text credits, pls goto www.comuk.net login= ***** unsubscribe with STOP. no extra charge. help:08700469649. PO BOX420. IP4 5WE"},{"label":"ham","message":"Oh Howda gud gud.. Mathe en samachara chikku:-)"},{"label":"ham","message":"I thk 530 lor. But dunno can get tickets a not. Wat u doing now?"},{"label":"ham","message":"Audrie lousy autocorrect"},{"label":"ham","message":"Its a site to simulate the test. It just gives you very tough questions to test your readiness."},{"label":"ham","message":"Anyway seriously hit me up when you're back because otherwise I have to light up with armand and he always has shit and\/or is vomiting"},{"label":"ham","message":"I fetch yun or u fetch?"},{"label":"ham","message":"Thank you. I like you as well..."},{"label":"ham","message":"Hmmm ... And imagine after you've come home from that having to rub my feet, make me dinner and help me get ready for my date ! Are you sure your ready for that kind of life ?"},{"label":"spam","message":"FREE2DAY sexy St George's Day pic of Jordan!Txt PIC to 89080 dont miss out, then every wk a saucy celeb!4 more pics c PocketBabe.co.uk 0870241182716 \u00a33\/wk"},{"label":"ham","message":"Lara said she can loan me <#> ."},{"label":"ham","message":"Do we have any spare power supplies"},{"label":"ham","message":"Yar he quite clever but aft many guesses lor. He got ask me 2 bring but i thk darren not so willing 2 go. Aiya they thk leona still not attach wat."},{"label":"spam","message":"You are a winner you have been specially selected to receive \u00a31000 cash or a \u00a32000 award. Speak to a live operator to claim call 087123002209am-7pm. Cost 10p"},{"label":"ham","message":"Yeah, don't go to bed, I'll be back before midnight"},{"label":"spam","message":"Sunshine Hols. To claim ur med holiday send a stamped self address envelope to Drinks on Us UK, PO Box 113, Bray, Wicklow, Eire. Quiz Starts Saturday! Unsub Stop"},{"label":"ham","message":"Well I wasn't available as I washob nobbing with last night so they had to ask Nickey Platt instead of me!;"},{"label":"ham","message":"It's that time of the week again, ryan"},{"label":"ham","message":"Wish u many many returns of the day.. Happy birthday vikky.."},{"label":"spam","message":"U can WIN \u00a3100 of Music Gift Vouchers every week starting NOW Txt the word DRAW to 87066 TsCs www.Idew.com SkillGame, 1Winaweek, age16. 150ppermessSubscription"},{"label":"ham","message":"I hope you know I'm still mad at you."},{"label":"ham","message":"Argh my 3g is spotty, anyway the only thing I remember from the research we did was that province and sterling were the only problem-free places we looked at"},{"label":"ham","message":"In xam hall boy asked girl Tell me the starting term for dis answer I can den manage on my own After lot of hesitation n lookin around silently she said THE! intha ponnungale ipaditan;)"},{"label":"ham","message":"Do you know when the result."},{"label":"spam","message":"+123 Congratulations - in this week's competition draw u have won the \u00a31450 prize to claim just call 09050002311 b4280703. T&Cs\/stop SMS 08718727868. Over 18 only 150ppm"},{"label":"ham","message":"Beautiful Truth against Gravity.. Read carefully: \"Our heart feels light when someone is in it.. But it feels very heavy when someone leaves it..\" GOOD NIGHT"},{"label":"ham","message":"Sorry im getting up now, feel really bad- totally rejected that kinda me thing."},{"label":"ham","message":"You do got a shitload of diamonds though"},{"label":"ham","message":"Tessy..pls do me a favor. Pls convey my birthday wishes to Nimya..pls dnt forget it. Today is her birthday Shijas"},{"label":"ham","message":"Well I'm going to be an aunty!"},{"label":"ham","message":"Mine here like all fr china then so noisy."},{"label":"ham","message":"Later i guess. I needa do mcat study too."},{"label":"ham","message":"S...from the training manual it show there is no tech process:)its all about password reset and troubleshooting:)"},{"label":"spam","message":"Your B4U voucher w\/c 27\/03 is MARSMS. Log onto www.B4Utele.com for discount credit. To opt out reply stop. Customer care call 08717168528"},{"label":"ham","message":"Spoke with uncle john today. He strongly feels that you need to sacrifice to keep me here. He's going to call you. When he does, i beg you to just listen. Dont make any promises or make it clear things are not easy. And i need you to please let us work things out. As long as i keep expecting help, my creativity will be stifled so pls just keep him happy, no promises on your part."},{"label":"ham","message":"If he started searching he will get job in few days.he have great potential and talent."},{"label":"ham","message":"Carlos took a while (again), we leave in a minute"},{"label":"ham","message":"Well done and ! luv ya all"},{"label":"ham","message":"Then why you came to hostel."},{"label":"ham","message":"K still are you loving me."},{"label":"ham","message":"But i juz remembered i gotta bathe my dog today.."},{"label":"ham","message":"After the drug she will be able to eat."},{"label":"ham","message":"Alright took the morphine. Back in yo."},{"label":"ham","message":"You see the requirements please"},{"label":"ham","message":"You stayin out of trouble stranger!!saw Dave the other day he\u0092s sorted now!still with me bloke when u gona get a girl MR!ur mum still Thinks we will get 2GETHA!"},{"label":"spam","message":"FreeMsg: Hey - I'm Buffy. 25 and love to satisfy men. Home alone feeling randy. Reply 2 C my PIX! QlynnBV Help08700621170150p a msg Send stop to stop txts"},{"label":"spam","message":"Sunshine Hols. To claim ur med holiday send a stamped self address envelope to Drinks on Us UK, PO Box 113, Bray, Wicklow, Eire. Quiz Starts Saturday! Unsub Stop"},{"label":"ham","message":"So can collect ur laptop?"},{"label":"ham","message":"Ok. Can be later showing around 8-8:30 if you want + cld have drink before. Wld prefer not to spend money on nosh if you don't mind, as doing that nxt wk."},{"label":"ham","message":"I will once i get home"},{"label":"ham","message":"Waaaat?? Lololo ok next time then!"},{"label":"ham","message":"The table's occupied, I'm waiting by the tree"},{"label":"ham","message":"I surely dont forgot to come:)i will always be in touch in with you:-)"},{"label":"ham","message":"Hi kindly give us back our documents which we submitted for loan from STAPATI"},{"label":"ham","message":"I dont have i shall buy one dear"},{"label":"ham","message":"Oh god i am happy to see your message after 3 days"},{"label":"ham","message":"What year. And how many miles."},{"label":"ham","message":"Hey cutie. How goes it? Here in WALES its kinda ok. There is like hills and shit but i still avent killed myself."},{"label":"ham","message":"Sad story of a Man - Last week was my b'day. My Wife did'nt wish me. My Parents forgot n so did my Kids . I went to work. Even my Colleagues did not wish. As I entered my cabin my PA said, '' Happy B'day Boss !!''. I felt special. She askd me 4 lunch. After lunch she invited me to her apartment. We went there. She said,'' do u mind if I go into the bedroom for a minute ? '' ''OK'', I sed in a sexy mood. She came out 5 minuts latr wid a cake...n My Wife, My Parents, My Kidz, My Friends n My Colleagues. All screaming.. SURPRISE !! and I was waiting on the sofa.. ... ..... ' NAKED...!"},{"label":"ham","message":"I think you should go the honesty road. Call the bank tomorrow. Its the tough decisions that make us great people."},{"label":"spam","message":"FREE for 1st week! No1 Nokia tone 4 ur mob every week just txt NOKIA to 87077 Get txting and tell ur mates. zed POBox 36504 W45WQ norm150p\/tone 16+"},{"label":"ham","message":"No. Its not specialisation. Can work but its slave labor. Will look for it this month sha cos no shakara 4 beggar."},{"label":"ham","message":"Is she replying. Has boye changed his phone number"},{"label":"ham","message":"1) Go to write msg 2) Put on Dictionary mode 3)Cover the screen with hand, 4)Press <#> . 5)Gently remove Ur hand.. Its interesting..:)"},{"label":"ham","message":"hi my darlin im on my way to London and we have just been smashed into by another driver! and have a big dent! im really missing u what have u been up to? xxx"},{"label":"ham","message":"Nothing really, just making sure everybody's up to speed"},{"label":"ham","message":"I'm not coming home 4 dinner."},{"label":"ham","message":"Thank you. And by the way, I just lost."},{"label":"ham","message":"Yes.he have good crickiting mind"},{"label":"ham","message":"Thx. All will be well in a few months"},{"label":"spam","message":"Shop till u Drop, IS IT YOU, either 10K, 5K, \u00a3500 Cash or \u00a3100 Travel voucher, Call now, 09064011000. NTT PO Box CR01327BT fixedline Cost 150ppm mobile vary"},{"label":"ham","message":"\"CAN I PLEASE COME UP NOW IMIN TOWN.DONTMATTER IF URGOIN OUTL8R,JUST REALLYNEED 2DOCD.PLEASE DONTPLEASE DONTIGNORE MYCALLS,U NO THECD ISV.IMPORTANT TOME 4 2MORO\""},{"label":"ham","message":"I wont. So wat's wit the guys"},{"label":"ham","message":"Yavnt tried yet and never played original either"},{"label":"ham","message":"Hiya, had a good day? Have you spoken to since the weekend?"},{"label":"ham","message":"See? I thought it all through"},{"label":"ham","message":"I'm at work. Please call"},{"label":"ham","message":"get ready to moan and scream :)"},{"label":"ham","message":"Oh k :)why you got job then whats up?"},{"label":"ham","message":"I don,t think so. You don't need to be going out that late on a school night. ESPECIALLY when the one class you have is the one you missed last wednesday and probably failed a test in on friday"},{"label":"ham","message":"And popping <#> ibuprofens was no help."},{"label":"ham","message":"Babe ! How goes that day ? What are you doing ? Where are you ? I sip my cappuccino and think of you, my love ... I send a kiss to you from across the sea"},{"label":"ham","message":"Ok."},{"label":"ham","message":"PS U no ur a grown up now right?"},{"label":"ham","message":"Chinatown got porridge, claypot rice, yam cake, fishhead beehoon... Either we eat cheap den go cafe n tok or go nydc or somethin..."},{"label":"ham","message":"I know a few people I can hit up and fuck to the yes"},{"label":"ham","message":"Purity of friendship between two is not about smiling after reading the forwarded message..Its about smiling just by seeing the name. Gud evng"},{"label":"ham","message":"So is there anything specific I should be doing with regards to jaklin or what because idk what the fuck"},{"label":"ham","message":"Oh god. I'm gonna Google nearby cliffs now."},{"label":"spam","message":"FREE camera phones with linerental from 4.49\/month with 750 cross ntwk mins. 1\/2 price txt bundle deals also avble. Call 08001950382 or call2optout\/J MF"},{"label":"ham","message":"Yup i shd haf ard 10 pages if i add figures... \u00dc all got how many pages?"},{"label":"ham","message":"Ooh, 4got, i'm gonna start belly dancing in moseley weds 6.30 if u want 2 join me, they have a cafe too."},{"label":"ham","message":"Thankyou so much for the call. I appreciate your care."},{"label":"ham","message":"Congrats ! Treat pending.i am not on mail for 2 days.will mail once thru.Respect mother at home.check mails."},{"label":"ham","message":"I called but no one pick up e phone. I ask both of them already they said ok."},{"label":"ham","message":"Hi my email address has changed now it is"},{"label":"ham","message":"V-aluable. A-ffectionate. L-oveable. E-ternal. N-oble. T-ruthful. I-ntimate. N-atural. E-namous. Happy \"VALENTINES DAY\" in advance"},{"label":"ham","message":"Not much, just some textin'. How bout you?"},{"label":"ham","message":"Bring it if you got it"},{"label":"ham","message":"I'm in a movie. Call me 4 wat?"},{"label":"ham","message":"Not sure I have the stomach for it ..."},{"label":"ham","message":"Haha... can... But i'm having dinner with my cousin..."},{"label":"ham","message":"A boy was late 2 home. His father: \"POWER OF FRNDSHIP\""},{"label":"ham","message":"(And my man carlos is definitely coming by mu tonight, no excuses)"},{"label":"ham","message":"soon you will have the real thing princess! Do i make you wet? :)"},{"label":"ham","message":"Raji..pls do me a favour. Pls convey my Birthday wishes to Nimya. Pls. Today is her birthday."},{"label":"ham","message":"Haha, my legs and neck are killing me and my amigos are hoping to end the night with a burn, think I could swing by in like an hour?"},{"label":"spam","message":"URGENT! Your mobile No 07xxxxxxxxx won a \u00a32,000 bonus caller prize on 02\/06\/03! this is the 2nd attempt to reach YOU! call 09066362231 ASAP! BOX97N7QP, 150PPM"},{"label":"ham","message":"Usually the body takes care of it buy making sure it doesnt progress. Can we pls continue this talk on saturday."},{"label":"spam","message":"URGENT!! Your 4* Costa Del Sol Holiday or \u00a35000 await collection. Call 09050090044 Now toClaim. SAE, TC s, POBox334, Stockport, SK38xh, Cost\u00a31.50\/pm, Max10mins"},{"label":"ham","message":"Hmm well, night night"},{"label":"ham","message":"Just wanted to say holy shit you guys weren't kidding about this bud"},{"label":"ham","message":"Just gettin a bit arty with my collages at the mo, well tryin 2 ne way! Got a roast in a min lovely i shall enjoy that!"},{"label":"ham","message":"This is one of the days you have a billion classes, right?"},{"label":"ham","message":"Goodmorning, today i am late for 2hrs. Because of back pain."},{"label":"ham","message":"Ok then i'll let him noe later n ask him call u tmr..."},{"label":"ham","message":"Prabha..i'm soryda..realy..frm heart i'm sory"},{"label":"ham","message":"OK i'm waliking ard now... Do u wan me 2 buy anything go ur house?"},{"label":"ham","message":"* Will have two more cartons off u and is very pleased with shelves"},{"label":"ham","message":"Nice talking to you! please dont forget my pix :) i want to see all of you..."},{"label":"spam","message":"You have WON a guaranteed \u00a31000 cash or a \u00a32000 prize. To claim yr prize call our customer service representative on 08714712379 between 10am-7pm Cost 10p"},{"label":"ham","message":"But really quite funny lor wat... Then u shd haf run shorter distance wat..."},{"label":"ham","message":"I notice you like looking in the shit mirror youre turning into a right freak"},{"label":"ham","message":"Great. I was getting worried about you. Just know that a wonderful and caring person like you will have only the best in life. Know that u r wonderful and God's love is yours."},{"label":"spam","message":"Thanks for your ringtone order, ref number K718. Your mobile will be charged \u00a34.50. Should your tone not arrive please call customer services on 09065069120"},{"label":"ham","message":"I prefer my free days... Tues, wed, fri oso can... \u00dc ask those workin lor..."},{"label":"ham","message":"Alrite jod hows the revision goin? Keris bin doin a smidgin. N e way u wanna cum over after college?xx"},{"label":"ham","message":"If you have belive me. Come to my home."},{"label":"ham","message":"Oh k.k..where did you take test?"},{"label":"ham","message":"Those were my exact intentions"},{"label":"ham","message":"haha but no money leh... Later got to go for tuition... Haha and looking for empty slots for driving lessons"},{"label":"ham","message":"Hey... Thk we juz go accordin to wat we discussed yest lor, except no kb on sun... Cos there's nt much lesson to go if we attend kb on sat..."},{"label":"ham","message":"K, wen ur free come to my home and also tel vikky i hav sent mail to him also.. Better come evening il be free today aftr 6pm..:-)"},{"label":"ham","message":"Nothing just getting msgs by dis name wit different no's.."},{"label":"ham","message":"Good Morning plz call me sir"},{"label":"ham","message":"What's your room number again? Wanna make sure I'm knocking on the right door"},{"label":"ham","message":"\"Si.como no?!listened2the plaid album-quite gd&the new air1 which is hilarious-also bought\u0094braindance\u0094a comp.ofstuff on aphex\u0092s ;abel,u hav2hear it!c u sn xxxx\""},{"label":"ham","message":"Pls tell nelson that the bb's are no longer comin. The money i was expecting aint coming"},{"label":"ham","message":"Give her something to drink, if she takes it and doesn't vomit then you her temp might drop. If she unmits however let me know."},{"label":"ham","message":"Think you sent the text to the home phone. That cant display texts. If you still want to send it his number is"},{"label":"ham","message":"Every day i use to sleep after <#> so only."},{"label":"ham","message":"K I'll call you when I'm close"},{"label":"ham","message":"U buy newspapers already?"},{"label":"ham","message":"Nope wif my sis lor... Aft bathing my dog then i can bathe... Looks like it's going 2 rain soon."},{"label":"ham","message":"Boo I'm on my way to my moms. She's making tortilla soup. Yummmm"},{"label":"ham","message":"No management puzzeles."},{"label":"ham","message":"How did you find out in a way that didn't include all of these details"},{"label":"spam","message":"Hi ya babe x u 4goten bout me?' scammers getting smart..Though this is a regular vodafone no, if you respond you get further prem rate msg\/subscription. Other nos used also. Beware!"},{"label":"spam","message":"Back 2 work 2morro half term over! Can U C me 2nite 4 some sexy passion B4 I have 2 go back? Chat NOW 09099726481 Luv DENA Calls \u00a31\/minMobsmoreLKPOBOX177HP51FL"},{"label":"ham","message":"will you like to be spoiled? :)"},{"label":"spam","message":"Thanks for your ringtone order, ref number R836. Your mobile will be charged \u00a34.50. Should your tone not arrive please call customer services on 09065069154"},{"label":"ham","message":"I am getting threats from your sales executive Shifad as i raised complaint against him. Its an official message."},{"label":"ham","message":"hope things went well at 'doctors' ;) reminds me i still need 2go.did u c d little thing i left in the lounge?"},{"label":"ham","message":"Den wat will e schedule b lk on sun?"},{"label":"ham","message":"Lol enjoy role playing much?"},{"label":"ham","message":"Ok. Me watching tv too."},{"label":"ham","message":"I just lov this line: \"Hurt me with the truth, I don't mind,i wil tolerat.bcs ur my someone..... But, Never comfort me with a lie\" gud ni8 and sweet dreams"},{"label":"ham","message":"Just checked out, heading out to drop off my stuff now"},{"label":"ham","message":"Here got lots of hair dresser fr china."},{"label":"ham","message":"Sad story of a Man - Last week was my b'day. My Wife did'nt wish me. My Parents forgot n so did my Kids . I went to work. Even my Colleagues did not wish."},{"label":"ham","message":"Ill call you evening ill some ideas."},{"label":"spam","message":"SplashMobile: Choose from 1000s of gr8 tones each wk! This is a subscrition service with weekly tones costing 300p. U have one credit - kick back and ENJOY"},{"label":"ham","message":"Did you show him and wot did he say or could u not c him 4 dust?"},{"label":"ham","message":"It should take about <#> min"},{"label":"spam","message":"Not heard from U4 a while. Call 4 rude chat private line 01223585334 to cum. Wan 2C pics of me gettin shagged then text PIX to 8552. 2End send STOP 8552 SAM xxx"},{"label":"ham","message":"Ok . . now i am in bus. . If i come soon i will come otherwise tomorrow"},{"label":"ham","message":"I cant pick the phone right now. Pls send a message"},{"label":"spam","message":"FREE entry into our \u00a3250 weekly comp just send the word ENTER to 88877 NOW. 18 T&C www.textcomp.com"},{"label":"ham","message":"Finish liao... U?"},{"label":"spam","message":"88066 FROM 88066 LOST 3POUND HELP"},{"label":"ham","message":"Haha i think i did too"},{"label":"ham","message":"U know we watchin at lido?"},{"label":"ham","message":"Life spend with someone for a lifetime may be meaningless but a few moments spent with someone who really love you means more than life itself.."},{"label":"ham","message":"Haha awesome, I've been to 4u a couple times. Who all's coming?"},{"label":"ham","message":"Cold. Dont be sad dear"},{"label":"ham","message":"Think I could stop by in like an hour or so? My roommate's looking to stock up for a trip"},{"label":"ham","message":"Is that on the telly? No its Brdget Jones!"},{"label":"ham","message":"Love you aathi..love u lot.."},{"label":"ham","message":"Hello! How r u? Im bored. Inever thought id get bored with the tv but I am. Tell me something exciting has happened there? Anything! =\/"},{"label":"ham","message":"Hmm...Bad news...Hype park plaza $700 studio taken...Only left 2 bedrm-$900..."},{"label":"ham","message":"Sorry, I'll call later in meeting"},{"label":"ham","message":"R \u00fc comin back for dinner?"},{"label":"ham","message":"I hav almost reached. Call, i m unable to connect u."},{"label":"ham","message":"Whom you waited for yesterday"},{"label":"ham","message":"I reach home safe n sound liao..."},{"label":"ham","message":"Velly good, yes please!"},{"label":"ham","message":"Hi, wkend ok but journey terrible. Wk not good as have huge back log of marking to do"},{"label":"ham","message":"I have had two more letters from . I will copy them for you cos one has a message for you. Speak soon"},{"label":"ham","message":"Alex knows a guy who sells mids but he's down in south tampa and I don't think I could set it up before like 8"},{"label":"ham","message":"Dont you have message offer"},{"label":"spam","message":"Had your mobile 11mths ? Update for FREE to Oranges latest colour camera mobiles & unlimited weekend calls. Call Mobile Upd8 on freefone 08000839402 or 2StopTx"},{"label":"ham","message":"HEY THERE BABE, HOW U DOIN? WOT U UP 2 2NITE LOVE ANNIE X."},{"label":"ham","message":"Remind me how to get there and I shall do so"},{"label":"ham","message":":-( that's not v romantic!"},{"label":"ham","message":"Hello. Damn this christmas thing. I think i have decided to keep this mp3 that doesnt work."},{"label":"spam","message":"You have 1 new message. Please call 08718738034."},{"label":"ham","message":"HI DARLIN IM MISSIN U HOPE YOU ARE HAVING A GOOD TIME. WHEN ARE U BACK AND WHAT TIME IF U CAN GIVE ME A CALL AT HOME. JESS XX"},{"label":"spam","message":"Hi - this is your Mailbox Messaging SMS alert. You have 4 messages. You have 21 matches. Please call back on 09056242159 to retrieve your messages and matches"},{"label":"ham","message":"Draw va?i dont think so:)"},{"label":"ham","message":"Dont pick up d call when something important is There to tell. Hrishi"},{"label":"spam","message":"Congrats! 1 year special cinema pass for 2 is yours. call 09061209465 now! C Suprman V, Matrix3, StarWars3, etc all 4 FREE! bx420-ip4-5we. 150pm. Dont miss out!"},{"label":"ham","message":"Nothin comes to my mind. \u00dc help me buy hanger lor. Ur laptop not heavy?"},{"label":"ham","message":"<#> , that's all? Guess that's easy enough"},{"label":"ham","message":"We can make a baby in yo tho"},{"label":"ham","message":"Should I tell my friend not to come round til like <#> ish?"},{"label":"ham","message":"Friendship poem: Dear O Dear U R Not Near But I Can Hear Dont Get Fear Live With Cheer No More Tear U R Always my Dear. Gud ni8"},{"label":"ham","message":"Still in the area of the restaurant. Ill try to come back soon"},{"label":"ham","message":"Aight that'll work, thanks"},{"label":"spam","message":"WIN a year supply of CDs 4 a store of ur choice worth \u00a3500 & enter our \u00a3100 Weekly draw txt MUSIC to 87066 Ts&Cs www.Ldew.com.subs16+1win150ppmx3"},{"label":"spam","message":"Moby Pub Quiz.Win a \u00a3100 High Street prize if u know who the new Duchess of Cornwall will be? Txt her first name to 82277.unsub STOP \u00a31.50 008704050406 SP Arrow"},{"label":"ham","message":"I have 2 sleeping bags, 1 blanket and paper and phone details. Anything else?"},{"label":"spam","message":"You have won a Nokia 7250i. This is what you get when you win our FREE auction. To take part send Nokia to 86021 now. HG\/Suite342\/2Lands Row\/W1JHL 16+"},{"label":"spam","message":"Congratulations! Thanks to a good friend U have WON the \u00a32,000 Xmas prize. 2 claim is easy, just call 08718726971 NOW! Only 10p per minute. BT-national-rate."},{"label":"spam","message":"tddnewsletter@emc1.co.uk (More games from TheDailyDraw) Dear Helen, Dozens of Free Games - with great prizesWith.."},{"label":"ham","message":"So what do you guys do."},{"label":"ham","message":"Also that chat was awesome but don't make it regular unless you can see her in person"},{"label":"ham","message":"That's significant but dont worry."},{"label":"ham","message":"That's cause your old. I live to be high."},{"label":"ham","message":"Waqt se pehle or naseeb se zyada kisi ko kuch nahi milta,Zindgi wo nahi he jo hum sochte hai Zindgi wo hai jo jeetey hai.........."},{"label":"ham","message":"On the way to office da.."},{"label":"ham","message":"In which place do you want da."},{"label":"ham","message":"This pain couldn't have come at a worse time."},{"label":"ham","message":"Ok..."},{"label":"ham","message":"Should I be stalking u?"},{"label":"ham","message":"Sorry dude. Dont know how i forgot. Even after Dan reminded me. Sorry. Hope you guys had fun."},{"label":"ham","message":"Ok lor."},{"label":"ham","message":"Apps class varaya elaya."},{"label":"ham","message":"The Xmas story is peace.. The Xmas msg is love.. The Xmas miracle is jesus.. Hav a blessed month ahead & wish U Merry Xmas..."},{"label":"spam","message":"URGENT! Your mobile number *************** WON a \u00a32000 Bonus Caller prize on 10\/06\/03! This is the 2nd attempt to reach you! Call 09066368753 ASAP! Box 97N7QP, 150ppm"},{"label":"ham","message":"That day you asked about anand number. Why:-)"},{"label":"ham","message":"Am surfing online store. For offers do you want to buy any thing."},{"label":"ham","message":"Long beach lor. Expected... U having dinner now?"},{"label":"ham","message":"At home by the way"},{"label":"ham","message":"We are both fine. Thanks"},{"label":"ham","message":"What happen to her tell the truth"},{"label":"ham","message":"Do you like Italian food?"},{"label":"ham","message":"Which is weird because I know I had it at one point"},{"label":"ham","message":"\"Aww you must be nearly dead!Well Jez isComing over toDo some workAnd that whillTake forever!\""},{"label":"ham","message":"Tell your friends what you plan to do on Valentines day @ <URL>"},{"label":"ham","message":"Alright, see you in a bit"},{"label":"ham","message":"Cheers for the message Zogtorius. I\u0092ve been staring at my phone for an age deciding whether to text or not."},{"label":"ham","message":"I will take care of financial problem.i will help:)"},{"label":"ham","message":"Tell dear what happen to you. Why you talking to me like an alian"},{"label":"spam","message":"Double your mins & txts on Orange or 1\/2 price linerental - Motorola and SonyEricsson with B\/Tooth FREE-Nokia FREE Call MobileUpd8 on 08000839402 or2optout\/HV9D"},{"label":"ham","message":"1) Go to write msg 2) Put on Dictionary mode 3)Cover the screen with hand, 4)Press <#> . 5)Gently remove Ur hand.. Its interesting..:)"},{"label":"ham","message":"Okie..."},{"label":"ham","message":"Hi this is yijue, can i meet u at 11 tmr?"},{"label":"ham","message":"Its posible dnt live in <#> century cm frwd n thnk different"},{"label":"ham","message":"But i dint slept in afternoon."},{"label":"ham","message":"That seems unnecessarily affectionate"},{"label":"ham","message":"Yar else i'll thk of all sorts of funny things."},{"label":"ham","message":"You will be in the place of that man"},{"label":"spam","message":"Download as many ringtones as u like no restrictions, 1000s 2 choose. U can even send 2 yr buddys. Txt Sir to 80082 \u00a33"},{"label":"ham","message":"Thats cool. How was your day?"},{"label":"spam","message":"Please CALL 08712402902 immediately as there is an urgent message waiting for you."},{"label":"ham","message":"R we going with the <#> bus?"},{"label":"ham","message":"Hello, my love ! How went your day ? Are you alright ? I think of you, my sweet and send a jolt to your heart to remind you ... I LOVE YOU! Can you hear it ? I screamed it across the sea for all the world to hear. Ahmad al Hallaq is loved ! and owned ! *possessive passionate kiss*"},{"label":"ham","message":"No..he joined today itself."},{"label":"ham","message":"Okay same with me. Well thanks for the clarification"},{"label":"ham","message":"I'll talk to the others and probably just come early tomorrow then"},{"label":"spam","message":"Spook up your mob with a Halloween collection of a logo & pic message plus a free eerie tone, txt CARD SPOOK to 8007 zed 08701417012150p per logo\/pic"},{"label":"ham","message":"Had the money issue weigh me down but thanks to you, I can breathe easier now. I.ll make sure you dont regret it. Thanks."},{"label":"ham","message":"Hi. I'm sorry i missed your call. Can you pls call back."},{"label":"ham","message":"How are you doing? Hope you've settled in for the new school year. Just wishin you a gr8 day"},{"label":"spam","message":"Fantasy Football is back on your TV. Go to Sky Gamestar on Sky Active and play \u00a3250k Dream Team. Scoring starts on Saturday, so register now!SKY OPT OUT to 88088"},{"label":"ham","message":"Ok then no need to tell me anything i am going to sleep good night"},{"label":"ham","message":"Ok try to do week end course in coimbatore."},{"label":"spam","message":"Tone Club: Your subs has now expired 2 re-sub reply MONOC 4 monos or POLYC 4 polys 1 weekly @ 150p per week Txt STOP 2 stop This msg free Stream 0871212025016"},{"label":"ham","message":"V nice! Off 2 sheffield tom 2 air my opinions on categories 2 b used 2 measure ethnicity in next census. Busy transcribing. :-)"},{"label":"ham","message":"If you r @ home then come down within 5 min"},{"label":"ham","message":"A Boy loved a gal. He propsd bt she didnt mind. He gv lv lttrs, Bt her frnds threw thm. Again d boy decided 2 aproach d gal , dt time a truck was speeding towards d gal. Wn it was about 2 hit d girl,d boy ran like hell n saved her. She asked 'hw cn u run so fast?' D boy replied \"Boost is d secret of my energy\" n instantly d girl shouted \"our energy\" n Thy lived happily 2gthr drinking boost evrydy Moral of d story:- I hv free msgs:D;): gud ni8"},{"label":"ham","message":"That day \u00fc say \u00fc cut ur hair at paragon, is it called hair sense? Do \u00fc noe how much is a hair cut?"},{"label":"ham","message":"Hmm, too many of them unfortunately... Pics obviously arent hot cakes. Its kinda fun tho"},{"label":"ham","message":"Watching tv lor... Y she so funny we bluff her 4 wat. Izzit because she thk it's impossible between us?"},{"label":"spam","message":"XMAS Prize draws! We are trying to contact U. Todays draw shows that you have won a \u00a32000 prize GUARANTEED. Call 09058094565 from land line. Valid 12hrs only"},{"label":"ham","message":"Dunno lei he neva say..."},{"label":"ham","message":"Thanx 4 2day! U r a goodmate I THINK UR RITE SARY! ASUSUAL!1 U CHEERED ME UP! LOVE U FRANYxxxxx"},{"label":"ham","message":"I'm on my way home. Went to change batt 4 my watch then go shop a bit lor."},{"label":"spam","message":"YES! The only place in town to meet exciting adult singles is now in the UK. Txt CHAT to 86688 now! 150p\/Msg."},{"label":"ham","message":"Hi, Mobile no. <#> has added you in their contact list on www.fullonsms.com It s a great place to send free sms to people For more visit fullonsms.com"},{"label":"ham","message":"Good evening Sir, hope you are having a nice day. I wanted to bring it to your notice that I have been late in paying rent for the past few months and have had to pay a $ <#> charge. I felt it would be inconsiderate of me to nag about something you give at great cost to yourself and that's why i didnt speak up. I however am in a recession and wont be able to pay the charge this month hence my askin well ahead of month's end. Can you please help. Thank you for everything."},{"label":"ham","message":"If i let you do this, i want you in the house by 8am."},{"label":"ham","message":"Best line said in Love: . \"I will wait till the day I can forget u Or The day u realize that u cannot forget me.\"... Gn"},{"label":"ham","message":"I will reach before ten morning"},{"label":"ham","message":"Your pussy is perfect!"},{"label":"ham","message":"Sorry, I'll call later"},{"label":"spam","message":"Someone has contacted our dating service and entered your phone becausethey fancy you! To find out who it is call from a landline 09058098002. PoBox1, W14RG 150p"},{"label":"ham","message":"No message..no responce..what happend?"},{"label":"ham","message":"Also where's the piece"},{"label":"ham","message":"wiskey Brandy Rum Gin Beer Vodka Scotch Spain Wine \"KUDI\"yarasu dhina vaazhthukkal. .."},{"label":"ham","message":"Boo. How's things? I'm back at home and a little bored already :-("},{"label":"ham","message":"First has she gained more than <#> kg since she took in. Second has she done the blood sugar tests. If she has and its ok and her blood pressure is within normal limits then no worries"},{"label":"ham","message":"PICK UR FONE UP NOW U DUMB?"},{"label":"ham","message":"Thanks da thangam, i feel very very happy dear. I also miss you da."},{"label":"ham","message":"Okey doke. I'm at home, but not dressed cos laying around ill! Speak to you later bout times and stuff."},{"label":"ham","message":"I don't run away frm u... I walk slowly & it kills me that u don't care enough to stop me..."},{"label":"ham","message":"Babe, I'm back ... Come back to me ..."},{"label":"ham","message":"Well you told others you'd marry them..."},{"label":"ham","message":"Neshanth..tel me who r u?"},{"label":"ham","message":"YO YO YO BYATCH WHASSUP?"},{"label":"ham","message":"Oh... Kay... On sat right?"},{"label":"ham","message":"Hi! This is Roger from CL. How are you?"},{"label":"spam","message":"Babe: U want me dont u baby! Im nasty and have a thing 4 filthyguys. Fancy a rude time with a sexy bitch. How about we go slo n hard! Txt XXX SLO(4msgs)"},{"label":"ham","message":"Oh oh... Wasted... Den muz chiong on sat n sun liao..."},{"label":"ham","message":"Jesus christ bitch I'm trying to give you drugs answer your fucking phone"},{"label":"ham","message":"Please give it 2 or i will pick it up on Tuesday evening about 8 if that is ok."},{"label":"ham","message":"I'm meeting Darren..."},{"label":"ham","message":"One of best dialogue in cute reltnship..!! \"Wen i Die, Dont Come Near My Body..!! Bcoz My Hands May Not Come 2 Wipe Ur Tears Off That Time..!Gud ni8"},{"label":"ham","message":"Solve d Case : A Man Was Found Murdered On <DECIMAL> . <#> AfterNoon. 1,His wife called Police. 2,Police questioned everyone. 3,Wife: Sir,I was sleeping, when the murder took place. 4.Cook: I was cooking. 5.Gardener: I was picking vegetables. 6.House-Maid: I went 2 d post office. 7.Children: We went 2 play. 8.Neighbour: We went 2 a marriage. Police arrested d murderer Immediately. Who's It? Reply With Reason, If U r Brilliant."},{"label":"ham","message":"Dear where you will be when i reach there"},{"label":"ham","message":"Aww that's the first time u said u missed me without asking if I missed u first. You DO love me! :)"},{"label":"ham","message":"Ok... Thanx... Gd nite 2 \u00fc too..."},{"label":"ham","message":"Come to me right now, Ahmad"},{"label":"spam","message":"I don't know u and u don't know me. Send CHAT to 86688 now and let's find each other! Only 150p\/Msg rcvd. HG\/Suite342\/2Lands\/Row\/W1J6HL LDN. 18 years or over."},{"label":"ham","message":"Lol please do. Actually send a pic of yourself right now. I wanna see. Pose with a comb and hair dryer or something."},{"label":"ham","message":"O was not into fps then."},{"label":"ham","message":"Huh means computational science... Y they like dat one push here n there..."},{"label":"ham","message":"Could you not read me, my Love ? I answered you"},{"label":"ham","message":"Oh... Lk tt den we take e one tt ends at cine lor... Dun wan yogasana oso can..."},{"label":"ham","message":"Madam,regret disturbance.might receive a reference check from DLF Premarica.kindly be informed.Rgds,Rakhesh,Kerala."},{"label":"spam","message":"SMS SERVICES For your inclusive text credits pls gotto www.comuk.net login 3qxj9 unsubscribe with STOP no extra charge help 08702840625 comuk.220cm2 9AE"},{"label":"ham","message":"Oic... Then better quickly go bathe n settle down..."},{"label":"ham","message":"Err... Cud do. I'm going to at 8pm. I haven't got a way to contact him until then."},{"label":"ham","message":"A bloo bloo bloo I'll miss the first bowl"},{"label":"ham","message":"Lmao but its so fun..."},{"label":"ham","message":"Oh k k:)but he is not a big hitter.anyway good"},{"label":"ham","message":"Hey!!! I almost forgot ... Happy B-day babe ! I love ya!!"},{"label":"spam","message":"Valentines Day Special! Win over \u00a31000 in our quiz and take your partner on the trip of a lifetime! Send GO to 83600 now. 150p\/msg rcvd. CustCare:08718720201"},{"label":"ham","message":"Do you think i can move <#> in a week"},{"label":"ham","message":"She.s find. I sent you an offline message to know how anjola's now."},{"label":"spam","message":"Guess who am I?This is the first time I created a web page WWW.ASJESUS.COM read all I wrote. I'm waiting for your opinions. I want to be your friend 1\/1"},{"label":"ham","message":"How was txting and driving"},{"label":"ham","message":"That's good. Lets thank God. Please complete the drug. Have lots of water. And have a beautiful day."},{"label":"ham","message":"Really dun bluff me leh... U sleep early too. Nite..."},{"label":"ham","message":"Indians r poor but India is not a poor country. Says one of the swiss bank directors. He says that \" <#> lac crore\" of Indian money is deposited in swiss banks which can be used for 'taxless' budget for <#> yrs. Can give <#> crore jobs to all Indians. From any village to Delhi 4 lane roads. Forever free power suply to more than <#> social projects. Every citizen can get monthly <#> \/- for <#> yrs. No need of World Bank & IMF loan. Think how our money is blocked by rich politicians. We have full rights against corrupt politicians. Itna forward karo ki pura INDIA padhe.g.m.\""},{"label":"ham","message":"Uncle boye. I need movies oh. Guide me. Plus you know torrents are not particularly legal here. And the system is slowing down. What should i do. Have a gr8 day. Plus have you started cos i dont meet you online. How was the honey moon."},{"label":"ham","message":"Oh ya ya. I remember da. ."},{"label":"ham","message":"Btw regarding that we should really try to see if anyone else can be our 4th guy before we commit to a random dude"},{"label":"spam","message":"For ur chance to win \u00a3250 cash every wk TXT: PLAY to 83370. T's&C's www.music-trivia.net custcare 08715705022, 1x150p\/wk."},{"label":"ham","message":"I not busy juz dun wan 2 go so early.. Hee.."},{"label":"ham","message":"Rightio. 11.48 it is then. Well arent we all up bright and early this morning."},{"label":"ham","message":"Great. I'm in church now, will holla when i get out"},{"label":"ham","message":"Back in brum! Thanks for putting us up and keeping us all and happy. See you soon"},{"label":"ham","message":"I donno if they are scorable"},{"label":"ham","message":"<#> great loxahatchee xmas tree burning update: you can totally see stars here"},{"label":"ham","message":"Yes but i dont care! I need you bad, princess!"},{"label":"ham","message":"The guy (kadeem) hasn't been selling since the break, I know one other guy but he's paranoid as fuck and doesn't like selling without me there and I can't be up there til late tonight"},{"label":"ham","message":"Sorry, I'll call later"},{"label":"ham","message":"Tmr then \u00fc brin lar... Aiya later i come n c lar... Mayb \u00fc neva set properly \u00fc got da help sheet wif \u00fc..."},{"label":"ham","message":"Do u knw dis no. <#> ?"},{"label":"ham","message":"Then she dun believe wat?"},{"label":"ham","message":"K..give back my thanks."},{"label":"ham","message":"I know complain num only..bettr directly go to bsnl offc nd apply for it.."},{"label":"ham","message":"Okay. I've seen it. So i should pick it on friday?"},{"label":"ham","message":"How much she payed. Suganya."},{"label":"ham","message":"Left dessert. U wan me 2 go suntec look 4 u?"},{"label":"ham","message":"Abeg, make profit. But its a start. Are you using it to get sponsors for the next event?"},{"label":"ham","message":"Onum ela pa. Normal than."},{"label":"ham","message":"K.k..how is your sister kids?"},{"label":"ham","message":"Cool, I'll text you when I'm on the way"},{"label":"ham","message":"Nope. Meanwhile she talk say make i greet you."},{"label":"ham","message":"i cant talk to you now.i will call when i can.dont keep calling."},{"label":"ham","message":"Anything lar..."},{"label":"ham","message":"Rose needs water, season needs change, poet needs imagination..My phone needs ur sms and i need ur lovely frndship forever...."},{"label":"ham","message":"Good afternoon, babe. How goes that day ? Any job prospects yet ? I miss you, my love ... *sighs* ... :-("},{"label":"ham","message":"They will pick up and drop in car.so no problem.."},{"label":"ham","message":"S.i think he is waste for rr.."},{"label":"ham","message":"He is world famamus...."},{"label":"ham","message":"Is there coming friday is leave for pongal?do you get any news from your work place."},{"label":"ham","message":"Lol well don't do it without me. We could have a big sale together."},{"label":"ham","message":"* Am on my way"},{"label":"ham","message":"Eat at old airport road... But now 630 oredi... Got a lot of pple..."},{"label":"ham","message":"sry can't talk on phone, with parents"},{"label":"spam","message":"Final Chance! Claim ur \u00a3150 worth of discount vouchers today! Text YES to 85023 now! SavaMob, member offers mobile! T Cs SavaMob POBOX84, M263UZ. \u00a33.00 Subs 16"},{"label":"ham","message":"Ok lor wat time \u00fc finish?"},{"label":"ham","message":"Princess, i like to make love <#> times per night. Hope thats not a problem!"},{"label":"ham","message":"Mm i am on the way to railway"},{"label":"ham","message":"i dnt wnt to tlk wid u"},{"label":"ham","message":"I'm done. I'm sorry. I hope your next space gives you everything you want. Remember all the furniture is yours. If i'm not around when you move it, just lock all the locks and leave the key with jenne."},{"label":"ham","message":"Not yet. Just i'd like to keep in touch and it will be the easiest way to do that from barcelona. By the way how ru and how is the house?"},{"label":"spam","message":"Sppok up ur mob with a Halloween collection of nokia logo&pic message plus a FREE eerie tone, txt CARD SPOOK to 8007"},{"label":"spam","message":"Urgent! call 09066612661 from landline. Your complementary 4* Tenerife Holiday or \u00a310,000 cash await collection SAE T&Cs PO Box 3 WA14 2PX 150ppm 18+ Sender: Hol Offer"},{"label":"ham","message":"K.:)do it at evening da:)urgent:)"},{"label":"ham","message":"Pansy! You've been living in a jungle for two years! Its my driving you should be more worried about!"},{"label":"ham","message":"Mm have some kanji dont eat anything heavy ok"},{"label":"ham","message":"Only if you promise your getting out as SOON as you can. And you'll text me in the morning to let me know you made it in ok."},{"label":"ham","message":"Lol that's different. I don't go trying to find every real life photo you ever took."},{"label":"ham","message":"I dont thnk its a wrong calling between us"},{"label":"ham","message":"K ill drink.pa then what doing. I need srs model pls send it to my mail id pa."},{"label":"ham","message":"Aiyah e rain like quite big leh. If drizzling i can at least run home."},{"label":"ham","message":"I have 2 docs appointments next week.:\/ I'm tired of them shoving stuff up me. Ugh why couldn't I have had a normal body?"},{"label":"ham","message":"Dun b sad.. It's over.. Dun thk abt it already. Concentrate on ur other papers k."},{"label":"ham","message":"Greetings me, ! Consider yourself excused."},{"label":"ham","message":"No drama Pls.i have had enough from you and family while i am struggling in the hot sun in a strange place.No reason why there should be an ego of not going 'IF NOT INVITED' when actually its necessity to go.wait for very serious reppurcussions."},{"label":"ham","message":"they released another Italian one today and it has a cosign option"},{"label":"ham","message":"You at mu? You should try to figure out how much money everyone has for gas and alcohol, jay and I are trying to figure out our weed budget"},{"label":"spam","message":"WINNER! As a valued network customer you hvae been selected to receive a \u00a3900 reward! To collect call 09061701444. Valid 24 hours only. ACL03530150PM"},{"label":"ham","message":"HCL chennai requires FRESHERS for voice process.Excellent english needed.Salary upto <#> .Call Ms.Suman <#> for Telephonic interview -via Indyarocks.com"},{"label":"ham","message":"Dai what this da.. Can i send my resume to this id."},{"label":"ham","message":"I know where the <#> is, I'll be there around 5"},{"label":"ham","message":"Yup i've finished c \u00fc there..."},{"label":"ham","message":"Remember to ask alex about his pizza"},{"label":"ham","message":"No da..today also i forgot.."},{"label":"ham","message":"Ola would get back to you maybe not today but I ve told him you can be his direct link in the US in getting cars he bids for online, you arrange shipping and you get a cut. Or U????? For a partnership where U????? Invest money for shipping and he takes care of the rest!U??Wud b self reliant soon dnt worry"},{"label":"ham","message":"Fwiw the reason I'm only around when it's time to smoke is that because of gas I can only afford to be around when someone tells me to be and that apparently only happens when somebody wants to light up"},{"label":"ham","message":"Hello, my boytoy! I made it home and my constant thought is of you, my love. I hope your having a nice visit but I can't wait till you come home to me ...*kiss*"},{"label":"ham","message":"Congrats kano..whr s the treat maga?"},{"label":"ham","message":"Who u talking about?"},{"label":"ham","message":"Yup..."},{"label":"ham","message":"Ok..."},{"label":"ham","message":"U wake up already? Wat u doing? U picking us up later rite? I'm taking sq825, reaching ard 7 smth 8 like dat. U can check e arrival time. C ya soon..."},{"label":"ham","message":"Yunny i'm walking in citylink now \u00fc faster come down... Me very hungry..."},{"label":"ham","message":"Er yep sure. Props?"},{"label":"ham","message":"Hiya , have u been paying money into my account? If so, thanks. Got a pleasant surprise when i checked my balance -u c, i don't get statements 4 that acc"},{"label":"spam","message":"U have won a nokia 6230 plus a free digital camera. This is what u get when u win our FREE auction. To take part send NOKIA to 83383 now. POBOX114\/14TCR\/W1 16"},{"label":"ham","message":"Ok ill send you with in <DECIMAL> ok."},{"label":"ham","message":"Bognor it is! Should be splendid at this time of year."},{"label":"ham","message":"Yes.i'm in office da:)"},{"label":"ham","message":"Sorry, I'll call later"},{"label":"ham","message":"Joy's father is John. Then John is the NAME of Joy's father. Mandan"},{"label":"ham","message":"Ok. I only ask abt e movie. U wan ktv oso?"},{"label":"ham","message":"Misplaced your number and was sending texts to your old number. Wondering why i've not heard from you this year. All the best in your mcat. Got this number from my atlanta friends"},{"label":"ham","message":"Sorry, I'll call later"},{"label":"ham","message":"Dunno lei... I might b eatin wif my frens... If \u00fc wan to eat then i wait 4 \u00fc lar"},{"label":"ham","message":"Sorry, I'll call later"},{"label":"spam","message":"FREE entry into our \u00a3250 weekly comp just send the word WIN to 80086 NOW. 18 T&C www.txttowin.co.uk"},{"label":"ham","message":"Say this slowly.? GOD,I LOVE YOU & I NEED YOU,CLEAN MY HEART WITH YOUR BLOOD.Send this to Ten special people & u c miracle tomorrow, do it,pls,pls do it..."},{"label":"ham","message":"Do u noe how 2 send files between 2 computers?"},{"label":"ham","message":"Mmmmm ... I loved waking to your words this morning ! I miss you too, my Love. I hope your day goes well and you are happy. I wait for us to be together again"},{"label":"ham","message":"jay says he'll put in <#>"},{"label":"ham","message":"Can you just come in for a sec? There's somebody here I want you to see"},{"label":"ham","message":"So the sun is anti sleep medicine."},{"label":"ham","message":"What's happening with you. Have you gotten a job and have you begun registration for permanent residency"},{"label":"ham","message":"Yup ok..."},{"label":"ham","message":"Glad it went well :) come over at 11 then we'll have plenty of time before claire goes to work."},{"label":"ham","message":"Ok enjoy . R u there in home."},{"label":"ham","message":"Can you pls pls send me a mail on all you know about relatives coming to deliver here? All you know about costs, risks, benefits and anything else. Thanks."},{"label":"ham","message":"You do what all you like"},{"label":"ham","message":"That's y we haf to combine n c how lor..."},{"label":"ham","message":"The monthly amount is not that terrible and you will not pay anything till 6months after finishing school."},{"label":"ham","message":"Hmmm:)how many players selected?"},{"label":"ham","message":"They said if its gonna snow, it will start around 8 or 9 pm tonite! They are predicting an inch of accumulation."},{"label":"ham","message":"I dont. Can you send it to me. Plus how's mode."},{"label":"ham","message":"Aiyo please \u00fc got time meh."},{"label":"ham","message":"Package all your programs well"},{"label":"ham","message":"She is our sister.. She belongs 2 our family.. She is d hope of tomorrow.. Pray 4 her,who was fated 4 d Shoranur train incident. Lets hold our hands together & fuelled by love & concern prior 2 her grief & pain. Pls join in dis chain & pass it. STOP VIOLENCE AGAINST WOMEN."},{"label":"ham","message":"So are you guys asking that i get that slippers again or its gone with last year"},{"label":"ham","message":"Company is very good.environment is terrific and food is really nice:)"},{"label":"spam","message":"Text82228>> Get more ringtones, logos and games from www.txt82228.com. Questions: info@txt82228.co.uk"},{"label":"ham","message":"Honestly i've just made a lovely cup of tea and promptly dropped my keys in it and then burnt my fingers getting them out!"},{"label":"ham","message":"Yup but not studying surfing lor. I'm in e lazy mode today."},{"label":"ham","message":"Please sen :)my kind advice :-)please come here and try:-)"},{"label":"ham","message":"I'm done. C \u00fc there."},{"label":"ham","message":"Oh fine, I'll be by tonight"},{"label":"ham","message":"\u00dc give me some time to walk there."},{"label":"ham","message":"I'll reach in ard 20 mins ok..."},{"label":"spam","message":"FreeMSG You have been awarded a FREE mini DIGITAL CAMERA, just reply SNAP to collect your prize! (quizclub Opt out? Stop 80122300p\/wk SP:RWM Ph:08704050406)"},{"label":"ham","message":"Fuck babe ... What happened to you ? How come you never came back?"},{"label":"spam","message":"This message is brought to you by GMW Ltd. and is not connected to the"},{"label":"ham","message":"Some friends want me to drive em someplace, probably take a while"},{"label":"ham","message":"I also thk too fast... Xy suggest one not me. U dun wan it's ok. Going 2 rain leh where got gd."},{"label":"ham","message":"Are you still getting the goods."},{"label":"ham","message":"And maybe some pressies"},{"label":"ham","message":"Yeah I am, so I'll leave maybe 7ish?"},{"label":"ham","message":"K..k..i'm also fine:)when will you complete the course?"},{"label":"ham","message":"Under the sea, there lays a rock. In the rock, there is an envelope. In the envelope, there is a paper. On the paper, there are 3 words... '"},{"label":"ham","message":"I told her I had a Dr appt next week. She thinks I'm gonna die. I told her its just a check. Nothing to be worried about. But she didn't listen."},{"label":"ham","message":"You in your room? I need a few"},{"label":"ham","message":"I dont want to hear anything"},{"label":"ham","message":"Hey. For me there is no leave on friday. Wait i will ask my superior and tell you.."},{"label":"ham","message":"Ultimately tor motive tui achieve korli."},{"label":"ham","message":"From 5 to 2 only my work timing."},{"label":"ham","message":"\u2026 and don\u2018t worry we\u2018ll have finished by march \u2026 ish!"},{"label":"ham","message":"The house is on the water with a dock, a boat rolled up with a newscaster who dabbles in jazz flute behind the wheel"},{"label":"spam","message":"Congrats 2 mobile 3G Videophones R yours. call 09063458130 now! videochat wid ur mates, play java games, Dload polypH music, noline rentl. bx420. ip4. 5we. 150p"},{"label":"spam","message":"Your next amazing xxx PICSFREE1 video will be sent to you enjoy! If one vid is not enough for 2day text back the keyword PICSFREE1 to get the next video."},{"label":"ham","message":"Now thats going to ruin your thesis!"},{"label":"ham","message":"In sch but neva mind u eat 1st lor.."},{"label":"ham","message":"Hey whats up? U sleeping all morning?"},{"label":"ham","message":"Erm. I thought the contract ran out the4th of october."},{"label":"ham","message":"I dunno until when... Lets go learn pilates..."},{"label":"spam","message":"U are subscribed to the best Mobile Content Service in the UK for \u00a33 per ten days until you send STOP to 83435. Helpline 08706091795."},{"label":"ham","message":"Yup i'm elaborating on the safety aspects and some other issues.."},{"label":"spam","message":"3 FREE TAROT TEXTS! Find out about your love life now! TRY 3 FOR FREE! Text CHANCE to 85555 16 only! After 3 Free, Msgs \u00a31.50 each"},{"label":"ham","message":"Goodmorning, today i am late for 1hr."},{"label":"ham","message":"Hi happy birthday. Hi hi hi hi hi hi hi"},{"label":"ham","message":"I will be outside office take all from there"},{"label":"ham","message":"If you don't respond imma assume you're still asleep and imma start calling n shit"},{"label":"ham","message":"Aight, see you in a bit"},{"label":"ham","message":"My superior telling that friday is leave for all other department except ours:)so it will be leave for you:)any way call waheed fathima hr and conform it:)"},{"label":"spam","message":"Join the UK's horniest Dogging service and u can have sex 2nite!. Just sign up and follow the instructions. Txt ENTRY to 69888 now! Nyt.EC2A.3LP.msg@150p"},{"label":"ham","message":"Lol I have to take it. member how I said my aunt flow didn't visit for 6 months? It's cause I developed ovarian cysts. Bc is the only way to shrink them."},{"label":"ham","message":"Still work going on:)it is very small house."},{"label":"ham","message":"My friend just got here and says he's upping his order by a few grams (he's got $ <#> ), when can you get here?"},{"label":"ham","message":"Tmr timin still da same wat cos i got lesson until 6..."},{"label":"ham","message":"That\u2018s the thing with apes, u can fight to the death to keep something, but the minute they have it when u let go, thats it!"},{"label":"spam","message":"Sunshine Quiz Wkly Q! Win a top Sony DVD player if u know which country Liverpool played in mid week? Txt ansr to 82277. \u00a31.50 SP:Tyrone"},{"label":"ham","message":"No i'm not gonna be able to. || too late notice. || i'll be home in a few weeks anyway. || what are the plans"},{"label":"ham","message":"Got fujitsu, ibm, hp, toshiba... Got a lot of model how to say..."},{"label":"ham","message":"Okie... Thanx..."},{"label":"ham","message":"Gosh that , what a pain. Spose I better come then."},{"label":"ham","message":"As usual..iam fine, happy & doing well..:)"},{"label":"ham","message":"Okie"},{"label":"ham","message":"So when you gonna get rimac access"},{"label":"ham","message":"\"Im at arestaurant eating squid! i will be out about 10:30 wanna dosomething or is that to late?\""},{"label":"ham","message":"You call times job today ok umma and ask them to speed up"},{"label":"ham","message":"\"HELLO U.CALL WEN U FINISH WRK.I FANCY MEETIN UP WIV U ALL TONITE AS I NEED A BREAK FROM DABOOKS. DID 4 HRS LAST NITE+2 TODAY OF WRK!\""},{"label":"ham","message":"R U &SAM P IN EACHOTHER. IF WE MEET WE CAN GO 2 MY HOUSE"},{"label":"ham","message":":-) yeah! Lol. Luckily i didn't have a starring role like you!"},{"label":"ham","message":"Hello madam how are you ?"},{"label":"ham","message":"Awesome, text me when you're restocked"},{"label":"ham","message":"As usual..iam fine, happy & doing well..:)"},{"label":"spam","message":"Knock Knock Txt whose there to 80082 to enter r weekly draw 4 a \u00a3250 gift voucher 4 a store of yr choice. T&Cs www.tkls.com age16 to stoptxtstop\u00a31.50\/week"},{"label":"ham","message":"Yes. It's all innocent fun. O:-)"},{"label":"ham","message":"Thanks for sending this mental ability question.."},{"label":"ham","message":"Sir, hope your day is going smoothly. i really hoped i wont have to bother you about this. I have some bills that i can't settle this month. I am out of all extra cash. I know this is a challenging time for you also but i have to let you know."},{"label":"ham","message":"2marrow only. Wed at <#> to 2 aha."},{"label":"ham","message":"I went to ur hon lab but no one is there."},{"label":"ham","message":"I cant pick the phone right now. Pls send a message"},{"label":"ham","message":"Hey pple...$700 or $900 for 5 nights...Excellent location wif breakfast per!!!"},{"label":"spam","message":"Hi - this is your Mailbox Messaging SMS alert. You have 40 matches. Please call back on 09056242159 to retrieve your messages and matches cc100p\/min"},{"label":"ham","message":"How come?"},{"label":"ham","message":"Lol! Nah wasn't too bad thanks. Its good to b home but its been quite a reality check. Hows ur day been? Did u do anything with website?"},{"label":"ham","message":"Ok lor..."},{"label":"ham","message":"I'm coming home 4 dinner."},{"label":"ham","message":"S da..al r above <#>"},{"label":"spam","message":"FREE RING TONE just text \"POLYS\" to 87131. Then every week get a new tone. 0870737910216yrs only \u00a31.50\/wk."},{"label":"ham","message":"Unni thank you dear for the recharge..Rakhesh"},{"label":"ham","message":"I know I'm lacking on most of this particular dramastorm's details but for the most part I'm not worried about that"},{"label":"ham","message":"Haha... They cant what... At the most tmr forfeit... haha so how?"},{"label":"ham","message":"Hey there! Glad u r better now. I hear u treated urself to a digi cam, is it good? We r off at 9pm. Have a fab new year, c u in coupla wks!"},{"label":"ham","message":"No way I'm going back there!"},{"label":"spam","message":"URGENT! Your mobile No 077xxx WON a \u00a32,000 Bonus Caller Prize on 02\/06\/03! This is the 2nd attempt to reach YOU! Call 09066362206 ASAP! BOX97N7QP, 150ppm"},{"label":"ham","message":"I WILL CAL YOU SIR. In meeting"},{"label":"ham","message":"That's what I love to hear :V see you sundayish, then"},{"label":"ham","message":"Sorry da thangam, very very sorry i am held up with prasad."},{"label":"ham","message":"Tiwary to rcb.battle between bang and kochi."},{"label":"ham","message":"Thank god they are in bed!"},{"label":"ham","message":"No I don't have cancer. Moms making a big deal out of a regular checkup aka pap smear"},{"label":"ham","message":"Am in gobi arts college"},{"label":"ham","message":"Why she wants to talk to me"},{"label":"ham","message":"Pandy joined 4w technologies today.he got job.."},{"label":"spam","message":"You are guaranteed the latest Nokia Phone, a 40GB iPod MP3 player or a \u00a3500 prize! Txt word: COLLECT to No: 83355! IBHltd LdnW15H 150p\/Mtmsgrcvd18"},{"label":"ham","message":"They can try! They can get lost, in fact. Tee hee"},{"label":"ham","message":"Hi! You just spoke to MANEESHA V. We'd like to know if you were satisfied with the experience. Reply Toll Free with Yes or No."},{"label":"ham","message":"My friends use to call the same."},{"label":"ham","message":"Sorry, I'll call later"},{"label":"ham","message":"Em, its olowoyey@ usc.edu have a great time in argentina. Not sad about secretary, everything is a blessing"},{"label":"ham","message":"It,,s a taxt massage....tie-pos argh ok! Lool!"},{"label":"ham","message":"Hi, can i please get a <#> dollar loan from you. I.ll pay you back by mid february. Pls."},{"label":"ham","message":"You might want to pull out more just in case and just plan on not spending it if you can, I don't have much confidence in derek and taylor's money management"},{"label":"ham","message":"Do you like shaking your booty on the dance floor?"},{"label":"ham","message":"Text me when you get off, don't call, my phones having problems"},{"label":"ham","message":"No need for the drug anymore."},{"label":"ham","message":"Sorry da:)i was thought of calling you lot of times:)lil busy.i will call you at noon.."},{"label":"ham","message":"Its sarcasm.. .nt scarcasim"},{"label":"ham","message":"Great! I have to run now so ttyl!"},{"label":"ham","message":"Feel like trying kadeem again? :V"},{"label":"ham","message":"Dai <#> naal eruku."},{"label":"ham","message":"Not yet chikku..wat abt u?"},{"label":"ham","message":"Ok..."},{"label":"ham","message":"Want to finally have lunch today?"},{"label":"ham","message":"Do you know when dad will be back?"},{"label":"spam","message":"Hello darling how are you today? I would love to have a chat, why dont you tell me what you look like and what you are in to sexy?"},{"label":"spam","message":"8007 FREE for 1st week! No1 Nokia tone 4 ur mob every week just txt NOKIA to 8007 Get txting and tell ur mates www.getzed.co.uk POBox 36504 W4 5WQ norm 150p\/tone 16+"},{"label":"ham","message":"He remains a bro amongst bros"},{"label":"ham","message":"R u meeting da ge at nite tmr?"},{"label":"ham","message":"* Was a nice day and, impressively, i was sensible, went home early and now feel fine. Or am i just boring?! When's yours, i can't remember."},{"label":"ham","message":"Why de. You looking good only:-).."},{"label":"spam","message":"Wanna get laid 2nite? Want real Dogging locations sent direct to ur mobile? Join the UK's largest Dogging Network. Txt PARK to 69696 now! Nyt. ec2a. 3lp \u00a31.50\/msg"},{"label":"spam","message":"we tried to contact you re your response to our offer of a new nokia fone and camcorder hit reply or call 08000930705 for delivery"},{"label":"ham","message":"Yes. They replied my mail. I'm going to the management office later. Plus will in to bank later also.or on wednesday."},{"label":"ham","message":"That's cool, I'll come by like <#> ish"},{"label":"ham","message":"Super msg da:)nalla timing."},{"label":"ham","message":"Good afternoon, my boytoy ... How are you feeling today ? Better I hope? Are you being my good boy? Are you my obedient, slave? Do you please your Queen?"},{"label":"ham","message":"I am 6 ft. We will be a good combination!"},{"label":"ham","message":"I'm sick !! I'm needy !! I want you !! *pouts* *stomps feet* Where are you ?! *pouts* *stomps feet* I want my slave !! I want him now !!"},{"label":"ham","message":"* Am on a train back from nortpton so i'm afraid not!"},{"label":"ham","message":"Where in abj are you serving. Are you staying with dad or alone."},{"label":"ham","message":"Was playng 9 doors game and gt racing on phone lol"},{"label":"spam","message":"New Tones This week include: 1)McFly-All Ab.., 2) Sara Jorge-Shock.. 3) Will Smith-Switch.. To order follow instructions on next message"},{"label":"ham","message":"Solve d Case : A Man Was Found Murdered On <DECIMAL> . <#> AfterNoon. 1,His wife called Police. 2,Police questioned everyone. 3,Wife: Sir,I was sleeping, when the murder took place. 4.Cook: I was cooking. 5.Gardener: I was picking vegetables. 6.House-Maid: I went 2 d post office. 7.Children: We went 2 play. 8.Neighbour: We went 2 a marriage. Police arrested d murderer Immediately. Who's It? Reply With Reason, If U r Brilliant."},{"label":"ham","message":"I'm on da bus going home..."},{"label":"ham","message":"I got a call from a landline number. . . I am asked to come to anna nagar . . . I will go in the afternoon"},{"label":"ham","message":"I'm okay. Chasing the dream. What's good. What are you doing next."},{"label":"ham","message":"Yupz... I've oredi booked slots 4 my weekends liao..."},{"label":"spam","message":"URGENT! We are trying to contact U. Todays draw shows that you have won a \u00a3800 prize GUARANTEED. Call 09050003091 from land line. Claim C52. Valid 12hrs only"},{"label":"ham","message":"There r many model..sony ericson also der.. <#> ..it luks good bt i forgot modl no"},{"label":"ham","message":"Okie"},{"label":"ham","message":"Yes I know the cheesy songs from frosty the snowman :)"},{"label":"ham","message":"Ya ok, vikky vl c witin <#> mins and il reply u.."},{"label":"spam","message":"sports fans - get the latest sports news str* 2 ur mobile 1 wk FREE PLUS a FREE TONE Txt SPORT ON to 8007 www.getzed.co.uk 0870141701216+ norm 4txt\/120p"},{"label":"ham","message":"Hey tmr meet at bugis 930 ?"},{"label":"spam","message":"Urgent Urgent! We have 800 FREE flights to Europe to give away, call B4 10th Sept & take a friend 4 FREE. Call now to claim on 09050000555. BA128NNFWFLY150ppm"},{"label":"ham","message":"All these nice new shirts and the only thing I can wear them to is nudist themed ;_; you in mu?"},{"label":"ham","message":"Hey sexy buns! What of that day? No word from you this morning on YM ... :-( ... I think of you"},{"label":"ham","message":"And whenever you and i see we can still hook up too."},{"label":"ham","message":"Nope but i'm going home now then go pump petrol lor... Like going 2 rain soon..."},{"label":"ham","message":"Can you use foreign stamps for whatever you send them off for?"},{"label":"spam","message":"FROM 88066 LOST \u00a312 HELP"},{"label":"ham","message":"Oh baby of the house. How come you dont have any new pictures on facebook"},{"label":"ham","message":"Feb <#> is \"I LOVE U\" day. Send dis to all ur \"VALUED FRNDS\" evn me. If 3 comes back u'll gt married d person u luv! If u ignore dis u will lose ur luv 4 Evr"},{"label":"ham","message":"Hiya, sorry didn't hav signal. I haven't seen or heard from and neither has, which is unusual in itself! I'll put on the case and get him to sort it out! Hugs and snogs."},{"label":"ham","message":"Omw back to tampa from west palm, you hear what happened?"},{"label":"ham","message":"Yup no more already... Thanx 4 printing n handing it up."},{"label":"spam","message":"FreeMsg: Fancy a flirt? Reply DATE now & join the UKs fastest growing mobile dating service. Msgs rcvd just 25p to optout txt stop to 83021. Reply DATE now!"},{"label":"ham","message":"What i mean is do they come chase you out when its over or is it stated you can watch as many movies as you want."},{"label":"ham","message":"S now only i took tablets . Reaction morning only."},{"label":"spam","message":"Great NEW Offer - DOUBLE Mins & DOUBLE Txt on best Orange tariffs AND get latest camera phones 4 FREE! Call MobileUpd8 free on 08000839402 NOW! or 2stoptxt T&Cs"},{"label":"ham","message":"Nah, I'm a perpetual DD"},{"label":"ham","message":"Sorry de i went to shop."},{"label":"spam","message":"Hope you enjoyed your new content. text stop to 61610 to unsubscribe. help:08712400602450p Provided by tones2you.co.uk"},{"label":"ham","message":"Wen ur lovable bcums angry wid u, dnt take it seriously.. Coz being angry is d most childish n true way of showing deep affection, care n luv!.. kettoda manda... Have nice day da."},{"label":"ham","message":"Hey you still want to go for yogasana? Coz if we end at cine then can go bathe and hav the steam bath"},{"label":"ham","message":"Nope i'm not drivin... I neva develop da photos lei..."},{"label":"ham","message":"I am thinking of going down to reg for pract lessons.. Flung my advance.. Haha wat time u going?"},{"label":"ham","message":"Cool. I am <#> inches long. hope you like them big!"},{"label":"ham","message":"House-Maid is the murderer, coz the man was murdered on <#> th January.. As public holiday all govt.instituitions are closed,including post office..understand?"},{"label":"ham","message":"Okie.. Thanx.."},{"label":"spam","message":"18 days to Euro2004 kickoff! U will be kept informed of all the latest news and results daily. Unsubscribe send GET EURO STOP to 83222."},{"label":"ham","message":"Go where n buy? Juz buy when we get there lar."},{"label":"ham","message":"Ok lor..."},{"label":"ham","message":"I'm working technical support :)voice process."},{"label":"ham","message":"It's justbeen overa week since we broke up and already our brains are going to mush!"},{"label":"ham","message":"Tunde, how are you doing. This is just wishing you a great day. Abiola."},{"label":"ham","message":"Nope... C \u00fc then..."},{"label":"ham","message":"No. But we'll do medical missions to nigeria"},{"label":"ham","message":"No i am not having not any movies in my laptop"},{"label":"ham","message":"Whatsup there. Dont u want to sleep"},{"label":"spam","message":"Urgent Please call 09066612661 from landline. \u00a35000 cash or a luxury 4* Canary Islands Holiday await collection. T&Cs SAE award. 20M12AQ. 150ppm. 16+ \u201c"},{"label":"spam","message":"Urgent! Please call 09066612661 from your landline, your complimentary 4* Lux Costa Del Sol holiday or \u00a31000 CASH await collection. ppm 150 SAE T&Cs James 28, EH74RR"},{"label":"ham","message":"I havent lei.. Next mon can?"},{"label":"ham","message":"Mm feeling sleepy. today itself i shall get that dear"},{"label":"ham","message":"How dare you stupid. I wont tell anything to you. Hear after i wont talk to you:-."},{"label":"ham","message":"Do \u00fc noe if ben is going?"},{"label":"ham","message":"Can you do a mag meeting this avo at some point?"},{"label":"ham","message":"I meant middle left or right?"},{"label":"ham","message":"Really? I crashed out cuddled on my sofa."},{"label":"ham","message":"Hi Chachi tried calling u now unable to reach u .. Pl give me a missed cal once u c tiz msg Kanagu"},{"label":"ham","message":"I sent you the prices and do you mean the <#> g,"},{"label":"ham","message":"Are you this much buzy"},{"label":"ham","message":"Nothing. Can..."},{"label":"spam","message":"I don't know u and u don't know me. Send CHAT to 86688 now and let's find each other! Only 150p\/Msg rcvd. HG\/Suite342\/2Lands\/Row\/W1J6HL LDN. 18 years or over."},{"label":"ham","message":"No * am working on the ringing u thing but have whole houseful of screaming brats so * am pulling my hair out! Loving u"},{"label":"ham","message":"But my family not responding for anything. Now am in room not went to home for diwali but no one called me and why not coming. It makes me feel like died."},{"label":"ham","message":"Tick, tick, tick ... Babe"},{"label":"ham","message":"R \u00fc going 4 today's meeting?"},{"label":"ham","message":"K da:)how many page you want?"},{"label":"ham","message":"Ya had just now.onion roast."},{"label":"ham","message":"Send his number and give reply tomorrow morning for why you said that to him like that ok"},{"label":"ham","message":"You said not now. No problem. When you can. Let me know."},{"label":"ham","message":"Ok but tell me half an hr b4 u come i need 2 prepare."},{"label":"ham","message":"Play w computer? Aiyah i tok 2 u lor?"},{"label":"ham","message":"Sat right? Okay thanks..."},{"label":"ham","message":"Derp. Which is worse, a dude who always wants to party or a dude who files a complaint about the three drug abusers he lives with"},{"label":"ham","message":"Ok Chinese food on its way. When I get fat you're paying for my lipo."},{"label":"ham","message":"We r outside already."},{"label":"ham","message":"Have a good trip. Watch out for . Remember when you get back we must decide about easter."},{"label":"ham","message":"Yo we are watching a movie on netflix"},{"label":"ham","message":"What time. I\u2018m out until prob 3 or so"},{"label":"ham","message":"Can meh? Thgt some will clash... Really ah, i dun mind... I dun seen to have lost any weight... Gee..."},{"label":"ham","message":"I dont thnk its a wrong calling between us"},{"label":"ham","message":"I am not sure about night menu. . . I know only about noon menu"},{"label":"ham","message":"ARR birthday today:) i wish him to get more oscar."},{"label":"ham","message":"Say this slowly.? GOD,I LOVE YOU & I NEED YOU,CLEAN MY HEART WITH YOUR BLOOD.Send this to Ten special people & u c miracle tomorrow, do it,pls,pls do it..."},{"label":"ham","message":"Open rebtel with firefox. When it loads just put plus sign in the user name place, and it will show you two numbers. The lower number is my number. Once you pick that number the pin will display okay!"},{"label":"ham","message":"and picking them up from various points"},{"label":"spam","message":"Married local women looking for discreet action now! 5 real matches instantly to your phone. Text MATCH to 69969 Msg cost 150p 2 stop txt stop BCMSFWC1N3XX"},{"label":"ham","message":"Wow v v impressed. Have funs shopping!"},{"label":"ham","message":"I am on the way to ur home"},{"label":"spam","message":"Burger King - Wanna play footy at a top stadium? Get 2 Burger King before 1st Sept and go Large or Super with Coca-Cola and walk out a winner"},{"label":"ham","message":"No problem. Talk to you later"},{"label":"ham","message":"Then ur sis how?"},{"label":"ham","message":"Still in customer place"},{"label":"spam","message":"How come it takes so little time for a child who is afraid of the dark to become a teenager who wants to stay out all night?"},{"label":"ham","message":"Dude u knw also telugu..thts gud..k, gud nyt.."},{"label":"ham","message":"We confirm eating at esplanade?"},{"label":"ham","message":"Send me your id and password"},{"label":"ham","message":"Kind of. Took it to garage. Centre part of exhaust needs replacing. Part ordered n taking it to be fixed tomo morning."},{"label":"spam","message":"For ur chance to win a \u00a3250 cash every wk TXT: ACTION to 80608. T's&C's www.movietrivia.tv custcare 08712405022, 1x150p\/wk."},{"label":"ham","message":"Well I might not come then..."},{"label":"ham","message":"Long after I quit. I get on only like 5 minutes a day as it is."},{"label":"ham","message":"Then its most likely called Mittelschmertz. Google it. If you dont have paracetamol dont worry it will go."},{"label":"ham","message":"Well at this right I'm gonna have to get up and check today's steam sales\/pee so text me when you want me to come get you"},{"label":"ham","message":"Just arrived, see you in a couple days <3"},{"label":"ham","message":"K, wat s tht incident?"},{"label":"ham","message":"Yeah get the unlimited"},{"label":"ham","message":"cThen i thk shd b enuff.. Still got conclusion n contents pg n references.. I'll b doing da contents pg n cover pg.."},{"label":"ham","message":"Forgot it takes me 3 years to shower, sorry. Where you at\/your phone dead yet?"},{"label":"ham","message":"\u00dc got wat to buy tell us then \u00fc no need to come in again."},{"label":"ham","message":"When you are big..| God will bring success."},{"label":"spam","message":"U\u2019ve Bin Awarded \u00a350 to Play 4 Instant Cash. Call 08715203028 To Claim. EVERY 9th Player Wins Min \u00a350-\u00a3500. OptOut 08718727870"},{"label":"ham","message":"\u2026 we r stayin here an extra week, back next wed. How did we do in the rugby this weekend? Hi to and and , c u soon \""},{"label":"ham","message":"Well there's still a bit left if you guys want to tonight"},{"label":"ham","message":"Not from this campus. Are you in the library?"},{"label":"ham","message":"The affidavit says <#> E Twiggs St, division g, courtroom <#> , <TIME> AM. I'll double check and text you again tomorrow"},{"label":"ham","message":"How will I creep on you now? ;_;"},{"label":"ham","message":"Tell your friends what you plan to do on Valentines day @ <URL>"},{"label":"ham","message":"If I get there before you after your ten billion calls and texts so help me god"},{"label":"ham","message":"Purity of friendship between two is not about smiling after reading the forwarded message..Its about smiling just by seeing the name. Gud evng musthu"},{"label":"ham","message":"I've told him that i've returned it. That should i re order it."},{"label":"ham","message":"House-Maid is the murderer, coz the man was murdered on <#> th January.. As public holiday all govt.instituitions are closed,including post office.."},{"label":"ham","message":"Depends on where u going lor."},{"label":"ham","message":"And smile for me right now as you go and the world will wonder what you are smiling about and think your crazy and keep away from you ... *grins*"},{"label":"spam","message":"FreeMsg>FAV XMAS TONES!Reply REAL"},{"label":"ham","message":"Lil fever:) now fine:)"},{"label":"ham","message":"I think it's all still in my car"},{"label":"ham","message":"Can a not?"},{"label":"spam","message":"December only! Had your mobile 11mths+? You are entitled to update to the latest colour camera mobile for Free! Call The Mobile Update Co FREE on 08002986906"},{"label":"ham","message":"Yes princess! I want to catch you with my big strong hands..."},{"label":"ham","message":"Oh yeah I forgot. U can only take 2 out shopping at once."},{"label":"ham","message":"Mm so you asked me not to call radio"},{"label":"ham","message":"Thinkin about someone is all good. No drugs for that"},{"label":"ham","message":"Say this slowly.? GOD,I LOVE YOU & I NEED YOU,CLEAN MY HEART WITH YOUR BLOOD.Send this to Ten special people & u c miracle tomorrow, do it,pls,pls do it..."},{"label":"ham","message":"Enjoy the showers of possessiveness poured on u by ur loved ones, bcoz in this world of lies, it is a golden gift to be loved truly.."},{"label":"ham","message":"Alright if you're sure, let me know when you're leaving"},{"label":"ham","message":"Some are lasting as much as 2 hours. You might get lucky."},{"label":"ham","message":"Genius what's up. How your brother. Pls send his number to my skype."},{"label":"spam","message":"Gr8 Poly tones 4 ALL mobs direct 2u rply with POLY TITLE to 8007 eg POLY BREATHE1 Titles: CRAZYIN, SLEEPINGWITH, FINEST, YMCA :getzed.co.uk POBox365O4W45WQ 300p"},{"label":"ham","message":"Thk some of em find wtc too far... Weiyi not goin... E rest i dunno yet... R ur goin 4 dinner den i might b able to join..."},{"label":"ham","message":"Don't forget who owns you and who's private property you are ... And be my good boy always .. *passionate kiss*"},{"label":"spam","message":"INTERFLORA - \u0093It's not too late to order Interflora flowers for christmas call 0800 505060 to place your order before Midnight tomorrow."},{"label":"ham","message":"Oh god..taken the teeth?is it paining"},{"label":"spam","message":"ROMCAP Everyone around should be responding well to your presence since you are so warm and outgoing. You are bringing in a real breath of sunshine."},{"label":"ham","message":"Then u ask darren go n pick u lor... But i oso sian tmr haf 2 meet lect..."},{"label":"ham","message":"No need to buy lunch for me.. I eat maggi mee.."},{"label":"spam","message":"Congratulations - Thanks to a good friend U have WON the \u00a32,000 Xmas prize. 2 claim is easy, just call 08712103738 NOW! Only 10p per minute. BT-national-rate"},{"label":"ham","message":"Ok lor..."},{"label":"ham","message":"Oh right, ok. I'll make sure that i do loads of work during the day! got a really nasty cough today and is dry n shot so that should really help it!"},{"label":"ham","message":"Wife.how she knew the time of murder exactly"},{"label":"spam","message":"Send a logo 2 ur lover - 2 names joined by a heart. Txt LOVE NAME1 NAME2 MOBNO eg LOVE ADAM EVE 07123456789 to 87077 Yahoo! POBox36504W45WQ TxtNO 4 no ads 150p."},{"label":"ham","message":"Howz that persons story"},{"label":"ham","message":"Thanx 4 sending me home..."},{"label":"ham","message":"Its normally hot mail. Com you see!"},{"label":"spam","message":"You've won tkts to the EURO2004 CUP FINAL or \u00a3800 CASH, to collect CALL 09058099801 b4190604, POBOX 7876150ppm"},{"label":"ham","message":"U sick still can go shopping?"},{"label":"ham","message":"Ya they are well and fine., BBD(pooja) full pimples..even she become quite black..and ur rite here its too cold, wearing sweatter.."},{"label":"ham","message":"Nice.nice.how is it working?"},{"label":"ham","message":"1's reach home call me."},{"label":"ham","message":"Were trying to find a Chinese food place around here"},{"label":"ham","message":"Easy mate, * guess the quick drink was bit ambitious."},{"label":"ham","message":"BABE !!! I miiiiiiissssssssss you ! I need you !!! I crave you !!! :-( ... Geeee ... I'm so sad without you babe ... I love you ..."},{"label":"ham","message":"Ok thanx..."},{"label":"ham","message":"aathi..where are you dear.."},{"label":"ham","message":"Tunji, how's the queen? how are you doing. This is just wishing you a great day. Abiola."},{"label":"ham","message":"Today iZ Yellow rose day. If u love my frndship give me 1 misscall & send this to ur frndZ & See how many miss calls u get. If u get 6missed U marry ur Lover."},{"label":"ham","message":"Will be out of class in a few hours. Sorry"},{"label":"ham","message":"Wat time u finish ur lect today?"},{"label":"spam","message":"Free-message: Jamster!Get the crazy frog sound now! For poly text MAD1, for real text MAD2 to 88888. 6 crazy sounds for just 3 GBP\/week! 16+only! T&C's apply"},{"label":"ham","message":"Sad story of a Man - Last week was my b'day. My Wife did'nt wish me. My Parents forgot n so did my Kids . I went to work. Even my Colleagues did not wish. As I entered my cabin my PA said, '' Happy B'day Boss !!''. I felt special. She askd me 4 lunch. After lunch she invited me to her apartment. We went there. She said,'' do u mind if I go into the bedroom for a minute ? '' ''OK'', I sed in a sexy mood. She came out 5 minuts latr wid a cake...n My Wife, My Parents, My Kidz, My Friends n My Colleagues. All screaming.. SURPRISE !! and I was waiting on the sofa.. ... ..... ' NAKED...!"},{"label":"spam","message":"YOUR CHANCE TO BE ON A REALITY FANTASY SHOW call now = 08707509020 Just 20p per min NTT Ltd, PO Box 1327 Croydon CR9 5WB 0870 is a national = rate call"},{"label":"ham","message":"She's fine. Good to hear from you. How are you my dear? Happy new year oh."},{"label":"ham","message":"Are you going to wipro interview today?"},{"label":"ham","message":"how tall are you princess?"},{"label":"ham","message":"I doubt you could handle 5 times per night in any case..."},{"label":"ham","message":"Haha... Hope \u00fc can hear the receipt sound... Gd luck!"},{"label":"ham","message":"Your gonna be the death if me. I'm gonna leave a note that says its all robs fault. Avenge me."},{"label":"ham","message":"Japanese Proverb: If one Can do it, U too Can do it, If none Can do it,U must do it Indian version: If one Can do it, LET HIM DO it.. If none Can do it,LEAVE it!! And finally Kerala version: If one can do it, Stop him doing it.. If none can do it, Make a strike against it ..."},{"label":"ham","message":"Today i'm not workin but not free oso... Gee... Thgt u workin at ur fren's shop ?"},{"label":"ham","message":"In life when you face choices Just toss a coin not becoz its settle the question But while the coin in the air U will know what your heart is hoping for. Gudni8"},{"label":"ham","message":"Do you know why god created gap between your fingers..? So that, One who is made for you comes & fills those gaps by holding your hand with LOVE..!"},{"label":"ham","message":"I want to be there so i can kiss you and feel you next to me"},{"label":"ham","message":"I am not at all happy with what you saying or doing"},{"label":"spam","message":"Adult 18 Content Your video will be with you shortly"},{"label":"ham","message":"Ok that would b lovely, if u r sure. Think about wot u want to do, drinkin, dancin, eatin, cinema, in, out, about... Up to u! Wot about ?"},{"label":"ham","message":"What I'm saying is if you haven't explicitly told nora I know someone I'm probably just not gonna bother"},{"label":"ham","message":"He says hi and to get your ass back to south tampa (preferably at a kegger)"},{"label":"ham","message":"Smith waste da.i wanna gayle."},{"label":"ham","message":"Mum, i've sent you many many messages since i got here. I just want to know that you are actually getting them. Do enjoy the rest of your day."},{"label":"ham","message":"Aight, tomorrow around <#> it is"},{"label":"ham","message":"House-Maid is the murderer, coz the man was murdered on <#> th January.. As public holiday all govt.instituitions are closed,including post office..understand?"},{"label":"spam","message":"YOUR CHANCE TO BE ON A REALITY FANTASY SHOW call now = 08707509020 Just 20p per min NTT Ltd, PO Box 1327 Croydon CR9 5WB 0870 is a national = rate call."},{"label":"ham","message":"I actually did for the first time in a while. I went to bed not too long after i spoke with you. Woke up at 7. How was your night?"},{"label":"ham","message":"See you there!"},{"label":"ham","message":"I dont understand your message."},{"label":"ham","message":"Crucify is c not s. You should have told me earlier."},{"label":"ham","message":"Idk. You keep saying that you're not, but since he moved, we keep butting heads over freedom vs. responsibility. And i'm tired. I have so much other shit to deal with that i'm barely keeping myself together once this gets added to it."},{"label":"ham","message":"Fuck cedar key and fuck her (come over anyway tho)"},{"label":"ham","message":"twenty past five he said will this train have been to dur already or not coz i am in a reserved seat"},{"label":"spam","message":"Hey Boys. Want hot XXX pics sent direct 2 ur phone? Txt PORN to 69855, 24Hrs free and then just 50p per day. To stop text STOPBCM SF WC1N3XX"},{"label":"ham","message":"U still painting ur wall?"},{"label":"spam","message":"Last Chance! Claim ur \u00a3150 worth of discount vouchers today! Text SHOP to 85023 now! SavaMob, offers mobile! T Cs SavaMob POBOX84, M263UZ. \u00a33.00 Sub. 16"},{"label":"ham","message":"Printer is cool. I mean groovy. Wine is groovying"},{"label":"ham","message":"Hi Harish's rent has been transfred to ur Acnt."},{"label":"ham","message":"Anything lor is she coming?"},{"label":"ham","message":"Cbe is really good nowadays:)lot of shop and showrooms:)city is shaping good."},{"label":"ham","message":"\u00dc still attending da talks?"},{"label":"ham","message":"No probs hon! How u doinat the mo?"},{"label":"ham","message":"K I'll take care of it"},{"label":"ham","message":"I take it we didn't have the phone callon Friday. Can we assume we won't have it this year now?"},{"label":"ham","message":"My battery is low babe"},{"label":"ham","message":"Shuhui has bought ron's present it's a swatch watch..."},{"label":"ham","message":"Yeah there's quite a bit left, I'll swing by tomorrow when I get up"},{"label":"ham","message":"Babe? You said 2 hours and it's been almost 4 ... Is your internet down ?"},{"label":"ham","message":"K I'll be sure to get up before noon and see what's what"},{"label":"ham","message":"K...k...yesterday i was in cbe ."},{"label":"ham","message":"Went to ganesh dress shop"},{"label":"spam","message":"pdate_Now - Double mins and 1000 txts on Orange tariffs. Latest Motorola, SonyEricsson & Nokia & Bluetooth FREE! Call MobileUpd8 on 08000839402 or call2optout\/!YHL"},{"label":"ham","message":"\u00dc collecting ur laptop then going to configure da settings izzit?"},{"label":"ham","message":"If you r @ home then come down within 5 min"},{"label":"ham","message":"Aight, I should be there by 8 at the latest, probably closer to 7. Are jay and tyler down or should we just do two trips?"},{"label":"ham","message":"Come aftr <DECIMAL> ..now i m cleaning the house"},{"label":"spam","message":"Ur cash-balance is currently 500 pounds - to maximize ur cash-in now send CASH to 86688 only 150p\/msg. CC: 08718720201 PO BOX 114\/14 TCR\/W1"},{"label":"ham","message":"Bill, as in: Are there any letters for me. i\u2019m expecting one from orange that isn\u2019t a bill but may still say orange on it."},{"label":"ham","message":"Tell me pa. How is pain de."},{"label":"ham","message":"HI DARLIN I HOPE YOU HAD A NICE NIGHT I WISH I HAD COME CANT WAIT TO SEE YOU LOVE FRAN PS I WANT DIRTY ANAL SEX AND I WANT A 10 MAN GANG BANG"},{"label":"ham","message":"Ha. You don\u2018t know either. I did a a clever but simple thing with pears the other day, perfect for christmas."},{"label":"ham","message":"Helloooo... Wake up..! \"Sweet\" \"morning\" \"welcomes\" \"You\" \"Enjoy\" \"This Day\" \"with full of joy\".. \"GUD MRNG\"."},{"label":"ham","message":"ALRITE"},{"label":"ham","message":"Why must we sit around and wait for summer days to celebrate. Such a magical sight when the worlds dressed in white. Oooooh let there be snow."},{"label":"spam","message":"URGENT! Your Mobile number has been awarded with a \u00a32000 prize GUARANTEED. Call 09058094454 from land line. Claim 3030. Valid 12hrs only"},{"label":"ham","message":"How do you guys go to see movies on your side."},{"label":"ham","message":"Sorry,in meeting I'll call later"},{"label":"ham","message":"You didn't have to tell me that...now i'm thinking. Plus he's going to stop all your runs"},{"label":"ham","message":"Kindly send some one to our flat before <DECIMAL> today."},{"label":"spam","message":"Sorry! U can not unsubscribe yet. THE MOB offer package has a min term of 54 weeks> pls resubmit request after expiry. Reply THEMOB HELP 4 more info"},{"label":"ham","message":"Nothing lor... A bit bored too... Then y dun u go home early 2 sleep today..."},{"label":"ham","message":"What time should I tell my friend to be around?"},{"label":"ham","message":"Yes. that will be fine. Love you. Be safe."},{"label":"ham","message":"Thanks chikku..:-) gud nyt:-*"},{"label":"ham","message":"Is xy in ur car when u picking me up?"},{"label":"ham","message":"Thanx 4 the time we\u0092ve spent 2geva, its bin mint! Ur my Baby and all I want is u!xxxx"},{"label":"ham","message":"Yo, any way we could pick something up tonight?"},{"label":"ham","message":"I've not sent it. He can send me."},{"label":"ham","message":"Fine am simply sitting."},{"label":"ham","message":"Thts god's gift for birds as humans hav some natural gift frm god.."},{"label":"ham","message":"Are you coming to day for class."},{"label":"ham","message":"Im done. Just studyn in library"},{"label":"ham","message":"Ok... U enjoy ur shows..."},{"label":"ham","message":"Anything..."},{"label":"ham","message":"Where wuld I be without my baby? The thought alone mite break me and I don\u0092t wanna go crazy but everyboy needs his lady xxxxxxxx"},{"label":"ham","message":"Wat's my dear doing? Sleeping ah?"},{"label":"ham","message":"Hi' Test on <#> rd ...."},{"label":"ham","message":"Only 2% students solved this CAT question in 'xam... 5+3+2= <#> 9+2+4= <#> 8+6+3= <#> then 7+2+5=????? Tell me the answer if u r brilliant...1thing.i got d answr."},{"label":"ham","message":"Yo do you know anyone <#> or otherwise able to buy liquor? Our guy flaked and right now if we don't get a hold of somebody its just 4 loko all night"},{"label":"ham","message":"Yup n her fren lor. I'm meeting my fren at 730."},{"label":"ham","message":"Yeah, we got one lined up for us"},{"label":"ham","message":"And stop wondering \"wow is she ever going to stop tm'ing me ?!\" because I will tm you whenever I want because you are MINE ... *laughs*"},{"label":"ham","message":"Lol yep did that yesterday. Already got my fireplace. Now its just another icon sitting there for me."},{"label":"ham","message":"Hey i've booked the pilates and yoga lesson already... Haha"},{"label":"ham","message":"Are you ok. What happen to behave like this"},{"label":"spam","message":"You have 1 new message. Please call 08712400200."},{"label":"ham","message":"My supervisor find 4 me one lor i thk his students. I havent ask her yet. Tell u aft i ask her."},{"label":"ham","message":"Hello. No news on job, they are making me wait a fifth week! Yeah im up for some woozles and weasels... In exeter still, but be home about 3."},{"label":"ham","message":"No message..no responce..what happend?"},{"label":"spam","message":"We currently have a message awaiting your collection. To collect your message just call 08718723815."},{"label":"ham","message":"Hey babe, sorry i didn't get sooner. Gary can come and fix it cause he thinks he knows what it is but he doesn't go as far a Ptbo and he says it will cost <#> bucks. I don't know if it might be cheaper to find someone there ? We don't have any second hand machines at all right now, let me know what you want to do babe"},{"label":"ham","message":"make that 3! 4 fucks sake?! x"},{"label":"ham","message":"Leave it. U will always be ignorant."},{"label":"ham","message":"Nope but i'll b going 2 sch on fri quite early lor cos mys sis got paper in da morn :-)"},{"label":"ham","message":"at bruce b downs & fletcher now"},{"label":"ham","message":"Where are you ? You said you would be here when I woke ... :-("},{"label":"ham","message":"Hey now am free you can call me."},{"label":"ham","message":"Tell me whos this pls:-)"},{"label":"spam","message":"URGENT! Your mobile was awarded a \u00a31,500 Bonus Caller Prize on 27\/6\/03. Our final attempt 2 contact U! Call 08714714011"},{"label":"ham","message":"Think i might have to give it a miss. Am teaching til twelve, then have lecture at two. Damn this working thing."},{"label":"ham","message":"Id have to check but there's only like 1 bowls worth left"},{"label":"ham","message":"Yes there were many sweets"},{"label":"ham","message":"I would but I'm still cozy. And exhausted from last night.nobody went to school or work. Everything is closed."},{"label":"spam","message":"U have a secret admirer. REVEAL who thinks U R So special. Call 09065174042. To opt out Reply REVEAL STOP. 1.50 per msg recd. Cust care 07821230901"},{"label":"ham","message":"Buzzzz! *grins* Did I buzz your ass? Buzz your chest ? Buzz your cock ? Where do you keep your phone ? Is the vibrator on ? Did you feel it shake ?"},{"label":"ham","message":"Sir send to group mail check it."},{"label":"ham","message":"I'm doing da intro covers energy trends n pros n cons... Brief description of nuclear fusion n oso brief history of iter n jet got abt 7 n half pages.."},{"label":"ham","message":"\"NONE!NOWHERE IKNO DOESDISCOUNT!SHITINNIT\""},{"label":"ham","message":"You dont know you jabo me abi."},{"label":"spam","message":"Do you ever notice that when you're driving, anyone going slower than you is an idiot and everyone driving faster than you is a maniac?"},{"label":"ham","message":"Not yet had..ya sapna aunty manege y'day hogidhe..chinnu full weak and swalpa black agidhane.."},{"label":"ham","message":"Are you being good, baby? :)"},{"label":"ham","message":"NEFT Transaction with reference number <#> for Rs. <DECIMAL> has been credited to the beneficiary account on <#> at <TIME> : <#>"},{"label":"ham","message":"Mostly sports type..lyk footbl,crckt.."},{"label":"ham","message":"Ma head dey swell oh. Thanks for making my day"},{"label":"ham","message":"U should make a fb list"},{"label":"ham","message":"Height of Confidence: All the Aeronautics professors wer calld & they wer askd 2 sit in an aeroplane. Aftr they sat they wer told dat the plane ws made by their students. Dey all hurried out of d plane.. Bt only 1 didnt move... He said:\"if it is made by my students,this wont even start........ Datz confidence.."},{"label":"ham","message":"Sary just need Tim in the bollox &it hurt him a lot so he tol me!"},{"label":"ham","message":"Happy New Year Princess!"},{"label":"ham","message":"I'll text carlos and let you know, hang on"},{"label":"ham","message":"Don't worry, * is easy once have ingredients!"},{"label":"ham","message":"I love u 2 my little pocy bell I am sorry but I love u"},{"label":"ham","message":"Ok omw now, you at castor?"},{"label":"ham","message":"Yar lor... Keep raining non stop... Or u wan 2 go elsewhere?"},{"label":"spam","message":"Xmas Offer! Latest Motorola, SonyEricsson & Nokia & FREE Bluetooth or DVD! Double Mins & 1000 Txt on Orange. Call MobileUpd8 on 08000839402 or call2optout\/4QF2"},{"label":"ham","message":"What u mean u almost done? Done wif sleeping? But i tot u going to take a nap.. Yup i send her liao so i'm picking her up at ard 4 smth lor.."},{"label":"ham","message":"7 wonders in My WORLD 7th You 6th Ur style 5th Ur smile 4th Ur Personality 3rd Ur Nature 2nd Ur SMS and 1st \"Ur Lovely Friendship\"... good morning dear"},{"label":"ham","message":"Tonight? Yeah, I'd be down for that"},{"label":"ham","message":"What should i eat fo lunch senor"},{"label":"ham","message":"He said that he had a right giggle when he saw u again! You would possibly be the first person2die from NVQ, but think how much you could for!"},{"label":"ham","message":"No break time one... How... I come out n get my stuff fr \u00fc?"},{"label":"spam","message":"Reply to win \u00a3100 weekly! What professional sport does Tiger Woods play? Send STOP to 87239 to end service"},{"label":"ham","message":"I'm there and I can see you, but you can't see me ? Maybe you should reboot ym ? I seen the buzz"},{"label":"ham","message":"Do you still have the grinder?"},{"label":"spam","message":"No 1 POLYPHONIC tone 4 ur mob every week! Just txt PT2 to 87575. 1st Tone FREE ! so get txtin now and tell ur friends. 150p\/tone. 16 reply HL 4info"},{"label":"ham","message":"Love isn't a decision, it's a feeling. If we could decide who to love, then, life would be much simpler, but then less magical"},{"label":"spam","message":"HOT LIVE FANTASIES call now 08707509020 Just 20p per min NTT Ltd, PO Box 1327 Croydon CR9 5WB 0870 is a national rate call"},{"label":"ham","message":"K.i did't see you.:)k:)where are you now?"},{"label":"ham","message":"So i'm doing a list of buyers."},{"label":"ham","message":"No idea, I guess we'll work that out an hour after we're supposed to leave since as usual nobody has any interest in figuring shit out before the last second"},{"label":"ham","message":"Mm not entirely sure i understood that text but hey. Ho. Which weekend?"},{"label":"ham","message":"They released vday shirts and when u put it on it makes your bottom half naked instead of those white underwear."},{"label":"ham","message":"Don know..he is watching film in computer.."},{"label":"ham","message":"No b4 Thursday"},{"label":"ham","message":"Oh, then your phone phoned me but it disconnected"},{"label":"ham","message":"Id onluy matters when getting on from offcampus"},{"label":"spam","message":"This message is free. Welcome to the new & improved Sex & Dogging club! To unsubscribe from this service reply STOP. msgs@150p 18+only"},{"label":"ham","message":"Excellent, I'll see what riley's plans are"},{"label":"ham","message":"I will see in half an hour"},{"label":"spam","message":"You've won tkts to the EURO2004 CUP FINAL or \u00a3800 CASH, to collect CALL 09058099801 b4190604, POBOX 7876150ppm"},{"label":"ham","message":"Ew are you one of them?"},{"label":"ham","message":"Also hi wesley how've you been"},{"label":"ham","message":"Ah you see. You have to be in the lingo. I will let you know wot on earth it is when has finished making it!"},{"label":"spam","message":"Loan for any purpose \u00a3500 - \u00a375,000. Homeowners + Tenants welcome. Have you been previously refused? We can still help. Call Free 0800 1956669 or text back 'help'"},{"label":"spam","message":"Update_Now - 12Mths Half Price Orange line rental: 400mins...Call MobileUpd8 on 08000839402 or call2optout=J5Q"},{"label":"ham","message":"Imagine Life WITHOUT ME... see.. How fast u are searching me?Don't worry.. l'm always there To disturb U.. Goodnoon..:)"},{"label":"ham","message":"Hm good morning, headache anyone? :-)"},{"label":"ham","message":"Yeah no probs - last night is obviously catching up with you... Speak soon"},{"label":"spam","message":"FREE UNLIMITED HARDCORE PORN direct 2 your mobile Txt PORN to 69200 & get FREE access for 24 hrs then chrgd@50p per day txt Stop 2exit. This msg is free"},{"label":"ham","message":"I might go 2 sch. Yar at e salon now v boring."},{"label":"ham","message":"<#> mins but i had to stop somewhere first."},{"label":"ham","message":"<#> is fast approaching. So, Wish u a very Happy New Year Happy Sankranti Happy republic day Happy Valentines Day Happy Shivratri Happy Ugadi Happy Fools day Happy May Day Happy Independence Day, Happy Friendship,Mother,Father,Teachers,Childrens Day, & HAPPY BIRTHDAY 4 U. Happy Ganesh festival Happy Dasara Happy Diwali Happy Christmas <#> Good Mornings Afternoons, Evenings Nights. RememberI AM the first to WISHING U ALL THESE...your's Raj"},{"label":"ham","message":"One of the joys in lifeis waking up each daywith thoughts that somewhereSomeone cares enough tosend a warm morning greeting.. -"},{"label":"ham","message":"I didn't get the second half of that message"},{"label":"ham","message":"Wat time do u wan 2 meet me later?"},{"label":"ham","message":"I thank you so much for all you do with selflessness. I love you plenty."},{"label":"ham","message":"Am in film ill call you later."},{"label":"ham","message":"How dare you change my ring"},{"label":"ham","message":"You are a very very very very bad girl. Or lady."},{"label":"ham","message":"I love ya too but try and budget your money better babe. Gary would freak on me if he knew"},{"label":"ham","message":"What part of \"don't initiate\" don't you understand"},{"label":"ham","message":"I finished my lunch already. U wake up already?"},{"label":"ham","message":"You still at the game?"},{"label":"ham","message":"You have got tallent but you are wasting."},{"label":"ham","message":"What is your record for one night? :)"},{"label":"ham","message":"Also sir, i sent you an email about how to log into the usc payment portal. I.ll send you another message that should explain how things are back home. Have a great weekend."},{"label":"ham","message":"gonna let me know cos comes bak from holiday that day. is coming. Don't4get2text me number."},{"label":"ham","message":"Jokin only lar... :-) depends on which phone my father can get lor..."},{"label":"ham","message":"Aight, lemme know what's up"},{"label":"ham","message":"Get ready for <#> inches of pleasure..."},{"label":"ham","message":"Raji..pls do me a favour. Pls convey my Birthday wishes to Nimya. Pls. Today is her birthday."},{"label":"ham","message":";-) ok. I feel like john lennon."},{"label":"ham","message":"Cos darren say \u00fc considering mah so i ask \u00fc..."},{"label":"ham","message":"You are not bothering me but you have to trust my answers. Pls."},{"label":"ham","message":"Wishing you and your family Merry \"X\" mas and HAPPY NEW Year in advance.."},{"label":"ham","message":"One day a crab was running on the sea shore..The waves came n cleared the footprints of the crab.. Crab asked: being my frnd y r u clearing my beautiful footprints? Waves replied: A fox was following ur footprints to catch you! thats y i cleared it off:) frndsship never lets u dwn :-) GUD nyt.."},{"label":"ham","message":"Aight what time you want me to come up?"},{"label":"ham","message":"Slaaaaave ! Where are you ? Must I summon you to me all the time now ? Don't you wish to come to me on your own anymore?"},{"label":"ham","message":"Your bill at 3 is \u00a333.65 so thats not bad!"},{"label":"ham","message":"Let me know how it changes in the next 6hrs. It can even be appendix but you are out of that age range. However its not impossible. So just chill and let me know in 6hrs"},{"label":"ham","message":"Hello, yeah i've just got out of the bath and need to do my hair so i'll come up when i'm done, yeah?"},{"label":"ham","message":"So how's the weather over there?"},{"label":"ham","message":"Ok. Not much to do here though. H&M Friday, cant wait. Dunno wot the hell im gonna do for another 3 weeks! Become a slob- oh wait, already done that!"},{"label":"ham","message":"Die... Now i have e toot fringe again..."},{"label":"ham","message":"Lol they don't know about my awesome phone. I could click delete right now if I want."},{"label":"ham","message":"Ok"},{"label":"ham","message":"Awesome question with a cute answer: Someone asked a boy \"how is ur life?\" . . He smiled & answered: . . \"She is fine!\" Gudnite"},{"label":"ham","message":"Please leave this topic..sorry for telling that.."},{"label":"ham","message":"Pls send me the correct name da."},{"label":"ham","message":"What happened to our yo date?"},{"label":"spam","message":"EASTENDERS TV Quiz. What FLOWER does DOT compare herself to? D= VIOLET E= TULIP F= LILY txt D E or F to 84025 NOW 4 chance 2 WIN \u00a3100 Cash WKENT\/150P16+"},{"label":"ham","message":"Webpage s not available!"},{"label":"ham","message":"Just woke up. Yeesh its late. But I didn't fall asleep til <#> am :\/"},{"label":"spam","message":"You are now unsubscribed all services. Get tons of sexy babes or hunks straight to your phone! go to http:\/\/gotbabes.co.uk. No subscriptions."},{"label":"ham","message":"Dear all, as we know <#> th is the <#> th birthday of our loving Gopalettan. We are planning to give a small gift on that day. Those who like to participate in that you are welcome. Please contact our admin team for more details"},{"label":"ham","message":"K..k...from tomorrow onwards started ah?"},{"label":"ham","message":"What u talking bout early morning? It's almost noon where your at!"},{"label":"ham","message":"Fine. Do you remember me."},{"label":"spam","message":"Hi babe its Jordan, how r u? Im home from abroad and lonely, text me back if u wanna chat xxSP visionsms.com Text stop to stopCost 150p 08712400603"},{"label":"ham","message":"Ok. How many should i buy."},{"label":"ham","message":"Sounds good, keep me posted"},{"label":"spam","message":"Get a brand new mobile phone by being an agent of The Mob! Plus loads more goodies! For more info just text MAT to 87021."},{"label":"ham","message":"Ok. So april. Cant wait"},{"label":"ham","message":"Boy you best get yo ass out here quick"},{"label":"ham","message":"Ay wana meet on sat?\u00fc wkg on sat?"},{"label":"ham","message":"I'm now but have to wait till 2 for the bus to pick me."},{"label":"ham","message":"Apart from the one i told you about yesterday?"},{"label":"ham","message":"Ok lor... But buy wat?"},{"label":"ham","message":"Somebody should go to andros and steal ice"},{"label":"ham","message":"Don know. I did't msg him recently."},{"label":"ham","message":"Take us out shopping and Mark will distract Isaiah.=D"},{"label":"ham","message":"Mum, hope you are having a great day. Hoping this text meets you well and full of life. Have a great day. Abiola"},{"label":"ham","message":"There is no sense in my foot and penis."},{"label":"ham","message":"Okay but i thought you were the expert"},{"label":"ham","message":"*deep sigh* ... I miss you :-( ... I am really surprised you haven't gone to the net cafe yet to get to me ... Don't you miss me?"},{"label":"ham","message":"S.s:)i thinl role is like sachin.just standing. Others have to hit."},{"label":"ham","message":"Have a great trip to India. And bring the light to everyone not just with the project but with everyone that is lucky to see you smile. Bye. Abiola"},{"label":"ham","message":"And very importantly, all we discuss is between u and i only."},{"label":"ham","message":"K..k:)how about your training process?"},{"label":"ham","message":"Ok lor. I ned 2 go toa payoh 4 a while 2 return smth u wan 2 send me there or wat?"},{"label":"ham","message":"In da car park"},{"label":"ham","message":"I wish that I was with you. Holding you tightly. Making you see how important you are. How much you mean to me ... How much I need you ... In my life ..."},{"label":"ham","message":"So i asked how's anthony. Dad. And your bf"},{"label":"ham","message":"'Wnevr i wana fal in luv vth my books, My bed fals in luv vth me..!'' . Yen madodu, nav pretsorginta, nammanna pretsovru important alwa....!!:) Gud eveB-)."},{"label":"ham","message":"What Today-sunday..sunday is holiday..so no work.."},{"label":"ham","message":"Am going to take bath ill place the key in window:-)"},{"label":"spam","message":"LORD OF THE RINGS:RETURN OF THE KING in store NOW!REPLY LOTR by 2 June 4 Chance 2 WIN LOTR soundtrack CDs StdTxtRate. Reply STOP to end txts"},{"label":"ham","message":"Dear, take care. I am just reaching home.love u a lot."},{"label":"ham","message":"staff.science.nus.edu.sg\/~phyhcmk\/teaching\/pc1323"},{"label":"ham","message":"Have you emigrated or something? Ok maybe 5.30 was a bit hopeful..."},{"label":"ham","message":"Olol i printed out a forum post by a guy with the exact same prob which was fixed with a gpu replacement. Hopefully they dont ignore that."},{"label":"ham","message":"We walked from my moms. Right on stagwood pass right on winterstone left on victors hill. Address is <#>"},{"label":"ham","message":"Yo, you at jp and hungry like a mofo?"},{"label":"ham","message":"This is all just creepy and crazy to me."},{"label":"ham","message":"Ok... I din get ur msg..."},{"label":"ham","message":"Tessy..pls do me a favor. Pls convey my birthday wishes to Nimya..pls dnt forget it. Today is her birthday Shijas"},{"label":"ham","message":"Pathaya enketa maraikara pa'"},{"label":"ham","message":"Even if he my friend he is a priest call him now"},{"label":"ham","message":"U so lousy, run already come back then half dead... Hee..."},{"label":"ham","message":"That's y i said it's bad dat all e gals know u... Wat u doing now?"},{"label":"ham","message":"Or remind me in a few hrs."},{"label":"ham","message":"I had been hoping i would not have to send you this message. My rent is due and i dont have enough for it. My reserves are completely gone. Its a loan i need and was hoping you could her. The balance is <#> . Is there a way i could get that from you, till mid march when i hope to pay back."},{"label":"ham","message":"Hi. Happy New Year. I dont mean to intrude but can you pls let me know how much tuition you paid last semester and how much this semester is. Thanks"},{"label":"ham","message":"Hello hun how ru? Its here by the way. Im good. Been on 2 dates with that guy i met in walkabout so far. We have to meet up soon. Hows everyone else?"},{"label":"ham","message":"Lol I was gonna last month. I cashed some in but I left <#> just in case. I was collecting more during the week cause they announced it on the blog."},{"label":"spam","message":"Good Luck! Draw takes place 28th Feb 06. Good Luck! For removal send STOP to 87239 customer services 08708034412"},{"label":"ham","message":"Short But Cute : \" Be a good person , but dont try to prove\" ..... Gud mrng..."},{"label":"ham","message":"Just haven't decided where yet eh ?"},{"label":"ham","message":"Wat time liao, where still got."},{"label":"ham","message":"Yes watching footie but worried we're going to blow it - Phil Neville?"},{"label":"ham","message":"I wait 4 \u00fc inside da car park..."},{"label":"ham","message":"Uncle Abbey! Happy New Year. Abiola"},{"label":"ham","message":"Now am free call me pa."},{"label":"ham","message":"R u saying i should re order the slippers cos i had to pay for returning it."},{"label":"ham","message":"Stop knowing me so well!"},{"label":"ham","message":"Good evening! this is roger. How are you?"},{"label":"ham","message":"Small problem in auction:)punj now asking tiwary"},{"label":"spam","message":"Free entry in 2 a weekly comp for a chance to win an ipod. Txt POD to 80182 to get entry (std txt rate) T&C's apply 08452810073 for details 18+"},{"label":"ham","message":"He telling not to tell any one. If so treat for me hi hi hi"},{"label":"ham","message":"My uncles in Atlanta. Wish you guys a great semester."},{"label":"spam","message":"1st wk FREE! Gr8 tones str8 2 u each wk. Txt NOKIA ON to 8007 for Classic Nokia tones or HIT ON to 8007 for Polys. Nokia\/150p Poly\/200p 16+"},{"label":"ham","message":"U coming 2 pick me?"},{"label":"ham","message":"Thats cool. i liked your photos. You are very sexy!"},{"label":"ham","message":"would u fuckin believe it they didnt know i had thurs pre booked off so they re cancelled me AGAIN! that needs to b sacked"},{"label":"ham","message":"Haha better late than ever, any way I could swing by?"},{"label":"ham","message":"Ok. But i finish at 6."},{"label":"spam","message":"LookAtMe!: Thanks for your purchase of a video clip from LookAtMe!, you've been charged 35p. Think you can do better? Why not send a video in a MMSto 32323."},{"label":"ham","message":"I've been barred from all B and Q stores for life!?This twat in orange dungerees came up to me and asked if I wanted decking? So I got the first punch in!!"},{"label":"ham","message":"So no messages. Had food?"},{"label":"ham","message":"Ok going to sleep. Hope i can meet her."},{"label":"ham","message":"Wat makes some people dearer is not just de happiness dat u feel when u meet them but de pain u feel when u miss dem!!!"},{"label":"ham","message":"Can you let me know details of fri when u find out cos I'm not in tom or fri. mentionned chinese. Thanks"},{"label":"ham","message":"You're right I have now that I think about it"},{"label":"ham","message":"Wat r u doing now?"},{"label":"ham","message":"Is ur lecture over?"},{"label":"spam","message":"sexy sexy cum and text me im wet and warm and ready for some porn! u up for some fun? THIS MSG IS FREE RECD MSGS 150P INC VAT 2 CANCEL TEXT STOP"},{"label":"ham","message":"Customer place i will call you"},{"label":"ham","message":"Not planned yet :)going to join company on jan 5 only.don know what will happen after that."},{"label":"ham","message":"Boy; I love u Grl: Hogolo Boy: gold chain kodstini Grl: Agalla Boy: necklace madstini Grl: agalla Boy: Hogli 1 mutai eerulli kodthini! Grl: I love U kano;-)"},{"label":"ham","message":"Haha I heard that, text me when you're around"},{"label":"ham","message":"I.ll get there tomorrow and send it to you"},{"label":"ham","message":"\"SHIT BABE.. THASA BIT MESSED UP.YEH, SHE SHUDVETOLD U. DID URGRAN KNOW?NEWAY, ILLSPEAK 2 U2MORO WEN IM NOT ASLEEP...\""},{"label":"ham","message":"Oh thats late! Well have a good night and i will give u a call tomorrow. Iam now going to go to sleep night night"},{"label":"ham","message":"\"CHEERS U TEX MECAUSE U WEREBORED! YEAH OKDEN HUNNY R UIN WK SAT?SOUND\u0092S LIKEYOUR HAVIN GR8FUN J! KEEP UPDAT COUNTINLOTS OF LOVEME XXXXX.\""},{"label":"ham","message":"Sorry, in meeting I'll call you later"},{"label":"ham","message":"Yo! Howz u? girls never rang after india. L"},{"label":"ham","message":"Yeah but which is worse for i"},{"label":"spam","message":"Hard LIVE 121 chat just 60p\/min. Choose your girl and connect LIVE. Call 09094646899 now! Cheap Chat UK's biggest live service. VU BCM1896WC1N3XX"},{"label":"ham","message":"I tagged MY friends that you seemed to count as YOUR friends."},{"label":"spam","message":"Not heard from U4 a while. Call 4 rude chat private line 01223585334 to cum. Wan 2C pics of me gettin shagged then text PIX to 8552. 2End send STOP 8552 SAM xxx"},{"label":"ham","message":"Ok..."},{"label":"ham","message":"Long time. You remember me today."},{"label":"ham","message":"Havent shopping now lor i juz arrive only"},{"label":"ham","message":"Thank u. IT BETTER WORK OUT CAUSE I WILL FEEL USED OTHERWISE"},{"label":"ham","message":"Are you up for the challenge? I know i am :)"},{"label":"ham","message":"How much did ur hdd casing cost."},{"label":"ham","message":"Mystery solved! Just opened my email and he's sent me another batch! Isn't he a sweetie"},{"label":"ham","message":"I can't describe how lucky you are that I'm actually awake by noon"},{"label":"spam","message":"This is the 2nd time we have tried to contact u. U have won the \u00a31450 prize to claim just call 09053750005 b4 310303. T&Cs\/stop SMS 08718725756. 140ppm"},{"label":"ham","message":"TODAY is Sorry day.! If ever i was angry with you, if ever i misbehaved or hurt you? plz plz JUST SLAP URSELF Bcoz, Its ur fault, I'm basically GOOD"},{"label":"ham","message":"Cheers for the card ... Is it that time of year already?"},{"label":"spam","message":"HOT LIVE FANTASIES call now 08707509020 Just 20p per min NTT Ltd, PO Box 1327 Croydon CR9 5WB 0870..k"},{"label":"ham","message":"When people see my msgs, They think Iam addicted to msging... They are wrong, Bcoz They don\\'t know that Iam addicted to my sweet Friends..!! BSLVYL"},{"label":"ham","message":"Ugh hopefully the asus ppl dont randomly do a reformat."},{"label":"ham","message":"Haven't seen my facebook, huh? Lol!"},{"label":"ham","message":"Mah b, I'll pick it up tomorrow"},{"label":"ham","message":"Still otside le..u come 2morrow maga.."},{"label":"ham","message":"Do u still have plumbers tape and a wrench we could borrow?"},{"label":"spam","message":"Dear Voucher Holder, To claim this weeks offer, at you PC please go to http:\/\/www.e-tlp.co.uk\/reward. Ts&Cs apply."},{"label":"ham","message":"It vl bcum more difficult.."},{"label":"spam","message":"UR GOING 2 BAHAMAS! CallFREEFONE 08081560665 and speak to a live operator to claim either Bahamas cruise of\u00a32000 CASH 18+only. To opt out txt X to 07786200117"},{"label":"ham","message":"Havent still waitin as usual... \u00dc come back sch oredi?"},{"label":"ham","message":"In meeting da. I will call you"},{"label":"ham","message":"K k :-):-) then watch some films."},{"label":"ham","message":"Does cinema plus drink appeal tomo? * Is a fr thriller by director i like on at mac at 8.30."},{"label":"ham","message":"There the size of elephant tablets & u shove um up ur ass!!"},{"label":"ham","message":"So many people seems to be special at first sight, But only very few will remain special to you till your last sight.. Maintain them till life ends.. take cr da"},{"label":"ham","message":"My Parents, My Kidz, My Friends n My Colleagues. All screaming.. SURPRISE !! and I was waiting on the sofa.. ... ..... ' NAKED...!"},{"label":"ham","message":"Dunno i juz askin cos i got a card got 20% off 4 a salon called hair sense so i tot it's da one \u00fc cut ur hair."},{"label":"ham","message":"Good morning pookie pie! Lol hope I didn't wake u up"},{"label":"ham","message":"MAYBE IF YOU WOKE UP BEFORE FUCKING 3 THIS WOULDN'T BE A PROBLEM."},{"label":"ham","message":"Happy birthday to you....dear.with lots of love.rakhesh NRI"},{"label":"ham","message":"Howz that persons story"},{"label":"spam","message":"This is the 2nd time we have tried 2 contact u. U have won the 750 Pound prize. 2 claim is easy, call 08712101358 NOW! Only 10p per min. BT-national-rate"},{"label":"ham","message":"X2 <#> . Are you going to get that"},{"label":"ham","message":"Hi neva worry bout da truth coz the truth will lead me 2 ur heart. It\u0092s the least a unique person like u deserve. Sleep tight or morning"},{"label":"spam","message":"UR awarded a City Break and could WIN a \u00a3200 Summer Shopping spree every WK. Txt STORE to 88039.SkilGme.TsCs087147403231Winawk!Age16+\u00a31.50perWKsub"},{"label":"ham","message":"Is ur paper today in e morn or aft?"},{"label":"ham","message":"I will lick up every drop :) are you ready to use your mouth as well?"},{"label":"ham","message":"And you! Will expect you whenever you text! Hope all goes well tomo"},{"label":"ham","message":"Great. P diddy is my neighbor and comes for toothpaste every morning"},{"label":"ham","message":"I av a new number, . Wil u only use this one,ta."},{"label":"ham","message":"So its to be poking man everyday that they teach you in canada abi! How are you. Just saying hi."},{"label":"ham","message":"7 lor... Change 2 suntec... Wat time u coming?"},{"label":"ham","message":"No de.am seeing in online shop so that i asked."},{"label":"ham","message":"Just curious because my cuz asked what I was up to"},{"label":"ham","message":"Nice.nice.how is it working?"},{"label":"ham","message":"Okay lor... Wah... like that def they wont let us go... Haha... What did they say in the terms and conditions?"},{"label":"ham","message":"Haha... Yup hopefully we will lose a few kg by mon. after hip hop can go orchard and weigh again"},{"label":"ham","message":"She's good. How are you. Where r u working now"},{"label":"ham","message":"Oh, yes, I've just been a little under the weather so i've kind of been coccooning at home"},{"label":"ham","message":"At home also."},{"label":"ham","message":"This phone has the weirdest auto correct."},{"label":"ham","message":"Oops my phone died and I didn't even know. Yeah I like it better."},{"label":"ham","message":"Havent mus ask if u can 1st wat. Of meet 4 lunch den u n him meet can already lor. Or u wan 2 go ask da ge 1st then confirm w me asap?"},{"label":"ham","message":"She said,'' do u mind if I go into the bedroom for a minute ? '' ''OK'', I sed in a sexy mood. She came out 5 minuts latr wid a cake...n My Wife,"},{"label":"ham","message":"OH YEAH,AND HAV A GREAT TIME IN NEWQUAY-SEND ME A POSTCARD !1 LOOK AFTER ALL THE GIRLS WHILE IM GONE(U KNOW THE 1IM TALKIN BOUT!)xx"},{"label":"ham","message":"We got a divorce. Lol. She.s here"},{"label":"ham","message":"What's ur pin?"},{"label":"ham","message":"Babe, have you got enough money to pick up bread and milk ? And I'll give you it back when you get home ?"},{"label":"ham","message":"I want snow. It's just freezing and windy."},{"label":"spam","message":"URGENT! We are trying to contact U. Todays draw shows that you have won a \u00a32000 prize GUARANTEED. Call 09066358361 from land line. Claim Y87. Valid 12hrs only"},{"label":"ham","message":"Come to mahal bus stop.. <DECIMAL>"},{"label":"ham","message":"Don know:)this week i'm going to tirunelvai da."},{"label":"ham","message":"Me too baby! I promise to treat you well! I bet you will take good care of me..."},{"label":"ham","message":"Its like that hotel dusk game i think. You solve puzzles in a area thing"},{"label":"spam","message":"Thanks for your ringtone order, reference number X29. Your mobile will be charged 4.50. Should your tone not arrive please call customer services 09065989180"},{"label":"ham","message":"Hi, my love! How goes that day? Fuck, this morning I woke and dropped my cell on the way down the stairs but it seems alright ... *phews* I miss you !"},{"label":"ham","message":"Well that must be a pain to catch"},{"label":"ham","message":"Sorry da thangam.it's my mistake."},{"label":"ham","message":"I need... Coz i never go before"},{"label":"ham","message":"Rose for red,red for blood,blood for heart,heart for u. But u for me.... Send tis to all ur friends.. Including me.. If u like me.. If u get back, 1-u r poor in relation! 2-u need some 1 to support 3-u r frnd 2 many 4-some1 luvs u 5+- some1 is praying god to marry u.:-) try it...."},{"label":"ham","message":"Wife.how she knew the time of murder exactly"},{"label":"spam","message":"SIX chances to win CASH! From 100 to 20,000 pounds txt> CSH11 and send to 87575. Cost 150p\/day, 6days, 16+ TsandCs apply Reply HL 4 info"},{"label":"spam","message":"Ur cash-balance is currently 500 pounds - to maximize ur cash-in now send COLLECT to 83600 only 150p\/msg. CC: 08718720201 PO BOX 114\/14 TCR\/W1"},{"label":"ham","message":"I feel like a dick because I keep sleeping through your texts and facebook messages. Sup, you in town?"},{"label":"ham","message":"No plm i will come da. On the way."},{"label":"ham","message":"Guess he wants alone time. We could just show up and watch when they do.."},{"label":"ham","message":"Height of recycling: Read twice- People spend time for earning money and the same money is spent for spending time!;-) Good morning.. keep smiling:-)"},{"label":"ham","message":"Yup \u00fc not comin :-("},{"label":"ham","message":"Yes, princess. Toledo."},{"label":"ham","message":"Aight text me when you're back at mu and I'll swing by, need somebody to get the door for me"},{"label":"ham","message":"Ron say fri leh. N he said ding tai feng cant make reservations. But he said wait lor."},{"label":"ham","message":"Good. No swimsuit allowed :)"},{"label":"ham","message":"Am okay. Will soon be over. All the best"},{"label":"ham","message":"A cute thought for friendship: \"Its not necessary to share every secret with ur close Frnd, but watever u shared should be true\"...."},{"label":"ham","message":"Ok i've sent u da latest version of da project."},{"label":"ham","message":"Good Morning my Dear........... Have a great & successful day."},{"label":"ham","message":"Pls accept me for one day. Or am begging you change the number."},{"label":"ham","message":"Squeeeeeze!! This is christmas hug.. If u lik my frndshp den hug me back.. If u get 3 u r cute:) 6 u r luvd:* 9 u r so lucky;) None? People hate u:"},{"label":"ham","message":"Its ok, if anybody asks abt me, u tel them..:-P"},{"label":"ham","message":"Funny fact Nobody teaches volcanoes 2 erupt, tsunamis 2 arise, hurricanes 2 sway aroundn no 1 teaches hw 2 choose a wife Natural disasters just happens"},{"label":"ham","message":"* You gonna ring this weekend or wot?"},{"label":"ham","message":"Also track down any lighters you can find"},{"label":"ham","message":"Sorry, I can't help you on this."},{"label":"ham","message":"Babe, I need your advice"},{"label":"ham","message":"I\u2018ll leave around four, ok?"},{"label":"ham","message":"Come to medical college at 7pm ......forward it da"},{"label":"ham","message":"K:)k..its good:)when are you going?"},{"label":"ham","message":"I can make lasagna for you... vodka..."},{"label":"ham","message":"HI ITS KATE CAN U GIVE ME A RING ASAP XXX"},{"label":"ham","message":"Who were those people ? Were you in a tour ? I thought you were doing that sofa thing you sent me ? Your curious sugar"},{"label":"ham","message":"No, but you told me you were going, before you got drunk!"},{"label":"ham","message":"He fucking chickened out. He messaged me he would be late and woould buzz me and then I didn't hear a word from him"},{"label":"spam","message":"Congratulations! Thanks to a good friend U have WON the \u00a32,000 Xmas prize. 2 claim is easy, just call 08718726978 NOW! Only 10p per minute. BT-national-rate"},{"label":"ham","message":"I'm always looking for an excuse to be in the city."},{"label":"ham","message":"Yup i'm still having coffee wif my frens... My fren drove she'll give me a lift..."},{"label":"ham","message":"O shore are you takin the bus"},{"label":"ham","message":"So u gonna get deus ex?"},{"label":"ham","message":"I will send them to your email. Do you mind <#> times per night?"},{"label":"spam","message":"44 7732584351, Do you want a New Nokia 3510i colour phone DeliveredTomorrow? With 300 free minutes to any mobile + 100 free texts + Free Camcorder reply or call 08000930705."},{"label":"ham","message":"tap & spile at seven. * Is that pub on gas st off broad st by canal. Ok?"},{"label":"ham","message":"Ok then i come n pick u at engin?"},{"label":"ham","message":"Which is why i never wanted to tell you any of this. Which is why i'm so short with you and on-edge as of late."},{"label":"ham","message":"Raviyog Peripherals bhayandar east"},{"label":"ham","message":"K actually can you guys meet me at the sunoco on howard? It should be right on the way"},{"label":"spam","message":"You have 1 new voicemail. Please call 08719181513."},{"label":"ham","message":"MOON has come to color your dreams, STARS to make them musical and my SMS to give you warm and Peaceful Sleep. Good Night"},{"label":"ham","message":"Just finished eating. Got u a plate. NOT leftovers this time."},{"label":"ham","message":"Thanx a lot..."},{"label":"ham","message":"Hurry home u big butt. Hang up on your last caller if u have to. Food is done and I'm starving. Don't ask what I cooked."},{"label":"ham","message":"Lol your right. What diet? Everyday I cheat anyway. I'm meant to be a fatty :("},{"label":"ham","message":"Its a great day. Do have yourself a beautiful one."},{"label":"ham","message":"What happened in interview?"},{"label":"ham","message":"Solve d Case : A Man Was Found Murdered On <DECIMAL> . <#> AfterNoon. 1,His wife called Police. 2,Police questioned everyone. 3,Wife: Sir,I was sleeping, when the murder took place. 4.Cook: I was cooking. 5.Gardener: I was picking vegetables. 6.House-Maid: I went 2 d post office. 7.Children: We went 2 play. 8.Neighbour: We went 2 a marriage. Police arrested d murderer Immediately. Who's It? Reply With Reason, If U r Brilliant."},{"label":"ham","message":"Badrith is only for chennai:)i will surely pick for us:)no competition for him."},{"label":"ham","message":"I tot it's my group mate... Lucky i havent reply... Wat time do \u00fc need to leave..."},{"label":"ham","message":"Hey you around? I've got enough for a half + the ten I owe you"},{"label":"ham","message":"Hey tmr maybe can meet you at yck"},{"label":"ham","message":"ALRITE SAM ITS NIC JUST CHECKIN THAT THIS IS UR NUMBER-SO IS IT?T.B*"},{"label":"ham","message":"They are just making it easy to pay back. I have <#> yrs to say but i can pay back earlier. You get?"},{"label":"ham","message":"Not to worry. I'm sure you'll get it."},{"label":"ham","message":"The gas station is like a block away from my house, you'll drive right by it since armenia ends at swann and you have to take howard"},{"label":"spam","message":"Someone U know has asked our dating service 2 contact you! Cant Guess who? CALL 09058097189 NOW all will be revealed. POBox 6, LS15HB 150p"},{"label":"spam","message":"Camera - You are awarded a SiPix Digital Camera! call 09061221066 fromm landline. Delivery within 28 days"},{"label":"ham","message":"My tuition is at 330. Hm we go for the 1120 to 1205 one? Do you mind?"},{"label":"ham","message":"I'm not smoking while people use \"wylie smokes too much\" to justify ruining my shit"},{"label":"ham","message":"Dear good morning how you feeling dear"},{"label":"ham","message":"A little. Meds say take once every 8 hours. It's only been 5 but pain is back. So I took another. Hope I don't die"},{"label":"ham","message":"Beautiful tomorrow never comes.. When it comes, it's already TODAY.. In the hunt of beautiful tomorrow don't waste your wonderful TODAY.. GOODMORNING:)"},{"label":"ham","message":"Dunno lei \u00fc all decide lor. How abt leona? Oops i tot ben is going n i msg him."},{"label":"ham","message":"Hi there. We have now moved in2 our pub . Would be great 2 c u if u cud come up."},{"label":"spam","message":"Todays Voda numbers ending 5226 are selected to receive a ?350 award. If you hava a match please call 08712300220 quoting claim code 1131 standard rates app"},{"label":"spam","message":"This message is free. Welcome to the new & improved Sex & Dogging club! To unsubscribe from this service reply STOP. msgs@150p 18 only"},{"label":"ham","message":"Honeybee Said: *I'm d Sweetest in d World* God Laughed & Said: *Wait,U Havnt Met d Person Reading This Msg* MORAL: Even GOD Can Crack Jokes! GM+GN+GE+GN:)"},{"label":"ham","message":"Just do what ever is easier for you"},{"label":"spam","message":"RCT' THNQ Adrian for U text. Rgds Vatian"},{"label":"ham","message":"Stop calling everyone saying I might have cancer. My throat hurts to talk. I can't be answering everyones calls. If I get one more call I'm not babysitting on Monday"},{"label":"ham","message":"It'll be tough, but I'll do what I have to"},{"label":"ham","message":"IM GONNAMISSU SO MUCH!!I WOULD SAY IL SEND U A POSTCARD BUTTHERES ABOUTAS MUCH CHANCE OF MEREMEMBERIN ASTHERE IS OFSI NOT BREAKIN HIS CONTRACT!! LUV Yaxx"},{"label":"ham","message":"Ee msg na poortiyagi odalebeku: Hanumanji 7 name 1-Hanuman 2-Bajarangabali 3-Maruti 4-Pavanaputra 5-Sankatmochan 6-Ramaduth 7-Mahaveer ee 7 name <#> janarige ivatte kalisidare next saturday olage ondu good news keluviri...! Maretare inde 1 dodda problum nalli siguviri idu matra <#> % true.. Don't neglet."},{"label":"ham","message":"HI DARLIN I FINISH AT 3 DO U 1 2 PICK ME UP OR MEET ME? TEXT BACK ON THIS NUMBER LUV KATE XXX"},{"label":"ham","message":"Set a place for me in your heart and not in your mind, as the mind easily forgets but the heart will always remember. Wish you Happy Valentines Day!"},{"label":"ham","message":"But i'm surprised she still can guess right lor..."},{"label":"ham","message":"Okie \u00fc wan meet at bishan? Cos me at bishan now. I'm not driving today."},{"label":"ham","message":"Oh ho. Is this the first time u use these type of words"},{"label":"ham","message":"HI DARLIN HOW WAS WORK DID U GET INTO TROUBLE? IJUST TALKED TO YOUR MUM ALL MORNING! I HAD A REALLY GOOD TIME LAST NIGHT IM GOIN OUT SOON BUT CALL ME IF U CAN"},{"label":"ham","message":"I know you are serving. I mean what are you doing now."},{"label":"ham","message":"Huh... Hyde park not in mel ah, opps, got confused... Anyway, if tt's e best choice den we juz have to take it..."},{"label":"ham","message":"Oh gei. That happend to me in tron. Maybe ill dl it in 3d when its out"},{"label":"spam","message":"FREE MESSAGE Activate your 500 FREE Text Messages by replying to this message with the word FREE For terms & conditions, visit www.07781482378.com"},{"label":"ham","message":"I know girls always safe and selfish know i got it pa. Thank you. good night."},{"label":"ham","message":"No worries, hope photo shoot went well. have a spiffing fun at workage."},{"label":"ham","message":"I'm freezing and craving ice. Fml"},{"label":"ham","message":"Kay... Since we are out already"},{"label":"ham","message":"Eh sorry leh... I din c ur msg. Not sad already lar. Me watching tv now. U still in office?"},{"label":"ham","message":"Yo im right by yo work"},{"label":"ham","message":"Ok darlin i supose it was ok i just worry too much.i have to do some film stuff my mate and then have to babysit again! But you can call me there.xx"},{"label":"ham","message":"She said,'' do u mind if I go into the bedroom for a minute ? '' ''OK'', I sed in a sexy mood. She came out 5 minuts latr wid a cake...n My Wife,"},{"label":"ham","message":"I don wake since. I checked that stuff and saw that its true no available spaces. Pls call the embassy or send a mail to them."},{"label":"ham","message":"Nope... Juz off from work..."},{"label":"ham","message":"Huh so fast... Dat means u havent finished painting?"},{"label":"ham","message":"what number do u live at? Is it 11?"},{"label":"ham","message":"No we put party 7 days a week and study lightly, I think we need to draw in some custom checkboxes so they know we're hardcore"},{"label":"ham","message":"Sac will score big hundred.he is set batsman:-)"},{"label":"ham","message":"Send me yetty's number pls."},{"label":"ham","message":"How much it will cost approx . Per month."},{"label":"ham","message":"Ok... The theory test? when are \u00fc going to book? I think it's on 21 may. Coz thought wanna go out with jiayin. But she isnt free"},{"label":"spam","message":"You are being contacted by our dating service by someone you know! To find out who it is, call from a land line 09050000928. PoBox45W2TG150P"},{"label":"ham","message":"That's fine, have him give me a call if he knows what he wants or has any questions"},{"label":"ham","message":"Sorry, got a late start, we're on the way"},{"label":"ham","message":"Then u go back urself lor..."},{"label":"ham","message":"I AM AT THE GAS STATION. GO THERE."},{"label":"ham","message":"K, if u bored up just come to my home.."},{"label":"ham","message":"Babe !!!! I LOVE YOU !!!! *covers your face in kisses*"},{"label":"ham","message":"Like I made him throw up when we were smoking in our friend's car one time, it was awesome"},{"label":"ham","message":"Still i have not checked it da. . ."},{"label":"ham","message":"You will go to walmart. I.ll stay."},{"label":"ham","message":"I haven't forgotten you, i might have a couple bucks to send you tomorrow, k? I love ya too"},{"label":"ham","message":"Oh great. I.ll disturb him more so that we can talk."},{"label":"ham","message":"Reverse is cheating. That is not mathematics."},{"label":"ham","message":"U're welcome... Caught u using broken english again..."},{"label":"ham","message":"No problem baby. Is this is a good time to talk? I called and left a message."},{"label":"ham","message":"Sorry, I'll call later"},{"label":"ham","message":"Oh is it! Which brand?"},{"label":"ham","message":"Sorry i cant take your call right now. It so happens that there r 2waxsto do wat you want. She can come and ill get her medical insurance. And she'll be able to deliver and have basic care. I'm currently shopping for the right medical insurance for her. So just give me til friday morning. Thats when i.ll see the major person that can guide me to the right insurance."},{"label":"ham","message":"At what time are you coming."},{"label":"ham","message":"Call him and say you not coming today ok and tell them not to fool me like this ok"},{"label":"ham","message":"I emailed yifeng my part oredi.. Can \u00fc get it fr him.."},{"label":"ham","message":"R u sure they'll understand that! Wine * good idea just had a slurp!"},{"label":"ham","message":"Minimum walk is 3miles a day."},{"label":"ham","message":"Ok not a problem will get them a taxi. C ing tomorrow and tuesday. On tuesday think we r all going to the cinema."},{"label":"ham","message":"Brainless Baby Doll..:-D;-), vehicle sariyag drive madoke barolla.."},{"label":"ham","message":"I don't run away frm u... I walk slowly & it kills me that u don't care enough to stop me..."},{"label":"spam","message":"Sorry I missed your call let's talk when you have the time. I'm on 07090201529"},{"label":"ham","message":"Please attend the phone:)"},{"label":"ham","message":"You only hate me. You can call any but you didnt accept even a single call of mine. Or even you messaged"},{"label":"ham","message":"No messages on her phone. I'm holding it now"},{"label":"ham","message":"Can... I'm free..."},{"label":"ham","message":"Yo my trip got postponed, you still stocked up?"},{"label":"ham","message":"Sorry, I'll call later"},{"label":"ham","message":"I am waiting for your call sir."},{"label":"ham","message":"Hey what are you doing. Y no reply pa.."},{"label":"ham","message":"Hey elaine, is today's meeting still on?"},{"label":"ham","message":"Sorry i've not gone to that place. I.ll do so tomorrow. Really sorry."},{"label":"ham","message":"Most of the tiime when i don't let you hug me it's so i don't break into tears."},{"label":"ham","message":"Tomorrow i am not going to theatre. . . So i can come wherever u call me. . . Tell me where and when to come tomorrow"},{"label":"ham","message":"And now electricity just went out fml."},{"label":"ham","message":"Looks like you found something to do other than smoke, great job!"},{"label":"ham","message":"Also andros ice etc etc"},{"label":"ham","message":":)"},{"label":"ham","message":"Good afternon, my love. How are today? I hope your good and maybe have some interviews. I wake and miss you babe. A passionate kiss from across the sea"},{"label":"ham","message":"Yup. Wun believe wat? U really neva c e msg i sent shuhui?"},{"label":"ham","message":"Hows that watch resizing"},{"label":"ham","message":"Dear umma she called me now :-)"},{"label":"ham","message":"Just finished. Missing you plenty"},{"label":"spam","message":"complimentary 4 STAR Ibiza Holiday or \u00a310,000 cash needs your URGENT collection. 09066364349 NOW from Landline not to lose out! Box434SK38WP150PPM18+"},{"label":"ham","message":"Well, I meant as opposed to my drunken night of before"},{"label":"ham","message":"K... Must book a not huh? so going for yoga basic on sunday?"},{"label":"spam","message":"FREE MSG:We billed your mobile number by mistake from shortcode 83332.Please call 08081263000 to have charges refunded.This call will be free from a BT landline"},{"label":"ham","message":"Ok can..."},{"label":"ham","message":"Oops - am at my mum's in somerset... Bit far! Back tomo, see you soon x"},{"label":"ham","message":"So u workin overtime nigpun?"},{"label":"ham","message":"Same as kallis dismissial in 2nd test:-)."},{"label":"ham","message":"O. Guess they both got screwd"},{"label":"spam","message":"Please CALL 08712402972 immediately as there is an urgent message waiting for you"},{"label":"ham","message":"I'm in a meeting, call me later at"},{"label":"ham","message":"What r u cooking me for dinner?"},{"label":"ham","message":"Ok thanx..."},{"label":"ham","message":"Bull. Your plan was to go floating off to IKEA with me without a care in the world. So i have to live with your mess another day."},{"label":"ham","message":"Then i buy."},{"label":"spam","message":"URGENT! Your Mobile number has been awarded with a \u00a32000 Bonus Caller Prize. Call 09058095201 from land line. Valid 12hrs only"},{"label":"ham","message":"Heehee that was so funny tho"},{"label":"ham","message":"It only does simple arithmetic not percentages."},{"label":"ham","message":"Yeah we wouldn't leave for an hour at least, how's 4 sound?"},{"label":"spam","message":"As a valued customer, I am pleased to advise you that following recent review of your Mob No. you are awarded with a \u00a31500 Bonus Prize, call 09066364589"},{"label":"ham","message":"Thanks honey. Have a great day."},{"label":"ham","message":"'An Amazing Quote'' - \"Sometimes in life its difficult to decide whats wrong!! a lie that brings a smile or the truth that brings a tear....\""},{"label":"ham","message":"Good night my dear.. Sleepwell&Take care"},{"label":"ham","message":"Then \u00fc ask dad to pick \u00fc up lar... \u00dc wan 2 stay until 6 meh..."},{"label":"ham","message":"Jus chillaxin, what up"},{"label":"ham","message":"\"HEY DAS COOL... IKNOW ALL 2 WELLDA PERIL OF STUDENTFINANCIAL CRISIS!SPK 2 U L8R.\""},{"label":"ham","message":"Beautiful Truth against Gravity.. Read carefully: \"Our heart feels light when someone is in it.. But it feels very heavy when someone leaves it..\" GOODMORNING"},{"label":"spam","message":"Do you want a New Nokia 3510i colour phone DeliveredTomorrow? With 300 free minutes to any mobile + 100 free texts + Free Camcorder reply or call 08000930705"},{"label":"ham","message":"Whats that coming over the hill..... Is it a monster! Hope you have a great day. Things r going fine here, busy though!"},{"label":"ham","message":"Joy's father is John. Then John is the ____ of Joy's father. If u ans ths you hav <#> IQ. Tis s IAS question try to answer."},{"label":"ham","message":"Only once then after ill obey all yours."},{"label":"ham","message":"No she didnt. I will search online and let you know."},{"label":"ham","message":"Where do you need to go to get it?"},{"label":"ham","message":"No pic. Please re-send."},{"label":"ham","message":"He remains a bro amongst bros"},{"label":"ham","message":"Uhhhhrmm isnt having tb test bad when youre sick"},{"label":"ham","message":"But i haf enuff space got like 4 mb..."},{"label":"spam","message":"LIFE has never been this much fun and great until you came in. You made it truly special for me. I won't forget you! enjoy @ one gbp\/sms"},{"label":"spam","message":"Do you want a new Video phone? 600 anytime any network mins 400 Inclusive Video calls AND downloads 5 per week Free delTOMORROW call 08002888812 or reply NOW"},{"label":"spam","message":"As a valued customer, I am pleased to advise you that following recent review of your Mob No. you are awarded with a \u00a31500 Bonus Prize, call 09066368470"},{"label":"spam","message":"Welcome! Please reply with your AGE and GENDER to begin. e.g 24M"},{"label":"spam","message":"Freemsg: 1-month unlimited free calls! Activate SmartCall Txt: CALL to No: 68866. Subscriptn3gbp\/wk unlimited calls Help: 08448714184 Stop?txt stop landlineonly"},{"label":"spam","message":"Had your mobile 10 mths? Update to latest Orange camera\/video phones for FREE. Save \u00a3s with Free texts\/weekend calls. Text YES for a callback orno to opt out"},{"label":"spam","message":"Am new 2 club & dont fink we met yet Will B gr8 2 C U Please leave msg 2day wiv ur area 09099726553 reply promised CARLIE x Calls\u00a31\/minMobsmore LKPOBOX177HP51FL"},{"label":"ham","message":"True. Its easier with her here."},{"label":"ham","message":"Sure but since my parents will be working on Tuesday I don't really need a cover story"},{"label":"ham","message":"Haha okay... Today weekend leh..."},{"label":"ham","message":"\"Hi darlin did youPhone me? Im atHome if youwanna chat.\""},{"label":"ham","message":"I don't know jack shit about anything or i'd say\/ask something helpful but if you want you can pretend that I did and just text me whatever in response to the hypotheticalhuagauahahuagahyuhagga"},{"label":"ham","message":"You've always been the brainy one."},{"label":"ham","message":"Yeah if we do have to get a random dude we need to change our info sheets to PARTY <#> \/7 NEVER STUDY just to be safe"},{"label":"spam","message":"Camera - You are awarded a SiPix Digital Camera! call 09061221066 fromm landline. Delivery within 28 days."},{"label":"ham","message":"Christmas is An occasion that is Celebrated as a Reflection of UR... Values..., Desires..., Affections...& Traditions.... Have an ideal Christmas..."},{"label":"ham","message":"Sending you greetings of joy and happiness. Do have a gr8 evening"},{"label":"ham","message":"\"Hi darlin i cantdo anythingtomorrow as myparents aretaking me outfor a meal. when are u free? Katexxx\""},{"label":"ham","message":"If india win or level series means this is record:)"},{"label":"ham","message":"Then what about further plan?"},{"label":"ham","message":"Its good to hear from you"},{"label":"ham","message":"awesome, how do I deal with the gate? Charles told me last night but, uh, yeah"},{"label":"ham","message":"What time you thinkin of goin?"},{"label":"spam","message":"Get a FREE mobile video player FREE movie. To collect text GO to 89105. Its free! Extra films can be ordered t's and c's apply. 18 yrs only"},{"label":"spam","message":"Save money on wedding lingerie at www.bridal.petticoatdreams.co.uk Choose from a superb selection with national delivery. Brought to you by WeddingFriend"},{"label":"ham","message":"Your board is working fine. The issue of overheating is also reslove. But still software inst is pending. I will come around 8'o clock."},{"label":"ham","message":"Yes but I don't care cause I know its there!"},{"label":"ham","message":"wiskey Brandy Rum Gin Beer Vodka Scotch Spain Wine \"KUDI\"yarasu dhina vaazhthukkal. .."},{"label":"ham","message":"Mon okie lor... Haha, best is cheap n gd food la, ex oso okie... Depends on whether wana eat western or chinese food... Den which u prefer..."},{"label":"ham","message":"Sitting ard nothing to do lor. U leh busy w work?"},{"label":"ham","message":"Its <#> k here oh. Should i send home for sale."},{"label":"ham","message":"Sorry. || mail? ||"},{"label":"ham","message":"Ya just telling abt tht incident.."},{"label":"ham","message":"Yes we were outside for like 2 hours. And I called my whole family to wake them up cause it started at 1 am"},{"label":"ham","message":"Ugh just got outta class"},{"label":"ham","message":"Nowadays people are notixiquating the laxinorficated opportunity for bambling of entropication.... Have you ever oblisingately opted ur books for the masteriastering amplikater of fidalfication? It is very cplaxigating, i think it is atrocious.. Wotz Ur Opinion???? Junna"},{"label":"ham","message":"I dont have any of your file in my bag..i was in work when you called me.i 'll tell you if i find anything in my room."},{"label":"ham","message":"No need lar. Jus testing e phone card. Dunno network not gd i thk. Me waiting 4 my sis 2 finish bathing so i can bathe. Dun disturb u liao u cleaning ur room."},{"label":"ham","message":"Ok. I.ll do you right later."},{"label":"ham","message":"Friendship poem: Dear O Dear U R Not Near But I Can Hear Dont Get Fear Live With Cheer No More Tear U R Always my Dear. Gud ni8"},{"label":"ham","message":"Have your lunch and come quickly and open the door:)"},{"label":"spam","message":"Not heard from U4 a while. Call me now am here all night with just my knickers on. Make me beg for it like U did last time 01223585236 XX Luv Nikiyu4.net"},{"label":"ham","message":"I am back. Bit long cos of accident on a30. Had to divert via wadebridge.I had a brilliant weekend thanks. Speak soon. Lots of love"},{"label":"ham","message":"K.. I yan jiu liao... Sat we can go 4 bugis vill one frm 10 to 3 den hop to parco 4 nb. Sun can go cine frm 1030 to 2, den hop to orc mrt 4 hip hop at 4..."},{"label":"spam","message":"Bloomberg -Message center +447797706009 Why wait? Apply for your future http:\/\/careers. bloomberg.com"},{"label":"ham","message":"i am seeking a lady in the street and a freak in the sheets. Is that you?"},{"label":"ham","message":"My phone"},{"label":"ham","message":"Haha figures, well I found the piece and priscilla's bowl"},{"label":"ham","message":"Actually fuck that, just do whatever, do find an excuse to be in tampa at some point before january though"},{"label":"spam","message":"URGENT! We are trying to contact U. Todays draw shows that you have won a \u00a3800 prize GUARANTEED. Call 09050001808 from land line. Claim M95. Valid12hrs only"},{"label":"ham","message":"yay! finally lol. i missed our cinema trip last week :-("},{"label":"ham","message":"All day working day:)except saturday and sunday.."},{"label":"ham","message":"aathi..where are you dear.."},{"label":"ham","message":"Heart is empty without love.. Mind is empty without wisdom.. Eyes r empty without dreams & Life is empty without frnds.. So Alwys Be In Touch. Good night & sweet dreams"},{"label":"ham","message":"I think I\u2018m waiting for the same bus! Inform me when you get there, if you ever get there."},{"label":"ham","message":"You getting back any time soon?"},{"label":"ham","message":", how's things? Just a quick question."},{"label":"ham","message":"Night has ended for another day, morning has come in a special way. May you smile like the sunny rays and leaves your worries at the blue blue bay. Gud mrng"},{"label":"ham","message":"I can probably come by, everybody's done around <#> right?"},{"label":"ham","message":"I got it before the new year cos yetunde said she wanted to surprise you with it but when i didnt see money i returned it mid january before the <#> day return period ended."},{"label":"ham","message":"I can ask around but there's not a lot in terms of mids up here"},{"label":"ham","message":"Be sure to check your yahoo email. We sent photos yesterday"},{"label":"ham","message":"What was she looking for?"},{"label":"ham","message":"Wherre's my boytoy ? :-("},{"label":"spam","message":"Do you want a NEW video phone750 anytime any network mins 150 text for only five pounds per week call 08000776320 now or reply for delivery tomorrow"},{"label":"ham","message":"Hello, my love! How goes that day ? I wish your well and fine babe and hope that you find some job prospects. I miss you, boytoy ... *a teasing kiss*"},{"label":"ham","message":"Tell my bad character which u Dnt lik in me. I'll try to change in <#> . I ll add tat 2 my new year resolution. Waiting for ur reply.Be frank...good morning."},{"label":"ham","message":"No:-)i got rumour that you going to buy apartment in chennai:-)"},{"label":"ham","message":"Yeah, probably earlier than that"},{"label":"ham","message":"Change windows logoff sound.."},{"label":"ham","message":"Still i have not checked it da. . ."},{"label":"ham","message":"I'm also came to room."},{"label":"ham","message":"Huh but i got lesson at 4 lei n i was thinkin of going to sch earlier n i tot of parkin at kent vale..."},{"label":"ham","message":"Ok."},{"label":"ham","message":"I will reach office around <DECIMAL> . & my mobile have problem. You cann't get my voice. So call you asa i'll free"},{"label":"ham","message":"Cool, text me when you head out"},{"label":"spam","message":"You are being contacted by our dating service by someone you know! To find out who it is, call from a land line 09050000878. PoBox45W2TG150P"},{"label":"spam","message":"Wan2 win a Meet+Greet with Westlife 4 U or a m8? They are currently on what tour? 1)Unbreakable, 2)Untamed, 3)Unkempt. Text 1,2 or 3 to 83049. Cost 50p +std text"},{"label":"ham","message":"Happy birthday... May u find ur prince charming soon n dun work too hard..."},{"label":"ham","message":"Oh, the grand is having a bit of a party but it doesn't mention any cover charge so it's probably first come first served"},{"label":"ham","message":"You said to me before i went back to bed that you can't sleep for anything."},{"label":"ham","message":"I hope you arnt pissed off but id would really like to see you tomorrow. Love me xxxxxxxxxxxxxX"},{"label":"spam","message":"Dorothy@kiefer.com (Bank of Granite issues Strong-Buy) EXPLOSIVE PICK FOR OUR MEMBERS *****UP OVER 300% *********** Nasdaq Symbol CDGT That is a $5.00 per.."},{"label":"ham","message":"says the <#> year old with a man and money. I'm down to my last <#> . Still waiting for that check."},{"label":"ham","message":"I will come to ur home now"},{"label":"ham","message":"Free any day but i finish at 6 on mon n thurs..."},{"label":"ham","message":"Will you be here for food"},{"label":"ham","message":"life alle mone,eppolum oru pole allalo"},{"label":"ham","message":"Nite..."},{"label":"ham","message":"Two fundamentals of cool life: \"Walk, like you are the KING\"...! OR \"Walk like you Dont care,whoever is the KING\"!... Gud nyt"},{"label":"ham","message":"Camera quite good, 10.1mega pixels, 3optical and 5digital dooms. Have a lovely holiday, be safe and i hope you hav a good journey! Happy new year to you both! See you in a couple of weeks!"},{"label":"ham","message":"Hi Petey!noi\u0092m ok just wanted 2 chat coz avent spoken 2 u 4 a long time-hope ur doin alrite.have good nit at js love ya am.x"},{"label":"ham","message":"I just saw ron burgundy captaining a party boat so yeah"},{"label":"ham","message":"I'm serious. You are in the money base"},{"label":"ham","message":"Already one guy loving you:-."},{"label":"ham","message":"Staff of placement training in Amrita college."},{"label":"ham","message":"I always chat with you. In fact i need money can you raise me?"},{"label":"ham","message":"I'm job profile seems like bpo.."},{"label":"ham","message":"Well, I was about to give up cos they all said no they didn\u2018t do one nighters. I persevered and found one but it is very cheap so i apologise in advance. It is just somewhere to sleep isnt it?"},{"label":"ham","message":"So you think i should actually talk to him? Not call his boss in the morning? I went to this place last year and he told me where i could go and get my car fixed cheaper. He kept telling me today how much he hoped i would come back in, how he always regretted not getting my number, etc."},{"label":"ham","message":"Are you willing to go for apps class."},{"label":"ham","message":"Hanging out with my brother and his family"},{"label":"ham","message":"No it will reach by 9 only. She telling she will be there. I dont know"},{"label":"ham","message":"Hey... are you going to quit soon? Xuhui and i working till end of the month"},{"label":"ham","message":"Im sorry bout last nite it wasn\u0092t ur fault it was me, spouse it was pmt or sumthin! U 4give me? I think u shldxxxx"},{"label":"ham","message":"Try neva mate!!"},{"label":"ham","message":"Yeah that'd pretty much be the best case scenario"},{"label":"ham","message":"I not free today i haf 2 pick my parents up tonite..."},{"label":"ham","message":"\"HEY BABE! FAR 2 SPUN-OUT 2 SPK AT DA MO... DEAD 2 DA WRLD. BEEN SLEEPING ON DA SOFA ALL DAY, HAD A COOL NYTHO, TX 4 FONIN HON, CALL 2MWEN IM BK FRMCLOUD 9! J X\""},{"label":"ham","message":"Should i send you naughty pix? :)"},{"label":"spam","message":"You are a \u00a31000 winner or Guaranteed Caller Prize, this is our Final attempt to contact you! To Claim Call 09071517866 Now! 150ppmPOBox10183BhamB64XE"},{"label":"spam","message":"Xmas & New Years Eve tickets are now on sale from the club, during the day from 10am till 8pm, and on Thurs, Fri & Sat night this week. They're selling fast!"},{"label":"ham","message":"Tyler (getting an 8th) has to leave not long after 9, can you get here in like an hour?"},{"label":"ham","message":"Prepare to be pounded every night..."},{"label":"ham","message":"Actually, my mobile is full of msg. And i m doing a work online, where i need to send them <#> sent msg i wil explain u later."},{"label":"ham","message":"Sorry, I'll call later"},{"label":"ham","message":"Good evening! How are you?"},{"label":"ham","message":"I'm at home. Please call"},{"label":"ham","message":"Oic cos me n my sis got no lunch today my dad went out... So dunno whether 2 eat in sch or wat..."},{"label":"ham","message":"Mmmmm ... It was sooooo good to wake to your words this morning, my Love!! Mmmm fuck ... I love you too, my Lion ... *devouring kiss from across the sea*"},{"label":"ham","message":"We are pleased to inform that your application for Airtel Broadband is processed successfully. Your installation will happen within 3 days."},{"label":"ham","message":"What happen dear. Why you silent. I am tensed"},{"label":"ham","message":"I'll get there at 3, unless you guys want me to come some time sooner"},{"label":"ham","message":"If you are not coughing then its nothing"},{"label":"ham","message":"\u00dc come lt 25 n pass to me lar"},{"label":"ham","message":"I'm e person who's doing e sms survey..."},{"label":"ham","message":"Lol ok ill try to send. Be warned Sprint is dead slow. You'll prolly get it tomorrow"},{"label":"ham","message":"Thank You meet you monday"},{"label":"ham","message":"SO IS TH GOWER MATE WHICH IS WHERE I AM!?! HOW R U MAN? ALL IS GOOD IN WALES ILL B BACK \u0091MORROW. C U THIS WK? WHO WAS THE MSG 4? \u0096 RANDOM!"},{"label":"spam","message":"Rock yr chik. Get 100's of filthy films &XXX pics on yr phone now. rply FILTH to 69669. Saristar Ltd, E14 9YT 08701752560. 450p per 5 days. Stop2 cancel"},{"label":"ham","message":"Single line with a big meaning::::: \"Miss anything 4 ur \"Best Life\" but, don't miss ur best life for anything... Gud nyt..."},{"label":"ham","message":"I got like $ <#> , I can get some more later though. Get whatever you feel like"},{"label":"ham","message":"Dad wanted to talk about the apartment so I got a late start, omw now"},{"label":"ham","message":"I love you both too :-)"},{"label":"ham","message":"Lol u still feeling sick?"},{"label":"ham","message":"Din i tell u jus now 420"},{"label":"ham","message":"am up to my eyes in philosophy"},{"label":"spam","message":"From next month get upto 50% More Calls 4 Ur standard network charge 2 activate Call 9061100010 C Wire3.net 1st4Terms PoBox84 M26 3UZ Cost \u00a31.50 min MobcudB more"},{"label":"ham","message":"Ok lor. I'm in town now lei."},{"label":"ham","message":"I had it already..sabarish asked me to go.."},{"label":"ham","message":"No da. . Vijay going to talk in jaya tv"},{"label":"spam","message":"URGENT! We are trying to contact U Todays draw shows that you have won a \u00a3800 prize GUARANTEED. Call 09050000460 from land line. Claim J89. po box245c2150pm"},{"label":"ham","message":"Lol I know! Hey someone did a great inpersonation of flea on the forums. I love it!"},{"label":"spam","message":"Text BANNEDUK to 89555 to see! cost 150p textoperator g696ga 18+ XXX"},{"label":"ham","message":"Still chance there. If you search hard you will get it..let have a try :)"},{"label":"spam","message":"Auction round 4. The highest bid is now \u00a354. Next maximum bid is \u00a371. To bid, send BIDS e. g. 10 (to bid \u00a310) to 83383. Good luck."},{"label":"ham","message":"Do you always celebrate NY's with your family ?"},{"label":"ham","message":"We know TAJ MAHAL as symbol of love. But the other lesser known facts 1. Mumtaz was Shahjahan's 4th wife, out of his 7 wifes. 2. Shahjahan killed Mumtaz's husband to marry her. 3. Mumtaz died in her <#> th delivery. 4. He then married Mumtaz's sister. Question arises where the Hell is the LOVE?:-| -The Great Hari-"},{"label":"ham","message":"Its ok..come to my home it vl nice to meet and v can chat.."},{"label":"spam","message":"Collect your VALENTINE'S weekend to PARIS inc Flight & Hotel + \u00a3200 Prize guaranteed! Text: PARIS to No: 69101. www.rtf.sphosting.com"},{"label":"ham","message":"Sent me de webadres for geting salary slip"},{"label":"ham","message":"She's fine. Sends her greetings"},{"label":"spam","message":"Customer Loyalty Offer:The NEW Nokia6650 Mobile from ONLY \u00a310 at TXTAUCTION! Txt word: START to No: 81151 & get yours Now! 4T&Ctxt TC 150p\/MTmsg"},{"label":"ham","message":"But you dint in touch with me."},{"label":"ham","message":"Yup, leaving right now, be back soon"},{"label":"spam","message":"You won't believe it but it's true. It's Incredible Txts! Reply G now to learn truly amazing things that will blow your mind. From O2FWD only 18p\/txt"},{"label":"ham","message":"Yeah sure I'll leave in a min"},{"label":"ham","message":"And do you have any one that can teach me how to ship cars."},{"label":"ham","message":"The sign of maturity is not when we start saying big things.. But actually it is, when we start understanding small things... *HAVE A NICE EVENING* BSLVYL"},{"label":"ham","message":"Yeah confirmed for you staying at that weekend"},{"label":"ham","message":"They said \u00fc dun haf passport or smth like dat.. Or \u00fc juz send to my email account.."},{"label":"ham","message":"Multiply the numbers independently and count decimal points then, for the division, push the decimal places like i showed you."},{"label":"ham","message":"Have a lovely night and when you wake up to see this message, i hope you smile knowing all is as should be. Have a great morning"},{"label":"ham","message":"Ard 4 lor..."},{"label":"ham","message":"You are right. Meanwhile how's project twins comin up"},{"label":"ham","message":"I sent your maga that money yesterday oh."},{"label":"spam","message":"Hi 07734396839 IBH Customer Loyalty Offer: The NEW NOKIA6600 Mobile from ONLY \u00a310 at TXTAUCTION!Txt word:START to No:81151 & get Yours Now!4T&"},{"label":"ham","message":"Heart is empty without love.. Mind is empty without wisdom.. Eyes r empty without dreams & Life is empty without frnds.. So Alwys Be In Touch. Good night & sweet dreams"},{"label":"spam","message":"I am hot n horny and willing I live local to you - text a reply to hear strt back from me 150p per msg Netcollex LtdHelpDesk: 02085076972 reply Stop to end"},{"label":"ham","message":"Our ride equally uneventful - not too many of those pesky cyclists around at that time of night ;)."},{"label":"ham","message":"If you were\/are free i can give. Otherwise nalla adi entey nattil kittum"},{"label":"ham","message":"I've sent my wife your text. After we buy them she'll tell you what to do. So just relax. We should go get them this wkend."},{"label":"ham","message":"I am in escape theatre now. . Going to watch KAVALAN in a few minutes"},{"label":"ham","message":"How much would it cost to hire a hitman"},{"label":"ham","message":"I anything lor..."},{"label":"ham","message":"Sorry, I'll call later"},{"label":"spam","message":"Do you want a New Nokia 3510i Colour Phone Delivered Tomorrow? With 200 FREE minutes to any mobile + 100 FREE text + FREE camcorder Reply or Call 08000930705"},{"label":"ham","message":"Huh but i cant go 2 ur house empty handed right?"},{"label":"ham","message":"Good morning princess! Happy New Year!"},{"label":"spam","message":"Congratulations YOU'VE Won. You're a Winner in our August \u00a31000 Prize Draw. Call 09066660100 NOW. Prize Code 2309."},{"label":"ham","message":"Aight, we'll head out in a few"},{"label":"ham","message":"Then wat r u doing now? Busy wif work?"},{"label":"ham","message":"I know you mood off today"},{"label":"ham","message":"Jay told me already, will do"},{"label":"ham","message":"Cps is causing the outages to conserve energy."},{"label":"ham","message":"I'm not sure, I was just checking out what was happening around the area"},{"label":"ham","message":"Hey morning what you come to ask:-) pa..."},{"label":"ham","message":"Jordan got voted out last nite!"},{"label":"ham","message":"That means you got an A in epi, she.s fine. She.s here now."},{"label":"ham","message":"I have no idea where you are"},{"label":"ham","message":"Pls come quick cant bare this."},{"label":"ham","message":"Joy's father is John. Then John is the ____ of Joy's father. If u ans ths you hav <#> IQ. Tis s IAS question try to answer."},{"label":"ham","message":"Call me. I m unable to cal. Lets meet bhaskar, and deep"},{"label":"ham","message":"No. I.ll meet you in the library"},{"label":"ham","message":"K, my roommate also wants a dubsack and another friend may also want some so plan on bringing extra, I'll tell you when they know for sure"},{"label":"ham","message":"Depends on individual lor e hair dresser say pretty but my parents say look gong. U kaypoh.. I also dunno wat she collecting."},{"label":"ham","message":"Ok c \u00fc then."},{"label":"ham","message":"I enjoy watching and playing football and basketball. Anything outdoors. And you?"},{"label":"ham","message":"Can you please ask macho what his price range is, does he want something new or used plus it he only interfued in the blackberry bold <#> or any bb"},{"label":"ham","message":"Sorry sent blank msg again. Yup but trying 2 do some serious studying now."},{"label":"ham","message":"Hey check it da. I have listed da."},{"label":"spam","message":"8007 25p 4 Alfie Moon's Children in Need song on ur mob. Tell ur m8s. Txt TONE CHARITY to 8007 for nokias or POLY CHARITY for polys :zed 08701417012 profit 2 charity"},{"label":"ham","message":"I meant as an apology from me for texting you to get me drugs at <#> at night"},{"label":"ham","message":"That means from february to april i'll be getting a place to stay down there so i don't have to hustle back and forth during audition season as i have since my sister moved away from harlem."},{"label":"ham","message":"Goin to workout lor... Muz lose e fats..."},{"label":"ham","message":"Damn, poor zac doesn't stand a chance"},{"label":"ham","message":"No message..no responce..what happend?"},{"label":"ham","message":"I want to tel u one thing u should not mistake me k THIS IS THE MESSAGE THAT YOU SENT:)"},{"label":"ham","message":"Yeah right! I'll bring my tape measure fri!"},{"label":"ham","message":"Still chance there. If you search hard you will get it..let have a try :)"},{"label":"ham","message":"Meeting u is my work. . . Tel me when shall i do my work tomorrow"},{"label":"ham","message":"Should I head straight there or what"},{"label":"spam","message":"Get the official ENGLAND poly ringtone or colour flag on yer mobile for tonights game! Text TONE or FLAG to 84199. Optout txt ENG STOP Box39822 W111WX \u00a31.50"},{"label":"ham","message":"Thank you princess! You are so sexy..."},{"label":"ham","message":"Oooh I got plenty of those!"},{"label":"ham","message":"Hui xin is in da lib."},{"label":"ham","message":"Its a big difference. <#> versus <#> every <#> hrs"},{"label":"ham","message":"It's not that you make me cry. It's just that when all our stuff happens on top of everything else, it pushes me over the edge. You don't underdtand how often i cry over my sorry, sorry life."},{"label":"ham","message":"\"ME 2 BABE I FEEL THE SAME LETS JUST 4GET ABOUT IT+BOTH TRY +CHEER UP+NOT FIT SOO MUCHXXLOVE U LOCAXX\""},{"label":"ham","message":"You know what hook up means right?"},{"label":"spam","message":"Customer service announcement. We recently tried to make a delivery to you but were unable to do so, please call 07090298926 to re-schedule. Ref:9307622"},{"label":"ham","message":"Wat's da model num of ur phone?"},{"label":"ham","message":"He's really into skateboarding now despite the fact that he gets thrown off of it and winds up with bandages and shit all over his arms every five minutes"},{"label":"spam","message":"You can stop further club tones by replying \"STOP MIX\" See my-tone.com\/enjoy. html for terms. Club tones cost GBP4.50\/week. MFL, PO Box 1146 MK45 2WT (2\/3)"},{"label":"ham","message":"My house here e sky quite dark liao... If raining then got excuse not 2 run already rite... Hee..."},{"label":"ham","message":"Sorry, left phone upstairs. OK, might be hectic but would be all my birds with one fell swoop. It's a date."},{"label":"ham","message":"* Thought I didn't see you."},{"label":"spam","message":"wamma get laid?want real doggin locations sent direct to your mobile? join the UKs largest dogging network. txt dogs to 69696 now!nyt. ec2a. 3lp \u00a31.50\/msg."},{"label":"ham","message":"Carlos says we can pick up from him later so yeah we're set"},{"label":"ham","message":"Hey babe, my friend had to cancel, still up for a visit ?"},{"label":"ham","message":"As per your request 'Maangalyam (Alaipayuthe)' has been set as your callertune for all Callers. Press *9 to copy your friends Callertune"},{"label":"ham","message":"Hmm ill have to think about it... ok you're forgiven! =D"},{"label":"ham","message":"We are hoping to get away by 7, from Langport. You still up for town tonight?"},{"label":"ham","message":"Want to send me a virtual hug?... I need one"},{"label":"ham","message":"Probably not, still going over some stuff here"},{"label":"ham","message":"It has issues right now. Ill fix for her by tomorrow."},{"label":"ham","message":"Why i come in between you people"},{"label":"ham","message":"Senthil group company Apnt 5pm."},{"label":"ham","message":"Oh really?? Did you make it on air? What's your talent?"},{"label":"ham","message":"Studying. But i.ll be free next weekend."},{"label":"ham","message":"R u here yet? I'm wearing blue shirt n black pants."},{"label":"ham","message":"Wait.i will come out.. <#> min:)"},{"label":"ham","message":"I will reach ur home in <#> minutes"},{"label":"ham","message":"Well then you have a great weekend!"},{"label":"ham","message":"What are you doing in langport? Sorry, but I'll probably be in bed by 9pm. It sucks being ill at xmas! When do you and go2sri lanka?"},{"label":"ham","message":"Frnd s not juz a word.....not merely a relationship.....its a silent promise which says ... \" I will be with YOU \" Wherevr.. Whenevr.. Forevr... Gudnyt dear.."},{"label":"ham","message":"Huh? 6 also cannot? Then only how many mistakes?"},{"label":"ham","message":"Ha... U jus ate honey ar? So sweet..."},{"label":"ham","message":"I'm turning off my phone. My moms telling everyone I have cancer. And my sister won't stop calling. It hurts to talk. Can't put up with it. See u when u get home. Love u"},{"label":"ham","message":"Honey ? Sweetheart ? Darling ? Sexy buns ? Sugar plum ? Loverboy ? I miss you, boytoy ... *smacks your ass* Did you go to the gym too ?"},{"label":"ham","message":"Thanks for loving me so. You rock"},{"label":"ham","message":"Yeah imma come over cause jay wants to do some drugs"},{"label":"ham","message":"Ok thanx... Take care then..."},{"label":"ham","message":"Yup. Thk of u oso boring wat."},{"label":"ham","message":"came to look at the flat, seems ok, in his 50s? * Is away alot wiv work. Got woman coming at 6.30 too."},{"label":"ham","message":"Moji just informed me that you saved our lives. Thanks."},{"label":"spam","message":"You have won a Nokia 7250i. This is what you get when you win our FREE auction. To take part send Nokia to 86021 now. HG\/Suite342\/2Lands Row\/W1JHL 16+"},{"label":"ham","message":"Whos this am in class:-)"},{"label":"ham","message":"Hey r \u00fc still online? I've finished the formatting..."},{"label":"ham","message":"Great! So what attracts you to the brothas?"},{"label":"spam","message":"Promotion Number: 8714714 - UR awarded a City Break and could WIN a \u00a3200 Summer Shopping spree every WK. Txt STORE to 88039 . SkilGme. TsCs087147403231Winawk!Age16 \u00a31.50perWKsub"},{"label":"ham","message":"Stupid.its not possible"},{"label":"ham","message":"I cant pick the phone right now. Pls send a message"},{"label":"ham","message":"LOL what happens in Vegas stays in vegas"},{"label":"ham","message":"Hello, hello, hi lou sorry it took so long 2 reply- I left mobile at friends in Lancaster, just got it bak Neway im sorry I couldn\u0092t make ur b\u0092day 2 hun!"},{"label":"ham","message":"When did i use soc... I use it only at home... \u00dc dunno how 2 type it in word ar..."},{"label":"ham","message":"Dad says hurry the hell up"},{"label":"ham","message":"Wake me up at <#> am morning:)"},{"label":"ham","message":"I get out of class in bsn in like <#> minutes, you know where advising is?"},{"label":"ham","message":"Great! I shoot big loads so get ready!"},{"label":"ham","message":"I'll meet you in the lobby"},{"label":"ham","message":"You still coming tonight?"},{"label":"ham","message":"What happen dear tell me"},{"label":"ham","message":"Sir, i am waiting for your call, once free please call me."},{"label":"ham","message":"No i am not having not any movies in my laptop"},{"label":"ham","message":"I was about to do it when i texted. I finished a long time ago and showered and er'ything!"},{"label":"ham","message":"Ok im not sure what time i finish tomorrow but i wanna spend the evening with you cos that would be vewy vewy lubly! Love me xxx"},{"label":"ham","message":"Hello, As per request from <#> Rs.5 has been transfered to you"},{"label":"ham","message":"I am in tirupur. call you da."},{"label":"spam","message":"You are a winner you have been specially selected to receive \u00a31000 cash or a \u00a32000 award. Speak to a live operator to claim call 087147123779am-7pm. Cost 10p"},{"label":"ham","message":"S:)but he had some luck.2 catches put down:)"},{"label":"ham","message":"How i noe... Did \u00fc specify da domain as nusstu... \u00dc still in sch..."},{"label":"ham","message":"Oh...i asked for fun. Haha...take care. \u00fc"},{"label":"ham","message":"Shall i get my pouch?"},{"label":"ham","message":"Hey loverboy! I love you !! I had to tell ... I look at your picture and ache to feel you between my legs ... Fuck I want you ... I need you ... I crave you ."},{"label":"ham","message":"How is my boy? No sweet words left for me this morning ... *sighs* ... How goes you day, my love ? Did you start your studying?"},{"label":"ham","message":"Kent vale lor... \u00dc wait 4 me there ar?"},{"label":"ham","message":"Ok. Very good. Its all about making that money."},{"label":"ham","message":"Reading gud habit.. Nan bari hudgi yorge pataistha ertini kano:-)"},{"label":"ham","message":"Aight do you still want to get money"},{"label":"spam","message":"Free Top ringtone -sub to weekly ringtone-get 1st week free-send SUBPOLY to 81618-?3 per week-stop sms-08718727870"},{"label":"ham","message":"Ok.ok ok..then..whats ur todays plan"},{"label":"ham","message":"ARE YOU IN TOWN? THIS IS V. IMPORTANT"},{"label":"ham","message":"Sorry pa, i dont knw who ru pa?"},{"label":"ham","message":"Wat u doing there?"},{"label":"ham","message":"If i not meeting \u00fc all rite then i'll go home lor. If \u00fc dun feel like comin it's ok."},{"label":"ham","message":"Oh, i will get paid. The most outstanding one is for a commercial i did for Hasbro...in AUGUST! They made us jump through so many hoops to get paid. Still not."},{"label":"ham","message":"I am late,so call you tomorrow morning.take care sweet dreams....u and me...ummifying...bye."},{"label":"ham","message":"Networking technical support associate."},{"label":"ham","message":"I'm gonna rip out my uterus."},{"label":"ham","message":"Cool. Do you like swimming? I have a pool and jacuzzi at my house."},{"label":"spam","message":"Thanks for your ringtone order, reference number X49. Your mobile will be charged 4.50. Should your tone not arrive please call customer services 09065989182. From: [colour=red]text[\/colour]TXTstar"},{"label":"ham","message":"Yeah why not, is the gang all ready"},{"label":"ham","message":"Blank is Blank. But wat is blank? Lol"},{"label":"ham","message":"I'm in a movie... Collect car oredi..."},{"label":"ham","message":"We left already we at orchard now."},{"label":"spam","message":"Hi there, 2nights ur lucky night! Uve been invited 2 XCHAT, the Uks wildest chat! Txt CHAT to 86688 now! 150p\/MsgrcvdHG\/Suite342\/2Lands\/Row\/W1J6HL LDN 18yrs"},{"label":"ham","message":"Nothing spl..wat abt u and whr ru?"},{"label":"ham","message":"No chikku nt yet.. Ya i'm free"},{"label":"ham","message":"Aldrine, rakhesh ex RTM here.pls call.urgent."},{"label":"ham","message":"The search 4 happiness is 1 of d main sources of unhappiness! Accept life the way it comes! U will find happiness in every moment u live."},{"label":"ham","message":"I'm at home. Please call"},{"label":"ham","message":"I guess you could be as good an excuse as any, lol."},{"label":"ham","message":"Isn't frnd a necesity in life? imagine urself witout a frnd.. hw'd u feel at ur colleg? wat'll u do wth ur cell? wat abt functions? thnk abt events espe'll cared, missed & irritated u? 4wrd it to all those dear-loving frnds wthout whom u cant live.. I jst did it.. Takecare..:) GOODMORNING"},{"label":"ham","message":"Gud mrng dear hav a nice day"},{"label":"ham","message":"Old Orchard near univ. How about you?"},{"label":"ham","message":"4 tacos + 1 rajas burrito, right?"},{"label":"ham","message":"It\u2018s \u00a36 to get in, is that ok?"},{"label":"ham","message":"Hows the street where the end of library walk is?"},{"label":"ham","message":"Plz note: if anyone calling from a mobile Co. & asks u to type # <#> or # <#> . Do not do so. Disconnect the call,coz it iz an attempt of 'terrorist' to make use of the sim card no. Itz confirmd by nokia n motorola n has been verified by CNN IBN."},{"label":"ham","message":"We stopped to get ice cream and will go back after"},{"label":"ham","message":"Did you stitch his trouser"},{"label":"ham","message":"No da. . Vijay going to talk in jaya tv"},{"label":"spam","message":"2\/2 146tf150p"},{"label":"ham","message":"Hey i'm bored... So i'm thinking of u... So wat r u doing?"},{"label":"ham","message":"Nah, Wednesday. When should I bring the mini cheetos bag over?"},{"label":"ham","message":"Nobody names their penis a girls name this story doesn't add up at all"},{"label":"ham","message":"Aight, let me know when you're gonna be around usf"},{"label":"ham","message":"I'm not. She lip synced with shangela."},{"label":"ham","message":"\u00dc neva tell me how i noe... I'm not at home in da aft wat..."},{"label":"ham","message":"A bit of Ur smile is my hppnss, a drop of Ur tear is my sorrow, a part of Ur heart is my life, a heart like mine wil care for U, forevr as my GOODFRIEND"},{"label":"spam","message":"Dear Voucher Holder 2 claim your 1st class airport lounge passes when using Your holiday voucher call 08704439680. When booking quote 1st class x 2"},{"label":"ham","message":"Buzz! Hey, my Love ! I think of you and hope your day goes well. Did you sleep in ? I miss you babe. I long for the moment we are together again*loving smile*"},{"label":"ham","message":"Haha... Sounds crazy, dunno can tahan anot..."},{"label":"ham","message":"Why are u up so early?"},{"label":"ham","message":"Ya that one is slow as poo"},{"label":"spam","message":"Bloomberg -Message center +447797706009 Why wait? Apply for your future http:\/\/careers. bloomberg.com"},{"label":"ham","message":"\"Im on gloucesterroad what are uup to later?\""},{"label":"ham","message":"Yes:)here tv is always available in work place.."},{"label":"spam","message":"YES! The only place in town to meet exciting adult singles is now in the UK. Txt CHAT to 86688 now! 150p\/Msg."},{"label":"ham","message":"Lol no ouch but wish i'd stayed out a bit longer"},{"label":"ham","message":"GOD ASKED, \"What is forgiveness?\" A little child gave lovely reply, \"It is d wonderful fruit that a tree gives when it is being hurt by a stone.. Good night......"},{"label":"ham","message":"We'll join the <#> bus"},{"label":"ham","message":"Was just about to ask. Will keep this one. Maybe that's why you didn't get all the messages we sent you on glo"},{"label":"spam","message":"FREE for 1st week! No1 Nokia tone 4 ur mob every week just txt NOKIA to 8007 Get txting and tell ur mates www.getzed.co.uk POBox 36504 W45WQ norm150p\/tone 16+"},{"label":"ham","message":"K.i will send in <#> min:)"},{"label":"ham","message":"Would me smoking you out help us work through this difficult time"},{"label":"spam","message":"Someone U know has asked our dating service 2 contact you! Cant guess who? CALL 09058095107 NOW all will be revealed. POBox 7, S3XY 150p"},{"label":"ham","message":"Yes.mum lookin strong:)"},{"label":"ham","message":"Sir Goodmorning, Once free call me."},{"label":"ham","message":"Where are you call me."},{"label":"ham","message":"Was gr8 to see that message. So when r u leaving? Congrats dear. What school and wat r ur plans."},{"label":"ham","message":"Love it! The girls at the office may wonder why you are smiling but sore..."},{"label":"ham","message":"Hi, wlcome back, did wonder if you got eaten by a lion or something, nothing much"},{"label":"ham","message":"Does uncle timi help in clearing cars"},{"label":"ham","message":"I came hostel. I m going to sleep. Plz call me up before class. Hrishi."},{"label":"ham","message":"Ok... But bag again.."},{"label":"ham","message":"Hi! You just spoke to MANEESHA V. We'd like to know if you were satisfied with the experience. Reply Toll Free with Yes or No."},{"label":"ham","message":"Ok lor. Msg me b4 u call."},{"label":"spam","message":"Mila, age23, blonde, new in UK. I look sex with UK guys. if u like fun with me. Text MTALK to 69866.18 . 30pp\/txt 1st 5free. \u00a31.50 increments. Help08718728876"},{"label":"ham","message":"Once a fishrman woke early in d mrng. It was very dark. He waited a while & found a sack ful of stones. He strtd throwin thm in2 d sea 2 pass time. Atlast he had jus 1stone, sun rose up & he found out tht those r nt stones, those were diamonds. Moral:\"Dont wake up early in d mrng'' GOOD night"},{"label":"spam","message":"Claim a 200 shopping spree, just call 08717895698 now! Have you won! MobStoreQuiz10ppm"},{"label":"ham","message":"Then ur physics get a-?"},{"label":"ham","message":"Dear friends, sorry for the late information. Today is the birthday of our loving Ar.Praveesh. for more details log on to face book and see. Its his number + <#> . Dont miss a delicious treat."},{"label":"ham","message":"How r \u00fc going to send it to me?"},{"label":"ham","message":"Can you do online transaction?"},{"label":"ham","message":"Dear got train and seat mine lower seat"},{"label":"ham","message":"Let me know if you need anything else. Salad or desert or something... How many beers shall i get?"},{"label":"ham","message":"Wat r u doing?"},{"label":"ham","message":"WHORE YOU ARE UNBELIEVABLE."},{"label":"spam","message":"Want to funk up ur fone with a weekly new tone reply TONES2U 2 this text. www.ringtones.co.uk, the original n best. Tones 3GBP network operator rates apply"},{"label":"ham","message":"Are you sure you don't mean \"get here, we made you hold all the weed\""},{"label":"ham","message":"I love you !!! You know? Can you feel it? Does it make your belly warm? I wish it does, my love ... I shall meet you in your dreams, Ahmad ... *adoring kiss*"},{"label":"spam","message":"Twinks, bears, scallies, skins and jocks are calling now. Don't miss the weekend's fun. Call 08712466669 at 10p\/min. 2 stop texts call 08712460324(nat rate)"},{"label":"ham","message":"Love it! I want to flood that pretty pussy with cum..."},{"label":"ham","message":"Hey are you angry with me. Reply me dr."},{"label":"ham","message":"Short But Cute: \"Be a good person, but dont try to prove it..\" .Gud noon...."},{"label":"ham","message":"Also remember the beads don't come off. Ever."},{"label":"ham","message":"They have a thread on the wishlist section of the forums where ppl post nitro requests. Start from the last page and collect from the bottom up."},{"label":"ham","message":"For The First Time In The History 'Need' 'Comfort' And 'Luxury' Are Sold At Same Price In India..!! Onion-Rs. <#> Petrol-Rs. <#> Beer-Rs. <#> SHESIL <#>"},{"label":"ham","message":"Feb <#> is \"I LOVE U\" day. Send dis to all ur \"VALUED FRNDS\" evn me. If 3 comes back u'll gt married d person u luv! If u ignore dis u will lose ur luv 4 Evr"},{"label":"ham","message":"Actually nvm, got hella cash, we still on for <#> ish?"},{"label":"spam","message":"We tried to contact you re your reply to our offer of a Video Handset? 750 anytime any networks mins? UNLIMITED TEXT? Camcorder? Reply or call 08000930705 NOW"},{"label":"ham","message":"It's ok, at least armand's still around"},{"label":"ham","message":"No da. I am happy that we sit together na"},{"label":"ham","message":"Yup song bro. No creative. Neva test quality. He said check review online."},{"label":"ham","message":"No dude, its not fake..my frnds got money, thts y i'm reffering u..if u member wit my mail link, u vl be credited <#> rs and il be getiing <#> rs..i can draw my acc wen it is <#> rs.."},{"label":"ham","message":"Dude while were makin those weirdy brownies my sister made awesome cookies. I took pics."},{"label":"spam","message":"URGENT! We are trying to contact you. Last weekends draw shows that you have won a \u00a3900 prize GUARANTEED. Call 09061701851. Claim code K61. Valid 12hours only"},{"label":"ham","message":"Pls dont restrict her from eating anythin she likes for the next two days."},{"label":"ham","message":"Mm you ask him to come its enough :-)"},{"label":"ham","message":"At the funeral home with Audrey and dad"},{"label":"ham","message":"Aight, can you text me the address?"},{"label":"ham","message":"Excellent! Wish we were together right now!"},{"label":"ham","message":"Yep then is fine 7.30 or 8.30 for ice age."},{"label":"ham","message":"Pls i wont belive god.not only jesus."},{"label":"ham","message":"Can. Dunno wat to get 4 her..."},{"label":"ham","message":"Not yet chikku..k, then wat abt tht guy did he stopped irritating or msging to u.."},{"label":"ham","message":"How long does it take to get it."},{"label":"ham","message":"This is my number by vivek.."},{"label":"spam","message":"74355 XMAS iscoming & ur awarded either \u00a3500 CD gift vouchers & free entry 2 r \u00a3100 weekly draw txt MUSIC to 87066 TnC"},{"label":"ham","message":"sorry brah, just finished the last of my exams, what up"},{"label":"ham","message":"I got arrested for possession at, I shit you not, <TIME> pm"},{"label":"ham","message":"You are right though. I can't give you the space you want and need. This is really starting to become an issue. I was going to suggest setting a definite move out--if i'm still there-- after greece. But maybe you are ready and should do it now."},{"label":"ham","message":"Just normal only here :)"},{"label":"ham","message":"Please protect yourself from e-threats. SIB never asks for sensitive information like Passwords,ATM\/SMS PIN thru email. Never share your password with anybody."},{"label":"ham","message":"I miss you so much I'm so desparate I have recorded the message you left for me the other day and listen to it just to hear the sound of your voice. I love you"},{"label":"ham","message":"Hi. I'm always online on yahoo and would like to chat with you someday"},{"label":"ham","message":"Goodmorning,my grandfather expired..so am on leave today."},{"label":"spam","message":"Congratulations U can claim 2 VIP row A Tickets 2 C Blu in concert in November or Blu gift guaranteed Call 09061104276 to claim TS&Cs www.smsco.net cost\u00a33.75max"},{"label":"ham","message":"Where are you ? What are you doing ? Are yuou working on getting the pc to your mom's ? Did you find a spot that it would work ? I need you"},{"label":"ham","message":"Sure, I'll see if I can come by in a bit"},{"label":"ham","message":"I agree. So i can stop thinkin about ipad. Can you please ask macho the same question."},{"label":"ham","message":"Let's pool our money together and buy a bunch of lotto tickets. If we win I get <#> % u get <#> %. Deal?"},{"label":"ham","message":"Ok."},{"label":"ham","message":"I had askd u a question some hours before. Its answer"},{"label":"ham","message":"Watching tv lor. Nice one then i like lor."},{"label":"ham","message":"I'm thinking that chennai forgot to come for auction.."},{"label":"ham","message":"Then \u00fc come n pick me at 530 ar?"},{"label":"ham","message":"Early bird! Any purchases yet?"},{"label":"ham","message":"Went to pay rent. So i had to go to the bank to authorise the payment."},{"label":"ham","message":"Erm \u2026 ill pick you up at about 6.45pm. That'll give enough time to get there, park and that."},{"label":"ham","message":"HEY MATE! HOWS U HONEY?DID U AVE GOOD HOLIDAY? GIMMI DE GOSS!x"},{"label":"ham","message":"Howz pain.it will come down today.do as i said ystrday.ice and medicine."},{"label":"ham","message":"chile, please! It's only a <DECIMAL> hour drive for me. I come down all the time and will be subletting feb-april for audition season."},{"label":"ham","message":"Yes ammae....life takes lot of turns you can only sit and try to hold the steering..."},{"label":"ham","message":"Yeah that's what I thought, lemme know if anything's goin on later"},{"label":"ham","message":"Mmmm.... I cant wait to lick it!"},{"label":"ham","message":"Pls go there today <#> . I dont want any excuses"},{"label":"spam","message":"Fantasy Football is back on your TV. Go to Sky Gamestar on Sky Active and play \u00a3250k Dream Team. Scoring starts on Saturday, so register now!SKY OPT OUT to 88088"},{"label":"ham","message":"Can you plz tell me the ans. BSLVYL sent via fullonsms.com"},{"label":"ham","message":"U in town alone?"},{"label":"ham","message":"I to am looking forward to all the sex cuddling.. Only two more sleeps"},{"label":"ham","message":"We have all rounder:)so not required:)"},{"label":"ham","message":"No, its true..k,Do u knw dis no. <#> ?"},{"label":"ham","message":"Dont worry, 1 day very big lambu ji vl come..til then enjoy batchlor party:-)"},{"label":"ham","message":"oh ya... Got hip hop open. Haha i was thinking can go for jazz then zoom to cine... Actually tonight i'm free leh... And there's a kb lesson tonight"},{"label":"spam","message":"Free msg: Single? Find a partner in your area! 1000s of real people are waiting to chat now!Send CHAT to 62220Cncl send STOPCS 08717890890\u00a31.50 per msg"},{"label":"ham","message":"I'm ok. Will do my part tomorrow"},{"label":"ham","message":"No! But we found a diff farm shop to buy some cheese. On way back now, can i call in?"},{"label":"ham","message":"R u still working now?"},{"label":"spam","message":"Win the newest \u0093Harry Potter and the Order of the Phoenix (Book 5) reply HARRY, answer 5 questions - chance to be the first among readers!"},{"label":"ham","message":"Yep. I do like the pink furniture tho."},{"label":"spam","message":"Free Msg: Ringtone!From: http:\/\/tms. widelive.com\/index. wml?id=1b6a5ecef91ff9*37819&first=true18:0430-JUL-05"},{"label":"ham","message":"Customer place, i wil cal u sir."},{"label":"spam","message":"Oh my god! I've found your number again! I'm so glad, text me back xafter this msgs cst std ntwk chg \u00a31.50"},{"label":"ham","message":"A pure hearted person can have a wonderful smile that makes even his\/her enemies to feel guilty for being an enemy.. So catch the world with your smile..:) GOODMORNING & HAVE A SMILEY SUNDAY..:)"},{"label":"ham","message":"THAT\u0092S ALRITE GIRL, U KNOW GAIL IS NEVA WRONG!!TAKE CARE SWEET AND DON\u0092T WORRY.C U L8TR HUN!LOVE Yaxxx"},{"label":"ham","message":"Theoretically yeah, he could be able to come"},{"label":"ham","message":"Alright we're hooked up, where you guys at"},{"label":"ham","message":"not that I know of, most people up here are still out of town"},{"label":"ham","message":"No let me do the math. Your not good at it."},{"label":"ham","message":"Oh ok wait 4 me there... My lect havent finish"},{"label":"ham","message":"Yeah my usual guy's out of town but there're definitely people around I know"},{"label":"ham","message":"I am joining today formally.Pls keep praying.will talk later."},{"label":"ham","message":"Happy or sad , one thing about past is- \"Its no more\" GOOD MORNING :-):-)."},{"label":"ham","message":"No. Did you multimedia message them or e-mail?"},{"label":"ham","message":"Okie but i scared u say i fat... Then u dun wan me already..."},{"label":"ham","message":"did u get that message"},{"label":"ham","message":"Sorry sir, i will call you tomorrow. senthil.hsbc"},{"label":"ham","message":"What you need. You have a person to give na."},{"label":"ham","message":"She left it very vague. She just said she would inform the person in accounting about the delayed rent and that i should discuss with the housing agency about my renting another place. But checking online now and all places around usc are <#> and up"},{"label":"ham","message":"Hi juan. Im coming home on fri hey. Of course i expect a welcome party and lots of presents. Ill phone u when i get back. Loads of love nicky x x x x x x x x x"},{"label":"ham","message":"Can you plz tell me the ans. BSLVYL sent via fullonsms.com"},{"label":"ham","message":"Short But Cute: \"Be a good person, but dont try to prove it..\" .Gud noon...."},{"label":"ham","message":"Gumby's has a special where a <#> \" cheese pizza is $2 so I know what we're doin tonight"},{"label":"spam","message":"A link to your picture has been sent. You can also use http:\/\/alto18.co.uk\/wave\/wave.asp?o=44345"},{"label":"ham","message":"Like a personal sized or what"},{"label":"ham","message":"Same, I'm at my great aunts anniversary party in tarpon springs"},{"label":"ham","message":"Cab is available.they pick up and drop at door steps."},{"label":"ham","message":"ok....take care.umma to you too..."},{"label":"ham","message":"Unlimited texts. Limited minutes."},{"label":"spam","message":"Double Mins & 1000 txts on Orange tariffs. Latest Motorola, SonyEricsson & Nokia with Bluetooth FREE! Call MobileUpd8 on 08000839402 or call2optout\/HF8"},{"label":"ham","message":"No problem. We will be spending a lot of quality time together..."},{"label":"spam","message":"URGENT This is our 2nd attempt to contact U. Your \u00a3900 prize from YESTERDAY is still awaiting collection. To claim CALL NOW 09061702893. ACL03530150PM"},{"label":"ham","message":"Have you heard from this week?"},{"label":"spam","message":"Dear Dave this is your final notice to collect your 4* Tenerife Holiday or #5000 CASH award! Call 09061743806 from landline. TCs SAE Box326 CW25WX 150ppm"},{"label":"ham","message":"Yes. Last practice"},{"label":"spam","message":"tells u 2 call 09066358152 to claim \u00a35000 prize. U have 2 enter all ur mobile & personal details @ the prompts. Careful!"},{"label":"ham","message":"No. Thank you. You've been wonderful"},{"label":"ham","message":"Otherwise had part time job na-tuition.."},{"label":"ham","message":"\u00dc mean it's confirmed... I tot they juz say oni... Ok then..."},{"label":"ham","message":"Okie"},{"label":"ham","message":"That depends. How would you like to be treated? :)"},{"label":"ham","message":"Right on brah, see you later"},{"label":"ham","message":"Waiting in e car 4 my mum lor. U leh? Reach home already?"},{"label":"spam","message":"Your 2004 account for 07XXXXXXXXX shows 786 unredeemed points. To claim call 08719181259 Identifier code: XXXXX Expires 26.03.05"},{"label":"spam","message":"Do you want a new video handset? 750 anytime any network mins? Half Price Line Rental? Camcorder? Reply or call 08000930705 for delivery tomorrow"},{"label":"ham","message":"Went fast asleep dear.take care."},{"label":"ham","message":"No that just means you have a fat head"},{"label":"ham","message":"Sounds like a plan! Cardiff is still here and still cold! I'm sitting on the radiator!"},{"label":"ham","message":"Serious? What like proper tongued her"},{"label":"ham","message":"She.s good. She was wondering if you wont say hi but she.s smiling now. So how are you coping with the long distance"},{"label":"ham","message":"How i noe... She's in da car now... Later then c lar... I'm wearing shorts..."},{"label":"spam","message":"You have an important customer service announcement. Call FREEPHONE 0800 542 0825 now!"},{"label":"ham","message":"Yeah whatever lol"},{"label":"ham","message":"Today is ACCEPT DAY..U Accept me as? Brother Sister Lover Dear1 Best1 Clos1 Lvblefrnd Jstfrnd Cutefrnd Lifpartnr Belovd Swtheart Bstfrnd No rply means enemy"},{"label":"ham","message":"Ard 530 lor. I ok then message \u00fc lor."},{"label":"ham","message":"Ok. C u then."},{"label":"ham","message":"Eh ur laptop got no stock lei... He say mon muz come again to take a look c got a not..."},{"label":"ham","message":"No need to ke qi... \u00dc too bored izzit y suddenly thk of this..."},{"label":"ham","message":"I wish! I don't think its gonna snow that much. But it will be more than those flurries we usually get that melt before they hit the ground. Eek! We haven't had snow since <#> before I was even born!"},{"label":"spam","message":"FREE>Ringtone! Reply REAL or POLY eg REAL1 1. PushButton 2. DontCha 3. BabyGoodbye 4. GoldDigger 5. WeBeBurnin 1st tone FREE and 6 more when u join for \u00a33\/wk"},{"label":"ham","message":"Do 1 thing! Change that sentence into: \"Because i want 2 concentrate in my educational career im leaving here..\""},{"label":"ham","message":"Oh really? perform, write a paper, go to a movie AND be home by midnight, huh?"},{"label":"ham","message":"Okay lor... Will they still let us go a not ah? Coz they will not know until later. We drop our cards into the box right?"},{"label":"ham","message":"How? Izzit still raining?"},{"label":"ham","message":"As if i wasn't having enough trouble sleeping."},{"label":"ham","message":"I havent add \u00fc yet right.."},{"label":"ham","message":"Lol ... I really need to remember to eat when I'm drinking but I do appreciate you keeping me company that night babe *smiles*"},{"label":"ham","message":"Babe ? I lost you ... Will you try rebooting ?"},{"label":"ham","message":"Yes. Nigh you cant aha."},{"label":"ham","message":"I thk \u00fc gotta go home by urself. Cos i'll b going out shopping 4 my frens present."},{"label":"ham","message":"Nooooooo I'm gonna be bored to death all day. Cable and internet outage."},{"label":"ham","message":"Sos! Any amount i can get pls."},{"label":"ham","message":"Playin space poker, u?"},{"label":"ham","message":"How come guoyang go n tell her? Then u told her?"},{"label":"ham","message":"You need to get up. Now."},{"label":"ham","message":"They r giving a second chance to rahul dengra."},{"label":"ham","message":"Yeah, in fact he just asked if we needed anything like an hour ago. When and how much?"},{"label":"ham","message":"WHEN THE FIRST STRIKE IS A RED ONE. THE BIRD + ANTELOPE BEGIN TOPLAY IN THE FIELDOF SELFINDEPENDENCE BELIEVE THIS + THE FLOWER OF CONTENTION WILL GROW.RANDOM!"},{"label":"ham","message":"Y \u00fc wan to go there? C doctor?"},{"label":"ham","message":"Does daddy have a bb now."},{"label":"spam","message":"Free Msg: get Gnarls Barkleys \"Crazy\" ringtone TOTALLY FREE just reply GO to this message right now!"},{"label":"ham","message":"She's borderline but yeah whatever."},{"label":"ham","message":"I got a call from a landline number. . . I am asked to come to anna nagar . . . I will go in the afternoon"},{"label":"ham","message":"Until 545 lor... Ya, can go 4 dinner together..."},{"label":"ham","message":"I will be gentle princess! We will make sweet gentle love..."},{"label":"ham","message":"How u doin baby girl ?? hope u are okay every time I call ure phone is off! I miss u get in touch"},{"label":"ham","message":"Sorry, went to bed early, nightnight"},{"label":"ham","message":"I like to think there's always the possibility of being in a pub later."},{"label":"ham","message":"HMM yeah if your not too grooved out! And im looking forward to my pound special :)"},{"label":"ham","message":"I got to video tape pple type in message lor. U so free wan 2 help me? Hee... Cos i noe u wan 2 watch infernal affairs so ask u along. Asking shuhui oso."},{"label":"ham","message":"Hi dude hw r u da realy mising u today"},{"label":"ham","message":"Me hungry buy some food good lei... But mum n yun dun wan juz buy a little bit..."},{"label":"spam","message":"Refused a loan? Secured or Unsecured? Can't get credit? Call free now 0800 195 6669 or text back 'help' & we will!"},{"label":"ham","message":"I probably won't eat at all today. I think I'm gonna pop. How was your weekend? Did u miss me?"},{"label":"ham","message":"I knew it... U slept v late yest? Wake up so late..."},{"label":"ham","message":"Haha... dont be angry with yourself... Take it as a practice for the real thing. =)"},{"label":"ham","message":"Where is that one day training:-)"},{"label":"ham","message":"So i could kiss and feel you next to me..."},{"label":"ham","message":"Have a nice day my dear."},{"label":"ham","message":"I sent lanre fakeye's Eckankar details to the mail box"},{"label":"ham","message":"Your dad is back in ph?"},{"label":"spam","message":"You have been specially selected to receive a \"3000 award! Call 08712402050 BEFORE the lines close. Cost 10ppm. 16+. T&Cs apply. AG Promo"},{"label":"ham","message":"If you ask her or she say any please message."},{"label":"ham","message":"If e timing can, then i go w u lor..."},{"label":"ham","message":"Love you aathi..love u lot.."},{"label":"ham","message":"I was just callin to say hi. Take care bruv!"},{"label":"spam","message":"YOU HAVE WON! As a valued Vodafone customer our computer has picked YOU to win a \u00a3150 prize. To collect is easy. Just call 09061743386"},{"label":"ham","message":"Did u turn on the heater? The heater was on and set to <#> degrees."},{"label":"ham","message":"Thanks for your message. I really appreciate your sacrifice. I'm not sure of the process of direct pay but will find out on my way back from the test tomorrow. I'm in class now. Do have a wonderful day."},{"label":"ham","message":"That's the trouble with classes that go well - you're due a dodgey one \u2026 Expecting mine tomo! See you for recovery, same time, same place"},{"label":"spam","message":"Free video camera phones with Half Price line rental for 12 mths and 500 cross ntwk mins 100 txts. Call MobileUpd8 08001950382 or Call2OptOut\/674&"},{"label":"ham","message":"WOT U UP 2 J?"},{"label":"ham","message":"Night night, see you tomorrow"},{"label":"ham","message":"Roger that. We\u2018re probably going to rem in about 20"},{"label":"ham","message":"do u think that any girl will propose u today by seing ur bloody funky shit fucking face...............asssssholeeee................"},{"label":"ham","message":"I wish u were here. I feel so alone"},{"label":"spam","message":"Great NEW Offer - DOUBLE Mins & DOUBLE Txt on best Orange tariffs AND get latest camera phones 4 FREE! Call MobileUpd8 free on 08000839402 NOW! or 2stoptxt T&Cs"},{"label":"ham","message":"Reason is if the team budget is available at last they buy the unsold players for at base rate.."},{"label":"ham","message":"CERI U REBEL! SWEET DREAMZ ME LITTLE BUDDY!! C YA 2MORO! WHO NEEDS BLOKES"},{"label":"spam","message":"ringtoneking 84484"},{"label":"ham","message":"Huh i cant thk of more oredi how many pages do we have?"},{"label":"ham","message":"His frens go then he in lor. Not alone wif my mum n sis lor."},{"label":"ham","message":"Nationwide auto centre (or something like that) on Newport road. I liked them there"},{"label":"ham","message":"Hey, I missed you tm of last night as my phone was on the charge ... *smiles* ... I am meeting a friend shortly"},{"label":"ham","message":"Whatever, juliana. Do whatever you want."},{"label":"ham","message":"Friendship is not a game to play, It is not a word to say, It doesn\\'t start on March and ends on May, It is tomorrow, yesterday, today and e"},{"label":"spam","message":"Ringtone Club: Gr8 new polys direct to your mobile every week !"},{"label":"ham","message":"Hello. Sort of out in town already. That . So dont rush home, I am eating nachos. Will let you know eta."},{"label":"ham","message":"Ok lor. Anyway i thk we cant get tickets now cos like quite late already. U wan 2 go look 4 ur frens a not? Darren is wif them now..."},{"label":"spam","message":"(Bank of Granite issues Strong-Buy) EXPLOSIVE PICK FOR OUR MEMBERS *****UP OVER 300% *********** Nasdaq Symbol CDGT That is a $5.00 per.."},{"label":"ham","message":"I am on the way to ur home"},{"label":"ham","message":"Dizzamn, aight I'll ask my suitemates when I get back"},{"label":"ham","message":"Nimbomsons. Yep phone knows that one. Obviously, cos thats a real word"},{"label":"ham","message":"I love to cuddle! I want to hold you in my strong arms right now..."},{"label":"ham","message":"R u in this continent?"},{"label":"ham","message":"We'll you pay over like <#> yrs so its not too difficult"},{"label":"spam","message":"Bored housewives! Chat n date now! 0871750.77.11! BT-national rate 10p\/min only from landlines!"},{"label":"spam","message":"We tried to call you re your reply to our sms for a video mobile 750 mins UNLIMITED TEXT free camcorder Reply or call now 08000930705 Del Thurs"},{"label":"ham","message":"K...k...when will you give treat?"},{"label":"spam","message":"This is the 2nd time we have tried to contact u. U have won the \u00a3400 prize. 2 claim is easy, just call 087104711148 NOW! Only 10p per minute. BT-national-rate"},{"label":"ham","message":"He's just gonna worry for nothing. And he won't give you money its no use."},{"label":"ham","message":"Did you get any gift? This year i didnt get anything. So bad"},{"label":"ham","message":"somewhere out there beneath the pale moon light someone think in of u some where out there where dreams come true... goodnite & sweet dreams"},{"label":"ham","message":"Well there's a pattern emerging of my friends telling me to drive up and come smoke with them and then telling me that I'm a weed fiend\/make them smoke too much\/impede their doing other things so you see how I'm hesitant"},{"label":"ham","message":", ow u dey.i paid 60,400thousad.i told u would call ."},{"label":"ham","message":"IM FINE BABES AINT BEEN UP 2 MUCH THO! SAW SCARY MOVIE YEST ITS QUITE FUNNY! WANT 2MRW AFTERNOON? AT TOWN OR MALL OR SUMTHIN?xx"},{"label":"ham","message":"I'm reaching home in 5 min."},{"label":"ham","message":"Forgot you were working today! Wanna chat, but things are ok so drop me a text when you're free \/ bored etc and i'll ring. Hope all is well, nose essay and all xx"},{"label":"ham","message":"Ha... Then we must walk to everywhere... Cannot take tram. My cousin said can walk to vic market from our hotel"},{"label":"spam","message":"Wan2 win a Meet+Greet with Westlife 4 U or a m8? They are currently on what tour? 1)Unbreakable, 2)Untamed, 3)Unkempt. Text 1,2 or 3 to 83049. Cost 50p +std text"},{"label":"spam","message":"Please call our customer service representative on FREEPHONE 0808 145 4742 between 9am-11pm as you have WON a guaranteed \u00a31000 cash or \u00a35000 prize!"},{"label":"ham","message":"Discussed with your mother ah?"},{"label":"ham","message":"Ok."},{"label":"ham","message":"Sorry, I can't text & drive coherently, see you in twenty"},{"label":"spam","message":"You will be receiving this week's Triple Echo ringtone shortly. Enjoy it!"},{"label":"ham","message":"In which place i can get rooms cheap:-)"},{"label":"ham","message":"Eek that's a lot of time especially since American Pie is like 8 minutes long. I can't stop singing it."},{"label":"ham","message":"\"GRAN ONLYFOUND OUT AFEW DAYS AGO.CUSOON HONI\""},{"label":"spam","message":"U've been selected to stay in 1 of 250 top British hotels - FOR NOTHING! Holiday valued at \u00a3350! Dial 08712300220 to claim - National Rate Call. Bx526, SW73SS"},{"label":"ham","message":"University of southern california."},{"label":"ham","message":"We have to pick rayan macleran there."},{"label":"ham","message":"U gd lor go shopping i got stuff to do. U wan 2 watch infernal affairs a not? Come lar..."},{"label":"ham","message":"Well. Balls. Time to make calls"},{"label":"ham","message":"Wat time \u00fc wan today?"},{"label":"ham","message":"<#> in mca. But not conform."},{"label":"ham","message":"Oh ok.. Wat's ur email?"},{"label":"ham","message":"Yes, princess. Are you going to make me moan?"},{"label":"ham","message":"Lol its ok I didn't remember til last nite"},{"label":"ham","message":"[\u2026] anyway, many good evenings to u! s"},{"label":"ham","message":"Cool, I'll text you in a few"},{"label":"ham","message":"Sorry vikky, i'm Watching olave mandara movie kano in trishul theatre wit my frnds.."},{"label":"ham","message":"I'm very happy for you babe ! Woo hoo party on dude!"},{"label":"ham","message":"I am taking you for italian food. How about a pretty dress with no panties? :)"},{"label":"ham","message":"Wot u up 2? Thout u were gonna call me!! Txt bak luv K"},{"label":"spam","message":"YOU ARE CHOSEN TO RECEIVE A \u00a3350 AWARD! Pls call claim number 09066364311 to collect your award which you are selected to receive as a valued mobile customer."},{"label":"ham","message":"How are you holding up?"},{"label":"ham","message":"Dont flatter yourself... Tell that man of mine two pints of carlin in ten minutes please...."},{"label":"ham","message":"Hope you are not scared!"},{"label":"ham","message":"I cant pick the phone right now. Pls send a message"},{"label":"ham","message":"I'm at home n ready..."},{"label":"spam","message":"Please call our customer service representative on FREEPHONE 0808 145 4742 between 9am-11pm as you have WON a guaranteed \u00a31000 cash or \u00a35000 prize!"},{"label":"ham","message":"What time do u get out?"},{"label":"ham","message":"I am literally in bed and have been up for like <#> hours"},{"label":"ham","message":"Yes, my reg is Ciao!"},{"label":"ham","message":"If You mean the website. Yes."},{"label":"spam","message":"Win a \u00a31000 cash prize or a prize worth \u00a35000"},{"label":"spam","message":"Thanks for your ringtone order, reference number X49.Your mobile will be charged 4.50. Should your tone not arrive please call customer services 09065989182"},{"label":"ham","message":"Lol or I could just starve and lose a pound by the end of the day."},{"label":"ham","message":"Yeah that's the impression I got"},{"label":"ham","message":"Ok ok take care. I can understand."},{"label":"ham","message":"Motivate Behind every darkness, there is a shining light waiting for you to find it... Behind every best friend, there is always trust and love... BSLVYL"},{"label":"ham","message":"Ya ok, then had dinner?"},{"label":"ham","message":"I was slept that time.you there?"},{"label":"ham","message":"dont make ne plans for nxt wknd coz she wants us to come down then ok"},{"label":"ham","message":"When is school starting. Where will you stay. What's the weather like. And the food. Do you have a social support system like friends in the school. All these things are important."},{"label":"ham","message":"Ha ha nan yalrigu heltini..Iyo kothi chikku, u shared many things wit me..so far i didn't told any body and even uttered a word abt u.. If ur trusting me so much how can i tell these to others.. Plz nxt time dont use those words to me..ok, chikku:-);-)B-)"},{"label":"ham","message":"Noice. Text me when you're here"},{"label":"ham","message":"Hi di is yijue we're meeting at 7 pm at esaplanade tonight."},{"label":"spam","message":"Moby Pub Quiz.Win a \u00a3100 High Street prize if u know who the new Duchess of Cornwall will be? Txt her first name to 82277.unsub STOP \u00a31.50 008704050406 SP"},{"label":"spam","message":"This weeks SavaMob member offers are now accessible. Just call 08709501522 for details! SavaMob, POBOX 139, LA3 2WU. Only \u00a31.50\/week. SavaMob - offers mobile!"},{"label":"ham","message":"Aight I've been set free, think you could text me blake's address? It occurs to me I'm not quite as sure what I'm doing as I thought I was"},{"label":"ham","message":"Hi dear we saw dear. We both are happy. Where you my battery is low"},{"label":"ham","message":"How are you. Its been ages. How's abj"},{"label":"ham","message":"Prof: you have passed in all the papers in this sem congrats . . . . Student: Enna kalaachutaarama..!! Prof:???? Gud mrng!"},{"label":"ham","message":"Dont kick coco when he's down"},{"label":"ham","message":"Fyi I'm gonna call you sporadically starting at like <#> bc we are not not doin this shit"},{"label":"spam","message":"You are being contacted by our Dating Service by someone you know! To find out who it is, call from your mobile or landline 09064017305 PoBox75LDNS7"},{"label":"spam","message":"TBS\/PERSOLVO. been chasing us since Sept for\u00a338 definitely not paying now thanks to your information. We will ignore them. Kath. Manchester."},{"label":"ham","message":"Hope you\u0092re not having too much fun without me!! see u tomorrow love jess x"},{"label":"ham","message":"Ok i wont call or disturb any one. I know all are avoiding me. I am a burden for all"},{"label":"ham","message":"I've reached home n i bathe liao... U can call me now..."},{"label":"spam","message":"Loans for any purpose even if you have Bad Credit! Tenants Welcome. Call NoWorriesLoans.com on 08717111821"},{"label":"ham","message":"Was the actual exam harder than NBME"},{"label":"ham","message":"A lot of this sickness thing going round. Take it easy. Hope u feel better soon. Lol"},{"label":"ham","message":"God picked up a flower and dippeditinaDEW, lovingly touched itwhichturnedinto u, and the he gifted tomeandsaid,THIS FRIEND IS 4U"},{"label":"spam","message":"87077: Kick off a new season with 2wks FREE goals & news to ur mobile! Txt ur club name to 87077 eg VILLA to 87077"},{"label":"ham","message":"Hey sathya till now we dint meet not even a single time then how can i saw the situation sathya."},{"label":"ham","message":"Gam gone after outstanding innings."},{"label":"ham","message":"O i played smash bros <#> religiously."},{"label":"ham","message":"Sir, good morning. Hope you had a good weekend. I called to let you know that i was able to raise <#> from my dad. He however said he would make the rest available by mid feb. This amount is still quite short and i was hoping you would help. Do have a good day. Abiola"},{"label":"ham","message":"Hurry home. Soup is DONE!"},{"label":"ham","message":"No no. I will check all rooms befor activities"},{"label":"ham","message":"Good afternoon, my love. It was good to see your words on YM and get your tm. Very smart move, my slave ... *smiles* ... I drink my coffee and await you."},{"label":"ham","message":"Quite ok but a bit ex... U better go eat smth now else i'll feel guilty..."},{"label":"spam","message":"Orange brings you ringtones from all time Chart Heroes, with a free hit each week! Go to Ringtones & Pics on wap. To stop receiving these tips reply STOP."},{"label":"ham","message":"Lemme know when you're here"},{"label":"spam","message":"PRIVATE! Your 2003 Account Statement for 07973788240 shows 800 un-redeemed S. I. M. points. Call 08715203649 Identifier Code: 40533 Expires 31\/10\/04"},{"label":"ham","message":"He needs to stop going to bed and make with the fucking dealing"},{"label":"ham","message":"How are you, my Love ? Are you with your brother ? Time to talk english with him ? *grins* Say : Hey Muhommad, Penny says hello from across the sea"},{"label":"spam","message":"We tried to call you re your reply to our sms for a video mobile 750 mins UNLIMITED TEXT + free camcorder Reply of call 08000930705 Now"},{"label":"ham","message":"Hey doc pls I want to get nice t shirt for my hubby nice fiting ones my budget is <#> k help pls I will load d card abi hw,keep me posted luv. 2 mj"},{"label":"ham","message":"I remain unconvinced that this isn't an elaborate test of my willpower"},{"label":"ham","message":"\"Life is nothing wen v get everything\". But \"life is everything wen v miss something \". Real value of people wil be realized only in their absence.... gud mrng"},{"label":"ham","message":"how are you? I miss you!"},{"label":"ham","message":"I ain't answerin no phone at what is actually a pretty reasonable hour but I'm sleepy"},{"label":"ham","message":"Hey , is * rite u put \u00bb10 evey mnth is that all?"},{"label":"ham","message":"i am going to bed now prin"},{"label":"ham","message":"I think just yourself \u2026Thanks and see you tomo"},{"label":"ham","message":"If u dun drive then how i go 2 sch."},{"label":"ham","message":"I not at home now lei..."},{"label":"spam","message":"GSOH? Good with SPAM the ladies?U could b a male gigolo? 2 join the uk's fastest growing mens club reply ONCALL. mjzgroup. 08714342399.2stop reply STOP. msg@\u00a31.50rcvd"},{"label":"ham","message":"Ok then i will come to ur home after half an hour"},{"label":"spam","message":"U have a secret admirer who is looking 2 make contact with U-find out who they R*reveal who thinks UR so special-call on 09058094599"},{"label":"ham","message":"Do u hav any frnd by name ashwini in ur college?"},{"label":"ham","message":"Jus finish my lunch on my way home lor... I tot u dun wan 2 stay in sch today..."},{"label":"ham","message":"K then 2marrow are you coming to class."},{"label":"spam","message":"HOT LIVE FANTASIES call now 08707500020 Just 20p per min NTT Ltd, PO Box 1327 Croydon CR9 5WB 0870 is a national rate call"},{"label":"ham","message":"Pls send me your address sir."},{"label":"ham","message":"I want to lick your pussy now..."},{"label":"ham","message":"Yo, you gonna still be in stock tomorrow\/today? I'm trying to get a dubsack"},{"label":"spam","message":"URGENT! Your Mobile number has been awarded a 2000 prize GUARANTEED. Call 09061790125 from landline. Claim 3030. Valid 12hrs only 150ppm"},{"label":"ham","message":"I'll see, but prolly yeah"},{"label":"ham","message":"Thought we could go out for dinner. I'll treat you! Seem ok?"},{"label":"ham","message":"Where are you ? What do you do ? How can you stand to be away from me ? Doesn't your heart ache without me ? Don't you wonder of me ? Don't you crave me ?"},{"label":"ham","message":"Sorry. You never hear unless you book it. One was kinda a joke--thet were really looking for skinny white girls. The other was one line--you can only do so much on camera with that. Something like that they're casting on the look."},{"label":"ham","message":"What you doing?how are you?"},{"label":"ham","message":"Sure thing big man. i have hockey elections at 6, shouldn\u2018t go on longer than an hour though"},{"label":"ham","message":"Watch lor. I saw a few swatch one i thk quite ok. Ard 116 but i need 2nd opinion leh..."},{"label":"ham","message":"Hiya do u like the hlday pics looked horrible in them so took mo out! Hows the camp Amrca thing? Speak soon Serena:)"},{"label":"ham","message":"Babe! How goes that day ? What are you up to ? I miss you already, my Love ... * loving kiss* ... I hope everything goes well."},{"label":"ham","message":"Yunny... I'm goin to be late"},{"label":"ham","message":"Doc prescribed me morphine cause the other pain meds aren't enough. Waiting for my mom to bring it. That med should kick in fast so I'm gonna try to be on later"},{"label":"ham","message":"Cool, want me to go to kappa or should I meet you outside mu"},{"label":"ham","message":"Hey sexy buns ! Have I told you ? I adore you, loverboy. I hope you remember to thank your sister in law for those meatballs *grins* ... i love you, babe"},{"label":"ham","message":"May b approve panalam...but it should have more posts.."},{"label":"spam","message":"SPJanuary Male Sale! Hot Gay chat now cheaper, call 08709222922. National rate from 1.5p\/min cheap to 7.8p\/min peak! To stop texts call 08712460324 (10p\/min)"},{"label":"ham","message":"Sorry, I'll call later"},{"label":"ham","message":"I dont thnk its a wrong calling between us"},{"label":"ham","message":"Me i'm not workin. Once i get job..."},{"label":"ham","message":"And by when you're done I mean now"},{"label":"ham","message":"\"Its Ur luck to Love someone. Its Ur fortune to Love the one who Loves U. But, its a miracle to Love a person who can't Love anyone except U...\" Gud nyt..."},{"label":"ham","message":"Hi baby ive just got back from work and i was wanting to see u allday! I hope i didnt piss u off on the phone today. If u are up give me a call xxx"},{"label":"spam","message":"FreeMsg Today's the day if you are ready! I'm horny & live in your town. I love sex fun & games! Netcollex Ltd 08700621170150p per msg reply Stop to end"},{"label":"ham","message":"Is it your yahoo boys that bring in the perf? Or legal."},{"label":"ham","message":"No need to say anything to me. I know i am an outsider"},{"label":"ham","message":"have you ever had one foot before?"},{"label":"ham","message":"Just got to <#>"},{"label":"ham","message":"Good! No, don\u2018t need any receipts\u2014well done! (\u2026) Yes, please tell . What\u2018s her number, i could ring her"},{"label":"ham","message":"Ever green quote ever told by Jerry in cartoon \"A Person Who Irritates u Always Is the one Who Loves u Vry Much But Fails to Express It...!..!! :-) :-) gud nyt"},{"label":"ham","message":"Leave it wif me lar... \u00dc wan to carry meh so heavy... Is da num 98321561 familiar to \u00fc?"},{"label":"ham","message":"Beautiful truth : Expression of the face could Be seen by everyone... But the depression of heart Could be understood only By the Loved ones.. Gud Ni8;-)"},{"label":"ham","message":"Infact happy new year. How are you where are you when are we seeing"},{"label":"spam","message":"In The Simpsons Movie released in July 2007 name the band that died at the start of the film? A-Green Day, B-Blue Day, C-Red Day. (Send A, B or C)"},{"label":"ham","message":"That's a se! Maybe cld meet for few hrs tomo?"},{"label":"ham","message":"Lol I would but despite these cramps I like being a girl."},{"label":"ham","message":"I can\u0092t wait for cornwall. Hope tonight isn\u0092t too bad as well but it\u0092s rock night shite. Anyway i\u0092m going for a kip now have a good night. Speak to you soon."},{"label":"ham","message":"Pls help me tell sura that i'm expecting a battery from hont. And that if should pls send me a message about how to download movies. Thanks"},{"label":"spam","message":"Please call Amanda with regard to renewing or upgrading your current T-Mobile handset free of charge. Offer ends today. Tel 0845 021 3680 subject to T's and C's"},{"label":"ham","message":"Haven't found a way to get another app for your phone, eh ? Will you go to the net cafe ? Did you take that job? Geeee I need you babe. I crave to see you ..."},{"label":"ham","message":"I only work from mon to thurs but Sat i cant leh... Booked liao... Which other day u free?"},{"label":"ham","message":"\u00dc comin to fetch us oredi..."},{"label":"ham","message":"What's nannys address?"},{"label":"spam","message":"URGENT!! Your 4* Costa Del Sol Holiday or \u00a35000 await collection. Call 09050090044 Now toClaim. SAE, TC s, POBox334, Stockport, SK38xh, Cost\u00a31.50\/pm, Max10mins"},{"label":"ham","message":"Haf u eaten? Wat time u wan me 2 come?"},{"label":"spam","message":"Want a new Video Phone? 750 anytime any network mins? Half price line rental free text for 3 months? Reply or call 08000930705 for free delivery"},{"label":"ham","message":"Yo, call me when you get the chance, a friend of mine wanted me to ask you about a big order"},{"label":"ham","message":"This single single answers are we fighting? Plus i said am broke and you didnt reply"},{"label":"ham","message":"It certainly puts things into perspective when something like this happens"},{"label":"ham","message":"Now got tv 2 watch meh? U no work today?"},{"label":"ham","message":"i felt so...not any conveying reason.. Ese he... What about me?"},{"label":"spam","message":"Had your mobile 11 months or more? U R entitled to Update to the latest colour mobiles with camera for Free! Call The Mobile Update Co FREE on 08002986030"},{"label":"ham","message":"How's it going? Got any exciting karaoke type activities planned? I'm debating whether to play football this eve. Feeling lazy though."},{"label":"ham","message":"I told that am coming on wednesday."},{"label":"ham","message":"Its ok, called mom instead have fun"},{"label":"spam","message":"Dear Voucher Holder, To claim this weeks offer, at your PC please go to http:\/\/www.wtlp.co.uk\/text. Ts&Cs apply."},{"label":"ham","message":"Well if I'm that desperate I'll just call armand again"},{"label":"ham","message":"Are you at work right now ?"},{"label":"spam","message":"Congrats! Nokia 3650 video camera phone is your Call 09066382422 Calls cost 150ppm Ave call 3mins vary from mobiles 16+ Close 300603 post BCM4284 Ldn WC1N3XX"},{"label":"ham","message":"Haven't heard anything and he's not answering my texts so I'm guessing he flaked. That said the jb is fantastic"},{"label":"ham","message":"Mmmmmm ... I love you,so much, Ahmad ... I can't wait for this year to begin as every second takes me closer to being at your side. Happy New Year, my love!!"},{"label":"ham","message":"Pls what's the full name of joke's school cos fees in university of florida seem to actually be <#> k. Pls holla back"},{"label":"ham","message":"Sorry, I'll call later"},{"label":"ham","message":"Ok... But they said i've got wisdom teeth hidden inside n mayb need 2 remove."},{"label":"ham","message":"And pls pls drink plenty plenty water"},{"label":"ham","message":"How are you doing. How's the queen. Are you going for the royal wedding"},{"label":"ham","message":"He's in lag. That's just the sad part but we keep in touch thanks to skype"},{"label":"ham","message":"Ok lor then we go tog lor..."},{"label":"ham","message":"Two teams waiting for some players"},{"label":"ham","message":"Can \u00fc send me a copy of da report?"},{"label":"ham","message":"swhrt how u dey,hope ur ok, tot about u 2day.love n miss.take care."},{"label":"ham","message":"Ok da, i already planned. I wil pick you."},{"label":"spam","message":"Urgent! Please call 0906346330. Your ABTA complimentary 4* Spanish Holiday or \u00a310,000 cash await collection SAE T&Cs BOX 47 PO19 2EZ 150ppm 18+"},{"label":"ham","message":"Sorry, I'll call later in meeting"},{"label":"ham","message":"I just really need shit before tomorrow and I know you won't be awake before like 6"},{"label":"ham","message":"I'm good. Have you registered to vote?"},{"label":"ham","message":"Hmm ok, i'll stay for like an hour cos my eye is really sore!"},{"label":"ham","message":"Dear got bus directly to calicut"},{"label":"ham","message":"Mm umma ask vava also to come tell him can play later together"},{"label":"ham","message":"Well the general price is <#> \/oz, let me know if\/when\/how much you want"},{"label":"ham","message":"Sorry, I'll call later"},{"label":"ham","message":"Each Moment in a day,has its own value-Morning brings hope,afternoon brings faith,Evening brings luv,Night brings rest,Wish u find them all today.Good Morning"},{"label":"ham","message":"<#> w jetton ave if you forgot"},{"label":"ham","message":"Ok i'm coming home now."},{"label":"ham","message":"Can not use foreign stamps in this country."},{"label":"spam","message":"Double mins and txts 4 6months FREE Bluetooth on Orange. Available on Sony, Nokia Motorola phones. Call MobileUpd8 on 08000839402 or call2optout\/N9DX"},{"label":"ham","message":"Sorry, it's a lot of friend-of-a-friend stuff, I'm just now about to talk to the actual guy who wants to buy"},{"label":"spam","message":"FREE for 1st week! No1 Nokia tone 4 ur mob every week just txt NOKIA to 8007 Get txting and tell ur mates www.getzed.co.uk POBox 36504 W45WQ norm150p\/tone 16+"},{"label":"spam","message":"Want to funk up ur fone with a weekly new tone reply TONES2U 2 this text. www.ringtones.co.uk, the original n best. Tones 3GBP network operator rates apply"},{"label":"spam","message":"cmon babe, make me horny, *turn* me on! Txt me your fantasy now babe -) Im hot, sticky and need you now. All replies cost \u00a31.50. 2 cancel send STOP"},{"label":"ham","message":"I will come tomorrow di"},{"label":"ham","message":"Wylie update: my weed dealer carlos went to freedom and had a class with lunsford"},{"label":"ham","message":"Are you happy baby ? Are you alright ? Did you take that job ? I hope your fine. I send you a kiss to make you smile from across the sea ... *kiss* *kiss*"},{"label":"ham","message":"C movie is juz last minute decision mah. Juz watch 2 lar but i tot \u00fc not interested."},{"label":"ham","message":"How are you enjoying this semester? Take care brother."},{"label":"spam","message":"IMPORTANT INFORMATION 4 ORANGE USER 0796XXXXXX. TODAY IS UR LUCKY DAY!2 FIND OUT WHY LOG ONTO http:\/\/www.urawinner.com THERE'S A FANTASTIC PRIZEAWAITING YOU!"},{"label":"ham","message":"Get the door, I'm here"},{"label":"ham","message":"Lets use it next week, princess :)"},{"label":"ham","message":"Or i go home first lar \u00fc wait 4 me lor.. I put down my stuff first.."},{"label":"ham","message":"I want kfc its Tuesday. Only buy 2 meals ONLY 2. No gravy. Only 2 Mark. 2!"},{"label":"ham","message":"No da:)he is stupid da..always sending like this:)don believe any of those message.pandy is a mental:)"},{"label":"ham","message":"Oi when you gonna ring"},{"label":"spam","message":"Missed call alert. These numbers called but left no message. 07008009200"},{"label":"ham","message":"I attended but nothing is there."},{"label":"ham","message":"Ard 530 like dat lor. We juz meet in mrt station then \u00fc dun haf to come out."},{"label":"ham","message":"No dear i was sleeping :-P"},{"label":"ham","message":"Er mw im filled tuth is aight"},{"label":"ham","message":"Will be office around 4 pm. Now i am going hospital."},{"label":"ham","message":"Actually i'm waiting for 2 weeks when they start putting ad."},{"label":"ham","message":"Anything lor if they all go then i go lor..."},{"label":"ham","message":"U free on sat rite? U wan 2 watch infernal affairs wif me n darren n mayb xy?"},{"label":"ham","message":"Plz note: if anyone calling from a mobile Co. & asks u to type # <#> or # <#> . Do not do so. Disconnect the call,coz it iz an attempt of 'terrorist' to make use of the sim card no. Itz confirmd by nokia n motorola n has been verified by CNN IBN."},{"label":"ham","message":"Yo you around? A friend of mine's lookin to pick up later tonight"},{"label":"ham","message":"Stupid auto correct on my phone"},{"label":"ham","message":"Double eviction this week - Spiral and Michael and good riddance to them!"},{"label":"ham","message":"\"The world suffers a lot... Not because of the violence of bad people. But because of the silence of good people!\", Gud night...."},{"label":"ham","message":"Ok thats cool. Its , just off either raglan rd or edward rd. Behind the cricket ground. Gimme ring when ur closeby see you tuesday."},{"label":"ham","message":"Buy one egg for me da..please:)"},{"label":"ham","message":"Have you started in skye"},{"label":"ham","message":"Have you bookedthe hut? And also your time off? How are you by the way?"},{"label":"ham","message":"And several to you sir."},{"label":"ham","message":"U really pig leh sleep so much. My dad wake me up at 10 smth 2 eat lunch today."},{"label":"ham","message":"I'm at home. Please call"},{"label":"ham","message":"My love ... I hope your not doing anything drastic. Don't you dare sell your pc or your phone ..."},{"label":"ham","message":"Now only i reached home. . . I am very tired now. . I will come tomorro"},{"label":"spam","message":"FREEMSG: Our records indicate you may be entitled to 3750 pounds for the Accident you had. To claim for free reply with YES to this msg. To opt out text STOP"},{"label":"spam","message":"U can WIN \u00a3100 of Music Gift Vouchers every week starting NOW Txt the word DRAW to 87066 TsCs www.Idew.com SkillGame, 1Winaweek, age16. 150ppermessSubscription"},{"label":"ham","message":"Life style garments account no please."},{"label":"ham","message":"Lol wtf random. Btw is that your lunch break"},{"label":"ham","message":"Sez, hows u & de arab boy? Hope u r all good give my love 2 evry1 love ya eshxxxxxxxxxxx"},{"label":"ham","message":"The LAY MAN! Just to let you know you are missed and thought off. Do have a great day. And if you can send me bimbo and ugo's numbers, ill appreciate. Safe"},{"label":"ham","message":"Detroit. The home of snow. Enjoy it."},{"label":"spam","message":"Show ur colours! Euro 2004 2-4-1 Offer! Get an England Flag & 3Lions tone on ur phone! Click on the following service message for info!"},{"label":"ham","message":"Okie..."},{"label":"ham","message":"Aight, I'm chillin in a friend's room so text me when you're on the way"},{"label":"ham","message":"Is toshiba portege m100 gd?"},{"label":"ham","message":"Well welp is sort of a semiobscure internet thing"},{"label":"spam","message":"Text PASS to 69669 to collect your polyphonic ringtones. Normal gprs charges apply only. Enjoy your tones"},{"label":"spam","message":"accordingly. I repeat, just text the word ok on your mobile phone and send"},{"label":"ham","message":"Loosu go to hospital. De dont let it careless."},{"label":"ham","message":"How much for an eighth?"},{"label":"ham","message":"Omg Joanna is freaking me out. She's looked thru all my friends to find photos of me. And then she's asking about stuff on my MySpace which I haven't even logged on in like a year. :\/"},{"label":"ham","message":"Send ur birthdate with month and year, I will tel u ur LIFE PARTNER'S name. and the method of calculation. Reply must."},{"label":"ham","message":"Juz now havent woke up so a bit blur blur... Can? Dad went out liao... I cant cum now oso..."},{"label":"ham","message":"How about clothes, jewelry, and trips?"},{"label":"spam","message":"Block Breaker now comes in deluxe format with new features and great graphics from T-Mobile. Buy for just \u00a35 by replying GET BBDELUXE and take the challenge"},{"label":"ham","message":"Aah! A cuddle would be lush! I'd need lots of tea and soup before any kind of fumbling!"},{"label":"spam","message":"important information 4 orange user . today is your lucky day!2find out why log onto http:\/\/www.urawinner.com THERE'S A FANTASTIC SURPRISE AWAITING YOU!"},{"label":"ham","message":"I am late. I will be there at"},{"label":"ham","message":"Sad story of a Man - Last week was my b'day. My Wife did'nt wish me. My Parents forgot n so did my Kids . I went to work. Even my Colleagues did not wish."},{"label":"ham","message":"Are you plans with your family set in stone ?"},{"label":"ham","message":"Pls dont forget to study"},{"label":"ham","message":"You'll never believe this but i have actually got off at taunton. Wow"},{"label":"ham","message":"Den only weekdays got special price... Haiz... Cant eat liao... Cut nails oso muz wait until i finish drivin wat, lunch still muz eat wat..."},{"label":"ham","message":"She just broke down a list of reasons why nobody's in town and I can't tell if she's being sarcastic or just faggy"},{"label":"ham","message":"<DECIMAL> m but its not a common car here so its better to buy from china or asia. Or if i find it less expensive. I.ll holla"},{"label":"ham","message":"The greatest test of courage on earth is to bear defeat without losing heart....gn tc"},{"label":"ham","message":"SORRY IM STIL FUCKED AFTER LAST NITE WENT TOBED AT 430 GOT UP 4 WORK AT 630"},{"label":"ham","message":"Hey so whats the plan this sat?"},{"label":"ham","message":"Beauty sleep can help ur pimples too."},{"label":"ham","message":"Great. Hope you are using your connections from mode men also cos you can never know why old friends can lead you to today"},{"label":"spam","message":"Natalja (25\/F) is inviting you to be her friend. Reply YES-440 or NO-440 See her: www.SMS.ac\/u\/nat27081980 STOP? Send STOP FRND to 62468"},{"label":"ham","message":"Where to get those?"},{"label":"ham","message":"Kind of. Just missed train cos of asthma attack, nxt one in half hr so driving in. not sure where to park."},{"label":"ham","message":"Ball is moving a lot.will spin in last :)so very difficult to bat:)"},{"label":"ham","message":"Haiyoh... Maybe your ster was jealous of million"},{"label":"ham","message":"Can you please send me my aunty's number"},{"label":"ham","message":"I'm glad. You are following your dreams."},{"label":"ham","message":"I've reached home finally..."},{"label":"spam","message":"URGENT. Important information for 02 user. Today is your lucky day! 2 find out why , log onto http:\/\/www.urawinner.com there is a fantastic surprise awaiting you !"},{"label":"spam","message":"WINNER!! As a valued network customer you have been selected to receivea \u00a3900 prize reward! To claim call 09061701461. Claim code KL341. Valid 12 hours only."},{"label":"ham","message":"Wn u r hurt by d prsn who s close 2 u, do fight wit dem. Coz somtimes dis fight saves a relation bt being quiet leaves nothin in a relation.. Gud eveB-)"},{"label":"ham","message":"U can call now..."},{"label":"ham","message":"Science tells that chocolate will melt under the sunlight. Please don't walk under the sunlight. BCoz,I don't want to loss a sweet friend."},{"label":"ham","message":"Yes. I come to nyc for audiitions and am trying to relocate."},{"label":"ham","message":"I pocked you up there before"},{"label":"ham","message":"Congrats. That's great. I wanted to tell you not to tell me your score cos it might make me relax. But its motivating me so thanks for sharing"},{"label":"ham","message":"I wud never mind if u dont miss me or if u dont need me.. But u wil really hurt me wen u need me & u dont tell me......... Take care:-)"},{"label":"ham","message":"Hey mr whats the name of that bill brison book the one about language and words"},{"label":"ham","message":"Okay, good, no problem, and thanx!"},{"label":"ham","message":"For you information, IKEA is spelled with all caps. That is not yelling. when you thought i had left you, you were sitting on the bed among the mess when i came in. i said we were going after you got home from class. please don't try and bullshit me. It makes me want to listen to you less."},{"label":"ham","message":"Call me when u're done..."},{"label":"ham","message":"G.W.R"},{"label":"ham","message":"You best watch what you say cause I get drunk as a motherfucker"},{"label":"spam","message":"Kit Strip - you have been billed 150p. Netcollex Ltd. PO Box 1013 IG11 OJA"},{"label":"spam","message":"HMV BONUS SPECIAL 500 pounds of genuine HMV vouchers to be won. Just answer 4 easy questions. Play Now! Send HMV to 86688 More info:www.100percent-real.com"},{"label":"spam","message":"Please CALL 08712402578 immediately as there is an urgent message waiting for you"},{"label":"spam","message":"thesmszone.com lets you send free anonymous and masked messages..im sending this message from there..do you see the potential for abuse???"},{"label":"spam","message":"WELL DONE! Your 4* Costa Del Sol Holiday or \u00a35000 await collection. Call 09050090044 Now toClaim. SAE, TCs, POBox334, Stockport, SK38xh, Cost\u00a31.50\/pm, Max10mins"},{"label":"ham","message":"Hurt me... Tease me... Make me cry... But in the end of my life when i die plz keep one rose on my grave and say STUPID I MISS U.. HAVE A NICE DAY BSLVYL"},{"label":"ham","message":"Erm... Woodland avenue somewhere. Do you get the parish magazine, his telephone number will be in there."},{"label":"ham","message":"Are there TA jobs available? Let me know please cos i really need to start working"},{"label":"ham","message":"Aiyar hard 2 type. U later free then tell me then i call n scold n tell u."},{"label":"ham","message":"Yup i'm free..."},{"label":"ham","message":"Good good, billy mates all gone. Just been jogging, again! Did enjoy concert?"},{"label":"ham","message":"Yo come over carlos will be here soon"},{"label":"ham","message":"Awww dat is sweet! We can think of something to do he he! Have a nice time tonight ill probably txt u later cos im lonely :( xxx."},{"label":"ham","message":"I guess it is useless calling u 4 something important."},{"label":"ham","message":"Ha ha - had popped down to the loo when you hello-ed me. Hello!"},{"label":"ham","message":"He dint tell anything. He is angry on me that why you told to abi."},{"label":"spam","message":"Someone U know has asked our dating service 2 contact you! Cant Guess who? CALL 09058091854 NOW all will be revealed. PO BOX385 M6 6WU"},{"label":"ham","message":"It so happens that there r 2waxsto do wat you want. She can come and ill get her medical insurance. And she'll be able to deliver and have basic care. I'm currently shopping for the right medical insurance for her. So just give me til friday morning. Thats when i.ll see the major person that can guide me to the right insurance."},{"label":"ham","message":"I keep ten rs in my shelf:) buy two egg."},{"label":"ham","message":"I wasn't well babe, i have swollen glands at my throat ... What did you end up doing ?"},{"label":"ham","message":"Is ur changes 2 da report big? Cos i've already made changes 2 da previous report."},{"label":"ham","message":"Captain is in our room:)"},{"label":"ham","message":"I can't speak, bcaz mobile have problem. I can listen you but you cann't listen my voice. So i calls you later."},{"label":"ham","message":"HIYA STU WOT U UP 2.IM IN SO MUCH TRUBLE AT HOME AT MOMENT EVONE HATES ME EVEN U! WOT THE HELL AV I DONE NOW? Y WONT U JUST TELL ME TEXT BCK PLEASE LUV DAN"},{"label":"ham","message":"S...i will take mokka players only:)"},{"label":"ham","message":"Are you still playing with gaut?"},{"label":"ham","message":"Hey mr and I are going to the sea view and having a couple of gays I mean games! Give me a bell when ya finish"},{"label":"ham","message":"K, jason says he's gonna be around so I'll be up there around <#>"},{"label":"ham","message":"Sorry . I will be able to get to you. See you in the morning."},{"label":"ham","message":"Aight well keep me informed"},{"label":"ham","message":"I am not having her number sir"},{"label":"ham","message":"Am only searching for good dual sim mobile pa."},{"label":"ham","message":"That seems unnecessarily hostile"},{"label":"ham","message":"Dude got a haircut. Now its breezy up there"},{"label":"spam","message":"Congrats! 2 mobile 3G Videophones R yours. call 09061744553 now! videochat wid ur mates, play java games, Dload polyH music, noline rentl. bx420. ip4. 5we. 150pm"},{"label":"ham","message":"1Apple\/Day=No Doctor. 1Tulsi Leaf\/Day=No Cancer. 1Lemon\/Day=No Fat. 1Cup Milk\/day=No Bone Problms 3 Litres Watr\/Day=No Diseases Snd ths 2 Whom U Care..:-)"},{"label":"ham","message":"i thought we were doing a king of the hill thing there."},{"label":"ham","message":"Nope i'll come online now.."},{"label":"ham","message":"ALSO TELL HIM I SAID HAPPY BIRTHDAY"},{"label":"ham","message":"Y bishan lei... I tot \u00fc say lavender?"},{"label":"ham","message":"Boo what time u get out? U were supposed to take me shopping today. :("},{"label":"ham","message":"Now u sound like manky scouse boy steve,like! I is travelling on da bus home.wot has u inmind 4 recreation dis eve?"},{"label":"ham","message":"Fyi I'm taking a quick shower, be at epsilon in like <#> min"},{"label":"ham","message":"on a Tuesday night r u 4 real"},{"label":"ham","message":"Yes when is the appt again?"},{"label":"ham","message":"Just got outta class gonna go gym."},{"label":"ham","message":"I want to sent <#> mesages today. Thats y. Sorry if i hurts"},{"label":"ham","message":"\u00dc all write or wat.."},{"label":"ham","message":"Ha! I wouldn't say that I just didn't read anything into way u seemed. I don't like 2 be judgemental....i save that for fridays in the pub!"},{"label":"ham","message":"Its a valentine game. . . send dis msg to all ur friends. . If 5 answers r d same then someone really loves u. . Ques- which colour suits me the best?"},{"label":"ham","message":"Hi:)did you asked to waheeda fathima about leave?"},{"label":"ham","message":"Enjoy urself tmr..."},{"label":"ham","message":"You still around? I could use a half-8th"},{"label":"spam","message":"U 447801259231 have a secret admirer who is looking 2 make contact with U-find out who they R*reveal who thinks UR so special-call on 09058094597"},{"label":"ham","message":"You give us back my id proof and <#> rs. We wont allow you to work. We will come to your home within days"},{"label":"ham","message":"\u00dc bot notes oredi... Cos i juz rem i got..."},{"label":"ham","message":"Yes. Rent is very expensive so its the way we save."},{"label":"ham","message":"Night has ended for another day, morning has come in a special way. May you smile like the sunny rays and leaves your worries at the blue blue bay. Gud mrng"},{"label":"ham","message":"Hows the pain dear?y r u smiling?"},{"label":"ham","message":"Fun fact: although you would think armand would eventually build up a tolerance or some shit considering how much he smokes, he gets fucked up in like 2 hits"},{"label":"spam","message":"important information 4 orange user 0789xxxxxxx. today is your lucky day!2find out why log onto http:\/\/www.urawinner.com THERE'S A FANTASTIC SURPRISE AWAITING YOU!"},{"label":"ham","message":"Sorry, I can't help you on this."},{"label":"ham","message":"Great. So should i send you my account number."},{"label":"ham","message":"HELLOGORGEOUS, HOWS U? MY FONE WAS ON CHARGE LST NITW WEN U TEXD ME. HOPEU AD A NICE WKEND AS IM SURE U DID LOOKIN 4WARD 2 C-IN U 2MRW LUV JAZ"},{"label":"spam","message":"Our dating service has been asked 2 contact U by someone shy! CALL 09058091870 NOW all will be revealed. POBox84, M26 3UZ 150p"},{"label":"ham","message":"\u00dc only send me the contents page..."},{"label":"ham","message":"Night sweet, sleep well! I've just been to see The Exorcism of Emily Rose and may never sleep again! Hugs and snogs!"},{"label":"ham","message":"Don't Think About \"What u Have Got\" Think About \"How to Use It That You Have Got\" gooD ni8"},{"label":"ham","message":"I can't right this second, gotta hit people up first"},{"label":"ham","message":"Evry Emotion dsn't hav Words.Evry Wish dsn't hav Prayrs.. If u Smile,D World is wit u.Othrwise even d Drop of Tear dsn't lik 2 Stay wit u.So b happy.. Good morning, keep smiling:-)"},{"label":"ham","message":"So what about you. What do you remember"},{"label":"ham","message":"Ujhhhhhhh computer shipped out with address to sandiago and parantella lane. Wtf. Poop."},{"label":"ham","message":"Mm yes dear look how i am hugging you both. :-P"},{"label":"ham","message":"I like dis sweater fr mango but no more my size already so irritating."},{"label":"ham","message":"1 I don't have her number and 2 its gonna be a massive pain in the ass and i'd rather not get involved if that's possible"},{"label":"ham","message":"Anytime lor..."},{"label":"spam","message":"Do you want a new Video handset? 750 any time any network mins? UNLIMITED TEXT? Camcorder? Reply or Call now 08000930705 for del Sat AM"},{"label":"ham","message":"Purity of friendship between two is not about smiling after reading the forwarded message..Its about smiling just by seeing the name. Gud evng"},{"label":"spam","message":"Ur balance is now \u00a3600. Next question: Complete the landmark, Big, A. Bob, B. Barry or C. Ben ?. Text A, B or C to 83738. Good luck!"},{"label":"ham","message":"Me fine..absolutly fine"},{"label":"ham","message":"K and you're sure I don't have to have consent forms to do it :V"},{"label":"spam","message":"Ur TONEXS subscription has been renewed and you have been charged \u00a34.50. You can choose 10 more polys this month. www.clubzed.co.uk *BILLING MSG*"},{"label":"spam","message":"If you don't, your prize will go to another customer. T&C at www.t-c.biz 18+ 150p\/min Polo Ltd Suite 373 London W1J 6HL Please call back if busy"},{"label":"ham","message":"How much is torch in 9ja."},{"label":"ham","message":"Doing nothing, then u not having dinner w us?"},{"label":"ham","message":"How are you. Just checking up on you"},{"label":"ham","message":"Done it but internet connection v slow and can\u2018t send it. Will try again later or first thing tomo."},{"label":"ham","message":"Mathews or tait or edwards or anderson"},{"label":"ham","message":"yeah sure thing mate haunt got all my stuff sorted but im going sound anyway promoting hex for .by the way who is this? dont know number. Joke"},{"label":"ham","message":"No need lar i go engin? Cos my sis at arts today..."},{"label":"ham","message":"Thanks honey but still haven't heard anything I will leave it a bit longer so not 2 crowd him and will try later - great advice thanks hope cardiff is still there!"},{"label":"spam","message":"Do you want a New Nokia 3510i Colour Phone Delivered Tomorrow? With 200 FREE minutes to any mobile + 100 FREE text + FREE camcorder Reply or Call 8000930705"},{"label":"ham","message":", im .. On the snowboarding trip. I was wondering if your planning to get everyone together befor we go..a meet and greet kind of affair? Cheers,"},{"label":"ham","message":"S.i'm watching it in live.."},{"label":"ham","message":"see you then, we're all christmassy here!"},{"label":"ham","message":"K I'm ready, <#> ?"},{"label":"ham","message":"Do you know why god created gap between your fingers..? So that, One who is made for you comes & fills those gaps by holding your hand with LOVE..!"},{"label":"ham","message":"The greatest test of courage on earth is to bear defeat without losing heart....gn tc"},{"label":"ham","message":"what are your new years plans?"},{"label":"spam","message":"RECPT 1\/3. You have ordered a Ringtone. Your order is being processed..."},{"label":"ham","message":"Baaaaaaaabe! Wake up ! I miss you ! I crave you! I need you!"},{"label":"ham","message":"Only just got this message, not ignoring you. Yes, i was. Shopping that is"},{"label":"ham","message":"Dear :-\/ why you mood off. I cant drive so i brother to drive"},{"label":"ham","message":"When did dad get back."},{"label":"ham","message":"Can you tell Shola to please go to college of medicine and visit the academic department, tell the academic secretary what the current situation is and ask if she can transfer there. She should ask someone to check Sagamu for the same thing and lautech. Its vital she completes her medical education in Nigeria. Its less expensive much less expensive. Unless she will be getting citizen rates in new zealand."},{"label":"ham","message":"Yes just finished watching days of our lives. I love it."},{"label":"ham","message":"Juz go google n search 4 qet..."},{"label":"ham","message":"Many times we lose our best ones bcoz we are"},{"label":"ham","message":"Good FRIENDS CaRE for each Other.. CLoSE Friends UNDERSTaND each Other... and TRUE Friends STaY forever beyond words, beyond time. Gud ni8"},{"label":"ham","message":"Just getting back home"},{"label":"ham","message":"Sorry, I'll call later <#> mins"},{"label":"ham","message":"Dun need to use dial up juz open da browser n surf..."},{"label":"spam","message":"As one of our registered subscribers u can enter the draw 4 a 100 G.B. gift voucher by replying with ENTER. To unsubscribe text STOP"},{"label":"ham","message":"Awesome, plan to get here any time after like <#> , I'll text you details in a wee bit"},{"label":"ham","message":"Take care and sleep well.you need to learn to change in life.you only need to get CONVINCED on that.i will wait but no more conversations between us.GET CONVINCED by that time.Your family is over for you in many senses.respect them but not overemphasise.or u have no role in my life."},{"label":"spam","message":"For your chance to WIN a FREE Bluetooth Headset then simply reply back with \"ADP\""},{"label":"ham","message":"You also didnt get na hi hi hi hi hi"},{"label":"ham","message":"Ya but it cant display internal subs so i gotta extract them"},{"label":"ham","message":"If i said anything wrong sorry de:-)"},{"label":"ham","message":"Sad story of a Man - Last week was my b'day. My Wife did'nt wish me. My Parents forgot n so did my Kids . I went to work. Even my Colleagues did not wish."},{"label":"ham","message":"How stupid to say that i challenge god.You dont think at all on what i write instead you respond immed."},{"label":"ham","message":"Yeah I should be able to, I'll text you when I'm ready to meet up"},{"label":"ham","message":"V skint too but fancied few bevies.waz gona go meet &othrs in spoon but jst bin watchng planet earth&sofa is v comfey; If i dont make it hav gd night"},{"label":"ham","message":"says that he's quitting at least5times a day so i wudn't take much notice of that. Nah, she didn't mind. Are you gonna see him again? Do you want to come to taunton tonight? U can tell me all about !"},{"label":"ham","message":"When you get free, call me"},{"label":"ham","message":"How have your little darlings been so far this week? Need a coffee run tomo?Can't believe it's that time of week already \u2026"},{"label":"ham","message":"Ok i msg u b4 i leave my house."},{"label":"ham","message":"Still at west coast... Haiz... \u00dc'll take forever to come back..."},{"label":"ham","message":"MMM ... Fuck .... Merry Christmas to me"},{"label":"ham","message":"alright. Thanks for the advice. Enjoy your night out. I'ma try to get some sleep..."},{"label":"ham","message":"Update your face book status frequently :)"},{"label":"ham","message":"Just now saw your message.it k da:)"},{"label":"ham","message":"Was it something u ate?"},{"label":"ham","message":"So what did the bank say about the money?"},{"label":"ham","message":"Aiyar dun disturb u liao... Thk u have lots 2 do aft ur cupboard come..."},{"label":"ham","message":"Hey they r not watching movie tonight so i'll prob b home early..."},{"label":"ham","message":"Yar lor... How u noe? U used dat route too?"},{"label":"ham","message":"2mro i am not coming to gym machan. Goodnight."},{"label":"ham","message":"Dont think you need yellow card for uk travel. Ask someone that has gone before. If you do its just <#> bucks"},{"label":"ham","message":"Can u look 4 me in da lib i got stuff havent finish yet."},{"label":"ham","message":"Sounds great! Im going to sleep now. Have a good night!"},{"label":"spam","message":"Don't b floppy... b snappy & happy! Only gay chat service with photo upload call 08718730666 (10p\/min). 2 stop our texts call 08712460324"},{"label":"ham","message":"House-Maid is the murderer, coz the man was murdered on <#> th January.. As public holiday all govt.instituitions are closed,including post office..understand?"},{"label":"ham","message":"How come u got nothing to do?"},{"label":"ham","message":"Nothing will ever be easy. But don't be looking for a reason not to take a risk on life and love"},{"label":"ham","message":"i want to grasp your pretty booty :)"},{"label":"ham","message":"I've got it down to a tea. not sure which flavour"},{"label":"ham","message":"I'm going 2 orchard now laready me reaching soon. U reaching?"},{"label":"ham","message":"Dear i am not denying your words please"},{"label":"ham","message":"You know my old Dom I told you about yesterday ? His name is Roger? He got in touch with me last night and wants me to meet him today at 2 pm"},{"label":"ham","message":"COME BACK TO TAMPA FFFFUUUUUUU"},{"label":"ham","message":"2 celebrate my b\u0092day, y else?"},{"label":"ham","message":"Merry christmas to u too annie!"},{"label":"ham","message":"Please tell me you have some of that special stock you were talking about"},{"label":"ham","message":"I sent them. Do you like?"},{"label":"spam","message":"Urgent UR awarded a complimentary trip to EuroDisinc Trav, Aco&Entry41 Or \u00a31000. To claim txt DIS to 87121 18+6*\u00a31.50(moreFrmMob. ShrAcomOrSglSuplt)10, LS1 3AJ"},{"label":"ham","message":"Awesome, be there in a minute"},{"label":"ham","message":"And that is the problem. You walk around in \"julianaland\" oblivious to what is going on around you. I say the same things constantly and they go in one ear and out the other while you go off doing whatever you want to do. It's not that you don't know why I'm upset--it's that you don't listen when i tell you WHAT is going to upset me. Then you want to be surprised when I'm mad."},{"label":"ham","message":"I've told you everything will stop. Just dont let her get dehydrated."},{"label":"ham","message":"Or I guess <#> min"},{"label":"ham","message":"I'm home. Ard wat time will u reach?"},{"label":"ham","message":"Storming msg: Wen u lift d phne, u say \"HELLO\" Do u knw wt is d real meaning of HELLO?? . . . It's d name of a girl..! . . . Yes.. And u knw who is dat girl?? \"Margaret Hello\" She is d girlfrnd f Grahmbell who invnted telphone... . . . . Moral:One can 4get d name of a person, bt not his girlfrnd... G o o d n i g h t . . .@"},{"label":"ham","message":"If you want to mapquest it or something look up \"usf dogwood drive\", that's the tiny street where the parking lot is"},{"label":"ham","message":"Aight should I just plan to come up later tonight?"},{"label":"ham","message":"Die... I accidentally deleted e msg i suppose 2 put in e sim archive. Haiz... I so sad..."},{"label":"spam","message":"Welcome to UK-mobile-date this msg is FREE giving you free calling to 08719839835. Future mgs billed at 150p daily. To cancel send \"go stop\" to 89123"},{"label":"ham","message":"This is wishing you a great day. Moji told me about your offer and as always i was speechless. You offer so easily to go to great lengths on my behalf and its stunning. My exam is next friday. After that i will keep in touch more. Sorry."},{"label":"ham","message":"Thanks again for your reply today. When is ur visa coming in. And r u still buying the gucci and bags. My sister things are not easy, uncle john also has his own bills so i really need to think about how to make my own money. Later sha."},{"label":"ham","message":"Sorry I flaked last night, shit's seriously goin down with my roommate, what you up to tonight?"},{"label":"ham","message":"He said i look pretty wif long hair wat. But i thk he's cutting quite short 4 me leh."},{"label":"ham","message":"Ranjith cal drpd Deeraj and deepak 5min hold"},{"label":"ham","message":"\"CHEERS FOR CALLIN BABE.SOZI CULDNT TALKBUT I WANNATELL U DETAILS LATER WENWECAN CHAT PROPERLY X\""},{"label":"ham","message":"Hey u still at the gym?"},{"label":"ham","message":"She said,'' do u mind if I go into the bedroom for a minute ? '' ''OK'', I sed in a sexy mood. She came out 5 minuts latr wid a cake...n My Wife,"},{"label":"ham","message":"Much better now thanks lol"},{"label":"ham","message":"Nothing, smsing u n xy lor. Sorry lor da guys neva c u in person but they sort of know u lor. So u wan 2 meet them xy ask me 2 bring u along 4 our next meeting."},{"label":"ham","message":"Lemme know when I can swing by and pick up, I'm free basically any time after 1 all this semester"},{"label":"ham","message":"Wa... U so efficient... Gee... Thanx..."},{"label":"spam","message":"3. You have received your mobile content. Enjoy"},{"label":"ham","message":"S but not able to sleep."},{"label":"spam","message":"Want explicit SEX in 30 secs? Ring 02073162414 now! Costs 20p\/min"},{"label":"ham","message":"We will meet soon princess! Ttyl!"},{"label":"ham","message":"I'll pick you up at about 5.15pm to go to taunton if you still want to come."},{"label":"ham","message":"Oh :-)only 4 outside players allowed to play know"},{"label":"ham","message":"I anything lor."},{"label":"ham","message":"Erutupalam thandiyachu"},{"label":"ham","message":"Y cant u try new invention to fly..i'm not joking.,"},{"label":"ham","message":"No..its ful of song lyrics.."},{"label":"ham","message":"What do u reckon as need 2 arrange transport if u can't do it, thanks"},{"label":"ham","message":"True lov n care wil nevr go unrecognized. though somone often makes mistakes when valuing it. but they will definitly undrstnd once when they start missing it."},{"label":"ham","message":"Shopping? Eh ger i toking abt syd leh...Haha"},{"label":"ham","message":"What not under standing."},{"label":"ham","message":"have * good weekend."},{"label":"ham","message":"Miss call miss call khelate kintu opponenter miss call dhorte lage. Thats d rule. One with great phone receiving quality wins."},{"label":"ham","message":"Call me when you get the chance plz <3"},{"label":"ham","message":"The new deus ex game comin early next yr"},{"label":"ham","message":"My computer just fried the only essential part we don't keep spares of because my fucking idiot roommates looovvve leaving the thing running on full <#> \/7"},{"label":"ham","message":"My friend, she's studying at warwick, we've planned to go shopping and to concert tmw, but it may be canceled, havn't seen for ages, yeah we should get together sometime!"},{"label":"ham","message":"Probably a couple hours tops"},{"label":"ham","message":"LOL .. *grins* .. I'm not babe, but thanks for thinking of me!"},{"label":"ham","message":"Man this bus is so so so slow. I think you're gonna get there before me"},{"label":"ham","message":"Hope this text meets you smiling. If not then let this text give you a reason to smile. Have a beautiful day."},{"label":"ham","message":"In case you wake up wondering where I am, I forgot I have to take care of something for grandma today, should be done before the parade"},{"label":"ham","message":"Ok"},{"label":"spam","message":"Latest Nokia Mobile or iPOD MP3 Player +\u00a3400 proze GUARANTEED! Reply with: WIN to 83355 now! Norcorp Ltd.\u00a31,50\/Mtmsgrcvd18+"},{"label":"spam","message":"SMS SERVICES. for your inclusive text credits, pls goto www.comuk.net login= 3qxj9 unsubscribe with STOP, no extra charge. help 08702840625.COMUK. 220-CM2 9AE"},{"label":"ham","message":"Nvm take ur time."},{"label":"ham","message":"So wat's da decision?"},{"label":"ham","message":"Wot is u up 2 then bitch?"},{"label":"ham","message":"Stupid.its not possible"},{"label":"ham","message":"She told to hr that he want posting in chennai:)because i'm working here:)"},{"label":"spam","message":"Mobile Club: Choose any of the top quality items for your mobile. 7cfca1a"},{"label":"ham","message":"When are you guys leaving?"},{"label":"ham","message":"He neva grumble but i sad lor... Hee... Buy tmr lor aft lunch. But we still meetin 4 lunch tmr a not. Neva hear fr them lei. \u00dc got a lot of work ar?"},{"label":"ham","message":"Not able to do anything."},{"label":"ham","message":"\u00dc takin linear algebra today?"},{"label":"ham","message":"This weekend is fine (an excuse not to do too much decorating)"},{"label":"ham","message":"Sorry I missed you babe. I was up late and slept in. I hope you enjoy your driving lesson, boytoy. I miss you too ... *teasing kiss*"},{"label":"ham","message":"Now project pa. After that only i can come."},{"label":"spam","message":"Money i have won wining number 946 wot do i do next"},{"label":"ham","message":"Sure, whenever you show the fuck up >:("},{"label":"ham","message":"That was random saw my old roomate on campus. He graduated"},{"label":"spam","message":"Congrats! 2 mobile 3G Videophones R yours. call 09061744553 now! videochat wid ur mates, play java games, Dload polyH music, noline rentl. bx420. ip4. 5we. 150pm"},{"label":"ham","message":"Men always needs a beautiful, intelligent, caring, loving, adjustable, cooperative wife. But the law allows only one wife...."},{"label":"ham","message":"That sucks. So what do you got planned for your yo valentine? I am your yo valentine aren't I?"},{"label":"ham","message":"Just got part Notting - 3 hrs 63miles. Good thing i love my man so much, but only doing 40mph. Hey ho"},{"label":"ham","message":"What to think no one saying clearly. Ok leave no need to ask her. I will go if she come or not"},{"label":"ham","message":"Hi good mornin.. Thanku wish u d same.."},{"label":"ham","message":"DO U WANT 2 MEET UP 2MORRO"},{"label":"ham","message":"Actually I decided I was too hungry so I haven't left yet :V"},{"label":"ham","message":"I've sent \u00fc my part.."},{"label":"ham","message":"Cos i was out shopping wif darren jus now n i called him 2 ask wat present he wan lor. Then he started guessing who i was wif n he finally guessed darren lor."},{"label":"spam","message":"I want some cock! My hubby's away, I need a real man 2 satisfy me. Txt WIFE to 89938 for no strings action. (Txt STOP 2 end, txt rec \u00a31.50ea. OTBox 731 LA1 7WS. )"},{"label":"ham","message":"Understand. his loss is my gain :) so do you work? School?"},{"label":"ham","message":"HOW ARE U? I HAVE MISSED U! I HAVENT BEEN UP 2 MUCH A BIT BORED WITH THE HOLIDAY WANT 2 GO BAK 2 COLLEGE! SAD ISNT IT?xx"},{"label":"ham","message":"Hiya, probably coming home * weekend after next"},{"label":"ham","message":"Don't forget though that I love you .... And I walk beside you. Watching over you and keeping your heart warm."},{"label":"ham","message":"I wish things were different. I wonder when i will be able to show you how much i value you. Pls continue the brisk walks no drugs without askin me please and find things to laugh about. I love you dearly."},{"label":"ham","message":"Ok both our days. So what are you making for dinner tonite? Am I invited?"},{"label":"spam","message":"Gr8 new service - live sex video chat on your mob - see the sexiest dirtiest girls live on ur phone - 4 details text horny to 89070 to cancel send STOP to 89070"},{"label":"ham","message":"I have no money 4 steve mate! !"},{"label":"ham","message":"IM LATE TELLMISS IM ON MY WAY"},{"label":"ham","message":"Never blame a day in ur life. Good days give u happiness. Bad days give u experience. Both are essential in life! All are Gods blessings! good morning.:"},{"label":"ham","message":"Normally i use to drink more water daily:)"},{"label":"ham","message":"Dare i ask... Any luck with sorting out the car?"},{"label":"ham","message":"Party's at my place at usf, no charge (but if you can contribute in any way it is greatly appreciated) and yeah, we got room for one more"},{"label":"ham","message":"Urgh, coach hot, smells of chip fat! Thanks again, especially for the duvet (not a predictive text word)."},{"label":"ham","message":"Hiya. How was last night? I've been naughty and bought myself clothes and very little ... Ready for more shopping tho! What kind of time do you wanna meet?"},{"label":"spam","message":"FreeMsg Hi baby wow just got a new cam moby. Wanna C a hot pic? or Fancy a chat?Im w8in 4uTxt \/ rply CHAT to 82242 Hlp 08712317606 Msg150p 2rcv"},{"label":"ham","message":"I've been trying to reach him without success"},{"label":"ham","message":"when you and derek done with class?"},{"label":"ham","message":"Never y lei... I v lazy... Got wat? Dat day \u00fc send me da url cant work one..."},{"label":"ham","message":"Never try alone to take the weight of a tear that comes out of ur heart and falls through ur eyes... Always remember a STUPID FRIEND is here to share... BSLVYL"},{"label":"ham","message":"Hey mate. Spoke to the mag people. We\u2018re on. the is deliver by the end of the month. Deliver on the 24th sept. Talk later."},{"label":"ham","message":"Hope you are having a good week. Just checking in"},{"label":"ham","message":"Haha, my friend tyler literally just asked if you could get him a dubsack"},{"label":"ham","message":"\"Hey! do u fancy meetin me at 4 at cha \u0096 hav a lil beverage on me. if not txt or ring me and we can meet up l8r. quite tired got in at 3 v.pist ;) love Pete x x x\""},{"label":"ham","message":"Great. Have a safe trip. Dont panic surrender all."},{"label":"ham","message":"\"SYMPTOMS\" when U are in love: \"1.U like listening songs 2.U get stopped where u see the name of your beloved 3.U won't get angry when your"},{"label":"ham","message":"Sun ah... Thk mayb can if dun have anythin on... Thk have to book e lesson... E pilates is at orchard mrt u noe hor..."},{"label":"ham","message":"Try to do something dear. You read something for exams"},{"label":"ham","message":"7 wonders in My WORLD 7th You 6th Ur style 5th Ur smile 4th Ur Personality 3rd Ur Nature 2nd Ur SMS and 1st \"Ur Lovely Friendship\"... good morning dear"},{"label":"ham","message":"Gettin rdy to ship comp"},{"label":"ham","message":"I am in hospital da. . I will return home in evening"},{"label":"ham","message":"PISS IS TALKING IS SOMEONE THAT REALISE U THAT POINT THIS AT IS IT.(NOW READ IT BACKWARDS)"},{"label":"ham","message":"Think + da. You wil do."},{"label":"ham","message":"I'm awake oh. What's up."},{"label":"ham","message":"Good afternoon my boytoy. How goes that walking here and there day ? Did you get that police abstract? Are you still out and about? I wake and miss you babe"},{"label":"ham","message":"How much u trying to get?"},{"label":"ham","message":"Come around <DECIMAL> pm vikky..i'm otside nw, il come by tht time"},{"label":"ham","message":"Tell me again what your address is"},{"label":"ham","message":"Honeybee Said: *I'm d Sweetest in d World* God Laughed & Said: *Wait,U Havnt Met d Person Reading This Msg* MORAL: Even GOD Can Crack Jokes! GM+GN+GE+GN:)"},{"label":"ham","message":"Should i buy him a blackberry bold 2 or torch. Should i buy him new or used. Let me know. Plus are you saying i should buy the <#> g wifi ipad. And what are you saying about the about the <#> g?"},{"label":"ham","message":"But you were together so you should be thinkin about him"},{"label":"ham","message":"hiya hows it going in sunny africa? hope u r avin a good time. give that big old silver back a big kiss from me."},{"label":"ham","message":"At WHAT TIME should i come tomorrow"},{"label":"spam","message":"Wanna have a laugh? Try CHIT-CHAT on your mobile now! Logon by txting the word: CHAT and send it to No: 8883 CM PO Box 4217 London W1A 6ZF 16+ 118p\/msg rcvd"},{"label":"ham","message":"\"CHA QUITEAMUZING THAT\u0092SCOOL BABE,PROBPOP IN & CU SATTHEN HUNNY 4BREKKIE! LOVE JEN XXX. PSXTRA LRG PORTIONS 4 ME PLEASE \""},{"label":"ham","message":"Omg how did u know what I ate?"},{"label":"spam","message":"\"URGENT! This is the 2nd attempt to contact U!U have WON \u00a31000CALL 09071512432 b4 300603t&csBCM4235WC1N3XX.callcost150ppmmobilesvary. max\u00a37. 50\""},{"label":"ham","message":":( but your not here...."},{"label":"ham","message":"Not directly behind... Abt 4 rows behind \u00fc..."},{"label":"spam","message":"Congratulations ur awarded 500 of CD vouchers or 125gift guaranteed & Free entry 2 100 wkly draw txt MUSIC to 87066"},{"label":"spam","message":"Had your contract mobile 11 Mnths? Latest Motorola, Nokia etc. all FREE! Double Mins & Text on Orange tariffs. TEXT YES for callback, no to remove from records"},{"label":"spam","message":"Urgent! call 09066350750 from your landline. Your complimentary 4* Ibiza Holiday or 10,000 cash await collection SAE T&Cs PO BOX 434 SK3 8WP 150 ppm 18+"},{"label":"ham","message":"No plans yet. What are you doing ?"},{"label":"ham","message":"Hi ....My engagement has been fixd on <#> th of next month. I know its really shocking bt....hmm njan vilikkam....t ws al of a sudn;-(."},{"label":"ham","message":"Not course. Only maths one day one chapter with in one month we can finish."},{"label":"ham","message":"Wow didn't think it was that common. I take it all back ur not a freak! Unless u chop it off:-)"},{"label":"spam","message":"For ur chance to win a \u00a3250 wkly shopping spree TXT: SHOP to 80878. T's&C's www.txt-2-shop.com custcare 08715705022, 1x150p\/wk"},{"label":"ham","message":"Noooooooo please. Last thing I need is stress. For once in your life be fair."},{"label":"spam","message":"U have a Secret Admirer who is looking 2 make contact with U-find out who they R*reveal who thinks UR so special-call on 09065171142-stopsms-08718727870150ppm"},{"label":"spam","message":"Mila, age23, blonde, new in UK. I look sex with UK guys. if u like fun with me. Text MTALK to 69866.18 . 30pp\/txt 1st 5free. \u00a31.50 increments. Help08718728876"},{"label":"ham","message":"I'll see if I can swing by in a bit, got some things to take care of here firsg"},{"label":"ham","message":"I wanted to wish you a Happy New Year and I wanted to talk to you about some legal advice to do with when Gary and I split but in person. I'll make a trip to Ptbo for that. I hope everything is good with you babe and I love ya :)"},{"label":"ham","message":"Have you not finished work yet or something?"},{"label":"ham","message":"Tomorrow i am not going to theatre. . . So i can come wherever u call me. . . Tell me where and when to come tomorrow"},{"label":"spam","message":"Well done ENGLAND! Get the official poly ringtone or colour flag on yer mobile! text TONE or FLAG to 84199 NOW! Opt-out txt ENG STOP. Box39822 W111WX \u00a31.50"},{"label":"ham","message":"Right it wasnt you who phoned it was someone with a number like yours!"},{"label":"ham","message":"It's ok i wun b angry. Msg u aft i come home tonight."},{"label":"ham","message":"I had a good time too. Its nice to do something a bit different with my weekends for a change. See ya soon"},{"label":"ham","message":"Yo sorry was in the shower sup"},{"label":"ham","message":"Carlos is down but I have to pick it up from him, so I'll swing by usf in a little bit"},{"label":"ham","message":"Full heat pa:-) i have applyed oil pa."},{"label":"ham","message":"I'm stuck in da middle of da row on da right hand side of da lt..."},{"label":"ham","message":"Have you laid your airtel line to rest?"},{"label":"ham","message":"Hi did u decide wot 2 get 4 his bday if not ill prob jus get him a voucher frm virgin or sumfing"},{"label":"spam","message":"FreeMsg: Txt: CALL to No: 86888 & claim your reward of 3 hours talk time to use from your phone now! Subscribe6GBP\/mnth inc 3hrs 16 stop?txtStop"},{"label":"ham","message":"\"Hey j! r u feeling any better, hopeSo hunny. i amnow feelin ill & ithink i may have tonsolitusaswell! damn iam layin in bedreal bored. lotsof luv me xxxx\""},{"label":"ham","message":"And I don't plan on staying the night but I prolly won't be back til late"},{"label":"ham","message":"THANX 4 PUTTIN DA FONE DOWN ON ME!!"},{"label":"ham","message":"I need an 8th but I'm off campus atm, could I pick up in an hour or two?"},{"label":"ham","message":"Oh... Haha... Den we shld had went today too... Gee, nvm la... Kaiez, i dun mind goin jazz oso... Scared hiphop open cant catch up..."},{"label":"ham","message":"Been running but only managed 5 minutes and then needed oxygen! Might have to resort to the roller option!"},{"label":"ham","message":"We live in the next <#> mins"},{"label":"ham","message":"Y de asking like this."},{"label":"ham","message":"Just glad to be talking to you."},{"label":"ham","message":"Wat time \u00fc finish?"},{"label":"ham","message":"Sorry da. I gone mad so many pending works what to do."},{"label":"ham","message":"How much you got for cleaning"},{"label":"ham","message":"hows my favourite person today? r u workin hard? couldn't sleep again last nite nearly rang u at 4.30"},{"label":"spam","message":"Sunshine Quiz! Win a super Sony DVD recorder if you canname the capital of Australia? Text MQUIZ to 82277. B"},{"label":"ham","message":"\u00dc called dad oredi..."},{"label":"ham","message":"Good. do you think you could send me some pix? I would love to see your top and bottom..."},{"label":"ham","message":"Nvm... I'm going to wear my sport shoes anyway... I'm going to be late leh."},{"label":"ham","message":"Sorry, I'll call later In meeting."},{"label":"ham","message":"THIS IS A LONG FUCKIN SHOWR"},{"label":"ham","message":"Received, understood n acted upon!"},{"label":"ham","message":"They finally came to fix the ceiling."},{"label":"ham","message":"U need my presnts always bcz U cant mis love. \"jeevithathile irulinae neekunna prakasamanu sne\" prakasam ennal prabha 'That mns prabha is'LOVE' Got it. Dont mis me...."},{"label":"ham","message":"Jus finish blowing my hair. U finish dinner already?"},{"label":"ham","message":"I'm on the bus. Love you"},{"label":"ham","message":"Lol ... I knew that .... I saw him in the dollar store"},{"label":"spam","message":"Please call our customer service representative on 0800 169 6031 between 10am-9pm as you have WON a guaranteed \u00a31000 cash or \u00a35000 prize!"},{"label":"spam","message":"Todays Voda numbers ending with 7634 are selected to receive a \u00a3350 reward. If you have a match please call 08712300220 quoting claim code 7684 standard rates apply."},{"label":"ham","message":"Only saturday and sunday holiday so its very difficult:)"},{"label":"ham","message":"Everybody had fun this evening. Miss you."},{"label":"ham","message":"Got hella gas money, want to go on a grand nature adventure with galileo in a little bit?"},{"label":"ham","message":"I'm in a meeting, call me later at"},{"label":"ham","message":"Oh wow thats gay. Will firmware update help"},{"label":"ham","message":"These won't do. Have to move on to morphine"},{"label":"ham","message":"How come i din c \u00fc... Yup i cut my hair..."},{"label":"ham","message":"K k pa Had your lunch aha."},{"label":"ham","message":"Oh ho. Is this the first time u use these type of words"},{"label":"ham","message":"Captain vijaykanth is doing comedy in captain tv..he is drunken :)"},{"label":"ham","message":"Of course. I guess god's just got me on hold right now."},{"label":"ham","message":"Do you hide anythiing or keeping distance from me"},{"label":"ham","message":"Havent."},{"label":"spam","message":"You are being ripped off! Get your mobile content from www.clubmoby.com call 08717509990 poly\/true\/Pix\/Ringtones\/Games six downloads for only 3"},{"label":"ham","message":"Sorry i din lock my keypad."},{"label":"ham","message":"Did u got that persons story"},{"label":"ham","message":"Are you planning to come chennai?"},{"label":"spam","message":"We tried to contact you re your reply to our offer of a Video Phone 750 anytime any network mins Half Price Line Rental Camcorder Reply or call 08000930705"},{"label":"ham","message":"God created gap btwn ur fingers so dat sum1 vry special will fill those gaps by holding ur hands.. Now plz dont ask y he created so much gap between legs !!!"},{"label":"ham","message":"We are okay. Going to sleep now. Later"},{"label":"ham","message":"Please protect yourself from e-threats. SIB never asks for sensitive information like Passwords,ATM\/SMS PIN thru email. Never share your password with anybody."},{"label":"ham","message":"Finally it has happened..! Aftr decades..! BEER is now cheaper than PETROL! The goverment expects us to \"DRINK\". . . But don't \"DRIVE \""},{"label":"spam","message":"A \u00a3400 XMAS REWARD IS WAITING FOR YOU! Our computer has randomly picked you from our loyal mobile customers to receive a \u00a3400 reward. Just call 09066380611"},{"label":"ham","message":"Where r e meeting tmr?"},{"label":"ham","message":"Lol yes. But it will add some spice to your day."},{"label":"ham","message":"Hope you are having a great day."},{"label":"ham","message":"Our Prasanth ettans mother passed away last night. Just pray for her and family."},{"label":"ham","message":"K, I'll work something out"},{"label":"spam","message":"PRIVATE! Your 2003 Account Statement for shows 800 un-redeemed S. I. M. points. Call 08718738002 Identifier Code: 48922 Expires 21\/11\/04"},{"label":"ham","message":"This message is from a great Doctor in India:-): 1) Do not drink APPY FIZZ. It contains Cancer causing age"},{"label":"ham","message":"I cant pick the phone right now. Pls send a message"},{"label":"ham","message":"You call him and tell now infront of them. Call him now."},{"label":"ham","message":"Ok no prob..."},{"label":"ham","message":"Ladies first and genus second k ."},{"label":"ham","message":"No. Yes please. Been swimming?"},{"label":"ham","message":"Mum not going robinson already."},{"label":"ham","message":"Ok set let u noe e details later..."},{"label":"ham","message":"Not..tel software name.."},{"label":"ham","message":"I send the print outs da."},{"label":"ham","message":"IM REALY SOZ IMAT MY MUMS 2NITE WHAT ABOUT 2MORO"},{"label":"ham","message":"When I was born, GOD said, \"Oh No! Another IDIOT\". When you were born, GOD said, \"OH No! COMPETITION\". Who knew, one day these two will become FREINDS FOREVER!"},{"label":"ham","message":"I didnt get ur full msg..sometext is missing, send it again"},{"label":"ham","message":"Probably not, I'm almost out of gas and I get some cash tomorrow"},{"label":"spam","message":"Customer service announcement. We recently tried to make a delivery to you but were unable to do so, please call 07099833605 to re-schedule. Ref:9280114"},{"label":"ham","message":"I forgot 2 ask \u00fc all smth.. There's a card on da present lei... How? \u00dc all want 2 write smth or sign on it?"},{"label":"ham","message":"I'm leaving my house now."},{"label":"spam","message":"Hi babe its Chloe, how r u? I was smashed on saturday night, it was great! How was your weekend? U been missing me? SP visionsms.com Text stop to stop 150p\/text"},{"label":"ham","message":"\u00dc ready then call me..."},{"label":"ham","message":"Wewa is 130. Iriver 255. All 128 mb."},{"label":"ham","message":"It is a good thing I'm now getting the connection to bw"},{"label":"ham","message":"Sry da..jst nw only i came to home.."},{"label":"ham","message":"That's cool he'll be here all night, lemme know when you're around"},{"label":"ham","message":"Are you staying in town ?"},{"label":"ham","message":"Haha yeah, 2 oz is kind of a shitload"},{"label":"ham","message":"Ok u can take me shopping when u get paid =D"},{"label":"ham","message":"My life Means a lot to me, Not because I love my life, But because I love the people in my life, The world calls them friends, I call them my World:-).. Ge:-).."},{"label":"ham","message":"Alright we'll bring it to you, see you in like <#> mins"},{"label":"ham","message":"But pls dont play in others life."},{"label":"ham","message":"Eatin my lunch..."},{"label":"ham","message":"Hmmm.but you should give it on one day.."},{"label":"ham","message":"Didn't try, g and I decided not to head out"},{"label":"ham","message":"Ok no prob"},{"label":"ham","message":"Surly ill give it to you:-) while coming to review."},{"label":"ham","message":"By march ending, i should be ready. But will call you for sure. The problem is that my capital never complete. How far with you. How's work and the ladies"},{"label":"ham","message":"Tessy..pls do me a favor. Pls convey my birthday wishes to Nimya..pls dnt forget it. Today is her birthday Shijas"},{"label":"ham","message":"Pls give her the food preferably pap very slowly with loads of sugar. You can take up to an hour to give it. And then some water. Very very slowly."},{"label":"spam","message":"URGENT! Your Mobile No 07808726822 was awarded a \u00a32,000 Bonus Caller Prize on 02\/09\/03! This is our 2nd attempt to contact YOU! Call 0871-872-9758 BOX95QU"},{"label":"ham","message":"A guy who gets used but is too dumb to realize it."},{"label":"ham","message":"Okey dokey, i\u2018ll be over in a bit just sorting some stuff out."},{"label":"ham","message":"Don no da:)whats you plan?"},{"label":"ham","message":"Yes fine"},{"label":"spam","message":"WIN: We have a winner! Mr. T. Foley won an iPod! More exciting prizes soon, so keep an eye on ur mobile or visit www.win-82050.co.uk"},{"label":"ham","message":"I liked the new mobile"},{"label":"ham","message":"Anytime..."},{"label":"ham","message":"Mmmmmmm *snuggles into you* ...*deep contented sigh* ... *whispers* ... I fucking love you so much I can barely stand it ..."},{"label":"ham","message":"Yar but they say got some error."},{"label":"ham","message":"Hey anyway i have to :-)"},{"label":"ham","message":"Wow so healthy. Old airport rd lor. Cant thk of anything else. But i'll b bathing my dog later."},{"label":"ham","message":"Wif my family booking tour package."},{"label":"ham","message":"Did you say bold, then torch later. Or one torch and 2bold?"},{"label":"ham","message":"Haha awesome, I might need to take you up on that, what you doin tonight?"},{"label":"ham","message":"Ya i knw u vl giv..its ok thanks kano..anyway enjoy wit ur family wit 1st salary..:-);-)"},{"label":"ham","message":"Huh so slow i tot u reach long ago liao... U 2 more days only i 4 more leh..."},{"label":"ham","message":"Thats cool princess! I will cover your face in hot sticky cum :)"},{"label":"ham","message":"Big brother\u2018s really scraped the barrel with this shower of social misfits"},{"label":"ham","message":"Oops i thk i dun haf enuff... I go check then tell \u00fc.."},{"label":"ham","message":"S:)8 min to go for lunch:)"},{"label":"ham","message":"Hey. What happened? U switch off ur cell d whole day. This isnt good. Now if u do care, give me a call tomorrow."},{"label":"ham","message":"K will do, addie & I are doing some art so I'll be here when you get home"},{"label":"ham","message":"My uncles in Atlanta. Wish you guys a great semester."},{"label":"ham","message":"Aiyo... Her lesson so early... I'm still sleepin, haha... Okie, u go home liao den confirm w me lor..."},{"label":"ham","message":"Forgot to tell \u00fc smth.. Can \u00fc like number the sections so that it's clearer.."},{"label":"ham","message":"Yup. Anything lor, if u dun wan it's ok..."},{"label":"ham","message":"I'm home, my love ... If your still awake ... *loving kiss*"},{"label":"ham","message":"HELLO PEACH! MY CAKE TASTS LUSH!"},{"label":"spam","message":"FREE GAME. Get Rayman Golf 4 FREE from the O2 Games Arcade. 1st get UR games settings. Reply POST, then save & activ8. Press 0 key for Arcade. Termsapply"},{"label":"ham","message":"There'll be a minor shindig at my place later tonight, you interested?"},{"label":"ham","message":"Jason says it's cool if we pick some up from his place in like an hour"},{"label":"spam","message":"Had your mobile 10 mths? Update to the latest Camera\/Video phones for FREE. KEEP UR SAME NUMBER, Get extra free mins\/texts. Text YES for a call"},{"label":"ham","message":"I (Career Tel) have added u as a contact on INDYAROCKS.COM to send FREE SMS. To remove from phonebook - sms NO to <#>"},{"label":"ham","message":"I've reached already."},{"label":"ham","message":"I dont know ask to my brother. Nothing problem some thing that. Just i told ."},{"label":"ham","message":"K:)eng rocking in ashes:)"},{"label":"ham","message":"Wat time r \u00fc going to xin's hostel?"},{"label":"ham","message":"Good Morning my Dear Shijutta........... Have a great & successful day."},{"label":"spam","message":"Buy Space Invaders 4 a chance 2 win orig Arcade Game console. Press 0 for Games Arcade (std WAP charge) See o2.co.uk\/games 4 Terms + settings. No purchase"},{"label":"ham","message":"Oh k:)after that placement there ah?"},{"label":"ham","message":"Not for possession, especially not first offense"},{"label":"ham","message":"Nt only for driving even for many reasons she is called BBD..thts it chikku, then hw abt dvg cold..heard tht vinobanagar violence hw is the condition..and hw ru ? Any problem?"},{"label":"ham","message":"I bought the test yesterday. Its something that lets you know the exact day u ovulate.when will get 2u in about 2 to 3wks. But pls pls dont fret. I know u r worried. Pls relax. Also is there anything in ur past history u need to tell me?"},{"label":"ham","message":"We have pizza if u want"},{"label":"ham","message":"I keep seeing weird shit and bein all \"woah\" then realising it's actually reasonable and I'm all \"oh\""},{"label":"ham","message":"Many more happy returns of the day. I wish you happy birthday."},{"label":"ham","message":"Ya very nice. . .be ready on thursday"},{"label":"ham","message":"I am in hospital da. . I will return home in evening"},{"label":"ham","message":"\"Thinking of u ;) x\""},{"label":"spam","message":"Camera - You are awarded a SiPix Digital Camera! call 09061221066 fromm landline. Delivery within 28 days."},{"label":"ham","message":"Orh i tot u say she now still dun believe."},{"label":"ham","message":"When you just put in the + sign, choose my number and the pin will show. Right?"},{"label":"ham","message":"The beauty of life is in next second.. which hides thousands of secrets. I wish every second will be wonderful in ur life...!! gud n8"},{"label":"ham","message":"Thanx u darlin!im cool thanx. A few bday drinks 2 nite. 2morrow off! Take care c u soon.xxx"},{"label":"ham","message":"If you're still up, maybe leave the credit card so I can get gas when I get back like he told me to"},{"label":"spam","message":"Your weekly Cool-Mob tones are ready to download !This weeks new Tones include: 1) Crazy Frog-AXEL F>>> 2) Akon-Lonely>>> 3) Black Eyed-Dont P >>>More info in n"},{"label":"ham","message":"Well boy am I glad G wasted all night at applebees for nothing"},{"label":"spam","message":"Cashbin.co.uk (Get lots of cash this weekend!) www.cashbin.co.uk Dear Welcome to the weekend We have got our biggest and best EVER cash give away!! These.."},{"label":"ham","message":"Ok lor... Or u wan me go look 4 u?"},{"label":"ham","message":"U wan 2 haf lunch i'm in da canteen now."},{"label":"ham","message":"Don't make life too stressfull.. Always find time to Laugh.. It may not add years to your Life! But surely adds more life to ur years!! Gud ni8..swt dreams.."},{"label":"ham","message":"hey, looks like I was wrong and one of the kappa guys numbers is still on my phone, if you want I can text him and see if he's around"},{"label":"spam","message":"URGENT! Your Mobile number has been awarded with a \u00a32000 prize GUARANTEED. Call 09061790121 from land line. Claim 3030. Valid 12hrs only 150ppm"},{"label":"spam","message":"Thanks 4 your continued support Your question this week will enter u in2 our draw 4 \u00a3100 cash. Name the NEW US President? txt ans to 80082"},{"label":"ham","message":"I'm home. Doc gave me pain meds says everything is fine."},{"label":"ham","message":"It's \u00e9 only $140 ard...\u00c9 rest all ard $180 at least...Which is \u00e9 price 4 \u00e9 2 bedrm ($900)"},{"label":"ham","message":"Me too! Have a lovely night xxx"},{"label":"ham","message":"Prepare to be pleasured :)"},{"label":"ham","message":"Hi.:)technical support.providing assistance to us customer through call and email:)"},{"label":"ham","message":"if you text on your way to cup stop that should work. And that should be BUS"},{"label":"ham","message":"Whens your radio show?"},{"label":"spam","message":"Your unique user ID is 1172. For removal send STOP to 87239 customer services 08708034412"},{"label":"ham","message":"I'm not sure if its still available though"},{"label":"ham","message":"watever reLation u built up in dis world only thing which remains atlast iz lonlines with lotz n lot memories! feeling.."},{"label":"ham","message":"CHEERS LOU! YEAH WAS A GOODNITE SHAME U NEVA CAME! C YA GAILxx"},{"label":"ham","message":"Hi..i got the money da:)"},{"label":"ham","message":"Hi, Mobile no. <#> has added you in their contact list on www.fullonsms.com It s a great place to send free sms to people For more visit fullonsms.com"},{"label":"ham","message":"Ok then u tell me wat time u coming later lor."},{"label":"ham","message":"U repeat e instructions again. Wat's e road name of ur house?"},{"label":"ham","message":"So many people seems to be special at first sight, But only very few will remain special to you till your last sight.. Maintain them till life ends.. Sh!jas"},{"label":"ham","message":"Quite lor. But dun tell him wait he get complacent..."},{"label":"ham","message":"Sorry completely forgot * will pop em round this week if your still here?"},{"label":"ham","message":"U R THE MOST BEAUTIFUL GIRL IVE EVER SEEN. U R MY BABY COME AND C ME IN THE COMMON ROOM"},{"label":"ham","message":"O we cant see if we can join denis and mina? Or does denis want alone time"},{"label":"ham","message":"Sen told that he is going to join his uncle finance in cbe"},{"label":"ham","message":"Yup... Hey then one day on fri we can ask miwa and jiayin take leave go karaoke"},{"label":"ham","message":"Call me, i am senthil from hsbc."},{"label":"ham","message":"Especially since i talk about boston all up in my personal statement, lol! I woulda changed that if i had realized it said nyc! It says boston now."},{"label":"ham","message":"Indeed and by the way it was either or - not both !"},{"label":"spam","message":"Urgent -call 09066649731from Landline. Your complimentary 4* Ibiza Holiday or \u00a310,000 cash await collection SAE T&Cs PO BOX 434 SK3 8WP 150ppm 18+"},{"label":"ham","message":"Holy living christ what is taking you so long"},{"label":"ham","message":"\u00dc thk of wat to eat tonight."},{"label":"ham","message":"Thanx. Yup we coming back on sun. Finish dinner going back 2 hotel now. Time flies, we're tog 4 exactly a mth today. Hope we'll haf many more mths to come..."},{"label":"ham","message":"We're on the opposite side from where we dropped you off"},{"label":"ham","message":"Yup. Izzit still raining heavily cos i'm in e mrt i can't c outside."},{"label":"ham","message":"Send me your resume:-)"},{"label":"ham","message":"Gd luck 4 ur exams :-)"},{"label":"ham","message":"Or u ask they all if next sat can a not. If all of them can make it then i'm ok lor."},{"label":"ham","message":"Sorry that was my uncle. I.ll keep in touch"},{"label":"ham","message":"Saw Guys and Dolls last night with Patrick Swayze it was great"},{"label":"spam","message":"URGENT This is our 2nd attempt to contact U. Your \u00a3900 prize from YESTERDAY is still awaiting collection. To claim CALL NOW 09061702893"},{"label":"spam","message":"Santa calling! Would your little ones like a call from Santa Xmas Eve? Call 09077818151 to book you time. Calls1.50ppm last 3mins 30s T&C www.santacalling.com"},{"label":"ham","message":"Just come home. I don't want u to be miserable"},{"label":"ham","message":"I dont know why she.s not getting your messages"},{"label":"ham","message":"its cool but tyler had to take off so we're gonna buy for him and drop it off at his place later tonight. Our total order is a quarter, you got enough?"},{"label":"ham","message":"The guy at the car shop who was flirting with me got my phone number from the paperwork and called and texted me. I'm nervous because of course now he may have my address. Should i call his boss and tell him, knowing this may get him fired?"},{"label":"ham","message":"Reverse is cheating. That is not mathematics."},{"label":"ham","message":"How do you plan to manage that"},{"label":"ham","message":"Er, hello, things didn\u2018t quite go to plan \u2013 is limping slowly home followed by aa and with exhaust hanging off"},{"label":"ham","message":"Sorry for the delay. Yes masters"},{"label":"ham","message":"Call me when u finish then i come n pick u."},{"label":"spam","message":"PRIVATE! Your 2004 Account Statement for 078498****7 shows 786 unredeemed Bonus Points. To claim call 08719180219 Identifier Code: 45239 Expires 06.05.05"},{"label":"ham","message":"What's up my own oga. Left my phone at home and just saw ur messages. Hope you are good. Have a great weekend."},{"label":"ham","message":"Don't worry though, I understand how important it is that I be put in my place with a poorly thought out punishment in the face of the worst thing that has ever happened to me. Brb gonna go kill myself"},{"label":"ham","message":"Honey, can you pls find out how much they sell Predicte in Nigeria. And how many times can it be used. Its very important to have a reply before monday"},{"label":"ham","message":"E admin building there? I might b slightly earlier... I'll call u when i'm reaching..."},{"label":"ham","message":"fyi I'm at usf now, swing by the room whenever"},{"label":"ham","message":"i can call in <#> min if thats ok"},{"label":"ham","message":"Ummmmmaah Many many happy returns of d day my dear sweet heart.. HAPPY BIRTHDAY dear"},{"label":"ham","message":"\u00dc no home work to do meh..."},{"label":"ham","message":"Anything is valuable in only 2 situations: First- Before getting it... Second- After loosing it..."},{"label":"ham","message":"Me too. Mark is taking forever to pick up my prescription and the pain is coming back."},{"label":"ham","message":"How's ur paper?"},{"label":"ham","message":"Got smaller capacity one? Quite ex..."},{"label":"spam","message":"Check Out Choose Your Babe Videos @ sms.shsex.netUN fgkslpoPW fgkslpo"},{"label":"ham","message":"Im good! I have been thinking about you..."},{"label":"spam","message":"u r a winner U ave been specially selected 2 receive \u00a31000 cash or a 4* holiday (flights inc) speak to a live operator 2 claim 0871277810710p\/min (18 )"},{"label":"ham","message":":-) :-)"},{"label":"ham","message":"Not thought bout it... || Drink in tap & spile at seven. || Is that pub on gas st off broad st by canal. || Ok?"},{"label":"ham","message":"I am going to sleep. I am tired of travel."},{"label":"ham","message":"Haha, just what I was thinkin"},{"label":"ham","message":"Yup but it's not giving me problems now so mayb i'll jus leave it..."},{"label":"ham","message":"Lol no. Just trying to make your day a little more interesting"},{"label":"ham","message":"How long before you get reply, just defer admission til next semester"},{"label":"ham","message":"The word \"Checkmate\" in chess comes from the Persian phrase \"Shah Maat\" which means; \"the king is dead..\" Goodmorning.. Have a good day..:)"},{"label":"ham","message":"Po de :-):):-):-):-). No need job aha."},{"label":"ham","message":"Rats. Hey did u ever vote for the next themes?"},{"label":"spam","message":"New Mobiles from 2004, MUST GO! Txt: NOKIA to No: 89545 & collect yours today! From ONLY \u00a31. www.4-tc.biz 2optout 087187262701.50gbp\/mtmsg18 TXTAUCTION."},{"label":"ham","message":"I hope your pee burns tonite."},{"label":"ham","message":"OH RITE. WELL IM WITH MY BEST MATE PETE, WHO I WENT OUT WITH 4 A WEEK+ NOW WERE 2GEVA AGAIN. ITS BEEN LONGER THAN A WEEK."},{"label":"ham","message":"Yay can't wait to party together!"},{"label":"ham","message":"....photoshop makes my computer shut down."},{"label":"ham","message":"All boys made fun of me today. Ok i have no problem. I just sent one message just for fun"},{"label":"ham","message":"That's one of the issues but california is okay. No snow so its manageable"},{"label":"spam","message":"PRIVATE! Your 2003 Account Statement for shows 800 un-redeemed S. I. M. points. Call 08715203652 Identifier Code: 42810 Expires 29\/10\/0"},{"label":"ham","message":"Hmmm.... Mayb can try e shoppin area one, but forgot e name of hotel..."},{"label":"ham","message":"Awesome, that gonna be soon or later tonight?"},{"label":"ham","message":"I need details about that online job."},{"label":"spam","message":"YOU HAVE WON! As a valued Vodafone customer our computer has picked YOU to win a \u00a3150 prize. To collect is easy. Just call 09061743386"},{"label":"ham","message":"Missing you too.pray inshah allah"},{"label":"ham","message":"Pls help me tell Ashley that i cant find her number oh"},{"label":"ham","message":"I am in escape theatre now. . Going to watch KAVALAN in a few minutes"},{"label":"ham","message":"S.this will increase the chance of winning."},{"label":"ham","message":"either way works for me. I am <#> years old. Hope that doesnt bother you."},{"label":"ham","message":"Maybe you should find something else to do instead???"},{"label":"ham","message":"Gain the rights of a wife.dont demand it.i am trying as husband too.Lets see"},{"label":"ham","message":"I liked your new house"},{"label":"ham","message":"I'm fine. Hope you are also"},{"label":"ham","message":"Also north carolina and texas atm, you would just go to the gre site and pay for the test results to be sent."},{"label":"ham","message":"Same to u..."},{"label":"ham","message":"yes baby! I need to stretch open your pussy!"},{"label":"ham","message":"Thanks and ! Or bomb and date as my phone wanted to say!"},{"label":"ham","message":"Ok..."},{"label":"ham","message":"Hey, a guy I know is breathing down my neck to get him some bud, anyway you'd be able to get a half track to usf tonight?"},{"label":"ham","message":"\"Response\" is one of d powerful weapon 2 occupy a place in others 'HEART'... So, always give response 2 who cares 4 U\"... Gud night..swt dreams..take care"},{"label":"ham","message":"Nokia phone is lovly.."},{"label":"spam","message":"**FREE MESSAGE**Thanks for using the Auction Subscription Service. 18 . 150p\/MSGRCVD 2 Skip an Auction txt OUT. 2 Unsubscribe txt STOP CustomerCare 08718726270"},{"label":"spam","message":"Bored housewives! Chat n date now! 0871750.77.11! BT-national rate 10p\/min only from landlines!"},{"label":"ham","message":"Sorry da..today i wont come to play..i have driving clas.."},{"label":"ham","message":"I'm really sorry I lit your hair on fire"},{"label":"ham","message":"Oh! Shit, I thought that was your trip! Loooooool ... That just makes SO much more sense now ... *grins* and the sofa reference was ... The \"sleep on a couch\" link you sent me ... Wasn't that how you went on your trip ? Oh ... And didn't your babe go with you for that celebration with your rents?"},{"label":"ham","message":"Okey dokey swashbuckling stuff what oh."},{"label":"ham","message":"Watching cartoon, listening music & at eve had to go temple & church.. What about u?"},{"label":"ham","message":"1. Tension face 2. Smiling face 3. Waste face 4. Innocent face 5.Terror face 6.Cruel face 7.Romantic face 8.Lovable face 9.decent face <#> .joker face."},{"label":"ham","message":"Dip's cell dead. So i m coming with him. U better respond else we shall come back."},{"label":"ham","message":"Well. You know what i mean. Texting"},{"label":"ham","message":"Hi dis is yijue i would be happy to work wif \u00fc all for gek1510..."},{"label":"ham","message":"Lol! Oops sorry! Have fun."},{"label":"ham","message":"Wat happened to the cruise thing"},{"label":"ham","message":"I know dat feelin had it with Pete! Wuld get with em , nuther place nuther time mayb?"},{"label":"spam","message":"lyricalladie(21\/F) is inviting you to be her friend. Reply YES-910 or NO-910. See her: www.SMS.ac\/u\/hmmross STOP? Send STOP FRND to 62468"},{"label":"ham","message":"The world's most happiest frnds never have the same characters... Dey just have the best understanding of their differences..."},{"label":"spam","message":"No 1 POLYPHONIC tone 4 ur mob every week! Just txt PT2 to 87575. 1st Tone FREE ! so get txtin now and tell ur friends. 150p\/tone. 16 reply HL 4info"},{"label":"ham","message":"Yeah just open chat and click friend lists. Then make the list. Easy as pie"},{"label":"ham","message":"alright tyler's got a minor crisis and has to be home sooner than he thought so be here asap"},{"label":"ham","message":"When\/where do I pick you up"},{"label":"ham","message":"As usual u can call me ard 10 smth."},{"label":"ham","message":"New Theory: Argument wins d SITUATION, but loses the PERSON. So dont argue with ur friends just.. . . . kick them & say, I'm always correct.!"},{"label":"ham","message":"For many things its an antibiotic and it can be used for chest abdomen and gynae infections even bone infections."},{"label":"ham","message":"Poor girl can't go one day lmao"},{"label":"ham","message":"Or just do that 6times"},{"label":"spam","message":"Todays Vodafone numbers ending with 4882 are selected to a receive a \u00a3350 award. If your number matches call 09064019014 to receive your \u00a3350 award."},{"label":"ham","message":"You have to pls make a note of all she.s exposed to. Also find out from her school if anyone else was vomiting. Is there a dog or cat in the house? Let me know later."},{"label":"ham","message":"Japanese Proverb: If one Can do it, U too Can do it, If none Can do it,U must do it Indian version: If one Can do it, LET HIM DO it.. If none Can do it,LEAVE it!! And finally Kerala version: If one can do it, Stop him doing it.. If none can do it, Make a strike against it ..."},{"label":"ham","message":"Sounds like there could be a lot of time spent in that chastity device boy ... *grins* ... Or take your beatings like a good dog. Going to lounge in a nice long bath now ?"},{"label":"ham","message":"Its worse if if uses half way then stops. Its better for him to complete it."},{"label":"ham","message":"Miserable. They don't tell u that the side effects of birth control are massive gut wrenching cramps for the first 2 months. I didn't sleep at all last night."},{"label":"ham","message":"Send me the new number"},{"label":"ham","message":"Convey my regards to him"},{"label":"spam","message":"Want the latest Video handset? 750 anytime any network mins? Half price line rental? Reply or call 08000930705 for delivery tomorrow"},{"label":"ham","message":"2 and half years i missed your friendship:-)"},{"label":"ham","message":"I cant pick the phone right now. Pls send a message"},{"label":"ham","message":"Oh for fuck's sake she's in like tallahassee"},{"label":"ham","message":"Haha, that was the first person I was gonna ask"},{"label":"spam","message":"ou are guaranteed the latest Nokia Phone, a 40GB iPod MP3 player or a \u00a3500 prize! Txt word: COLLECT to No: 83355! IBHltd LdnW15H 150p\/Mtmsgrcvd18"},{"label":"ham","message":"Taka lor. Wat time u wan 2 come n look 4 us?"},{"label":"spam","message":"* FREE* POLYPHONIC RINGTONE Text SUPER to 87131 to get your FREE POLY TONE of the week now! 16 SN PoBox202 NR31 7ZS subscription 450pw"},{"label":"ham","message":"\"I;m reaching in another 2 stops.\""},{"label":"ham","message":"no, i *didn't* mean to post it. I wrote it, and like so many other times i've ritten stuff to you, i let it sit there. it WAS what i was feeling at the time. I was angry. Before i left, i hit send, then stop. It wasn't there. I checked on my phone when i got to my car. It wasn't there. You said you didn't sleep, you were bored. So why wouldn't THAT be the time to clean, fold laundry, etc.? At least make the bed?"},{"label":"spam","message":"Warner Village 83118 C Colin Farrell in SWAT this wkend @Warner Village & get 1 free med. Popcorn!Just show msg+ticket@kiosk.Valid 4-7\/12. C t&c @kiosk. Reply SONY 4 mre film offers"},{"label":"ham","message":"Will you come online today night"},{"label":"ham","message":"Then anything special?"},{"label":"ham","message":"I'm in solihull, | do you want anything?"},{"label":"ham","message":"Will do. Have a good day"},{"label":"ham","message":"WE REGRET TO INFORM U THAT THE NHS HAS MADE A MISTAKE.U WERE NEVER ACTUALLY BORN.PLEASE REPORT 2 YOR LOCAL HOSPITAL 2B TERMINATED.WE R SORRY 4 THE INCONVENIENCE"},{"label":"ham","message":"Love that holiday Monday feeling even if I have to go to the dentists in an hour"},{"label":"ham","message":"I am on the way to tirupur."},{"label":"spam","message":"Goal! Arsenal 4 (Henry, 7 v Liverpool 2 Henry scores with a simple shot from 6 yards from a pass by Bergkamp to give Arsenal a 2 goal margin after 78 mins."},{"label":"ham","message":"You've already got a flaky parent. It'snot supposed to be the child's job to support the parent...not until they're The Ride age anyway. I'm supposed to be there to support you. And now i've hurt you. unintentional. But hurt nonetheless."},{"label":"ham","message":"We took hooch for a walk toaday and i fell over! Splat! Grazed my knees and everything! Should have stayed at home! See you tomorrow!"},{"label":"ham","message":"Just dropped em off, omw back now"},{"label":"spam","message":"This is the 2nd time we have tried 2 contact u. U have won the 750 Pound prize. 2 claim is easy, call 08712101358 NOW! Only 10p per min. BT-national-rate"},{"label":"ham","message":"Sitting in mu waiting for everyone to get out of my suite so I can take a shower"},{"label":"ham","message":"Re your call; You didn't see my facebook huh?"},{"label":"ham","message":"G says you never answer your texts, confirm\/deny"},{"label":"ham","message":"Its so common hearin How r u? Wat r u doing? How was ur day? So let me ask u something different. Did u smile today? If not, do it now.... Gud evng."},{"label":"ham","message":"Hi Dear Call me its urgnt. I don't know whats your problem. You don't want to work or if you have any other problem at least tell me. Wating for your reply."},{"label":"ham","message":"Oh yah... We never cancel leh... Haha"},{"label":"ham","message":"We can go 4 e normal pilates after our intro..."},{"label":"ham","message":"Ok... Let u noe when i leave my house."},{"label":"ham","message":"Oh yes, why is it like torture watching england?"},{"label":"ham","message":"Wanna do some art?! :D"},{"label":"ham","message":"Just hopeing that wasn\u2018t too pissed up to remember and has gone off to his sisters or something!"},{"label":"spam","message":"Got what it takes 2 take part in the WRC Rally in Oz? U can with Lucozade Energy! Text RALLY LE to 61200 (25p), see packs or lucozade.co.uk\/wrc & itcould be u!"},{"label":"spam","message":"Hi, the SEXYCHAT girls are waiting for you to text them. Text now for a great night chatting. send STOP to stop this service"},{"label":"ham","message":"Good morning, my boytoy! How's those yummy lips ? Where's my sexy buns now ? What do you do ? Do you think of me ? Do you crave me ? Do you need me ?"},{"label":"ham","message":"Match started.india <#> for 2"},{"label":"ham","message":"Once free call me sir."},{"label":"ham","message":"Hey do you want anything to buy:)"},{"label":"ham","message":"Hey babe, how's it going ? Did you ever figure out where your going for New Years ?"},{"label":"ham","message":"K..k.:)congratulation .."},{"label":"ham","message":"G wants to know where the fuck you are"},{"label":"ham","message":"No it was cancelled yeah baby! Well that sounds important so i understand my darlin give me a ring later on this fone love Kate x"},{"label":"ham","message":"Tomarrow i want to got to court. At <DECIMAL> . So you come to bus stand at 9."},{"label":"ham","message":"\u00dc go home liao? Ask dad to pick me up at 6..."},{"label":"ham","message":"Omg you can make a wedding chapel in frontierville? Why do they get all the good stuff?"},{"label":"ham","message":"I'm eatin now lor, but goin back to work soon... E mountain deer show huh... I watch b4 liao, very nice..."},{"label":"ham","message":"Check mail.i have mailed varma and kept copy to you regarding membership.take care.insha allah."},{"label":"ham","message":"Wrong phone! This phone! I answer this one but assume the other is people i don't well"},{"label":"ham","message":"Anyway I don't think I can secure anything up here, lemme know if you want me to drive down south and chill"},{"label":"ham","message":"I'm already back home so no probably not"},{"label":"spam","message":"Great News! Call FREEFONE 08006344447 to claim your guaranteed \u00a31000 CASH or \u00a32000 gift. Speak to a live operator NOW!"},{"label":"spam","message":"Hi this is Amy, we will be sending you a free phone number in a couple of days, which will give you an access to all the adult parties..."},{"label":"ham","message":"I am in bus on the way to calicut"},{"label":"ham","message":"Hi its me you are probably having too much fun to get this message but i thought id txt u cos im bored! and james has been farting at me all night"},{"label":"ham","message":"hi baby im sat on the bloody bus at the mo and i wont be home until about 7:30 wanna do somethin later? call me later ortxt back jess xx"},{"label":"spam","message":"Welcome to Select, an O2 service with added benefits. You can now call our specially trained advisors FREE from your mobile by dialling 402."},{"label":"ham","message":"I lost 4 pounds since my doc visit last week woot woot! Now I'm gonna celebrate by stuffing my face!"},{"label":"ham","message":"U coming back 4 dinner rite? Dad ask me so i re confirm wif u..."},{"label":"ham","message":"Doing my masters. When will you buy a bb cos i have for sale and how's bf"},{"label":"ham","message":"Ahhhh...just woken up!had a bad dream about u tho,so i dont like u right now :) i didnt know anything about comedy night but i guess im up for it."},{"label":"ham","message":"I'm vivek:)i got call from your number."},{"label":"ham","message":"Why didn't u call on your lunch?"},{"label":"ham","message":"What i mean was i left too early to check, cos i'm working a 9-6."},{"label":"ham","message":"I want <#> rs da:)do you have it?"},{"label":"ham","message":"A bit of Ur smile is my hppnss, a drop of Ur tear is my sorrow, a part of Ur heart is my life, a heart like mine wil care for U, forevr as my GOODFRIEND"},{"label":"ham","message":"Yup ok..."},{"label":"ham","message":"I want to see your pretty pussy..."},{"label":"spam","message":"Dear Voucher holder Have your next meal on us. Use the following link on your pc 2 enjoy a 2 4 1 dining experiencehttp:\/\/www.vouch4me.com\/etlp\/dining.asp"},{"label":"ham","message":"A few people are at the game, I'm at the mall with iouri and kaila"},{"label":"spam","message":"URGENT! We are trying to contact U. Todays draw shows that you have won a \u00a32000 prize GUARANTEED. Call 09058094507 from land line. Claim 3030. Valid 12hrs only"},{"label":"spam","message":"You can donate \u00a32.50 to UNICEF's Asian Tsunami disaster support fund by texting DONATE to 864233. \u00a32.50 will be added to your next bill"},{"label":"ham","message":"Future is not what we planned for tomorrow.....! it is the result of what we do today...! Do the best in present... enjoy the future."},{"label":"ham","message":"I will cme i want to go to hos 2morow. After that i wil cme. This what i got from her dear what to do. She didnt say any time"},{"label":"ham","message":"We are supposed to meet to discuss abt our trip... Thought xuhui told you? In the afternoon. Thought we can go for lesson after that"},{"label":"ham","message":"Hey come online! Use msn... We are all there"},{"label":"ham","message":"I'm fine. Hope you are good. Do take care."},{"label":"ham","message":"Oops I was in the shower when u called. Hey a parking garage collapsed at university hospital. See I'm not crazy. Stuff like that DOES happen."},{"label":"ham","message":"Aiyo u so poor thing... Then u dun wan 2 eat? U bathe already?"},{"label":"ham","message":"Yar... I tot u knew dis would happen long ago already."},{"label":"ham","message":"You are gorgeous! keep those pix cumming :) thank you!"},{"label":"ham","message":"A boy was late 2 home. His father: \"POWER OF FRNDSHIP\""},{"label":"ham","message":"JADE ITS PAUL. Y DIDN\u0092T U TXT ME? DO U REMEMBER ME FROM BARMED? I WANT 2 TALK 2 U! TXT ME"},{"label":"ham","message":"Spending new years with my brother and his family. Lets plan to meet next week. Are you ready to be spoiled? :)"},{"label":"ham","message":"So what u doing today?"},{"label":"ham","message":"I said its okay. Sorry"},{"label":"ham","message":"Slept? I thinkThis time ( <#> pm) is not dangerous"},{"label":"ham","message":"Networking job is there."},{"label":"spam","message":"goldviking (29\/M) is inviting you to be his friend. Reply YES-762 or NO-762 See him: www.SMS.ac\/u\/goldviking STOP? Send STOP FRND to 62468"},{"label":"ham","message":"Dont let studying stress you out. L8r."},{"label":"ham","message":"That's y u haf 2 keep me busy..."},{"label":"ham","message":"No rushing. I'm not working. I'm in school so if we rush we go hungry."},{"label":"ham","message":"Which channel:-):-):):-)."},{"label":"ham","message":"So your telling me I coulda been your real Valentine and I wasn't? U never pick me for NOTHING!!"},{"label":"spam","message":"Phony \u00a3350 award - Todays Voda numbers ending XXXX are selected to receive a \u00a3350 award. If you have a match please call 08712300220 quoting claim code 3100 standard rates app"},{"label":"ham","message":"We made it! Eta at taunton is 12:30 as planned, hope that\u2018s still okday?! Good to see you! :-xx"},{"label":"ham","message":"I'm hungry buy smth home..."},{"label":"ham","message":"\"HEY KATE, HOPE UR OK... WILL GIVE U A BUZ WEDLUNCH. GO OUTSOMEWHERE 4 ADRINK IN TOWN..CUD GO 2WATERSHD 4 A BIT? PPL FROMWRK WILL BTHERE. LOVE PETEXXX.\""},{"label":"ham","message":"My drive can only be read. I need to write"},{"label":"ham","message":"Just looked it up and addie goes back Monday, sucks to be her"},{"label":"ham","message":"Happy new year. Hope you are having a good semester"},{"label":"ham","message":"Esplanade lor. Where else..."},{"label":"ham","message":"Can you talk with me.."},{"label":"ham","message":"Hmph. Go head, big baller."},{"label":"ham","message":"Well its not like you actually called someone a punto. That woulda been worse."},{"label":"ham","message":"Nope. Since ayo travelled, he has forgotten his guy"},{"label":"ham","message":"You still around? Looking to pick up later"},{"label":"spam","message":"CDs 4u: Congratulations ur awarded \u00a3500 of CD gift vouchers or \u00a3125 gift guaranteed & Freeentry 2 \u00a3100 wkly draw xt MUSIC to 87066 TnCs www.ldew.com1win150ppmx3age16"},{"label":"ham","message":"There's someone here that has a year <#> toyota camry like mr olayiwola's own. Mileage is <#> k.its clean but i need to know how much will it sell for. If i can raise the dough for it how soon after landing will it sell. Holla back."},{"label":"ham","message":"Guess which pub im in? Im as happy as a pig in clover or whatever the saying is!"},{"label":"ham","message":"ILL B DOWN SOON"},{"label":"ham","message":"Oh k. . I will come tomorrow"},{"label":"ham","message":"Go fool dont cheat others ok"},{"label":"ham","message":"My mobile number.pls sms ur mail id.convey regards to achan,amma.Rakhesh.Qatar"},{"label":"ham","message":"By the way, 'rencontre' is to meet again. Mountains dont...."},{"label":"spam","message":"You have WON a guaranteed \u00a31000 cash or a \u00a32000 prize. To claim yr prize call our customer service representative on 08714712412 between 10am-7pm Cost 10p"},{"label":"ham","message":"U attend ur driving lesson how many times a wk n which day?"},{"label":"ham","message":"Uncle G, just checking up on you. Do have a rewarding month"},{"label":"ham","message":"Hello boytoy ! Geeee ... I'm missing you today. I like to send you a tm and remind you I'm thinking of you ... And you are loved ... *loving kiss*"},{"label":"ham","message":"I think the other two still need to get cash but we can def be ready by 9"},{"label":"ham","message":"Hey gals...U all wanna meet 4 dinner at n\u00ecte?"},{"label":"spam","message":"Dear 0776xxxxxxx U've been invited to XCHAT. This is our final attempt to contact u! Txt CHAT to 86688 150p\/MsgrcvdHG\/Suite342\/2Lands\/Row\/W1J6HL LDN 18yrs"},{"label":"ham","message":"Babe ! What are you doing ? Where are you ? Who are you talking to ? Do you think of me ? Are you being a good boy? Are you missing me? Do you love me ?"},{"label":"ham","message":"Great! How is the office today?"},{"label":"ham","message":"It's cool, we can last a little while. Getting more any time soon?"},{"label":"ham","message":":-( sad puppy noise"},{"label":"ham","message":"Yes its possible but dint try. Pls dont tell to any one k"},{"label":"ham","message":"Anyway holla at me whenever you're around because I need an excuse to go creep on people in sarasota"},{"label":"ham","message":"Where you. What happen"},{"label":"ham","message":"I was gonna ask you lol but i think its at 7"},{"label":"spam","message":"Ur cash-balance is currently 500 pounds - to maximize ur cash-in now send GO to 86688 only 150p\/meg. CC: 08718720201 HG\/Suite342\/2lands Row\/W1j6HL"},{"label":"spam","message":"PRIVATE! Your 2003 Account Statement for shows 800 un-redeemed S.I.M. points. Call 08715203685 Identifier Code:4xx26 Expires 13\/10\/04"},{"label":"ham","message":"Go chase after her and run her over while she's crossing the street"},{"label":"spam","message":"I'd like to tell you my deepest darkest fantasies. Call me 09094646631 just 60p\/min. To stop texts call 08712460324 (nat rate)"},{"label":"ham","message":"Is there coming friday is leave for pongal?do you get any news from your work place."},{"label":"ham","message":"Hey... Very inconvenient for your sis a not huh?"},{"label":"ham","message":"Ok i vl..do u know i got adsense approved.."},{"label":"ham","message":"* Was really good to see you the other day dudette, been missing you!"},{"label":"ham","message":"I want to go to perumbavoor"},{"label":"ham","message":"How many times i told in the stage all use to laugh. You not listen aha."},{"label":"spam","message":"You won't believe it but it's true. It's Incredible Txts! Reply G now to learn truly amazing things that will blow your mind. From O2FWD only 18p\/txt"},{"label":"ham","message":"(You didn't hear it from me)"},{"label":"ham","message":"Thanks for being there for me just to talk to on saturday. You are very dear to me. I cherish having you as a brother and role model."},{"label":"ham","message":"Pls clarify back if an open return ticket that i have can be preponed for me to go back to kerala."},{"label":"spam","message":"Natalie (20\/F) is inviting you to be her friend. Reply YES-165 or NO-165 See her: www.SMS.ac\/u\/natalie2k9 STOP? Send STOP FRND to 62468"},{"label":"ham","message":"She ran off with a younger man. we will make pretty babies together :)"},{"label":"spam","message":"Jamster! To get your free wallpaper text HEART to 88888 now! T&C apply. 16 only. Need Help? Call 08701213186."},{"label":"ham","message":"O ic lol. Should play 9 doors sometime yo"},{"label":"ham","message":"Dunno, my dad said he coming home 2 bring us out 4 lunch. Yup i go w u lor. I call u when i reach school lor..."},{"label":"ham","message":"We have sent JD for Customer Service cum Accounts Executive to ur mail id, For details contact us"},{"label":"ham","message":"Desires- u going to doctor 4 liver. And get a bit stylish. Get ur hair managed. Thats it."},{"label":"ham","message":"Hmmm.still we dont have opener?"},{"label":"ham","message":"Yeah so basically any time next week you can get away from your mom & get up before 3"},{"label":"ham","message":"Edison has rightly said, \"A fool can ask more questions than a wise man can answer\" Now you know why all of us are speechless during ViVa.. GM,GN,GE,GNT:-)"},{"label":"ham","message":"I will vote for wherever my heart guides me"},{"label":"ham","message":"With my sis lor... We juz watched italian job."},{"label":"ham","message":"Tick, tick, tick .... Where are you ? I could die of loneliness you know ! *pouts* *stomps feet* I need you ..."},{"label":"ham","message":"Lmao you know me so well..."},{"label":"spam","message":"Double Mins & Double Txt & 1\/2 price Linerental on Latest Orange Bluetooth mobiles. Call MobileUpd8 for the very latest offers. 08000839402 or call2optout\/LF56"},{"label":"ham","message":"Am on a train back from nortpton so i'm afraid not! I'm staying skyving off today ho ho! Will be around wednesday though. Do you fancy the comedy club this week by the way?"},{"label":"ham","message":"Goodnight da thangam I really miss u dear."},{"label":"ham","message":"Hey next sun 1030 there's a basic yoga course... at bugis... We can go for that... Pilates intro next sat.... Tell me what time you r free"},{"label":"ham","message":"Geeeee ... Your internet is really bad today, eh ?"},{"label":"spam","message":"Free video camera phones with Half Price line rental for 12 mths and 500 cross ntwk mins 100 txts. Call MobileUpd8 08001950382 or Call2OptOut\/674"},{"label":"ham","message":"I think i am disturbing her da"},{"label":"ham","message":"Sorry, I'll call you later. I am in meeting sir."},{"label":"ham","message":"Havent stuck at orchard in my dad's car. Going 4 dinner now. U leh? So r they free tonight?"},{"label":"ham","message":"Ok i also wan 2 watch e 9 pm show..."},{"label":"ham","message":"I dunno lei... Like dun haf..."},{"label":"ham","message":"But your brother transfered only <#> + <#> . Pa."},{"label":"ham","message":"I calls you later. Afternoon onwords mtnl service get problem in south mumbai. I can hear you but you cann't listen me."},{"label":"spam","message":"83039 62735=\u00a3450 UK Break AccommodationVouchers terms & conditions apply. 2 claim you mustprovide your claim number which is 15541"},{"label":"ham","message":"Talk to g and x about that"},{"label":"ham","message":"Hai dear friends... This is my new & present number..:) By Rajitha Raj (Ranju)"},{"label":"spam","message":"5p 4 alfie Moon's Children in need song on ur mob. Tell ur m8s. Txt Tone charity to 8007 for Nokias or Poly charity for polys: zed 08701417012 profit 2 charity."},{"label":"ham","message":"As in different styles?"},{"label":"spam","message":"WIN a \u00a3200 Shopping spree every WEEK Starting NOW. 2 play text STORE to 88039. SkilGme. TsCs08714740323 1Winawk! age16 \u00a31.50perweeksub."},{"label":"ham","message":"Gud ni8 dear..slp well..take care..swt dreams..Muah.."},{"label":"ham","message":"I want to sent <#> mesages today. Thats y. Sorry if i hurts"},{"label":"spam","message":"This is the 2nd attempt to contract U, you have won this weeks top prize of either \u00a31000 cash or \u00a3200 prize. Just call 09066361921"},{"label":"ham","message":"Well, i'm glad you didn't find it totally disagreeable ... Lol"},{"label":"ham","message":"Guy, no flash me now. If you go call me, call me. How madam. Take care oh."},{"label":"spam","message":"Do you want a New Nokia 3510i colour phone DeliveredTomorrow? With 300 free minutes to any mobile + 100 free texts + Free Camcorder reply or call 08000930705."},{"label":"ham","message":"Mark works tomorrow. He gets out at 5. His work is by your house so he can meet u afterwards."},{"label":"ham","message":"\"Keep ur problems in ur heart, b'coz nobody will fight for u. Only u & u have to fight for ur self & win the battle. -VIVEKANAND- G 9t.. SD.."},{"label":"ham","message":"Yeah, give me a call if you've got a minute"},{"label":"ham","message":"\"HI BABE UAWAKE?FEELLIKW SHIT.JUSTFOUND OUT VIA ALETTER THATMUM GOTMARRIED 4thNOV.BEHIND OURBACKS \u0096 FUCKINNICE!SELFISH,DEVIOUSBITCH.ANYWAY,I\u0092L CALL U\""},{"label":"ham","message":"Amazing : If you rearrange these letters it gives the same meaning... Dormitory = Dirty room Astronomer = Moon starer The eyes = They see Election results = Lies lets recount Mother-in-law = Woman Hitler Eleven plus two =Twelve plus one Its Amazing... !:-)"},{"label":"ham","message":"Aiya we discuss later lar... Pick \u00fc up at 4 is it?"},{"label":"ham","message":"Hey happy birthday..."},{"label":"ham","message":"Sorry i missed your call. Can you please call back."},{"label":"ham","message":"Omg if its not one thing its another. My cat has worms :\/ when does this bad day end?"},{"label":"ham","message":"Good morning, im suffering from fever and dysentry ..will not be able to come to office today."},{"label":"ham","message":"I wont do anything de."},{"label":"ham","message":"What type of stuff do you sing?"},{"label":"ham","message":"St andre, virgil's cream"},{"label":"ham","message":"No no. I will check all rooms befor activities"},{"label":"ham","message":"My fri ah... Okie lor,goin 4 my drivin den go shoppin after tt..."},{"label":"ham","message":"Gokila is talking with you aha:)"},{"label":"ham","message":"Hi Shanil,Rakhesh here.thanks,i have exchanged the uncut diamond stuff.leaving back. Excellent service by Dino and Prem."},{"label":"ham","message":"K.k.this month kotees birthday know?"},{"label":"ham","message":"But i'm really really broke oh. No amount is too small even <#>"},{"label":"ham","message":"Sorry about that this is my mates phone and i didnt write it love Kate"},{"label":"spam","message":"TheMob>Hit the link to get a premium Pink Panther game, the new no. 1 from Sugababes, a crazy Zebra animation or a badass Hoody wallpaper-all 4 FREE!"},{"label":"ham","message":"Ah, well that confuses things, doesnt it? I thought was friends with now. Maybe i did the wrong thing but i already sort of invited -tho he may not come cos of money."},{"label":"ham","message":"Aight, call me once you're close"},{"label":"ham","message":"Nope thats fine. I might have a nap tho!"},{"label":"spam","message":"This msg is for your mobile content order It has been resent as previous attempt failed due to network error Queries to customersqueries@netvision.uk.com"},{"label":"ham","message":"In other news after hassling me to get him weed for a week andres has no money. HAUGHAIGHGTUJHYGUJ"},{"label":"ham","message":"A Boy loved a gal. He propsd bt she didnt mind. He gv lv lttrs, Bt her frnds threw thm. Again d boy decided 2 aproach d gal , dt time a truck was speeding towards d gal. Wn it was about 2 hit d girl,d boy ran like hell n saved her. She asked 'hw cn u run so fast?' D boy replied \"Boost is d secret of my energy\" n instantly d girl shouted \"our energy\" n Thy lived happily 2gthr drinking boost evrydy Moral of d story:- I hv free msgs:D;): gud ni8"},{"label":"ham","message":"I wnt to buy a BMW car urgently..its vry urgent.but hv a shortage of <#> Lacs.there is no source to arng dis amt. <#> lacs..thats my prob"},{"label":"ham","message":"Ding me on ya break fassyole! Blacko from londn"},{"label":"ham","message":"I REALLY NEED 2 KISS U I MISS U MY BABY FROM UR BABY 4EVA"},{"label":"ham","message":"The sign of maturity is not when we start saying big things.. But actually it is, when we start understanding small things... *HAVE A NICE EVENING* BSLVYL"},{"label":"ham","message":"Oh you got many responsibilities."},{"label":"spam","message":"You have 1 new message. Please call 08715205273"},{"label":"ham","message":"I've reached sch already..."},{"label":"spam","message":"December only! Had your mobile 11mths+? You are entitled to update to the latest colour camera mobile for Free! Call The Mobile Update VCo FREE on 08002986906"},{"label":"ham","message":"U definitely need a module from e humanities dis sem izzit? U wan 2 take other modules 1st?"},{"label":"ham","message":"Argh why the fuck is nobody in town ;_;"},{"label":"spam","message":"Get 3 Lions England tone, reply lionm 4 mono or lionp 4 poly. 4 more go 2 www.ringtones.co.uk, the original n best. Tones 3GBP network operator rates apply."},{"label":"ham","message":"Thanks. Fills me with complete calm and reassurance!"},{"label":"ham","message":"Aslamalaikkum....insha allah tohar beeen muht albi mufti mahfuuz...meaning same here...."},{"label":"ham","message":"Are you driving or training?"},{"label":"ham","message":"Lol for real. She told my dad I have cancer"},{"label":"spam","message":"PRIVATE! Your 2003 Account Statement for 078"},{"label":"ham","message":"Oops I did have it, <#> ?"},{"label":"ham","message":"\"NOT ENUFCREDEIT TOCALL.SHALL ILEAVE UNI AT 6 +GET A BUS TO YOR HOUSE?\""},{"label":"ham","message":"Hi Chikku, send some nice msgs"},{"label":"ham","message":"He is impossible to argue with and he always treats me like his sub, like he never released me ... Which he did and I will remind him of that if necessary"},{"label":"ham","message":"After my work ah... Den 6 plus lor... U workin oso rite... Den go orchard lor, no other place to go liao..."},{"label":"ham","message":"To the wonderful Okors, have a great month. We cherish you guys and wish you well each day. MojiBiola"},{"label":"ham","message":"Cuz ibored. And don wanna study"},{"label":"ham","message":"Wot about on wed nite I am 3 then but only til 9!"},{"label":"ham","message":"Rose for red,red for blood,blood for heart,heart for u. But u for me.... Send tis to all ur friends.. Including me.. If u like me.. If u get back, 1-u r poor in relation! 2-u need some 1 to support 3-u r frnd 2 many 4-some1 luvs u 5+- some1 is praying god to marry u.:-) try it...."},{"label":"ham","message":"Any way where are you and what doing."},{"label":"ham","message":"That sucks. I'll go over so u can do my hair. You'll do it free right?"},{"label":"ham","message":"it's still not working. And this time i also tried adding zeros. That was the savings. The checking is <#>"},{"label":"ham","message":"Hmm... Dunno leh, mayb a bag 4 goigng out dat is not too small. Or jus anything except perfume, smth dat i can keep."},{"label":"ham","message":"Sday only joined.so training we started today:)"},{"label":"ham","message":"Sorry * was at the grocers."},{"label":"ham","message":"There are some nice pubs near here or there is Frankie n Bennys near the warner cinema?"},{"label":"spam","message":"YOU VE WON! Your 4* Costa Del Sol Holiday or \u00a35000 await collection. Call 09050090044 Now toClaim. SAE, TC s, POBox334, Stockport, SK38xh, Cost\u00a31.50\/pm, Max10mins"},{"label":"ham","message":"Yup... I havent been there before... You want to go for the yoga? I can call up to book"},{"label":"ham","message":"Oh shut it. Omg yesterday I had a dream that I had 2 kids both boys. I was so pissed. Not only about the kids but them being boys. I even told mark in my dream that he was changing diapers cause I'm not getting owed in the face."},{"label":"ham","message":"Yeah I imagine he would be really gentle. Unlike the other docs who treat their patients like turkeys."},{"label":"spam","message":"FREE for 1st week! No1 Nokia tone 4 ur mobile every week just txt NOKIA to 8077 Get txting and tell ur mates. www.getzed.co.uk POBox 36504 W45WQ 16+ norm150p\/tone"},{"label":"ham","message":"Now that you have started dont stop. Just pray for more good ideas and anything i see that can help you guys i.ll forward you a link."},{"label":"ham","message":"Hi darlin im on helens fone im gonna b up the princes 2 nite please come up tb love Kate"},{"label":"ham","message":"I'm in office now da:)where are you?"},{"label":"ham","message":"Aiyar u so poor thing... I give u my support k... Jia you! I'll think of u..."},{"label":"ham","message":"Oh unintentionally not bad timing. Great. Fingers the trains play along! Will give fifteen min warning."},{"label":"spam","message":"Get your garden ready for summer with a FREE selection of summer bulbs and seeds worth \u00a333:50 only with The Scotsman this Saturday. To stop go2 notxt.co.uk"},{"label":"ham","message":"K..then come wenever u lik to come and also tel vikky to come by getting free time..:-)"},{"label":"ham","message":"Pls call me da. What happen."},{"label":"ham","message":"Happy new year to u and ur family...may this new year bring happiness , stability and tranquility to ur vibrant colourful life:):)"},{"label":"ham","message":"No problem with the renewal. I.ll do it right away but i dont know his details."},{"label":"ham","message":"Idk. I'm sitting here in a stop and shop parking lot right now bawling my eyes out because i feel like i'm a failure in everything. Nobody wants me and now i feel like i'm failing you."},{"label":"ham","message":"Haven't left yet so probably gonna be here til dinner"},{"label":"ham","message":"Like <#> , same question"},{"label":"ham","message":"MY NEW YEARS EVE WAS OK. I WENT TO A PARTY WITH MY BOYFRIEND. WHO IS THIS SI THEN HEY"},{"label":"ham","message":"Sir, I need Velusamy sir's date of birth and company bank facilities details."},{"label":"ham","message":"K k:) sms chat with me."},{"label":"ham","message":"I will come with karnan car. Please wait till 6pm will directly goto doctor."},{"label":"ham","message":"No but the bluray player can"},{"label":"ham","message":"Ok... Then r we meeting later?"},{"label":"ham","message":"Lol no. I just need to cash in my nitros. Hurry come on before I crash out!"},{"label":"ham","message":"Just send a text. We'll skype later."},{"label":"ham","message":"Ok leave no need to ask"},{"label":"spam","message":"Congrats 2 mobile 3G Videophones R yours. call 09063458130 now! videochat wid ur mates, play java games, Dload polypH music, noline rentl. bx420. ip4. 5we. 150p"},{"label":"ham","message":"\u00dc still got lessons? \u00dc in sch?"},{"label":"ham","message":"Y she dun believe leh? I tot i told her it's true already. I thk she muz c us tog then she believe."},{"label":"ham","message":"Oh did you charge camera"},{"label":"ham","message":"I\u2018ve got some salt, you can rub it in my open wounds if you like!"},{"label":"ham","message":"Now i'm going for lunch."},{"label":"ham","message":"I'm in school now n i'll be in da lab doing some stuff give me a call when \u00fc r done."},{"label":"ham","message":"Oh k. . I will come tomorrow"},{"label":"ham","message":"Aight, text me tonight and we'll see what's up"},{"label":"ham","message":"U 2."},{"label":"ham","message":"Water logging in desert. Geoenvironmental implications."},{"label":"ham","message":"Raji..pls do me a favour. Pls convey my Birthday wishes to Nimya. Pls. Today is her birthday."},{"label":"ham","message":"Company is very good.environment is terrific and food is really nice:)"},{"label":"ham","message":"Very strange. and are watching the 2nd one now but i'm in bed. Sweet dreams, miss u"},{"label":"spam","message":"SMS AUCTION - A BRAND NEW Nokia 7250 is up 4 auction today! Auction is FREE 2 join & take part! Txt NOKIA to 86021 now!"},{"label":"ham","message":"Hi hope u r both ok, he said he would text and he hasn't, have u seen him, let me down gently please"},{"label":"ham","message":"Babe! I fucking love you too !! You know? Fuck it was so good to hear your voice. I so need that. I crave it. I can't get enough. I adore you, Ahmad *kisses*"},{"label":"ham","message":"K sure am in my relatives home. Sms me de. Pls:-)"},{"label":"ham","message":"I sent them. Do you like?"},{"label":"ham","message":"Fuuuuck I need to stop sleepin, sup"},{"label":"ham","message":"I'm in town now so i'll jus take mrt down later."},{"label":"ham","message":"I just cooked a rather nice salmon a la you"},{"label":"ham","message":"I uploaded mine to Facebook"},{"label":"ham","message":"WHAT TIME U WRKIN?"},{"label":"ham","message":"Okie"},{"label":"spam","message":"ree entry in 2 a weekly comp for a chance to win an ipod. Txt POD to 80182 to get entry (std txt rate) T&C's apply 08452810073 for details 18+"},{"label":"spam","message":"Our records indicate u maybe entitled to 5000 pounds in compensation for the Accident you had. To claim 4 free reply with CLAIM to this msg. 2 stop txt STOP"},{"label":"ham","message":"Sorry, I'll call later"},{"label":"ham","message":"Oh oh... Den muz change plan liao... Go back have to yan jiu again..."},{"label":"ham","message":"It's wylie, you in tampa or sarasota?"},{"label":"ham","message":"Ok... Take ur time n enjoy ur dinner..."},{"label":"ham","message":"Darren was saying dat if u meeting da ge den we dun meet 4 dinner. Cos later u leave xy will feel awkward. Den u meet him 4 lunch lor."},{"label":"spam","message":"Spook up your mob with a Halloween collection of a logo & pic message plus a free eerie tone, txt CARD SPOOK to 8007 zed 08701417012150p per logo\/pic"},{"label":"ham","message":"I like cheap! But i\u2018m happy to splash out on the wine if it makes you feel better.."},{"label":"ham","message":"She.s fine. I have had difficulties with her phone. It works with mine. Can you pls send her another friend request."},{"label":"ham","message":"Ugh my leg hurts. Musta overdid it on mon."},{"label":"spam","message":"Call Germany for only 1 pence per minute! Call from a fixed line via access number 0844 861 85 85. No prepayment. Direct access! www.telediscount.co.uk"},{"label":"spam","message":"YOU VE WON! Your 4* Costa Del Sol Holiday or \u00a35000 await collection. Call 09050090044 Now toClaim. SAE, TC s, POBox334, Stockport, SK38xh, Cost\u00a31.50\/pm, Max10mins"},{"label":"ham","message":"WOT STUDENT DISCOUNT CAN U GET ON BOOKS?"},{"label":"ham","message":"Me fine..absolutly fine"},{"label":"ham","message":"How come she can get it? Should b quite diff to guess rite..."},{"label":"spam","message":"Had your mobile 11mths ? Update for FREE to Oranges latest colour camera mobiles & unlimited weekend calls. Call Mobile Upd8 on freefone 08000839402 or 2StopTxt"},{"label":"ham","message":"I will reach ur home in <#> minutes"},{"label":"ham","message":"Babe, I'm answering you, can't you see me ? Maybe you'd better reboot YM ... I got the photo ... It's great !"},{"label":"ham","message":"Hi.what you think about match?"},{"label":"ham","message":"I know you are thinkin malaria. But relax, children cant handle malaria. She would have been worse and its gastroenteritis. If she takes enough to replace her loss her temp will reduce. And if you give her malaria meds now she will just vomit. Its a self limiting illness she has which means in a few days it will completely stop"},{"label":"ham","message":"Dai i downloaded but there is only exe file which i can only run that exe after installing."},{"label":"ham","message":"It is only yesterday true true."},{"label":"ham","message":"K.k.how is your business now?"},{"label":"ham","message":"3 pa but not selected."},{"label":"spam","message":"Natalja (25\/F) is inviting you to be her friend. Reply YES-440 or NO-440 See her: www.SMS.ac\/u\/nat27081980 STOP? Send STOP FRND to 62468"},{"label":"ham","message":"I keep ten rs in my shelf:) buy two egg."},{"label":"ham","message":"I am late. I will be there at"},{"label":"ham","message":"Well thats nice. Too bad i cant eat it"},{"label":"ham","message":"I accidentally brought em home in the box"},{"label":"ham","message":"Pls she needs to dat slowly or she will vomit more."},{"label":"ham","message":"I have to take exam with in march 3"},{"label":"ham","message":"Jane babes not goin 2 wrk, feel ill after lst nite. Foned in already cover 4 me chuck.:-)"},{"label":"ham","message":"5 nights...We nt staying at port step liao...Too ex"},{"label":"ham","message":"If I die I want u to have all my stuffs."},{"label":"ham","message":"\"OH FUCK. JUSWOKE UP IN A BED ON A BOATIN THE DOCKS. SLEPT WID 25 YEAR OLD. SPINOUT! GIV U DA GOSSIP L8R. XXX\""},{"label":"ham","message":"Smile in Pleasure Smile in Pain Smile when trouble pours like Rain Smile when sum1 Hurts U Smile becoz SOMEONE still Loves to see u Smiling!!"},{"label":"ham","message":"Prabha..i'm soryda..realy..frm heart i'm sory"},{"label":"ham","message":"I re-met alex nichols from middle school and it turns out he's dealing!"},{"label":"spam","message":"PRIVATE! Your 2003 Account Statement for shows 800 un-redeemed S. I. M. points. Call 08715203656 Identifier Code: 42049 Expires 26\/10\/04"},{"label":"ham","message":"It means u could not keep ur words."},{"label":"ham","message":"Nope, I'm still in the market"},{"label":"ham","message":"I realise you are a busy guy and i'm trying not to be a bother. I have to get some exams outta the way and then try the cars. Do have a gr8 day"},{"label":"spam","message":"YOU ARE CHOSEN TO RECEIVE A \u00a3350 AWARD! Pls call claim number 09066364311 to collect your award which you are selected to receive as a valued mobile customer."},{"label":"ham","message":"Hey what how about your project. Started aha da."},{"label":"ham","message":"Ok cool. See ya then."},{"label":"ham","message":"Am on the uworld site. Am i buying the qbank only or am i buying it with the self assessment also?"},{"label":"ham","message":"Your opinion about me? 1. Over 2. Jada 3. Kusruthi 4. Lovable 5. Silent 6. Spl character 7. Not matured 8. Stylish 9. Simple Pls reply.."},{"label":"spam","message":"Someonone you know is trying to contact you via our dating service! To find out who it could be call from your mobile or landline 09064015307 BOX334SK38ch"},{"label":"ham","message":"Yeah I can still give you a ride"},{"label":"ham","message":"Jay wants to work out first, how's 4 sound?"},{"label":"ham","message":"Gud gud..k, chikku tke care.. sleep well gud nyt"},{"label":"ham","message":"Its a part of checking IQ"},{"label":"ham","message":"Hmm thinking lor..."},{"label":"ham","message":"Of course ! Don't tease me ... You know I simply must see ! *grins* ... Do keep me posted my prey ... *loving smile* *devouring kiss*"},{"label":"ham","message":"thanks for the temales it was wonderful. Thank. Have a great week."},{"label":"ham","message":"Thank you princess! I want to see your nice juicy booty..."},{"label":"ham","message":"Haven't eaten all day. I'm sitting here staring at this juicy pizza and I can't eat it. These meds are ruining my life."},{"label":"ham","message":"Gud ni8 dear..slp well..take care..swt dreams..Muah.."},{"label":"ham","message":"U come n search tat vid..not finishd.."},{"label":"ham","message":"K I'm leaving soon, be there a little after 9"},{"label":"spam","message":"Urgent! Please call 09061213237 from a landline. \u00a35000 cash or a 4* holiday await collection. T &Cs SAE PO Box 177 M227XY. 16+"},{"label":"ham","message":"Yeah work is fine, started last week, all the same stuff as before, dull but easy and guys are fun!"},{"label":"ham","message":"You do your studies alone without anyones help. If you cant no need to study."},{"label":"ham","message":"Please tell me not all of my car keys are in your purse"},{"label":"ham","message":"I didnt get anything da"},{"label":"ham","message":"Ok... Sweet dreams..."},{"label":"ham","message":"Well she's in for a big surprise!"},{"label":"ham","message":"As usual..iam fine, happy & doing well..:)"},{"label":"ham","message":"1 in cbe. 2 in chennai."},{"label":"ham","message":"Can help u swoop by picking u up from wherever ur other birds r meeting if u want."},{"label":"ham","message":"If anyone calls for a treadmill say you'll buy it. Make sure its working. I found an ad on Craigslist selling for $ <#> ."},{"label":"ham","message":"I absolutely LOVE South Park! I only recently started watching the office."},{"label":"ham","message":"Did you see that film:)"},{"label":"ham","message":"Pls speak with me. I wont ask anything other then you friendship."},{"label":"ham","message":"Storming msg: Wen u lift d phne, u say \"HELLO\" Do u knw wt is d real meaning of HELLO?? . . . It's d name of a girl..! . . . Yes.. And u knw who is dat girl?? \"Margaret Hello\" She is d girlfrnd f Grahmbell who invnted telphone... . . . . Moral:One can 4get d name of a person, bt not his girlfrnd... G o o d n i g h t . . .@"},{"label":"ham","message":"Gud ni8.swt drms.take care"},{"label":"ham","message":"HI DARLIN ITS KATE ARE U UP FOR DOIN SOMETHIN TONIGHT? IM GOING TO A PUB CALLED THE SWAN OR SOMETHING WITH MY PARENTS FOR ONE DRINK SO PHONE ME IF U CAN"},{"label":"ham","message":"Anything lar then \u00fc not going home 4 dinner?"},{"label":"ham","message":"\"ER, ENJOYIN INDIANS AT THE MO..yeP. SaLL gOoD HehE ;> hows bout u shexy? Pete Xx\""},{"label":"spam","message":"If you don't, your prize will go to another customer. T&C at www.t-c.biz 18+ 150p\/min Polo Ltd Suite 373 London W1J 6HL Please call back if busy"},{"label":"ham","message":"Did u fix the teeth?if not do it asap.ok take care."},{"label":"ham","message":"So u wan 2 come for our dinner tonight a not?"},{"label":"ham","message":"Hello.How u doing?What u been up 2?When will u b moving out of the flat, cos I will need to arrange to pick up the lamp, etc. Take care. Hello caroline!"},{"label":"ham","message":"Its too late:)but its k.wish you the same."},{"label":"ham","message":"Hi. Hope ur day * good! Back from walk, table booked for half eight. Let me know when ur coming over."},{"label":"ham","message":"Oh yeah clearly it's my fault"},{"label":"ham","message":"Dunno leh cant remember mayb lor. So wat time r we meeting tmr?"},{"label":"ham","message":"Best msg: It's hard to be with a person, when u know that one more step foward will make u fall in love.. & One step back can ruin ur friendship.. good night:-) ..."},{"label":"spam","message":"URGENT! Your Mobile number has been awarded with a \u00a32000 prize GUARANTEED. Call 09061790126 from land line. Claim 3030. Valid 12hrs only 150ppm"},{"label":"ham","message":"Helloooo... Wake up..! \"Sweet\" \"morning\" \"welcomes\" \"You\" \"Enjoy\" \"This Day\" \"with full of joy\".. \"GUD MRNG\"."},{"label":"ham","message":"Vikky, come around <TIME> .."},{"label":"ham","message":"And how you will do that, princess? :)"},{"label":"ham","message":"I have gone into get info bt dont know what to do"},{"label":"ham","message":"Yeah, probably here for a while"},{"label":"ham","message":"Sent me ur email id soon"},{"label":"spam","message":"URGENT! You have won a 1 week FREE membership in our \u00a3100,000 Prize Jackpot! Txt the word: CLAIM to No: 81010 T&C www.dbuk.net LCCLTD POBOX 4403LDNW1A7RW18"},{"label":"ham","message":"I'm still pretty weak today .. Bad day ?"},{"label":"ham","message":"Hey ! Don't forget ... You are MINE ... For ME ... My possession ... MY property ... MMM ... *childish smile* ..."},{"label":"ham","message":"An excellent thought by a misundrstud frnd: I knw u hate me bt the day wen u'll knw the truth u'll hate urself:-( Gn:-)"},{"label":"ham","message":"Hey! Congrats 2u2. id luv 2 but ive had 2 go home!"},{"label":"ham","message":"Dear where you. Call me"},{"label":"ham","message":"Xy trying smth now. U eat already? We havent..."},{"label":"spam","message":"Urgent! Please call 09061213237 from landline. \u00a35000 cash or a luxury 4* Canary Islands Holiday await collection. T&Cs SAE PO Box 177. M227XY. 150ppm. 16+"},{"label":"ham","message":"I donno its in your genes or something"},{"label":"spam","message":"XMAS iscoming & ur awarded either \u00a3500 CD gift vouchers & free entry 2 r \u00a3100 weekly draw txt MUSIC to 87066 TnC www.Ldew.com1win150ppmx3age16subscription"},{"label":"ham","message":"Alex says he's not ok with you not being ok with it"},{"label":"ham","message":"Are u coming to the funeral home"},{"label":"ham","message":"My darling sister. How are you doing. When's school resuming. Is there a minimum wait period before you reapply? Do take care"},{"label":"ham","message":"I.ll hand her my phone to chat wit u"},{"label":"ham","message":"Well good morning mr . Hows london treatin' ya treacle?"},{"label":"ham","message":"I can't make it tonight"},{"label":"ham","message":"At WHAT TIME should i come tomorrow"},{"label":"ham","message":"About <#> bucks. The banks fees are fixed. Better to call the bank and find out."},{"label":"ham","message":"I can. But it will tell quite long, cos i haven't finish my film yet..."},{"label":"ham","message":"Pls ask macho how much is budget for bb bold 2 is cos i saw a new one for <#> dollars."},{"label":"ham","message":"\"Hi missed your Call and my mumHas beendropping red wine all over theplace! what is your adress?\""},{"label":"ham","message":"Ill be at yours in about 3 mins but look out for me"},{"label":"ham","message":"What you did in leave."},{"label":"ham","message":"I'm coming back on Thursday. Yay. Is it gonna be ok to get the money. Cheers. Oh yeah and how are you. Everything alright. Hows school. Or do you call it work now"},{"label":"ham","message":"Jolly good! By the way, will give u tickets for sat eve 7.30. Speak before then x"},{"label":"ham","message":"yeah, that's what I was thinking"},{"label":"ham","message":"K.k:)i'm going to tirunelvali this week to see my uncle ..i already spend the amount by taking dress .so only i want money.i will give it on feb 1"},{"label":"ham","message":"Here got ur favorite oyster... N got my favorite sashimi... Ok lar i dun say already... Wait ur stomach start rumbling..."},{"label":"ham","message":"My sister going to earn more than me da."},{"label":"spam","message":"Get the official ENGLAND poly ringtone or colour flag on yer mobile for tonights game! Text TONE or FLAG to 84199. Optout txt ENG STOP Box39822 W111WX \u00a31.50"},{"label":"ham","message":"Hahaha..use your brain dear"},{"label":"ham","message":"Jus finish watching tv... U?"},{"label":"ham","message":"K, fyi I'm back in my parents' place in south tampa so I might need to do the deal somewhere else"},{"label":"ham","message":"Good morning, my Love ... I go to sleep now and wish you a great day full of feeling better and opportunity ... You are my last thought babe, I LOVE YOU *kiss*"},{"label":"ham","message":"Kothi print out marandratha."},{"label":"ham","message":"But we havent got da topic yet rite?"},{"label":"ham","message":"Ok no problem... Yup i'm going to sch at 4 if i rem correctly..."},{"label":"ham","message":"Thanks, I'll keep that in mind"},{"label":"ham","message":"Aah bless! How's your arm?"},{"label":"ham","message":"Dear Sir,Salam Alaikkum.Pride and Pleasure meeting you today at the Tea Shop.We are pleased to send you our contact number at Qatar.Rakhesh an Indian.Pls save our Number.Respectful Regards."},{"label":"ham","message":"Gal n boy walking in d park. gal-can i hold ur hand? boy-y? do u think i would run away? gal-no, jst wana c how it feels walking in heaven with an prince..GN:-)"},{"label":"ham","message":"What makes you most happy?"},{"label":"ham","message":"Wishing you a wonderful week."},{"label":"ham","message":"Sweet heart how are you?"},{"label":"ham","message":"Sir, waiting for your letter."},{"label":"ham","message":"Dude im no longer a pisces. Im an aquarius now."},{"label":"ham","message":"X course it 2yrs. Just so her messages on messenger lik you r sending me"},{"label":"ham","message":"I think steyn surely get one wicket:)"},{"label":"ham","message":"Neither [in sterm voice] - i'm studying. All fine with me! Not sure the thing will be resolved, tho. Anyway. Have a fab hols"},{"label":"ham","message":"Garbage bags, eggs, jam, bread, hannaford wheat chex"},{"label":"ham","message":"No. It's not pride. I'm almost <#> years old and shouldn't be takin money from my kid. You're not supposed to have to deal with this stuff. This is grownup stuff--why i don't tell you."},{"label":"ham","message":"Sounds better than my evening im just doing my costume. Im not sure what time i finish tomorrow but i will txt you at the end."},{"label":"ham","message":"My birthday is on feb <#> da. ."},{"label":"ham","message":"So when do you wanna gym?"},{"label":"ham","message":"You'd like that wouldn't you? Jerk!"},{"label":"ham","message":"Are u awake? Is there snow there?"},{"label":"ham","message":"And of course you should make a stink!"},{"label":"spam","message":"u r subscribed 2 TEXTCOMP 250 wkly comp. 1st wk?s free question follows, subsequent wks charged@150p\/msg.2 unsubscribe txt STOP 2 84128,custcare 08712405020"},{"label":"ham","message":"No go. No openings for that room 'til after thanksgiving without an upcharge."},{"label":"ham","message":"When you guys planning on coming over?"},{"label":"ham","message":"Wat \u00fc doing now?"},{"label":"ham","message":"My Parents, My Kidz, My Friends n My Colleagues. All screaming.. SURPRISE !! and I was waiting on the sofa.. ... ..... ' NAKED...!"},{"label":"ham","message":"No sir. That's why i had an 8-hr trip on the bus last week. Have another audition next wednesday but i think i might drive this time."},{"label":"ham","message":"Do I? I thought I put it back in the box"},{"label":"ham","message":"I'm home..."},{"label":"ham","message":"No one interested. May be some business plan."},{"label":"ham","message":"Yup it's at paragon... I havent decided whether 2 cut yet... Hee..."},{"label":"ham","message":"Good morning princess! Have a great day!"},{"label":"ham","message":"Guai... \u00dc shd haf seen him when he's naughty... \u00dc so free today? Can go jogging..."},{"label":"ham","message":"Aiyo cos i sms \u00fc then \u00fc neva reply so i wait 4 \u00fc to reply lar. I tot \u00fc havent finish ur lab wat."},{"label":"ham","message":"Living is very simple.. Loving is also simple.. Laughing is too simple.. Winning is tooo simple.. But, Being 'SIMPLE' is very difficult...;-) :-)"},{"label":"ham","message":"Tell me something. Thats okay."},{"label":"ham","message":"Ok"},{"label":"ham","message":"Hmm. Shall i bring a bottle of wine to keep us amused? Just joking! I'll still bring a bottle. Red or white? See you tomorrow"},{"label":"ham","message":"This is ur face test ( 1 2 3 4 5 6 7 8 9 <#> ) select any number i will tell ur face astrology.... am waiting. quick reply..."},{"label":"ham","message":"Hey, iouri gave me your number, I'm wylie, ryan's friend"},{"label":"ham","message":"Yep get with the program. You're slacking."},{"label":"ham","message":"I'm in inside office..still filling forms.don know when they leave me."},{"label":"ham","message":"I think your mentor is , but not 100 percent sure."},{"label":"spam","message":"Call 09095350301 and send our girls into erotic ecstacy. Just 60p\/min. To stop texts call 08712460324 (nat rate)"},{"label":"spam","message":"Camera - You are awarded a SiPix Digital Camera! call 09061221066 fromm landline. Delivery within 28 days."},{"label":"spam","message":"A \u00a3400 XMAS REWARD IS WAITING FOR YOU! Our computer has randomly picked you from our loyal mobile customers to receive a \u00a3400 reward. Just call 09066380611"},{"label":"ham","message":"Just trying to figure out when I'm suppose to see a couple different people this week. We said we'd get together but I didn't set dates"},{"label":"spam","message":"IMPORTANT MESSAGE. This is a final contact attempt. You have important messages waiting out our customer claims dept. Expires 13\/4\/04. Call 08717507382 NOW!"},{"label":"ham","message":"Hi mom we might be back later than <#>"},{"label":"spam","message":"dating:i have had two of these. Only started after i sent a text to talk sport radio last week. Any connection do you think or coincidence?"},{"label":"ham","message":"Lol, oh you got a friend for the dog ?"},{"label":"ham","message":"Ok., is any problem to u frm him? Wats matter?"},{"label":"ham","message":"K I'll head out in a few mins, see you there"},{"label":"ham","message":"Do u konw waht is rael FRIENDSHIP Im gving yuo an exmpel: Jsut ese tihs msg.. Evrey splleing of tihs msg is wrnog.. Bt sitll yuo can raed it wihtuot ayn mitsake.. GOODNIGHT & HAVE A NICE SLEEP..SWEET DREAMS.."},{"label":"ham","message":"I cant pick the phone right now. Pls send a message"},{"label":"ham","message":"I don't want you to leave. But i'm barely doing what i can to stay sane. fighting with you constantly isn't helping."},{"label":"spam","message":"The current leading bid is 151. To pause this auction send OUT. Customer Care: 08718726270"},{"label":"spam","message":"Free entry to the gr8prizes wkly comp 4 a chance to win the latest Nokia 8800, PSP or \u00a3250 cash every wk.TXT GREAT to 80878 http\/\/www.gr8prizes.com 08715705022"},{"label":"ham","message":"Somebody set up a website where you can play hold em using eve online spacebucks"},{"label":"ham","message":"Its sunny in california. The weather's just cool"},{"label":"spam","message":"You have 1 new message. Call 0207-083-6089"},{"label":"ham","message":"I can make it up there, squeezed <#> bucks out of my dad"},{"label":"ham","message":"Good day to You too.Pray for me.Remove the teeth as its painful maintaining other stuff."},{"label":"ham","message":"How are you babes. Hope your doing ok. I had a shit nights sleep. I fell asleep at 5.I\u0092m knackered and i\u0092m dreading work tonight. What are thou upto tonight. X"},{"label":"ham","message":"How do friends help us in problems? They give the most stupid suggestion that Lands us into another problem and helps us forgt the previous problem"},{"label":"ham","message":"I'm at work. Please call"},{"label":"ham","message":"I will be gentle baby! Soon you will be taking all <#> inches deep inside your tight pussy..."},{"label":"ham","message":"NOT MUCH NO FIGHTS. IT WAS A GOOD NITE!!"},{"label":"ham","message":"Ok.ok ok..then..whats ur todays plan"},{"label":"ham","message":"Nt joking seriously i told"},{"label":"ham","message":"Watching ajith film ah?"},{"label":"ham","message":"Ooooooh I forgot to tell u I can get on yoville on my phone"},{"label":"ham","message":"All done, all handed in. Don't know if mega shop in asda counts as celebration but thats what i'm doing!"},{"label":"ham","message":"I dont know exactly could you ask chechi."},{"label":"ham","message":"Dunno lei shd b driving lor cos i go sch 1 hr oni."},{"label":"ham","message":"As in i want custom officer discount oh."},{"label":"ham","message":"That's necessarily respectful"},{"label":"ham","message":"Hi. Hope you had a good day. Have a better night."},{"label":"ham","message":"And he's apparently bffs with carly quick now"},{"label":"ham","message":"HARD BUT TRUE: How much you show & express your love to someone....that much it will hurt when they leave you or you get seperated...!\u9225\u253e??\u3028ud evening..."},{"label":"ham","message":"Babes I think I got ur brolly I left it in English wil bring it in 2mrw 4 u luv Franxx"},{"label":"ham","message":"Hi babe its me thanks for coming even though it didnt go that well!i just wanted my bed! Hope to see you soon love and kisses xxx"},{"label":"ham","message":"So gd got free ice cream... I oso wan..."},{"label":"ham","message":"Pls give her prometazine syrup. 5mls then <#> mins later feed."},{"label":"ham","message":"So how many days since then?"},{"label":"ham","message":"Dear are you angry i was busy dear"},{"label":"ham","message":"Yup he msg me: is tat yijue? Then i tot it's my group mate cos we meeting today mah... I'm askin if \u00fc leaving earlier or wat mah cos mayb \u00fc haf to walk v far..."},{"label":"ham","message":"... Are you in the pub?"},{"label":"ham","message":"There is a first time for everything :)"},{"label":"ham","message":"Daddy, shu shu is looking 4 u... U wan me 2 tell him u're not in singapore or wat?"},{"label":"ham","message":"I ask if u meeting da ge tmr nite..."},{"label":"ham","message":"Gr8. So how do you handle the victoria island traffic. Plus when's the album due"},{"label":"ham","message":"Nite nite pocay wocay luv u more than n e thing 4eva I promise ring u 2morrowxxxx"},{"label":"ham","message":"East coast"},{"label":"ham","message":"You should get more chicken broth if you want ramen unless there's some I don't know about"},{"label":"ham","message":"My slave! I want you to take 2 or 3 pictures of yourself today in bright light on your cell phone! Bright light!"},{"label":"ham","message":"Nope. I just forgot. Will show next week"},{"label":"ham","message":"So how are you really. What are you up to. How's the masters. And so on."},{"label":"ham","message":"I'm at bruce & fowler now but I'm in my mom's car so I can't park (long story)"},{"label":"ham","message":"I dont know oh. Hopefully this month."},{"label":"ham","message":"Hi elaine, is today's meeting confirmed?"},{"label":"ham","message":"Ok k..sry i knw 2 siva..tats y i askd.."},{"label":"ham","message":"Sorry, I'll call later"},{"label":"ham","message":"U horrible gal... U knew dat i was going out wif him yest n u still come n ask me..."},{"label":"ham","message":"Otherwise had part time job na-tuition.."},{"label":"ham","message":"Oh yeah! And my diet just flew out the window"},{"label":"spam","message":"Santa Calling! Would your little ones like a call from Santa Xmas eve? Call 09058094583 to book your time."},{"label":"ham","message":"You didnt complete your gist oh."},{"label":"ham","message":"Er yeah, i will b there at 15:26, sorry! Just tell me which pub\/cafe to sit in and come wen u can"},{"label":"ham","message":"If you can make it any time tonight or whenever you can it's cool, just text me whenever you're around"},{"label":"ham","message":"If I was I wasn't paying attention"},{"label":"ham","message":"Thanx a lot 4 ur help!"},{"label":"ham","message":"You're gonna have to be way more specific than that"},{"label":"ham","message":"Jesus armand really is trying to tell everybody he can find"},{"label":"ham","message":"I'm wif him now buying tix lar..."},{"label":"ham","message":"Mode men or have you left."},{"label":"ham","message":"Am slow in using biola's fne"},{"label":"ham","message":"\"What are youdoing later? Sar xxx\""},{"label":"ham","message":"Hey i've booked the 2 lessons on sun liao..."},{"label":"ham","message":"Thank you. do you generally date the brothas?"},{"label":"ham","message":"By the way, make sure u get train to worc foregate street not shrub hill. Have fun night x"},{"label":"ham","message":"I thought i'd get him a watch, just cos thats the kind of thing u get4an18th. And he loves so much!"},{"label":"spam","message":"You have won a guaranteed 32000 award or maybe even \u00a31000 cash to claim ur award call free on 0800 ..... (18+). Its a legitimat efreefone number wat do u think???"},{"label":"ham","message":"Good morning. At the repair shop--the ONLY reason i'm up at this hour."},{"label":"ham","message":"And that's fine, I got enough bud to last most of the night at least"},{"label":"ham","message":"I am back. Good journey! Let me know if you need any of the receipts. Shall i tell you like the pendent?"},{"label":"ham","message":"So that takes away some money worries"},{"label":"ham","message":"aight we can pick some up, you open before tonight?"},{"label":"spam","message":"Latest News! Police station toilet stolen, cops have nothing to go on!"},{"label":"ham","message":"Sac needs to carry on:)"},{"label":"ham","message":"Just sing HU. I think its also important to find someone female that know the place well preferably a citizen that is also smart to help you navigate through. Even things like choosing a phone plan require guidance. When in doubt ask especially girls."},{"label":"ham","message":"What???? Hello wats talks email address?"},{"label":"ham","message":"Except theres a chick with huge boobs."},{"label":"ham","message":"Im just wondering what your doing right now?"},{"label":"ham","message":"Wishing you a beautiful day. Each moment revealing even more things to keep you smiling. Do enjoy it."},{"label":"spam","message":"\"For the most sparkling shopping breaks from 45 per person; call 0121 2025050 or visit www.shortbreaks.org.uk\""},{"label":"ham","message":"Arun can u transfr me d amt"},{"label":"ham","message":"Sorry, I'll call later"},{"label":"ham","message":"If you hear a loud scream in about <#> minutes its cause my Gyno will be shoving things up me that don't belong :\/"},{"label":"spam","message":"December only! Had your mobile 11mths+? You are entitled to update to the latest colour camera mobile for Free! Call The Mobile Update Co FREE on 08002986906"},{"label":"ham","message":"Ok i thk i got it. Then u wan me 2 come now or wat?"},{"label":"spam","message":"Txt: CALL to No: 86888 & claim your reward of 3 hours talk time to use from your phone now! Subscribe6GBP\/mnth inc 3hrs 16 stop?txtStop www.gamb.tv"},{"label":"ham","message":"U GOIN OUT 2NITE?"},{"label":"ham","message":"I will treasure every moment we spend together..."},{"label":"ham","message":"Shall I bring us a bottle of wine to keep us amused? Only joking! I\u2018ll bring one anyway"},{"label":"spam","message":"http\/\/tms. widelive.com\/index. wml?id=820554ad0a1705572711&first=true\u00a1C C Ringtone\u00a1"},{"label":"spam","message":"Get your garden ready for summer with a FREE selection of summer bulbs and seeds worth \u00a333:50 only with The Scotsman this Saturday. To stop go2 notxt.co.uk"},{"label":"spam","message":"URGENT! Last weekend's draw shows that you have won \u00a31000 cash or a Spanish holiday! CALL NOW 09050000332 to claim. T&C: RSTM, SW7 3SS. 150ppm"},{"label":"ham","message":"Ok lor."},{"label":"ham","message":"I thought slide is enough."},{"label":"ham","message":"Yup"},{"label":"ham","message":"Well obviously not because all the people in my cool college life went home ;_;"},{"label":"ham","message":"Ok lor \u00fc reaching then message me."},{"label":"ham","message":"Where's mummy's boy ? Is he being good or bad ? Is he being positive or negative ? Why is mummy being made to wait? Hmmmm?"},{"label":"ham","message":"Dhoni have luck to win some big title.so we will win:)"},{"label":"ham","message":"Yes princess! I want to please you every night. Your wish is my command..."},{"label":"ham","message":"What Today-sunday..sunday is holiday..so no work.."},{"label":"ham","message":"No probably <#> %."},{"label":"ham","message":"Really do hope the work doesnt get stressful. Have a gr8 day."},{"label":"ham","message":"Have you seen who's back at Holby?!"},{"label":"ham","message":"Shall call now dear having food"},{"label":"spam","message":"URGENT We are trying to contact you Last weekends draw shows u have won a \u00a31000 prize GUARANTEED Call 09064017295 Claim code K52 Valid 12hrs 150p pm"},{"label":"ham","message":"So li hai... Me bored now da lecturer repeating last weeks stuff waste time..."},{"label":"ham","message":", , and picking them up from various points | going 2 yeovil | and they will do the motor project 4 3 hours | and then u take them home. || 12 2 5.30 max. || Very easy"},{"label":"ham","message":"Also fuck you and your family for going to rhode island or wherever the fuck and leaving me all alone the week I have a new bong >:("},{"label":"ham","message":"Ofcourse I also upload some songs"},{"label":"spam","message":"2p per min to call Germany 08448350055 from your BT line. Just 2p per min. Check PlanetTalkInstant.com for info & T's & C's. Text stop to opt out"},{"label":"ham","message":"K. I will sent it again"},{"label":"ham","message":"Oh thanks a lot..i already bought 2 eggs .."},{"label":"ham","message":"K. I will sent it again"},{"label":"ham","message":"U studying in sch or going home? Anyway i'll b going 2 sch later."},{"label":"spam","message":"Marvel Mobile Play the official Ultimate Spider-man game (\u00a34.50) on ur mobile right now. Text SPIDER to 83338 for the game & we ll send u a FREE 8Ball wallpaper"},{"label":"ham","message":"I think if he rule tamilnadu..then its very tough for our people."},{"label":"ham","message":"Cool, we shall go and see, have to go to tip anyway. Are you at home, got something to drop in later? So lets go to town tonight! Maybe mum can take us in."},{"label":"ham","message":"Good afternoon, my love ... How goes your day ? How did you sleep ? I hope your well, my boytoy ... I think of you ..."},{"label":"ham","message":"Yes... I trust u to buy new stuff ASAP so I can try it out"},{"label":"spam","message":"SMS SERVICES. for your inclusive text credits, pls goto www.comuk.net login= 3qxj9 unsubscribe with STOP, no extra charge. help 08702840625.COMUK. 220-CM2 9AE"},{"label":"ham","message":"Why did I wake up on my own >:("},{"label":"ham","message":"Now get step 2 outta the way. Congrats again."},{"label":"ham","message":"Love has one law; Make happy the person you love. In the same way friendship has one law; Never make ur friend feel alone until you are alive.... Gud night"},{"label":"spam","message":"PRIVATE! Your 2003 Account Statement for 07808247860 shows 800 un-redeemed S. I. M. points. Call 08719899229 Identifier Code: 40411 Expires 06\/11\/04"},{"label":"ham","message":"Apo all other are mokka players only"},{"label":"ham","message":"Perhaps * is much easy give your account identification, so i will tomorrow at UNI"},{"label":"ham","message":"Wait . I will msg after <#> min."},{"label":"ham","message":"What i told before i tell. Stupid hear after i wont tell anything to you. You dad called to my brother and spoken. Not with me."},{"label":"ham","message":"God's love has no limit. God's grace has no measure. God's power has no boundaries. May u have God's endless blessings always in ur life...!! Gud ni8"},{"label":"ham","message":"I want to be inside you every night..."},{"label":"ham","message":"Machan you go to gym tomorrow, i wil come late goodnight."},{"label":"ham","message":"Lol they were mad at first but then they woke up and gave in."},{"label":"ham","message":"I went to project centre"},{"label":"ham","message":"It\u2018s reassuring, in this crazy world."},{"label":"ham","message":"Just making dinner, you ?"},{"label":"ham","message":"Yes. Please leave at <#> . So that at <#> we can leave"},{"label":"ham","message":"Oh... Okie lor...We go on sat..."},{"label":"ham","message":"You are a great role model. You are giving so much and i really wish each day for a miracle but God as a reason for everything and i must say i wish i knew why but i dont. I've looked up to you since i was young and i still do. Have a great day."},{"label":"ham","message":"Ya, i'm referin to mei's ex wat... No ah, waitin 4 u to treat, somebody shld b rich liao...So gd, den u dun have to work frm tmr onwards..."},{"label":"ham","message":"Miles and smiles r made frm same letters but do u know d difference..? smile on ur face keeps me happy even though I am miles away from u.. :-)keep smiling.. Good nyt"},{"label":"ham","message":"By the way, i've put a skip right outside the front of the house so you can see which house it is. Just pull up before it."},{"label":"ham","message":"Can you pls send me that company name. In saibaba colany"},{"label":"ham","message":"No. I dont want to hear anything"},{"label":"ham","message":"You are a big chic. Common. Declare"},{"label":"ham","message":"Thats cool. I want to please you..."},{"label":"ham","message":"Going to join tomorrow."},{"label":"spam","message":"You are awarded a SiPix Digital Camera! call 09061221061 from landline. Delivery within 28days. T Cs Box177. M221BP. 2yr warranty. 150ppm. 16 . p p\u00a33.99"},{"label":"ham","message":"I want to tell you how bad I feel that basically the only times I text you lately are when I need drugs"},{"label":"spam","message":"PRIVATE! Your 2003 Account Statement for shows 800 un-redeemed S.I.M. points. Call 08718738001 Identifier Code: 49557 Expires 26\/11\/04"},{"label":"ham","message":"Total disappointment, when I texted you was the craziest shit got :("},{"label":"ham","message":"Its just the effect of irritation. Just ignore it"},{"label":"ham","message":"What about this one then."},{"label":"ham","message":"I think that tantrum's finished so yeah I'll be by at some point"},{"label":"ham","message":"Compliments to you. Was away from the system. How your side."},{"label":"ham","message":"happened here while you were adventuring"},{"label":"ham","message":"Hey chief, can you give me a bell when you get this. Need to talk to you about this royal visit on the 1st june."},{"label":"ham","message":"Ok which your another number"},{"label":"ham","message":"I know you are thinkin malaria. But relax, children cant handle malaria. She would have been worse and its gastroenteritis. If she takes enough to replace her loss her temp will reduce. And if you give her malaria meds now she will just vomit. Its a self limiting illness she has which means in a few days it will completely stop"},{"label":"ham","message":"Aiyah ok wat as long as got improve can already wat..."},{"label":"spam","message":"Want explicit SEX in 30 secs? Ring 02073162414 now! Costs 20p\/min Gsex POBOX 2667 WC1N 3XX"},{"label":"ham","message":"I can't believe how attached I am to seeing you every day. I know you will do the best you can to get to me babe. I will go to teach my class at your midnight"},{"label":"ham","message":"Just sleeping..and surfing"},{"label":"spam","message":"ASKED 3MOBILE IF 0870 CHATLINES INCLU IN FREE MINS. INDIA CUST SERVs SED YES. L8ER GOT MEGA BILL. 3 DONT GIV A SHIT. BAILIFF DUE IN DAYS. I O \u00a3250 3 WANT \u00a3800"},{"label":"ham","message":"Yeah it's jus rite..."},{"label":"ham","message":"Armand says get your ass over to epsilon"},{"label":"ham","message":"U still havent got urself a jacket ah?"},{"label":"ham","message":"I'm taking derek & taylor to walmart, if I'm not back by the time you're done just leave the mouse on my desk and I'll text you when priscilla's ready"},{"label":"ham","message":"Hi its in durban are you still on this number"},{"label":"ham","message":"Ic. There are a lotta childporn cars then."},{"label":"spam","message":"Had your contract mobile 11 Mnths? Latest Motorola, Nokia etc. all FREE! Double Mins & Text on Orange tariffs. TEXT YES for callback, no to remove from records."},{"label":"ham","message":"No, I was trying it all weekend ;V"},{"label":"ham","message":"You know, wot people wear. T shirts, jumpers, hat, belt, is all we know. We r at Cribbs"},{"label":"ham","message":"Cool, what time you think you can get here?"},{"label":"ham","message":"Wen did you get so spiritual and deep. That's great"},{"label":"ham","message":"Have a safe trip to Nigeria. Wish you happiness and very soon company to share moments with"},{"label":"ham","message":"Hahaha..use your brain dear"},{"label":"ham","message":"Well keep in mind I've only got enough gas for one more round trip barring a sudden influx of cash"},{"label":"ham","message":"Yeh. Indians was nice. Tho it did kane me off a bit he he. We shud go out 4 a drink sometime soon. Mite hav 2 go 2 da works 4 a laugh soon. Love Pete x x"},{"label":"ham","message":"Yes i have. So that's why u texted. Pshew...missing you so much"},{"label":"ham","message":"No. I meant the calculation is the same. That <#> units at <#> . This school is really expensive. Have you started practicing your accent. Because its important. And have you decided if you are doing 4years of dental school or if you'll just do the nmde exam."},{"label":"ham","message":"Sorry, I'll call later"},{"label":"ham","message":"if you aren't here in the next <#> hours imma flip my shit"},{"label":"ham","message":"Anything lor. Juz both of us lor."},{"label":"ham","message":"Get me out of this dump heap. My mom decided to come to lowes. BORING."},{"label":"ham","message":"Ok lor... Sony ericsson salesman... I ask shuhui then she say quite gd 2 use so i considering..."},{"label":"ham","message":"Ard 6 like dat lor."},{"label":"ham","message":"Why don't you wait 'til at least wednesday to see if you get your ."},{"label":"ham","message":"Huh y lei..."},{"label":"spam","message":"REMINDER FROM O2: To get 2.50 pounds free call credit and details of great offers pls reply 2 this text with your valid name, house no and postcode"},{"label":"spam","message":"This is the 2nd time we have tried 2 contact u. U have won the \u00a3750 Pound prize. 2 claim is easy, call 087187272008 NOW1! Only 10p per minute. BT-national-rate."},{"label":"ham","message":"Will \u00fc b going to esplanade fr home?"},{"label":"ham","message":"Pity, * was in mood for that. So...any other suggestions?"},{"label":"ham","message":"The guy did some bitching but I acted like i'd be interested in buying something else next week and he gave it to us for free"},{"label":"ham","message":"Rofl. Its true to its name"}] \ No newline at end of file diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/classifier/TNTClassifierTest.php b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/classifier/TNTClassifierTest.php new file mode 100644 index 0000000..22a77d7 --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/classifier/TNTClassifierTest.php @@ -0,0 +1,59 @@ +learn($sms[$i]->message, $sms[$i]->label); + } + + $guessCount = 0; + $counter = 0; + + for ($i = round(count($sms) * $training); $i < count($sms); $i++) { + $counter++; + $guess = $classifier->predict($sms[$i]->message); + + if ($guess['label'] == $sms[$i]->label) { + $guessCount++; + } + + } + $precision = number_format(($guessCount * 100 / $counter), 4); + $this->assertGreaterThanOrEqual(98, $precision); + } + + public function testPredictClass() + { + $classifier = new TNTClassifier(); + $classifier->learn("chinese beijing chinese", "c"); + $classifier->learn("chinese chinese shangai", "c"); + $classifier->learn("chinese macao", "c"); + $classifier->learn("tokyo japan chinese", "j"); + + $guess = $classifier->predict("chinese chinese chinese tokyo japan"); + $this->assertEquals("c", $guess['label']); + } + + public function testPredictClass2() + { + $classifier = new TNTClassifier(); + $classifier->learn("A great game", "Sports"); + $classifier->learn("The election was over", "Not sports"); + $classifier->learn("Very clean match", "Sports"); + $classifier->learn("A clean but forgettable game", "Sports"); + + $guess = $classifier->predict("It was a close election"); + $this->assertEquals("Not sports", $guess['label']); + } +} diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/indexer/TNTGeoIndexerTest.php b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/indexer/TNTGeoIndexerTest.php new file mode 100644 index 0000000..9931bda --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/indexer/TNTGeoIndexerTest.php @@ -0,0 +1,32 @@ + 'sqlite', + 'database' => __DIR__.'/../_files/cities.sqlite', + 'host' => 'localhost', + 'username' => 'testUser', + 'password' => 'testPass', + 'storage' => __DIR__.'/../_files/' + ]; + + public function testGeoIndexCreation() + { + $geoIndex = new TNTGeoIndexer; + $geoIndex->disableOutput = true; + $geoIndex->loadConfig($this->config); + $geoIndex->createIndex($this->indexName); + $geoIndex->query('SELECT id, longitude, latitude FROM cities;'); + $geoIndex->run(); + + $indexPath = __DIR__.'/../_files/'.$this->indexName; + + $this->assertTrue(file_exists($indexPath)); + } +} diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/indexer/TNTIndexerTest.php b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/indexer/TNTIndexerTest.php new file mode 100644 index 0000000..cbb8552 --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/indexer/TNTIndexerTest.php @@ -0,0 +1,190 @@ + 'sqlite', + 'database' => __DIR__.'/../_files/articles.sqlite', + 'host' => 'localhost', + 'username' => 'testUser', + 'password' => 'testPass', + 'storage' => __DIR__.'/../_files/', + 'tokenizer' => TeamTNT\TNTSearch\Support\ProductTokenizer::class + + ]; + + public function testSearch() + { + $tnt = new TNTSearch; + + $tnt->loadConfig($this->config); + + $indexer = $tnt->createIndex($this->indexName); + $indexer->disableOutput = true; + $indexer->query('SELECT id, title, article FROM articles;'); + $indexer->run(); + + $tnt->selectIndex($this->indexName); + $tnt->asYouType = true; + $res = $tnt->search('Juliet'); + + //the most relevant doc has the id 9 + $this->assertEquals("9", $res['ids'][0]); + + $res = $tnt->search('Queen Mab'); + $this->assertEquals([7], $res['ids']); + } + + public function testIndexFromFileSystem() + { + $config = [ + 'driver' => 'filesystem', + 'storage' => __DIR__.'/../_files/', + 'location' => __DIR__.'/../_files/articles/', + 'extension' => 'txt' + ]; + + $tnt = new TNTSearch; + $tnt->loadConfig($config); + $indexer = $tnt->createIndex($this->indexName); + $indexer->disableOutput = true; + $indexer->run(); + + $tnt->selectIndex($this->indexName); + + $index = $tnt->getIndex(); + $count = $index->countWordInWordList('document'); + + $this->assertTrue($count == 3, 'Word document should be 3'); + $this->assertEquals('TeamTNT\TNTSearch\Stemmer\NoStemmer', get_class($tnt->getStemmer())); + } + + public function testIfCroatianStemmerIsSet() + { + $tnt = new TNTSearch; + + $tnt->loadConfig($this->config); + + $indexer = $tnt->createIndex($this->indexName); + $indexer->query('SELECT id, title, article FROM articles;'); + $indexer->setLanguage('croatian'); + $indexer->disableOutput = true; + $indexer->run(); + + $this->index = new PDO('sqlite:'.$this->config['storage'].$this->indexName); + $query = "SELECT * FROM info WHERE key = 'stemmer'"; + $docs = $this->index->query($query); + $value = $docs->fetch(PDO::FETCH_ASSOC)['value']; + $this->assertEquals('TeamTNT\TNTSearch\Stemmer\CroatianStemmer', $value); + + $tnt->selectIndex($this->indexName); + $this->assertEquals('TeamTNT\TNTSearch\Stemmer\CroatianStemmer', get_class($tnt->getStemmer())); + } + + public function testIfGermanStemmerIsSet() + { + $tnt = new TNTSearch; + + $tnt->loadConfig($this->config); + + $indexer = $tnt->createIndex($this->indexName); + $indexer->query('SELECT id, title, article FROM articles;'); + $indexer->setLanguage('german'); + $indexer->disableOutput = true; + $indexer->run(); + + $this->index = new PDO('sqlite:'.$this->config['storage'].$this->indexName); + $query = "SELECT * FROM info WHERE key = 'stemmer'"; + $docs = $this->index->query($query); + $value = $docs->fetch(PDO::FETCH_ASSOC)['value']; + $this->assertEquals('TeamTNT\TNTSearch\Stemmer\GermanStemmer', $value); + + $tnt->selectIndex($this->indexName); + $this->assertEquals('TeamTNT\TNTSearch\Stemmer\GermanStemmer', get_class($tnt->getStemmer())); + } + + public function testBuildTrigrams() + { + $indexer = new TNTIndexer; + $trigrams = $indexer->buildTrigrams('created'); + $this->assertEquals('__c _cr cre rea eat ate ted ed_ d__', $trigrams); + + $trigrams = $indexer->buildTrigrams('mood'); + $this->assertEquals('__m _mo moo ood od_ d__', $trigrams); + + $trigrams = $indexer->buildTrigrams('death'); + $this->assertEquals('__d _de dea eat ath th_ h__', $trigrams); + + $trigrams = $indexer->buildTrigrams('behind'); + $this->assertEquals('__b _be beh ehi hin ind nd_ d__', $trigrams); + + $trigrams = $indexer->buildTrigrams('usually'); + $this->assertEquals('__u _us usu sua ual all lly ly_ y__', $trigrams); + + $trigrams = $indexer->buildTrigrams('created'); + $this->assertEquals('__c _cr cre rea eat ate ted ed_ d__', $trigrams); + + } + + public function tearDown(): void + { + if (file_exists(__DIR__.'/../_files/'.$this->indexName)) { + unlink(__DIR__.'/../_files/'.$this->indexName); + } + } + + public function testSetTokenizer() + { + + $tnt = new TNTSearch; + + $tnt->loadConfig($this->config); + + $indexer = $tnt->createIndex($this->indexName); + $indexer->query('SELECT id, title, article FROM articles;'); + $indexer->setTokenizer(new SomeTokenizer); + $indexer->disableOutput = true; + $indexer->run(); + + $this->assertInstanceOf(TokenizerInterface::class, $indexer->tokenizer); + + $res = $indexer->breakIntoTokens('Canon 70-200'); + $this->assertContains("canon", $res); + $this->assertContains("70-200", $res); + } + + public function testCustomPrimaryKey() + { + $tnt = new TNTSearch; + + $tnt->loadConfig($this->config); + + $indexer = $tnt->createIndex($this->indexName); + $indexer->setPrimaryKey('post_id'); + $indexer->disableOutput = true; + $indexer->query('SELECT * FROM posts;'); + $indexer->run(); + + $tnt->selectIndex($this->indexName); + $res = $tnt->search('second'); + + //the most relevant doc has the id 9 + $this->assertEquals("2", $res['ids'][0]); + } +} + +class SomeTokenizer extends AbstractTokenizer implements TokenizerInterface +{ + static protected $pattern = '/[\s,\.]+/'; + + public function tokenize($text, $stopwords = []) + { + return preg_split($this->getPattern(), mb_strtolower($text), -1, PREG_SPLIT_NO_EMPTY); + } +} diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/keywordextraction/Rake.php b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/keywordextraction/Rake.php new file mode 100644 index 0000000..5716144 --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/keywordextraction/Rake.php @@ -0,0 +1,107 @@ +rake = new Rake; + parent::__construct(); + } + + public function testExtractKeywords() + { + $text = "A scoop of ice cream"; + $actual = $this->rake->extractKeywords($text); + + $expected = ["ice cream" => 4, "scoop" => 1]; + $this->assertEquals($expected, $actual); + } + + public function testExtractKeywords2() + { + $text = "Compatibility of systems of linear constraints over the set of natural + numbers. Criteria of compatibility of a system of linear Diophantine + equations, strict inequations, and nonstrict inequations are considered. + Upper bounds for components of a minimal set of solutions and algorithms + of construction of minimal generating sets of solutions for all types of + systems are given. These criteria and the corresponding algorithms for + constructing a minimal supporting set of solutions can be used in solving + all the considered types of systems and systems of mixed types."; + + $actual = $this->rake->extractKeywords($text); + + $this->assertEquals(8.666666666666666, $actual["minimal generating sets"], '', 0.0001); + $this->assertEquals(8.5, $actual["linear diophantine equations"], '', 0.0001); + $this->assertEquals(7.666666666666666, $actual["minimal supporting set"], '', 0.0001); + } + + public function testTokenize() + { + $expected = ["a", "scoop", "of", "ice", "cream"]; + $actual = $this->rake->tokenize('A scoop of ice cream'); + $this->assertEquals($expected, $actual); + } + + public function testGenerateCandidateKeywords() + { + $text = "A scoop of ice cream"; + $expected = [["scoop"], ["ice", "cream"]]; + $actual = $this->rake->generateCandidateKeywords($text); + $this->assertEquals($expected, $actual); + } + + public function testWordDegree() + { + $text = "A scoop of ice cream"; + $phraseList = $this->rake->generateCandidateKeywords($text); + + $degree = $this->rake->wordDegree("scoop", $phraseList); + $this->assertEquals($degree, 1); + + $degree = $this->rake->wordDegree("ice", $phraseList); + $this->assertEquals($degree, 2); + + $degree = $this->rake->wordDegree("cream", $phraseList); + $this->assertEquals($degree, 2); + + } + + public function testWordDegree2() + { + $text = "Compatibility of systems of linear constraints over the set of natural numbers of Criteria of compatibility of a system of linear Diophantine equations, strict inequations, and nonstrict inequations are considered. Upper bounds for components of a minimal set of solutions and algorithms of construction of minimal generating sets of solutions for all types of systems are given. These criteria and the corresponding algorithms for constructing a minimal supporting set of solutions can be used in solving all the considered types of systems and systems of mixed types."; + + $phraseList = $this->rake->generateCandidateKeywords($text); + + $degree = $this->rake->wordDegree("set", $phraseList); + + $this->assertEquals(6, $degree); + + $degree = $this->rake->wordDegree("natural", $phraseList); + $this->assertEquals(2, $degree); + } + + public function testWordFrequency() + { + $text = "Compatibility of systems of linear constraints over the set of natural numbers of Criteria of compatibility of a system of linear Diophantine equations, strict inequations, and nonstrict inequations are considered. Upper bounds for components of a minimal set of solutions and algorithms of construction of minimal generating sets of solutions for all types of systems are given. These criteria and the corresponding algorithms for constructing a minimal supporting set of solutions can be used in solving all the considered types of systems and systems of mixed types."; + + $phraseList = $this->rake->generateCandidateKeywords($text); + + $frequency = $this->rake->wordFrequency("systems", $phraseList); + + $this->assertEquals(4, $frequency); + } + + public function testCalculateWordScores() + { + $text = "A scoop of ice cream"; + $expected = ["scoop" => 1, "ice" => 2, "cream" => 2]; + + $phraseList = $this->rake->generateCandidateKeywords($text); + + $actual = $this->rake->calculateWordScores($phraseList); + $this->assertEquals($expected, $actual); + } +} diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/spell/JaroWinklerDistanceTest.php b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/spell/JaroWinklerDistanceTest.php new file mode 100644 index 0000000..0a8a55b --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/spell/JaroWinklerDistanceTest.php @@ -0,0 +1,50 @@ +sd = new JaroWinklerDistance; + parent::__construct(); + } + + public function testJaro() + { + $d = $this->sd->jaro('DWAYNE', 'DUANE'); + $this->assertEqualsWithDelta(0.822, $d, 0.001); + + $d = $this->sd->jaro("MARTHA", "MARHTA"); + $this->assertEqualsWithDelta(0.944444, $d, 0.001); + + $d = $this->sd->jaro("DIXON", "DICKSONX"); + $this->assertEqualsWithDelta(0.766667, $d, 0.001); + + $d = $this->sd->jaro("JELLYFISH", "SMELLYFISH"); + $this->assertEqualsWithDelta(0.896296, $d, 0.001); + } + + public function testGetDistance() + { + $d = $this->sd->getDistance("al", "al"); + $this->assertEquals(1.0, $d); + $d = $this->sd->getDistance("martha", "marhta"); + $this->assertGreaterThan(0.961, $d); + $this->assertLessThan(0.962, $d); + $d = $this->sd->getDistance("jones", "johnson"); + $this->assertTrue($d > 0.832 && $d < 0.833); + $d = $this->sd->getDistance("dwayne", "duane"); + $this->assertTrue($d > 0.84 && $d < 0.841); + $d = $this->sd->getDistance("dixon", "dicksonx"); + $this->assertTrue($d > 0.813 && $d < 0.814); + $d = $this->sd->getDistance("fvie", "ten"); + $this->assertTrue($d == 0); + $d1 = $this->sd->getDistance("zac ephron", "zac efron"); + $d2 = $this->sd->getDistance("zac ephron", "kai ephron"); + $this->assertTrue($d1 > $d2); + $d1 = $this->sd->getDistance("brittney spears", "britney spears"); + $d2 = $this->sd->getDistance("brittney spears", "brittney startzman"); + $this->assertTrue($d1 > $d2); + } +} diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/stemmer/CroatianStemmerTest.php b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/stemmer/CroatianStemmerTest.php new file mode 100644 index 0000000..697b363 --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/stemmer/CroatianStemmerTest.php @@ -0,0 +1,59 @@ +assertEquals("cRveno", $stemmer->istakniSlogotvornoR("crveno")); + $this->assertEquals("tvRdo", $stemmer->istakniSlogotvornoR("tvrdo")); + $this->assertEquals("vRt", $stemmer->istakniSlogotvornoR("vrt")); + } + + public function testImaSamoglasnik() + { + $stemmer = new CroatianStemmer; + $this->assertTrue($stemmer->imaSamoglasnik("test")); + $this->assertTrue($stemmer->imaSamoglasnik("vrt")); + $this->assertFalse($stemmer->imaSamoglasnik("dgk")); + } + + public function testTransformiraj() + { + $stemmer = new CroatianStemmer; + $this->assertEquals("ginekologa", $stemmer->transformiraj("ginekolozi")); + $this->assertEquals("ujak", $stemmer->transformiraj("ujaci")); + $this->assertEquals("policajca", $stemmer->transformiraj("policajaca")); + } + + public function testKorjenuj() + { + $stemmer = new CroatianStemmer; + $this->assertEquals("njem", $stemmer->korjenuj("njemu")); + $this->assertEquals("stisk", $stemmer->korjenuj("stiska")); + $this->assertEquals("jasn", $stemmer->korjenuj("jasno")); + $this->assertEquals("kalibr", $stemmer->korjenuj("kalibra")); + $this->assertEquals("zagrijavanj", $stemmer->korjenuj("zagrijavanje")); + $this->assertEquals("biznis", $stemmer->korjenuj("biznisom")); + $this->assertEquals("razgovara", $stemmer->korjenuj("razgovarati")); + $this->assertEquals("najbogat", $stemmer->korjenuj("najbogatijih")); + } + + public function testStem() + { + $stemmer = new CroatianStemmer; + $this->assertEquals("biti", $stemmer->stem("biti")); + $this->assertEquals("njem", $stemmer->stem("njemu")); + $this->assertEquals("stisk", $stemmer->stem("stiska")); + $this->assertEquals("jasn", $stemmer->stem("jasno")); + $this->assertEquals("kalibr", $stemmer->stem("kalibra")); + $this->assertEquals("zagrijavanj", $stemmer->stem("zagrijavanje")); + $this->assertEquals("biznis", $stemmer->stem("biznisom")); + $this->assertEquals("razgovara", $stemmer->stem("razgovarati")); + $this->assertEquals("najbogat", $stemmer->stem("najbogatijih")); + + $this->assertEquals("čćžšđ", $stemmer->stem("čćžšđ")); + } +} diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/stemmer/FrenchStemmerTest.php b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/stemmer/FrenchStemmerTest.php new file mode 100644 index 0000000..afe3120 --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/stemmer/FrenchStemmerTest.php @@ -0,0 +1,13 @@ +assertSame('abaiss', FrenchStemmer::stem('abaissant')); + $this->assertSame('abandon', FrenchStemmer::stem('abandonnés')); + $this->assertSame(FrenchStemmer::stem('frontières'), FrenchStemmer::stem('frontière')); + } +} diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/stemmer/GermanStemmerTest.php b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/stemmer/GermanStemmerTest.php new file mode 100644 index 0000000..ea7361f --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/stemmer/GermanStemmerTest.php @@ -0,0 +1,14 @@ +assertEquals("vergnug", $stemmer->stem("vergnüglich")); + $this->assertEquals("unfallversicherungstrag", $stemmer->stem("Unfallversicherungsträger")); + } +} diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/stemmer/PolishStemmerTest.php b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/stemmer/PolishStemmerTest.php new file mode 100644 index 0000000..976fe39 --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/stemmer/PolishStemmerTest.php @@ -0,0 +1,21 @@ +assertEquals("czujnik", $stemmer->stem("czujnikami")); + $this->assertEquals("kabel", $stemmer->stem("kabelek")); + $this->assertEquals("mocniej", $stemmer->stem("najmocniejszy")); + $this->assertEquals("przekaźnik", $stemmer->stem("przekaźnikowy")); + $this->assertEquals("instaluj", $stemmer->stem("instalujesz")); + $this->assertEquals("instaluj", $stemmer->stem("instalujesz")); + $this->assertEquals("ciekaw", $stemmer->stem("ciekawie")); + $this->assertEquals("przekaźnik", $stemmer->stem("przekaźników")); + $this->assertEquals("moduł", $stemmer->stem("modułu")); + $this->assertEquals($stemmer->stem("modułów"), $stemmer->stem("moduły")); + } +} diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/stemmer/PorterStemmerTest.php b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/stemmer/PorterStemmerTest.php new file mode 100644 index 0000000..2510dd1 --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/stemmer/PorterStemmerTest.php @@ -0,0 +1,30 @@ +assertEquals("test", $stemmer->stem("testing")); + $this->assertEquals("sourc", $stemmer->stem("source")); + $this->assertEquals("code", $stemmer->stem("code")); + $this->assertEquals("is", $stemmer->stem("is")); + $this->assertEquals("funni", $stemmer->stem("funny")); + } + + public function testAgainstDictionary() + { + $vocabulary = explode("\n", file_get_contents(__DIR__."/porter/input.txt")); + $expected = explode("\n", file_get_contents(__DIR__."/porter/output.txt")); + + $stemmer = new PorterStemmer; + + foreach ($vocabulary as $key => $word) { + $stem = $stemmer->stem(trim($word)); + $this->assertEquals(trim($expected[$key]), $stem); + } + } +} diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/stemmer/PortugueseStemmerTest.php b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/stemmer/PortugueseStemmerTest.php new file mode 100644 index 0000000..44a4d59 --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/stemmer/PortugueseStemmerTest.php @@ -0,0 +1,15 @@ +assertEquals("gost", $stemmer->stem("gostou")); + $this->assertEquals("gost", $stemmer->stem("gosto")); + $this->assertEquals("gost", $stemmer->stem("gostaram")); + } +} diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/stemmer/porter/input.txt b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/stemmer/porter/input.txt new file mode 100644 index 0000000..3732db5 --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/stemmer/porter/input.txt @@ -0,0 +1,23531 @@ +a +aaron +abaissiez +abandon +abandoned +abase +abash +abate +abated +abatement +abatements +abates +abbess +abbey +abbeys +abbominable +abbot +abbots +abbreviated +abed +abel +aberga +abergavenny +abet +abetting +abhominable +abhor +abhorr +abhorred +abhorring +abhors +abhorson +abide +abides +abilities +ability +abject +abjectly +abjects +abjur +abjure +able +abler +aboard +abode +aboded +abodements +aboding +abominable +abominably +abominations +abortive +abortives +abound +abounding +about +above +abr +abraham +abram +abreast +abridg +abridge +abridged +abridgment +abroach +abroad +abrogate +abrook +abrupt +abruption +abruptly +absence +absent +absey +absolute +absolutely +absolv +absolver +abstains +abstemious +abstinence +abstract +absurd +absyrtus +abundance +abundant +abundantly +abus +abuse +abused +abuser +abuses +abusing +abutting +aby +abysm +ac +academe +academes +accent +accents +accept +acceptable +acceptance +accepted +accepts +access +accessary +accessible +accidence +accident +accidental +accidentally +accidents +accite +accited +accites +acclamations +accommodate +accommodated +accommodation +accommodations +accommodo +accompanied +accompany +accompanying +accomplices +accomplish +accomplished +accomplishing +accomplishment +accompt +accord +accordant +accorded +accordeth +according +accordingly +accords +accost +accosted +account +accountant +accounted +accounts +accoutred +accoutrement +accoutrements +accrue +accumulate +accumulated +accumulation +accurs +accursed +accurst +accus +accusation +accusations +accusative +accusativo +accuse +accused +accuser +accusers +accuses +accuseth +accusing +accustom +accustomed +ace +acerb +ache +acheron +aches +achiev +achieve +achieved +achievement +achievements +achiever +achieves +achieving +achilles +aching +achitophel +acknowledg +acknowledge +acknowledged +acknowledgment +acknown +acold +aconitum +acordo +acorn +acquaint +acquaintance +acquainted +acquaints +acquir +acquire +acquisition +acquit +acquittance +acquittances +acquitted +acre +acres +across +act +actaeon +acted +acting +action +actions +actium +active +actively +activity +actor +actors +acts +actual +acture +acute +acutely +ad +adage +adallas +adam +adamant +add +added +adder +adders +addeth +addict +addicted +addiction +adding +addition +additions +addle +address +addressing +addrest +adds +adhere +adheres +adieu +adieus +adjacent +adjoin +adjoining +adjourn +adjudg +adjudged +adjunct +administer +administration +admir +admirable +admiral +admiration +admire +admired +admirer +admiring +admiringly +admission +admit +admits +admittance +admitted +admitting +admonish +admonishing +admonishment +admonishments +admonition +ado +adonis +adopt +adopted +adoptedly +adoption +adoptious +adopts +ador +adoration +adorations +adore +adorer +adores +adorest +adoreth +adoring +adorn +adorned +adornings +adornment +adorns +adown +adramadio +adrian +adriana +adriano +adriatic +adsum +adulation +adulterate +adulterates +adulterers +adulteress +adulteries +adulterous +adultery +adultress +advanc +advance +advanced +advancement +advancements +advances +advancing +advantage +advantageable +advantaged +advantageous +advantages +advantaging +advent +adventur +adventure +adventures +adventuring +adventurous +adventurously +adversaries +adversary +adverse +adversely +adversities +adversity +advertis +advertise +advertised +advertisement +advertising +advice +advis +advise +advised +advisedly +advises +advisings +advocate +advocation +aeacida +aeacides +aedile +aediles +aegeon +aegion +aegles +aemelia +aemilia +aemilius +aeneas +aeolus +aer +aerial +aery +aesculapius +aeson +aesop +aetna +afar +afear +afeard +affability +affable +affair +affaire +affairs +affect +affectation +affectations +affected +affectedly +affecteth +affecting +affection +affectionate +affectionately +affections +affects +affeer +affianc +affiance +affianced +affied +affin +affined +affinity +affirm +affirmation +affirmatives +afflict +afflicted +affliction +afflictions +afflicts +afford +affordeth +affords +affray +affright +affrighted +affrights +affront +affronted +affy +afield +afire +afloat +afoot +afore +aforehand +aforesaid +afraid +afresh +afric +africa +african +afront +after +afternoon +afterward +afterwards +ag +again +against +agamemmon +agamemnon +agate +agaz +age +aged +agenor +agent +agents +ages +aggravate +aggrief +agile +agincourt +agitation +aglet +agnize +ago +agone +agony +agree +agreed +agreeing +agreement +agrees +agrippa +aground +ague +aguecheek +agued +agueface +agues +ah +aha +ahungry +ai +aialvolio +aiaria +aid +aidance +aidant +aided +aiding +aidless +aids +ail +aim +aimed +aimest +aiming +aims +ainsi +aio +air +aired +airless +airs +airy +ajax +akilling +al +alabaster +alack +alacrity +alarbus +alarm +alarms +alarum +alarums +alas +alb +alban +albans +albany +albeit +albion +alchemist +alchemy +alcibiades +alcides +alder +alderman +aldermen +ale +alecto +alehouse +alehouses +alencon +alengon +aleppo +ales +alewife +alexander +alexanders +alexandria +alexandrian +alexas +alias +alice +alien +aliena +alight +alighted +alights +aliis +alike +alisander +alive +all +alla +allay +allayed +allaying +allayment +allayments +allays +allegation +allegations +allege +alleged +allegiance +allegiant +alley +alleys +allhallowmas +alliance +allicholy +allied +allies +alligant +alligator +allons +allot +allots +allotted +allottery +allow +allowance +allowed +allowing +allows +allur +allure +allurement +alluring +allusion +ally +allycholly +almain +almanac +almanack +almanacs +almighty +almond +almost +alms +almsman +aloes +aloft +alone +along +alonso +aloof +aloud +alphabet +alphabetical +alphonso +alps +already +also +alt +altar +altars +alter +alteration +altered +alters +althaea +although +altitude +altogether +alton +alway +always +am +amaimon +amain +amaking +amamon +amaz +amaze +amazed +amazedly +amazedness +amazement +amazes +amazeth +amazing +amazon +amazonian +amazons +ambassador +ambassadors +amber +ambiguides +ambiguities +ambiguous +ambition +ambitions +ambitious +ambitiously +amble +ambled +ambles +ambling +ambo +ambuscadoes +ambush +amen +amend +amended +amendment +amends +amerce +america +ames +amiable +amid +amidst +amiens +amis +amiss +amities +amity +amnipotent +among +amongst +amorous +amorously +amort +amount +amounts +amour +amphimacus +ample +ampler +amplest +amplified +amplify +amply +ampthill +amurath +amyntas +an +anatomiz +anatomize +anatomy +ancestor +ancestors +ancestry +anchises +anchor +anchorage +anchored +anchoring +anchors +anchovies +ancient +ancientry +ancients +ancus +and +andirons +andpholus +andren +andrew +andromache +andronici +andronicus +anew +ang +angel +angelica +angelical +angelo +angels +anger +angerly +angers +anges +angiers +angl +anglais +angle +angler +angleterre +angliae +angling +anglish +angrily +angry +anguish +angus +animal +animals +animis +anjou +ankle +anna +annals +anne +annex +annexed +annexions +annexment +annothanize +announces +annoy +annoyance +annoying +annual +anoint +anointed +anon +another +anselmo +answer +answerable +answered +answerest +answering +answers +ant +ante +antenor +antenorides +anteroom +anthem +anthems +anthony +anthropophagi +anthropophaginian +antiates +antic +anticipate +anticipates +anticipatest +anticipating +anticipation +antick +anticly +antics +antidote +antidotes +antigonus +antiopa +antipathy +antipholus +antipholuses +antipodes +antiquary +antique +antiquity +antium +antoniad +antonio +antonius +antony +antres +anvil +any +anybody +anyone +anything +anywhere +ap +apace +apart +apartment +apartments +ape +apemantus +apennines +apes +apiece +apish +apollinem +apollo +apollodorus +apology +apoplex +apoplexy +apostle +apostles +apostrophas +apoth +apothecary +appal +appall +appalled +appals +apparel +apparell +apparelled +apparent +apparently +apparition +apparitions +appeach +appeal +appeals +appear +appearance +appeared +appeareth +appearing +appears +appeas +appease +appeased +appelant +appele +appelee +appeles +appelez +appellant +appellants +appelons +appendix +apperil +appertain +appertaining +appertainings +appertains +appertinent +appertinents +appetite +appetites +applaud +applauded +applauding +applause +applauses +apple +apples +appletart +appliance +appliances +applications +applied +applies +apply +applying +appoint +appointed +appointment +appointments +appoints +apprehend +apprehended +apprehends +apprehension +apprehensions +apprehensive +apprendre +apprenne +apprenticehood +appris +approach +approachers +approaches +approacheth +approaching +approbation +approof +appropriation +approv +approve +approved +approvers +approves +appurtenance +appurtenances +apricocks +april +apron +aprons +apt +apter +aptest +aptly +aptness +aqua +aquilon +aquitaine +arabia +arabian +araise +arbitrate +arbitrating +arbitrator +arbitrement +arbors +arbour +arc +arch +archbishop +archbishopric +archdeacon +arched +archelaus +archer +archers +archery +archibald +archidamus +architect +arcu +arde +arden +ardent +ardour +are +argal +argier +argo +argosies +argosy +argu +argue +argued +argues +arguing +argument +arguments +argus +ariachne +ariadne +ariel +aries +aright +arinado +arinies +arion +arise +arises +ariseth +arising +aristode +aristotle +arithmetic +arithmetician +ark +arm +arma +armado +armadoes +armagnac +arme +armed +armenia +armies +armigero +arming +armipotent +armor +armour +armourer +armourers +armours +armoury +arms +army +arn +aroint +arose +arouse +aroused +arragon +arraign +arraigned +arraigning +arraignment +arrant +arras +array +arrearages +arrest +arrested +arrests +arriv +arrival +arrivance +arrive +arrived +arrives +arriving +arrogance +arrogancy +arrogant +arrow +arrows +art +artemidorus +arteries +arthur +article +articles +articulate +artificer +artificial +artillery +artire +artist +artists +artless +artois +arts +artus +arviragus +as +asaph +ascanius +ascend +ascended +ascendeth +ascends +ascension +ascent +ascribe +ascribes +ash +asham +ashamed +asher +ashes +ashford +ashore +ashouting +ashy +asia +aside +ask +askance +asked +asker +asketh +asking +asks +aslant +asleep +asmath +asp +aspect +aspects +aspen +aspersion +aspic +aspicious +aspics +aspir +aspiration +aspire +aspiring +asquint +ass +assail +assailable +assailant +assailants +assailed +assaileth +assailing +assails +assassination +assault +assaulted +assaults +assay +assaying +assays +assemblance +assemble +assembled +assemblies +assembly +assent +asses +assez +assign +assigned +assigns +assinico +assist +assistance +assistances +assistant +assistants +assisted +assisting +associate +associated +associates +assuage +assubjugate +assum +assume +assumes +assumption +assur +assurance +assure +assured +assuredly +assures +assyrian +astonish +astonished +astraea +astray +astrea +astronomer +astronomers +astronomical +astronomy +asunder +at +atalanta +ate +ates +athenian +athenians +athens +athol +athversary +athwart +atlas +atomies +atomy +atone +atonement +atonements +atropos +attach +attached +attachment +attain +attainder +attains +attaint +attainted +attainture +attempt +attemptable +attempted +attempting +attempts +attend +attendance +attendant +attendants +attended +attendents +attendeth +attending +attends +attent +attention +attentive +attentivenes +attest +attested +attir +attire +attired +attires +attorney +attorneyed +attorneys +attorneyship +attract +attraction +attractive +attracts +attribute +attributed +attributes +attribution +attributive +atwain +au +aubrey +auburn +aucun +audacious +audaciously +audacity +audible +audience +audis +audit +auditor +auditors +auditory +audre +audrey +aufidius +aufidiuses +auger +aught +augment +augmentation +augmented +augmenting +augurer +augurers +augures +auguring +augurs +augury +august +augustus +auld +aumerle +aunchient +aunt +aunts +auricular +aurora +auspicious +aussi +austere +austerely +austereness +austerity +austria +aut +authentic +author +authorities +authority +authorized +authorizing +authors +autolycus +autre +autumn +auvergne +avail +avails +avarice +avaricious +avaunt +ave +aveng +avenge +avenged +averring +avert +aves +avez +avis +avoid +avoided +avoiding +avoids +avoirdupois +avouch +avouched +avouches +avouchment +avow +aw +await +awaits +awak +awake +awaked +awaken +awakened +awakens +awakes +awaking +award +awards +awasy +away +awe +aweary +aweless +awful +awhile +awkward +awl +awooing +awork +awry +axe +axle +axletree +ay +aye +ayez +ayli +azur +azure +b +ba +baa +babbl +babble +babbling +babe +babes +babies +baboon +baboons +baby +babylon +bacare +bacchanals +bacchus +bach +bachelor +bachelors +back +backbite +backbitten +backing +backs +backward +backwardly +backwards +bacon +bacons +bad +bade +badge +badged +badges +badly +badness +baes +baffl +baffle +baffled +bag +baggage +bagot +bagpipe +bags +bail +bailiff +baillez +baily +baisant +baisees +baiser +bait +baited +baiting +baitings +baits +bajazet +bak +bake +baked +baker +bakers +bakes +baking +bal +balanc +balance +balcony +bald +baldrick +bale +baleful +balk +ball +ballad +ballads +ballast +ballasting +ballet +ballow +balls +balm +balms +balmy +balsam +balsamum +balth +balthasar +balthazar +bames +ban +banbury +band +bandied +banding +bandit +banditti +banditto +bands +bandy +bandying +bane +banes +bang +bangor +banish +banished +banishers +banishment +banister +bank +bankrout +bankrupt +bankrupts +banks +banner +bannerets +banners +banning +banns +banquet +banqueted +banqueting +banquets +banquo +bans +baptism +baptista +baptiz +bar +barbarian +barbarians +barbarism +barbarous +barbary +barbason +barbed +barber +barbermonger +bard +bardolph +bards +bare +bared +barefac +barefaced +barefoot +bareheaded +barely +bareness +barful +bargain +bargains +barge +bargulus +baring +bark +barking +barkloughly +barks +barky +barley +barm +barn +barnacles +barnardine +barne +barnes +barnet +barns +baron +barons +barony +barr +barrabas +barrel +barrels +barren +barrenly +barrenness +barricado +barricadoes +barrow +bars +barson +barter +bartholomew +bas +basan +base +baseless +basely +baseness +baser +bases +basest +bashful +bashfulness +basilisco +basilisk +basilisks +basimecu +basin +basingstoke +basins +basis +bask +basket +baskets +bass +bassanio +basset +bassianus +basta +bastard +bastardizing +bastardly +bastards +bastardy +basted +bastes +bastinado +basting +bat +batailles +batch +bate +bated +bates +bath +bathe +bathed +bathing +baths +bating +batler +bats +batt +battalia +battalions +batten +batter +battering +batters +battery +battle +battled +battlefield +battlements +battles +batty +bauble +baubles +baubling +baulk +bavin +bawcock +bawd +bawdry +bawds +bawdy +bawl +bawling +bay +baying +baynard +bayonne +bays +be +beach +beached +beachy +beacon +bead +beaded +beadle +beadles +beads +beadsmen +beagle +beagles +beak +beaks +beam +beamed +beams +bean +beans +bear +beard +bearded +beardless +beards +bearer +bearers +bearest +beareth +bearing +bears +beast +beastliest +beastliness +beastly +beasts +beat +beated +beaten +beating +beatrice +beats +beau +beaufort +beaumond +beaumont +beauteous +beautied +beauties +beautified +beautiful +beautify +beauty +beaver +beavers +became +because +bechanc +bechance +bechanced +beck +beckon +beckons +becks +becom +become +becomed +becomes +becoming +becomings +bed +bedabbled +bedash +bedaub +bedazzled +bedchamber +bedclothes +bedded +bedeck +bedecking +bedew +bedfellow +bedfellows +bedford +bedlam +bedrench +bedrid +beds +bedtime +bedward +bee +beef +beefs +beehives +been +beer +bees +beest +beetle +beetles +beeves +befall +befallen +befalls +befell +befits +befitted +befitting +befor +before +beforehand +befortune +befriend +befriended +befriends +beg +began +beget +begets +begetting +begg +beggar +beggared +beggarly +beggarman +beggars +beggary +begging +begin +beginners +beginning +beginnings +begins +begnawn +begone +begot +begotten +begrimed +begs +beguil +beguile +beguiled +beguiles +beguiling +begun +behalf +behalfs +behav +behaved +behavedst +behavior +behaviors +behaviour +behaviours +behead +beheaded +beheld +behest +behests +behind +behold +beholder +beholders +beholdest +beholding +beholds +behoof +behooffull +behooves +behove +behoves +behowls +being +bel +belarius +belch +belching +beldam +beldame +beldams +belee +belgia +belie +belied +belief +beliest +believ +believe +believed +believes +believest +believing +belike +bell +bellario +belle +bellied +bellies +bellman +bellona +bellow +bellowed +bellowing +bellows +bells +belly +bellyful +belman +belmont +belock +belong +belonging +belongings +belongs +belov +beloved +beloving +below +belt +belzebub +bemadding +bemet +bemete +bemoan +bemoaned +bemock +bemoil +bemonster +ben +bench +bencher +benches +bend +bended +bending +bends +bene +beneath +benedicite +benedick +benediction +benedictus +benefactors +benefice +beneficial +benefit +benefited +benefits +benetted +benevolence +benevolences +benied +benison +bennet +bent +bentii +bentivolii +bents +benumbed +benvolio +bepaint +bepray +bequeath +bequeathed +bequeathing +bequest +ber +berard +berattle +beray +bere +bereave +bereaved +bereaves +bereft +bergamo +bergomask +berhym +berhyme +berkeley +bermoothes +bernardo +berod +berowne +berri +berries +berrord +berry +bertram +berwick +bescreen +beseech +beseeched +beseechers +beseeching +beseek +beseem +beseemeth +beseeming +beseems +beset +beshrew +beside +besides +besieg +besiege +besieged +beslubber +besmear +besmeared +besmirch +besom +besort +besotted +bespake +bespeak +bespice +bespoke +bespotted +bess +bessy +best +bestained +bested +bestial +bestir +bestirr +bestow +bestowed +bestowing +bestows +bestraught +bestrew +bestrid +bestride +bestrides +bet +betake +beteem +bethink +bethought +bethrothed +bethump +betid +betide +betideth +betime +betimes +betoken +betook +betossed +betray +betrayed +betraying +betrays +betrims +betroth +betrothed +betroths +bett +betted +better +bettered +bettering +betters +betting +bettre +between +betwixt +bevel +beverage +bevis +bevy +bewail +bewailed +bewailing +bewails +beware +bewasted +beweep +bewept +bewet +bewhored +bewitch +bewitched +bewitchment +bewray +beyond +bezonian +bezonians +bianca +bianco +bias +bibble +bickerings +bid +bidden +bidding +biddings +biddy +bide +bides +biding +bids +bien +bier +bifold +big +bigamy +biggen +bigger +bigness +bigot +bilberry +bilbo +bilboes +bilbow +bill +billeted +billets +billiards +billing +billow +billows +bills +bin +bind +bindeth +binding +binds +biondello +birch +bird +birding +birdlime +birds +birnam +birth +birthday +birthdom +birthplace +birthright +birthrights +births +bis +biscuit +bishop +bishops +bisson +bit +bitch +bite +biter +bites +biting +bits +bitt +bitten +bitter +bitterest +bitterly +bitterness +blab +blabb +blabbing +blabs +black +blackamoor +blackamoors +blackberries +blackberry +blacker +blackest +blackfriars +blackheath +blackmere +blackness +blacks +bladder +bladders +blade +bladed +blades +blains +blam +blame +blamed +blameful +blameless +blames +blanc +blanca +blanch +blank +blanket +blanks +blaspheme +blaspheming +blasphemous +blasphemy +blast +blasted +blasting +blastments +blasts +blaz +blaze +blazes +blazing +blazon +blazoned +blazoning +bleach +bleaching +bleak +blear +bleared +bleat +bleated +bleats +bled +bleed +bleedest +bleedeth +bleeding +bleeds +blemish +blemishes +blench +blenches +blend +blended +blent +bless +blessed +blessedly +blessedness +blesses +blesseth +blessing +blessings +blest +blew +blind +blinded +blindfold +blinding +blindly +blindness +blinds +blink +blinking +bliss +blist +blister +blisters +blithe +blithild +bloat +block +blockish +blocks +blois +blood +blooded +bloodhound +bloodied +bloodier +bloodiest +bloodily +bloodless +bloods +bloodshed +bloodshedding +bloodstained +bloody +bloom +blooms +blossom +blossoming +blossoms +blot +blots +blotted +blotting +blount +blow +blowed +blowers +blowest +blowing +blown +blows +blowse +blubb +blubber +blubbering +blue +bluecaps +bluest +blunt +blunted +blunter +bluntest +blunting +bluntly +bluntness +blunts +blur +blurr +blurs +blush +blushes +blushest +blushing +blust +bluster +blusterer +blusters +bo +boar +board +boarded +boarding +boards +boarish +boars +boast +boasted +boastful +boasting +boasts +boat +boats +boatswain +bob +bobb +boblibindo +bobtail +bocchus +bode +boded +bodements +bodes +bodg +bodied +bodies +bodiless +bodily +boding +bodkin +body +bodykins +bog +boggle +boggler +bogs +bohemia +bohemian +bohun +boil +boiling +boils +boist +boisterous +boisterously +boitier +bold +bolden +bolder +boldest +boldly +boldness +bolds +bolingbroke +bolster +bolt +bolted +bolter +bolters +bolting +bolts +bombard +bombards +bombast +bon +bona +bond +bondage +bonded +bondmaid +bondman +bondmen +bonds +bondslave +bone +boneless +bones +bonfire +bonfires +bonjour +bonne +bonnet +bonneted +bonny +bonos +bonto +bonville +bood +book +bookish +books +boon +boor +boorish +boors +boot +booted +booties +bootless +boots +booty +bor +bora +borachio +bordeaux +border +bordered +borderers +borders +bore +boreas +bores +boring +born +borne +borough +boroughs +borrow +borrowed +borrower +borrowing +borrows +bosko +boskos +bosky +bosom +bosoms +boson +boss +bosworth +botch +botcher +botches +botchy +both +bots +bottle +bottled +bottles +bottom +bottomless +bottoms +bouciqualt +bouge +bough +boughs +bought +bounce +bouncing +bound +bounded +bounden +boundeth +bounding +boundless +bounds +bounteous +bounteously +bounties +bountiful +bountifully +bounty +bourbier +bourbon +bourchier +bourdeaux +bourn +bout +bouts +bove +bow +bowcase +bowed +bowels +bower +bowing +bowl +bowler +bowling +bowls +bows +bowsprit +bowstring +box +boxes +boy +boyet +boyish +boys +brabant +brabantio +brabble +brabbler +brac +brace +bracelet +bracelets +brach +bracy +brag +bragg +braggardism +braggards +braggart +braggarts +bragged +bragging +bragless +brags +braid +braided +brain +brained +brainford +brainish +brainless +brains +brainsick +brainsickly +brake +brakenbury +brakes +brambles +bran +branch +branches +branchless +brand +branded +brandish +brandon +brands +bras +brass +brassy +brat +brats +brav +brave +braved +bravely +braver +bravery +braves +bravest +braving +brawl +brawler +brawling +brawls +brawn +brawns +bray +braying +braz +brazen +brazier +breach +breaches +bread +breadth +break +breaker +breakfast +breaking +breaks +breast +breasted +breasting +breastplate +breasts +breath +breathe +breathed +breather +breathers +breathes +breathest +breathing +breathless +breaths +brecknock +bred +breech +breeches +breeching +breed +breeder +breeders +breeding +breeds +breese +breeze +breff +bretagne +brethen +bretheren +brethren +brevis +brevity +brew +brewage +brewer +brewers +brewing +brews +briareus +briars +brib +bribe +briber +bribes +brick +bricklayer +bricks +bridal +bride +bridegroom +bridegrooms +brides +bridge +bridgenorth +bridges +bridget +bridle +bridled +brief +briefer +briefest +briefly +briefness +brier +briers +brigandine +bright +brighten +brightest +brightly +brightness +brim +brimful +brims +brimstone +brinded +brine +bring +bringer +bringeth +bringing +bringings +brings +brinish +brink +brisk +brisky +bristle +bristled +bristly +bristol +bristow +britain +britaine +britaines +british +briton +britons +brittany +brittle +broach +broached +broad +broader +broadsides +brocas +brock +brogues +broil +broiling +broils +broke +broken +brokenly +broker +brokers +brokes +broking +brooch +brooches +brood +brooded +brooding +brook +brooks +broom +broomstaff +broth +brothel +brother +brotherhood +brotherhoods +brotherly +brothers +broths +brought +brow +brown +browner +brownist +browny +brows +browse +browsing +bruis +bruise +bruised +bruises +bruising +bruit +bruited +brundusium +brunt +brush +brushes +brute +brutish +brutus +bubble +bubbles +bubbling +bubukles +buck +bucket +buckets +bucking +buckingham +buckle +buckled +buckler +bucklers +bucklersbury +buckles +buckram +bucks +bud +budded +budding +budge +budger +budget +buds +buff +buffet +buffeting +buffets +bug +bugbear +bugle +bugs +build +builded +buildeth +building +buildings +builds +built +bulk +bulks +bull +bullcalf +bullen +bullens +bullet +bullets +bullocks +bulls +bully +bulmer +bulwark +bulwarks +bum +bumbast +bump +bumper +bums +bunch +bunches +bundle +bung +bunghole +bungle +bunting +buoy +bur +burbolt +burd +burden +burdened +burdening +burdenous +burdens +burgh +burgher +burghers +burglary +burgomasters +burgonet +burgundy +burial +buried +burier +buriest +burly +burn +burned +burnet +burneth +burning +burnish +burns +burnt +burr +burrows +burs +burst +bursting +bursts +burthen +burthens +burton +bury +burying +bush +bushels +bushes +bushy +busied +busily +busines +business +businesses +buskin +busky +buss +busses +bussing +bustle +bustling +busy +but +butcheed +butcher +butchered +butcheries +butcherly +butchers +butchery +butler +butt +butter +buttered +butterflies +butterfly +butterwoman +buttery +buttock +buttocks +button +buttonhole +buttons +buttress +buttry +butts +buxom +buy +buyer +buying +buys +buzz +buzzard +buzzards +buzzers +buzzing +by +bye +byzantium +c +ca +cabbage +cabileros +cabin +cabins +cable +cables +cackling +cacodemon +caddis +caddisses +cade +cadence +cadent +cades +cadmus +caduceus +cadwal +cadwallader +caelius +caelo +caesar +caesarion +caesars +cage +caged +cagion +cain +caithness +caitiff +caitiffs +caius +cak +cake +cakes +calaber +calais +calamities +calamity +calchas +calculate +calen +calendar +calendars +calf +caliban +calibans +calipolis +cality +caliver +call +callat +called +callet +calling +calls +calm +calmest +calmly +calmness +calms +calpurnia +calumniate +calumniating +calumnious +calumny +calve +calved +calves +calveskins +calydon +cam +cambio +cambria +cambric +cambrics +cambridge +cambyses +came +camel +camelot +camels +camest +camillo +camlet +camomile +camp +campeius +camping +camps +can +canakin +canaries +canary +cancel +cancell +cancelled +cancelling +cancels +cancer +candidatus +candied +candle +candles +candlesticks +candy +canidius +cank +canker +cankerblossom +cankers +cannibally +cannibals +cannon +cannoneer +cannons +cannot +canon +canoniz +canonize +canonized +canons +canopied +canopies +canopy +canst +canstick +canterbury +cantle +cantons +canus +canvas +canvass +canzonet +cap +capability +capable +capacities +capacity +caparison +capdv +cape +capel +capels +caper +capers +capet +caphis +capilet +capitaine +capital +capite +capitol +capitulate +capocchia +capon +capons +capp +cappadocia +capriccio +capricious +caps +capt +captain +captains +captainship +captious +captivate +captivated +captivates +captive +captives +captivity +captum +capucius +capulet +capulets +car +carack +caracks +carat +caraways +carbonado +carbuncle +carbuncled +carbuncles +carcanet +carcase +carcases +carcass +carcasses +card +cardecue +carded +carders +cardinal +cardinally +cardinals +cardmaker +cards +carduus +care +cared +career +careers +careful +carefully +careless +carelessly +carelessness +cares +caret +cargo +carl +carlisle +carlot +carman +carmen +carnal +carnally +carnarvonshire +carnation +carnations +carol +carous +carouse +caroused +carouses +carousing +carp +carpenter +carper +carpet +carpets +carping +carriage +carriages +carried +carrier +carriers +carries +carrion +carrions +carry +carrying +cars +cart +carters +carthage +carts +carv +carve +carved +carver +carves +carving +cas +casa +casaer +casca +case +casement +casements +cases +cash +cashier +casing +cask +casket +casketed +caskets +casque +casques +cassado +cassandra +cassibelan +cassio +cassius +cassocks +cast +castalion +castaway +castaways +casted +caster +castigate +castigation +castile +castiliano +casting +castle +castles +casts +casual +casually +casualties +casualty +cat +cataian +catalogue +cataplasm +cataracts +catarrhs +catastrophe +catch +catcher +catches +catching +cate +catechising +catechism +catechize +cater +caterpillars +caters +caterwauling +cates +catesby +cathedral +catlike +catling +catlings +cato +cats +cattle +caucasus +caudle +cauf +caught +cauldron +caus +cause +caused +causeless +causer +causes +causest +causeth +cautel +cautelous +cautels +cauterizing +caution +cautions +cavaleiro +cavalery +cavaliers +cave +cavern +caverns +caves +caveto +caviary +cavil +cavilling +cawdor +cawdron +cawing +ce +ceas +cease +ceases +ceaseth +cedar +cedars +cedius +celebrate +celebrated +celebrates +celebration +celerity +celestial +celia +cell +cellar +cellarage +celsa +cement +censer +censor +censorinus +censur +censure +censured +censurers +censures +censuring +centaur +centaurs +centre +cents +centuries +centurion +centurions +century +cerberus +cerecloth +cerements +ceremonial +ceremonies +ceremonious +ceremoniously +ceremony +ceres +cerns +certain +certainer +certainly +certainties +certainty +certes +certificate +certified +certifies +certify +ces +cesario +cess +cesse +cestern +cetera +cette +chaces +chaf +chafe +chafed +chafes +chaff +chaffless +chafing +chain +chains +chair +chairs +chalic +chalice +chalices +chalk +chalks +chalky +challeng +challenge +challenged +challenger +challengers +challenges +cham +chamber +chamberers +chamberlain +chamberlains +chambermaid +chambermaids +chambers +chameleon +champ +champagne +champain +champains +champion +champions +chanc +chance +chanced +chancellor +chances +chandler +chang +change +changeable +changed +changeful +changeling +changelings +changer +changes +changest +changing +channel +channels +chanson +chant +chanticleer +chanting +chantries +chantry +chants +chaos +chap +chape +chapel +chapeless +chapels +chaplain +chaplains +chapless +chaplet +chapmen +chaps +chapter +character +charactered +characterless +characters +charactery +characts +charbon +chare +chares +charg +charge +charged +chargeful +charges +chargeth +charging +chariest +chariness +charing +chariot +chariots +charitable +charitably +charities +charity +charlemain +charles +charm +charmed +charmer +charmeth +charmian +charming +charmingly +charms +charneco +charnel +charolois +charon +charter +charters +chartreux +chary +charybdis +chas +chase +chased +chaser +chaseth +chasing +chaste +chastely +chastis +chastise +chastised +chastisement +chastity +chat +chatham +chatillon +chats +chatt +chattels +chatter +chattering +chattles +chaud +chaunted +chaw +chawdron +che +cheap +cheapen +cheaper +cheapest +cheaply +cheapside +cheat +cheated +cheater +cheaters +cheating +cheats +check +checked +checker +checking +checks +cheek +cheeks +cheer +cheered +cheerer +cheerful +cheerfully +cheering +cheerless +cheerly +cheers +cheese +chequer +cher +cherish +cherished +cherisher +cherishes +cherishing +cherries +cherry +cherrypit +chertsey +cherub +cherubims +cherubin +cherubins +cheshu +chess +chest +chester +chestnut +chestnuts +chests +chetas +chev +cheval +chevalier +chevaliers +cheveril +chew +chewed +chewet +chewing +chez +chi +chick +chicken +chickens +chicurmurco +chid +chidden +chide +chiders +chides +chiding +chief +chiefest +chiefly +chien +child +childed +childeric +childhood +childhoods +childing +childish +childishness +childlike +childness +children +chill +chilling +chime +chimes +chimney +chimneypiece +chimneys +chimurcho +chin +china +chine +chines +chink +chinks +chins +chipp +chipper +chips +chiron +chirping +chirrah +chirurgeonly +chisel +chitopher +chivalrous +chivalry +choice +choicely +choicest +choir +choirs +chok +choke +choked +chokes +choking +choler +choleric +cholers +chollors +choose +chooser +chooses +chooseth +choosing +chop +chopine +choplogic +chopp +chopped +chopping +choppy +chops +chopt +chor +choristers +chorus +chose +chosen +chough +choughs +chrish +christ +christen +christendom +christendoms +christening +christenings +christian +christianlike +christians +christmas +christom +christopher +christophero +chronicle +chronicled +chronicler +chroniclers +chronicles +chrysolite +chuck +chucks +chud +chuffs +church +churches +churchman +churchmen +churchyard +churchyards +churl +churlish +churlishly +churls +churn +chus +cicatrice +cicatrices +cicely +cicero +ciceter +ciel +ciitzens +cilicia +cimber +cimmerian +cinable +cincture +cinders +cine +cinna +cinque +cipher +ciphers +circa +circe +circle +circled +circlets +circling +circuit +circum +circumcised +circumference +circummur +circumscrib +circumscribed +circumscription +circumspect +circumstance +circumstanced +circumstances +circumstantial +circumvent +circumvention +cistern +citadel +cital +cite +cited +cites +cities +citing +citizen +citizens +cittern +city +civet +civil +civility +civilly +clack +clad +claim +claiming +claims +clamb +clamber +clammer +clamor +clamorous +clamors +clamour +clamours +clang +clangor +clap +clapp +clapped +clapper +clapping +claps +clare +clarence +claret +claribel +clasp +clasps +clatter +claud +claudio +claudius +clause +claw +clawed +clawing +claws +clay +clays +clean +cleanliest +cleanly +cleans +cleanse +cleansing +clear +clearer +clearest +clearly +clearness +clears +cleave +cleaving +clef +cleft +cleitus +clemency +clement +cleomenes +cleopatpa +cleopatra +clepeth +clept +clerestories +clergy +clergyman +clergymen +clerk +clerkly +clerks +clew +client +clients +cliff +clifford +cliffords +cliffs +clifton +climate +climature +climb +climbed +climber +climbeth +climbing +climbs +clime +cling +clink +clinking +clinquant +clip +clipp +clipper +clippeth +clipping +clipt +clitus +clo +cloak +cloakbag +cloaks +clock +clocks +clod +cloddy +clodpole +clog +clogging +clogs +cloister +cloistress +cloquence +clos +close +closed +closely +closeness +closer +closes +closest +closet +closing +closure +cloten +clotens +cloth +clothair +clotharius +clothe +clothes +clothier +clothiers +clothing +cloths +clotpoles +clotpoll +cloud +clouded +cloudiness +clouds +cloudy +clout +clouted +clouts +cloven +clover +cloves +clovest +clowder +clown +clownish +clowns +cloy +cloyed +cloying +cloyless +cloyment +cloys +club +clubs +cluck +clung +clust +clusters +clutch +clyster +cneius +cnemies +co +coach +coaches +coachmakers +coact +coactive +coagulate +coal +coals +coarse +coarsely +coast +coasting +coasts +coat +coated +coats +cobble +cobbled +cobbler +cobham +cobloaf +cobweb +cobwebs +cock +cockatrice +cockatrices +cockle +cockled +cockney +cockpit +cocks +cocksure +coctus +cocytus +cod +codding +codling +codpiece +codpieces +cods +coelestibus +coesar +coeur +coffer +coffers +coffin +coffins +cog +cogging +cogitation +cogitations +cognition +cognizance +cogscomb +cohabitants +coher +cohere +coherence +coherent +cohorts +coif +coign +coil +coin +coinage +coiner +coining +coins +col +colbrand +colchos +cold +colder +coldest +coldly +coldness +coldspur +colebrook +colic +collar +collars +collateral +colleagued +collect +collected +collection +college +colleges +collied +collier +colliers +collop +collusion +colme +colmekill +coloquintida +color +colors +colossus +colour +colourable +coloured +colouring +colours +colt +colted +colts +columbine +columbines +colville +com +comagene +comart +comb +combat +combatant +combatants +combated +combating +combin +combinate +combination +combine +combined +combless +combustion +come +comedian +comedians +comedy +comeliness +comely +comer +comers +comes +comest +comet +cometh +comets +comfect +comfit +comfits +comfort +comfortable +comforted +comforter +comforting +comfortless +comforts +comic +comical +coming +comings +cominius +comma +command +commande +commanded +commander +commanders +commanding +commandment +commandments +commands +comme +commenc +commence +commenced +commencement +commences +commencing +commend +commendable +commendation +commendations +commended +commending +commends +comment +commentaries +commenting +comments +commerce +commingled +commiseration +commission +commissioners +commissions +commit +commits +committ +committed +committing +commix +commixed +commixtion +commixture +commodious +commodities +commodity +common +commonalty +commoner +commoners +commonly +commons +commonweal +commonwealth +commotion +commotions +commune +communicat +communicate +communication +communities +community +comonty +compact +companies +companion +companions +companionship +company +compar +comparative +compare +compared +comparing +comparison +comparisons +compartner +compass +compasses +compassing +compassion +compassionate +compeers +compel +compell +compelled +compelling +compels +compensation +competence +competency +competent +competitor +competitors +compil +compile +compiled +complain +complainer +complainest +complaining +complainings +complains +complaint +complaints +complement +complements +complete +complexion +complexioned +complexions +complices +complies +compliment +complimental +compliments +complot +complots +complotted +comply +compos +compose +composed +composition +compost +composture +composure +compound +compounded +compounds +comprehend +comprehended +comprehends +compremises +compris +comprising +compromis +compromise +compt +comptible +comptrollers +compulsatory +compulsion +compulsive +compunctious +computation +comrade +comrades +comutual +con +concave +concavities +conceal +concealed +concealing +concealment +concealments +conceals +conceit +conceited +conceitless +conceits +conceiv +conceive +conceived +conceives +conceiving +conception +conceptions +conceptious +concern +concernancy +concerneth +concerning +concernings +concerns +conclave +conclud +conclude +concluded +concludes +concluding +conclusion +conclusions +concolinel +concord +concubine +concupiscible +concupy +concur +concurring +concurs +condemn +condemnation +condemned +condemning +condemns +condescend +condign +condition +conditionally +conditions +condole +condolement +condoling +conduce +conduct +conducted +conducting +conductor +conduit +conduits +conected +coney +confection +confectionary +confections +confederacy +confederate +confederates +confer +conference +conferr +conferring +confess +confessed +confesses +confesseth +confessing +confession +confessions +confessor +confidence +confident +confidently +confin +confine +confined +confineless +confiners +confines +confining +confirm +confirmation +confirmations +confirmed +confirmer +confirmers +confirming +confirmities +confirms +confiscate +confiscated +confiscation +confixed +conflict +conflicting +conflicts +confluence +conflux +conform +conformable +confound +confounded +confounding +confounds +confront +confronted +confus +confused +confusedly +confusion +confusions +confutation +confutes +congeal +congealed +congealment +congee +conger +congest +congied +congratulate +congreeing +congreeted +congregate +congregated +congregation +congregations +congruent +congruing +conies +conjectural +conjecture +conjectures +conjoin +conjoined +conjoins +conjointly +conjunct +conjunction +conjunctive +conjur +conjuration +conjurations +conjure +conjured +conjurer +conjurers +conjures +conjuring +conjuro +conn +connected +connive +conqu +conquer +conquered +conquering +conqueror +conquerors +conquers +conquest +conquests +conquring +conrade +cons +consanguineous +consanguinity +conscienc +conscience +consciences +conscionable +consecrate +consecrated +consecrations +consent +consented +consenting +consents +consequence +consequences +consequently +conserve +conserved +conserves +consider +considerance +considerate +consideration +considerations +considered +considering +considerings +considers +consign +consigning +consist +consisteth +consisting +consistory +consists +consolate +consolation +consonancy +consonant +consort +consorted +consortest +conspectuities +conspir +conspiracy +conspirant +conspirator +conspirators +conspire +conspired +conspirers +conspires +conspiring +constable +constables +constance +constancies +constancy +constant +constantine +constantinople +constantly +constellation +constitution +constrain +constrained +constraineth +constrains +constraint +constring +construction +construe +consul +consuls +consulship +consulships +consult +consulting +consults +consum +consume +consumed +consumes +consuming +consummate +consummation +consumption +consumptions +contagion +contagious +contain +containing +contains +contaminate +contaminated +contemn +contemned +contemning +contemns +contemplate +contemplation +contemplative +contempt +contemptible +contempts +contemptuous +contemptuously +contend +contended +contending +contendon +content +contenta +contented +contenteth +contention +contentious +contentless +contento +contents +contest +contestation +continence +continency +continent +continents +continu +continual +continually +continuance +continuantly +continuate +continue +continued +continuer +continues +continuing +contract +contracted +contracting +contraction +contradict +contradicted +contradiction +contradicts +contraries +contrarieties +contrariety +contrarious +contrariously +contrary +contre +contribution +contributors +contrite +contriv +contrive +contrived +contriver +contrives +contriving +control +controll +controller +controlling +controlment +controls +controversy +contumelious +contumeliously +contumely +contusions +convenience +conveniences +conveniency +convenient +conveniently +convented +conventicles +convents +convers +conversant +conversation +conversations +converse +conversed +converses +conversing +conversion +convert +converted +convertest +converting +convertite +convertites +converts +convey +conveyance +conveyances +conveyers +conveying +convict +convicted +convince +convinced +convinces +convive +convocation +convoy +convulsions +cony +cook +cookery +cooks +cool +cooled +cooling +cools +coop +coops +cop +copatain +cope +cophetua +copied +copies +copious +copper +copperspur +coppice +copulation +copulatives +copy +cor +coragio +coral +coram +corambus +coranto +corantos +corbo +cord +corded +cordelia +cordial +cordis +cords +core +corin +corinth +corinthian +coriolanus +corioli +cork +corky +cormorant +corn +cornelia +cornelius +corner +corners +cornerstone +cornets +cornish +corns +cornuto +cornwall +corollary +coronal +coronation +coronet +coronets +corporal +corporals +corporate +corpse +corpulent +correct +corrected +correcting +correction +correctioner +corrects +correspondence +correspondent +corresponding +corresponsive +corrigible +corrival +corrivals +corroborate +corrosive +corrupt +corrupted +corrupter +corrupters +corruptible +corruptibly +corrupting +corruption +corruptly +corrupts +corse +corses +corslet +cosmo +cost +costard +costermongers +costlier +costly +costs +cot +cote +coted +cotsall +cotsole +cotswold +cottage +cottages +cotus +couch +couched +couching +couchings +coude +cough +coughing +could +couldst +coulter +council +councillor +councils +counsel +counsell +counsellor +counsellors +counselor +counselors +counsels +count +counted +countenanc +countenance +countenances +counter +counterchange +countercheck +counterfeit +counterfeited +counterfeiting +counterfeitly +counterfeits +countermand +countermands +countermines +counterpart +counterpoints +counterpois +counterpoise +counters +countervail +countess +countesses +counties +counting +countless +countries +countrv +country +countryman +countrymen +counts +county +couper +couple +coupled +couplement +couples +couplet +couplets +cour +courage +courageous +courageously +courages +courier +couriers +couronne +cours +course +coursed +courser +coursers +courses +coursing +court +courted +courteous +courteously +courtesan +courtesies +courtesy +courtezan +courtezans +courtier +courtiers +courtlike +courtly +courtney +courts +courtship +cousin +cousins +couterfeit +coutume +covenant +covenants +covent +coventry +cover +covered +covering +coverlet +covers +covert +covertly +coverture +covet +coveted +coveting +covetings +covetous +covetously +covetousness +covets +cow +coward +cowarded +cowardice +cowardly +cowards +cowardship +cowish +cowl +cowslip +cowslips +cox +coxcomb +coxcombs +coy +coystrill +coz +cozen +cozenage +cozened +cozener +cozeners +cozening +coziers +crab +crabbed +crabs +crack +cracked +cracker +crackers +cracking +cracks +cradle +cradled +cradles +craft +crafted +craftied +craftier +craftily +crafts +craftsmen +crafty +cram +cramm +cramp +cramps +crams +cranking +cranks +cranmer +crannied +crannies +cranny +crants +crare +crash +crassus +crav +crave +craved +craven +cravens +craves +craveth +craving +crawl +crawling +crawls +craz +crazed +crazy +creaking +cream +create +created +creates +creating +creation +creator +creature +creatures +credence +credent +credible +credit +creditor +creditors +credo +credulity +credulous +creed +creek +creeks +creep +creeping +creeps +crept +crescent +crescive +cressets +cressid +cressida +cressids +cressy +crest +crested +crestfall +crestless +crests +cretan +crete +crevice +crew +crews +crib +cribb +cribs +cricket +crickets +cried +criedst +crier +cries +criest +crieth +crime +crimeful +crimeless +crimes +criminal +crimson +cringe +cripple +crisp +crisped +crispian +crispianus +crispin +critic +critical +critics +croak +croaking +croaks +crocodile +cromer +cromwell +crone +crook +crookback +crooked +crooking +crop +cropp +crosby +cross +crossed +crosses +crossest +crossing +crossings +crossly +crossness +crost +crotchets +crouch +crouching +crow +crowd +crowded +crowding +crowds +crowflowers +crowing +crowkeeper +crown +crowned +crowner +crownet +crownets +crowning +crowns +crows +crudy +cruel +cruell +crueller +cruelly +cruels +cruelty +crum +crumble +crumbs +crupper +crusadoes +crush +crushed +crushest +crushing +crust +crusts +crusty +crutch +crutches +cry +crying +crystal +crystalline +crystals +cub +cubbert +cubiculo +cubit +cubs +cuckold +cuckoldly +cuckolds +cuckoo +cucullus +cudgel +cudgeled +cudgell +cudgelling +cudgels +cue +cues +cuff +cuffs +cuique +cull +culling +cullion +cullionly +cullions +culpable +culverin +cum +cumber +cumberland +cunning +cunningly +cunnings +cuore +cup +cupbearer +cupboarding +cupid +cupids +cuppele +cups +cur +curan +curate +curb +curbed +curbing +curbs +curd +curdied +curds +cure +cured +cureless +curer +cures +curfew +curing +curio +curiosity +curious +curiously +curl +curled +curling +curls +currance +currants +current +currents +currish +curry +curs +curse +cursed +curses +cursies +cursing +cursorary +curst +curster +curstest +curstness +cursy +curtail +curtain +curtains +curtal +curtis +curtle +curtsied +curtsies +curtsy +curvet +curvets +cushes +cushion +cushions +custalorum +custard +custody +custom +customary +customed +customer +customers +customs +custure +cut +cutler +cutpurse +cutpurses +cuts +cutter +cutting +cuttle +cxsar +cyclops +cydnus +cygnet +cygnets +cym +cymbals +cymbeline +cyme +cynic +cynthia +cypress +cypriot +cyprus +cyrus +cytherea +d +dabbled +dace +dad +daedalus +daemon +daff +daffed +daffest +daffodils +dagger +daggers +dagonet +daily +daintier +dainties +daintiest +daintily +daintiness +daintry +dainty +daisied +daisies +daisy +dale +dalliance +dallied +dallies +dally +dallying +dalmatians +dam +damage +damascus +damask +damasked +dame +dames +damm +damn +damnable +damnably +damnation +damned +damns +damoiselle +damon +damosella +damp +dams +damsel +damsons +dan +danc +dance +dancer +dances +dancing +dandle +dandy +dane +dang +danger +dangerous +dangerously +dangers +dangling +daniel +danish +dank +dankish +danskers +daphne +dappled +dapples +dar +dardan +dardanian +dardanius +dare +dared +dareful +dares +darest +daring +darius +dark +darken +darkening +darkens +darker +darkest +darkling +darkly +darkness +darling +darlings +darnel +darraign +dart +darted +darter +dartford +darting +darts +dash +dashes +dashing +dastard +dastards +dat +datchet +date +dated +dateless +dates +daub +daughter +daughters +daunt +daunted +dauntless +dauphin +daventry +davy +daw +dawn +dawning +daws +day +daylight +days +dazzle +dazzled +dazzling +de +dead +deadly +deaf +deafing +deafness +deafs +deal +dealer +dealers +dealest +dealing +dealings +deals +dealt +dean +deanery +dear +dearer +dearest +dearly +dearness +dears +dearth +dearths +death +deathbed +deathful +deaths +deathsman +deathsmen +debarred +debase +debate +debated +debatement +debateth +debating +debauch +debile +debility +debitor +debonair +deborah +debosh +debt +debted +debtor +debtors +debts +debuty +decay +decayed +decayer +decaying +decays +deceas +decease +deceased +deceit +deceitful +deceits +deceiv +deceivable +deceive +deceived +deceiver +deceivers +deceives +deceivest +deceiveth +deceiving +december +decent +deceptious +decerns +decide +decides +decimation +decipher +deciphers +decision +decius +deck +decking +decks +deckt +declare +declares +declension +declensions +declin +decline +declined +declines +declining +decoct +decorum +decreas +decrease +decreasing +decree +decreed +decrees +decrepit +dedicate +dedicated +dedicates +dedication +deed +deedless +deeds +deem +deemed +deep +deeper +deepest +deeply +deeps +deepvow +deer +deesse +defac +deface +defaced +defacer +defacers +defacing +defam +default +defeat +defeated +defeats +defeatures +defect +defective +defects +defence +defences +defend +defendant +defended +defender +defenders +defending +defends +defense +defensible +defensive +defer +deferr +defiance +deficient +defied +defies +defil +defile +defiler +defiles +defiling +define +definement +definite +definitive +definitively +deflow +deflower +deflowered +deform +deformed +deformities +deformity +deftly +defunct +defunction +defuse +defy +defying +degenerate +degraded +degree +degrees +deified +deifying +deign +deigned +deiphobus +deities +deity +deja +deject +dejected +delabreth +delay +delayed +delaying +delays +delectable +deliberate +delicate +delicates +delicious +deliciousness +delight +delighted +delightful +delights +delinquents +deliv +deliver +deliverance +delivered +delivering +delivers +delivery +delphos +deluded +deluding +deluge +delve +delver +delves +demand +demanded +demanding +demands +demean +demeanor +demeanour +demerits +demesnes +demetrius +demi +demigod +demise +demoiselles +demon +demonstrable +demonstrate +demonstrated +demonstrating +demonstration +demonstrative +demure +demurely +demuring +den +denay +deni +denial +denials +denied +denier +denies +deniest +denis +denmark +dennis +denny +denote +denoted +denotement +denounc +denounce +denouncing +dens +denunciation +deny +denying +deo +depart +departed +departest +departing +departure +depeche +depend +dependant +dependants +depended +dependence +dependences +dependency +dependent +dependents +depender +depending +depends +deplore +deploring +depopulate +depos +depose +deposed +deposing +depositaries +deprav +depravation +deprave +depraved +depraves +depress +depriv +deprive +depth +depths +deputation +depute +deputed +deputies +deputing +deputy +deracinate +derby +dercetas +dere +derides +derision +deriv +derivation +derivative +derive +derived +derives +derogate +derogately +derogation +des +desartless +descant +descend +descended +descending +descends +descension +descent +descents +describe +described +describes +descried +description +descriptions +descry +desdemon +desdemona +desert +deserts +deserv +deserve +deserved +deservedly +deserver +deservers +deserves +deservest +deserving +deservings +design +designment +designments +designs +desir +desire +desired +desirers +desires +desirest +desiring +desirous +desist +desk +desolate +desolation +desp +despair +despairing +despairs +despatch +desperate +desperately +desperation +despis +despise +despised +despiser +despiseth +despising +despite +despiteful +despoiled +dest +destin +destined +destinies +destiny +destitute +destroy +destroyed +destroyer +destroyers +destroying +destroys +destruction +destructions +det +detain +detains +detect +detected +detecting +detection +detector +detects +detention +determin +determinate +determination +determinations +determine +determined +determines +detest +detestable +detested +detesting +detests +detract +detraction +detractions +deucalion +deuce +deum +deux +devant +devesting +device +devices +devil +devilish +devils +devis +devise +devised +devises +devising +devoid +devonshire +devote +devoted +devotion +devour +devoured +devourers +devouring +devours +devout +devoutly +dew +dewberries +dewdrops +dewlap +dewlapp +dews +dewy +dexter +dexteriously +dexterity +di +diable +diablo +diadem +dial +dialect +dialogue +dialogued +dials +diameter +diamond +diamonds +dian +diana +diaper +dibble +dic +dice +dicers +dich +dick +dickens +dickon +dicky +dictator +diction +dictynna +did +diddle +didest +dido +didst +die +died +diedst +dies +diest +diet +dieted +dieter +dieu +diff +differ +difference +differences +differency +different +differing +differs +difficile +difficult +difficulties +difficulty +diffidence +diffidences +diffus +diffused +diffusest +dig +digest +digested +digestion +digestions +digg +digging +dighton +dignified +dignifies +dignify +dignities +dignity +digress +digressing +digression +digs +digt +dilate +dilated +dilations +dilatory +dild +dildos +dilemma +dilemmas +diligence +diligent +diluculo +dim +dimension +dimensions +diminish +diminishing +diminution +diminutive +diminutives +dimm +dimmed +dimming +dimpled +dimples +dims +din +dine +dined +diner +dines +ding +dining +dinner +dinners +dinnertime +dint +diomed +diomede +diomedes +dion +dip +dipp +dipping +dips +dir +dire +direct +directed +directing +direction +directions +directitude +directive +directly +directs +direful +direness +direst +dirge +dirges +dirt +dirty +dis +disability +disable +disabled +disabling +disadvantage +disagree +disallow +disanimates +disannul +disannuls +disappointed +disarm +disarmed +disarmeth +disarms +disaster +disasters +disastrous +disbench +disbranch +disburdened +disburs +disburse +disbursed +discandy +discandying +discard +discarded +discase +discased +discern +discerner +discerning +discernings +discerns +discharg +discharge +discharged +discharging +discipled +disciples +disciplin +discipline +disciplined +disciplines +disclaim +disclaiming +disclaims +disclos +disclose +disclosed +discloses +discolour +discoloured +discolours +discomfit +discomfited +discomfiture +discomfort +discomfortable +discommend +disconsolate +discontent +discontented +discontentedly +discontenting +discontents +discontinue +discontinued +discord +discordant +discords +discourse +discoursed +discourser +discourses +discoursive +discourtesy +discov +discover +discovered +discoverers +discoveries +discovering +discovers +discovery +discredit +discredited +discredits +discreet +discreetly +discretion +discretions +discuss +disdain +disdained +disdaineth +disdainful +disdainfully +disdaining +disdains +disdnguish +diseas +disease +diseased +diseases +disedg +disembark +disfigure +disfigured +disfurnish +disgorge +disgrac +disgrace +disgraced +disgraceful +disgraces +disgracing +disgracious +disguis +disguise +disguised +disguiser +disguises +disguising +dish +dishabited +dishclout +dishearten +disheartens +dishes +dishonest +dishonestly +dishonesty +dishonor +dishonorable +dishonors +dishonour +dishonourable +dishonoured +dishonours +disinherit +disinherited +disjoin +disjoining +disjoins +disjoint +disjunction +dislik +dislike +disliken +dislikes +dislimns +dislocate +dislodg +disloyal +disloyalty +dismal +dismantle +dismantled +dismask +dismay +dismayed +dismemb +dismember +dismes +dismiss +dismissed +dismissing +dismission +dismount +dismounted +disnatur +disobedience +disobedient +disobey +disobeys +disorb +disorder +disordered +disorderly +disorders +disparage +disparagement +disparagements +dispark +dispatch +dispensation +dispense +dispenses +dispers +disperse +dispersed +dispersedly +dispersing +dispiteous +displac +displace +displaced +displant +displanting +display +displayed +displeas +displease +displeased +displeasing +displeasure +displeasures +disponge +disport +disports +dispos +dispose +disposed +disposer +disposing +disposition +dispositions +dispossess +dispossessing +disprais +dispraise +dispraising +dispraisingly +dispropertied +disproportion +disproportioned +disprov +disprove +disproved +dispursed +disputable +disputation +disputations +dispute +disputed +disputes +disputing +disquantity +disquiet +disquietly +disrelish +disrobe +disseat +dissemble +dissembled +dissembler +dissemblers +dissembling +dissembly +dissension +dissensions +dissentious +dissever +dissipation +dissolute +dissolutely +dissolution +dissolutions +dissolv +dissolve +dissolved +dissolves +dissuade +dissuaded +distaff +distaffs +distain +distains +distance +distant +distaste +distasted +distasteful +distemp +distemper +distemperature +distemperatures +distempered +distempering +distil +distill +distillation +distilled +distills +distilment +distinct +distinction +distinctly +distingue +distinguish +distinguishes +distinguishment +distract +distracted +distractedly +distraction +distractions +distracts +distrain +distraught +distress +distressed +distresses +distressful +distribute +distributed +distribution +distrust +distrustful +disturb +disturbed +disturbers +disturbing +disunite +disvalued +disvouch +dit +ditch +ditchers +ditches +dites +ditties +ditty +diurnal +div +dive +diver +divers +diversely +diversity +divert +diverted +diverts +dives +divest +dividable +dividant +divide +divided +divides +divideth +divin +divination +divine +divinely +divineness +diviner +divines +divinest +divining +divinity +division +divisions +divorc +divorce +divorced +divorcement +divorcing +divulg +divulge +divulged +divulging +dizy +dizzy +do +doating +dobbin +dock +docks +doct +doctor +doctors +doctrine +document +dodge +doe +doer +doers +does +doest +doff +dog +dogberry +dogfish +dogg +dogged +dogs +doigts +doing +doings +doit +doits +dolabella +dole +doleful +doll +dollar +dollars +dolor +dolorous +dolour +dolours +dolphin +dolt +dolts +domestic +domestics +dominance +dominations +dominator +domine +domineer +domineering +dominical +dominion +dominions +domitius +dommelton +don +donalbain +donation +donc +doncaster +done +dong +donn +donne +donner +donnerai +doom +doomsday +door +doorkeeper +doors +dorcas +doreus +doricles +dormouse +dorothy +dorset +dorsetshire +dost +dotage +dotant +dotard +dotards +dote +doted +doters +dotes +doteth +doth +doting +double +doubled +doubleness +doubler +doublet +doublets +doubling +doubly +doubt +doubted +doubtful +doubtfully +doubting +doubtless +doubts +doug +dough +doughty +doughy +douglas +dout +doute +douts +dove +dovehouse +dover +doves +dow +dowager +dowdy +dower +dowerless +dowers +dowlas +dowle +down +downfall +downright +downs +downstairs +downtrod +downward +downwards +downy +dowries +dowry +dowsabel +doxy +dozed +dozen +dozens +dozy +drab +drabbing +drabs +drachma +drachmas +draff +drag +dragg +dragged +dragging +dragon +dragonish +dragons +drain +drained +drains +drake +dram +dramatis +drank +draught +draughts +drave +draw +drawbridge +drawer +drawers +draweth +drawing +drawling +drawn +draws +drayman +draymen +dread +dreaded +dreadful +dreadfully +dreading +dreads +dream +dreamer +dreamers +dreaming +dreams +dreamt +drearning +dreary +dreg +dregs +drench +drenched +dress +dressed +dresser +dressing +dressings +drest +drew +dribbling +dried +drier +dries +drift +drily +drink +drinketh +drinking +drinkings +drinks +driv +drive +drivelling +driven +drives +driveth +driving +drizzle +drizzled +drizzles +droit +drollery +dromio +dromios +drone +drones +droop +droopeth +drooping +droops +drop +dropheir +droplets +dropp +dropper +droppeth +dropping +droppings +drops +dropsied +dropsies +dropsy +dropt +dross +drossy +drought +drove +droven +drovier +drown +drowned +drowning +drowns +drows +drowse +drowsily +drowsiness +drowsy +drudge +drudgery +drudges +drug +drugg +drugs +drum +drumble +drummer +drumming +drums +drunk +drunkard +drunkards +drunken +drunkenly +drunkenness +dry +dryness +dst +du +dub +dubb +ducat +ducats +ducdame +duchess +duchies +duchy +duck +ducking +ducks +dudgeon +due +duellist +duello +duer +dues +duff +dug +dugs +duke +dukedom +dukedoms +dukes +dulcet +dulche +dull +dullard +duller +dullest +dulling +dullness +dulls +dully +dulness +duly +dumain +dumb +dumbe +dumbly +dumbness +dump +dumps +dun +duncan +dung +dungeon +dungeons +dunghill +dunghills +dungy +dunnest +dunsinane +dunsmore +dunstable +dupp +durance +during +durst +dusky +dust +dusted +dusty +dutch +dutchman +duteous +duties +dutiful +duty +dwarf +dwarfish +dwell +dwellers +dwelling +dwells +dwelt +dwindle +dy +dye +dyed +dyer +dying +e +each +eager +eagerly +eagerness +eagle +eagles +eaning +eanlings +ear +earing +earl +earldom +earlier +earliest +earliness +earls +early +earn +earned +earnest +earnestly +earnestness +earns +ears +earth +earthen +earthlier +earthly +earthquake +earthquakes +earthy +eas +ease +eased +easeful +eases +easier +easiest +easiliest +easily +easiness +easing +east +eastcheap +easter +eastern +eastward +easy +eat +eaten +eater +eaters +eating +eats +eaux +eaves +ebb +ebbing +ebbs +ebon +ebony +ebrew +ecce +echapper +echo +echoes +eclips +eclipse +eclipses +ecolier +ecoutez +ecstacy +ecstasies +ecstasy +ecus +eden +edg +edgar +edge +edged +edgeless +edges +edict +edicts +edifice +edifices +edified +edifies +edition +edm +edmund +edmunds +edmundsbury +educate +educated +education +edward +eel +eels +effect +effected +effectless +effects +effectual +effectually +effeminate +effigies +effus +effuse +effusion +eftest +egal +egally +eget +egeus +egg +eggs +eggshell +eglamour +eglantine +egma +ego +egregious +egregiously +egress +egypt +egyptian +egyptians +eie +eight +eighteen +eighth +eightpenny +eighty +eisel +either +eject +eke +el +elbe +elbow +elbows +eld +elder +elders +eldest +eleanor +elect +elected +election +elegancy +elegies +element +elements +elephant +elephants +elevated +eleven +eleventh +elf +elflocks +eliads +elinor +elizabeth +ell +elle +ellen +elm +eloquence +eloquent +else +elsewhere +elsinore +eltham +elves +elvish +ely +elysium +em +emballing +embalm +embalms +embark +embarked +embarquements +embassade +embassage +embassies +embassy +embattailed +embattl +embattle +embay +embellished +embers +emblaze +emblem +emblems +embodied +embold +emboldens +emboss +embossed +embounded +embowel +embowell +embrac +embrace +embraced +embracement +embracements +embraces +embracing +embrasures +embroider +embroidery +emhracing +emilia +eminence +eminent +eminently +emmanuel +emnity +empale +emperal +emperess +emperial +emperor +empery +emphasis +empire +empirics +empiricutic +empleached +employ +employed +employer +employment +employments +empoison +empress +emptied +emptier +empties +emptiness +empty +emptying +emulate +emulation +emulations +emulator +emulous +en +enact +enacted +enacts +enactures +enamell +enamelled +enamour +enamoured +enanmour +encamp +encamped +encave +enceladus +enchaf +enchafed +enchant +enchanted +enchanting +enchantingly +enchantment +enchantress +enchants +enchas +encircle +encircled +enclos +enclose +enclosed +encloses +encloseth +enclosing +enclouded +encompass +encompassed +encompasseth +encompassment +encore +encorporal +encount +encounter +encountered +encounters +encourage +encouraged +encouragement +encrimsoned +encroaching +encumb +end +endamage +endamagement +endanger +endart +endear +endeared +endeavour +endeavours +ended +ender +ending +endings +endite +endless +endow +endowed +endowments +endows +ends +endu +endue +endur +endurance +endure +endured +endures +enduring +endymion +eneas +enemies +enemy +enernies +enew +enfeebled +enfeebles +enfeoff +enfetter +enfoldings +enforc +enforce +enforced +enforcedly +enforcement +enforces +enforcest +enfranched +enfranchis +enfranchise +enfranchised +enfranchisement +enfreed +enfreedoming +engag +engage +engaged +engagements +engaging +engaol +engend +engender +engenders +engilds +engine +engineer +enginer +engines +engirt +england +english +englishman +englishmen +engluts +englutted +engraffed +engraft +engrafted +engrav +engrave +engross +engrossed +engrossest +engrossing +engrossments +enguard +enigma +enigmatical +enjoin +enjoined +enjoy +enjoyed +enjoyer +enjoying +enjoys +enkindle +enkindled +enlard +enlarg +enlarge +enlarged +enlargement +enlargeth +enlighten +enlink +enmesh +enmities +enmity +ennoble +ennobled +enobarb +enobarbus +enon +enormity +enormous +enough +enow +enpatron +enpierced +enquir +enquire +enquired +enrag +enrage +enraged +enrages +enrank +enrapt +enrich +enriched +enriches +enridged +enrings +enrob +enrobe +enroll +enrolled +enrooted +enrounded +enschedul +ensconce +ensconcing +enseamed +ensear +enseigne +enseignez +ensemble +enshelter +enshielded +enshrines +ensign +ensigns +enskied +ensman +ensnare +ensnared +ensnareth +ensteep +ensu +ensue +ensued +ensues +ensuing +enswathed +ent +entail +entame +entangled +entangles +entendre +enter +entered +entering +enterprise +enterprises +enters +entertain +entertained +entertainer +entertaining +entertainment +entertainments +enthrall +enthralled +enthron +enthroned +entice +enticements +enticing +entire +entirely +entitle +entitled +entitling +entomb +entombed +entrails +entrance +entrances +entrap +entrapp +entre +entreat +entreated +entreaties +entreating +entreatments +entreats +entreaty +entrench +entry +entwist +envelop +envenom +envenomed +envenoms +envied +envies +envious +enviously +environ +environed +envoy +envy +envying +enwheel +enwombed +enwraps +ephesian +ephesians +ephesus +epicure +epicurean +epicures +epicurism +epicurus +epidamnum +epidaurus +epigram +epilepsy +epileptic +epilogue +epilogues +epistles +epistrophus +epitaph +epitaphs +epithet +epitheton +epithets +epitome +equal +equalities +equality +equall +equally +equalness +equals +equinoctial +equinox +equipage +equity +equivocal +equivocate +equivocates +equivocation +equivocator +er +erbear +erbearing +erbears +erbeat +erblows +erboard +erborne +ercame +ercast +ercharg +ercharged +ercharging +ercles +ercome +ercover +ercrows +erdoing +ere +erebus +erect +erected +erecting +erection +erects +erewhile +erflourish +erflow +erflowing +erflows +erfraught +erga +ergalled +erglanced +ergo +ergone +ergrow +ergrown +ergrowth +erhang +erhanging +erhasty +erhear +erheard +eringoes +erjoy +erleap +erleaps +erleavens +erlook +erlooking +ermaster +ermengare +ermount +ern +ernight +eros +erpaid +erparted +erpast +erpays +erpeer +erperch +erpicturing +erpingham +erposting +erpow +erpress +erpressed +err +errand +errands +errant +errate +erraught +erreaches +erred +errest +erring +erroneous +error +errors +errs +errule +errun +erset +ershade +ershades +ershine +ershot +ersized +erskip +erslips +erspreads +erst +erstare +erstep +erstunk +ersway +ersways +erswell +erta +ertake +erteemed +erthrow +erthrown +erthrows +ertook +ertop +ertopping +ertrip +erturn +erudition +eruption +eruptions +ervalues +erwalk +erwatch +erween +erweens +erweigh +erweighs +erwhelm +erwhelmed +erworn +es +escalus +escap +escape +escaped +escapes +eschew +escoted +esill +especial +especially +esperance +espials +espied +espies +espous +espouse +espy +esquire +esquires +essay +essays +essence +essential +essentially +esses +essex +est +establish +established +estate +estates +esteem +esteemed +esteemeth +esteeming +esteems +estimable +estimate +estimation +estimations +estime +estranged +estridge +estridges +et +etc +etceteras +ete +eternal +eternally +eterne +eternity +eterniz +etes +ethiop +ethiope +ethiopes +ethiopian +etna +eton +etre +eunuch +eunuchs +euphrates +euphronius +euriphile +europa +europe +ev +evade +evades +evans +evasion +evasions +eve +even +evening +evenly +event +eventful +events +ever +everlasting +everlastingly +evermore +every +everyone +everything +everywhere +evidence +evidences +evident +evil +evilly +evils +evitate +ewe +ewer +ewers +ewes +exact +exacted +exactest +exacting +exaction +exactions +exactly +exacts +exalt +exalted +examin +examination +examinations +examine +examined +examines +exampl +example +exampled +examples +exasperate +exasperates +exceed +exceeded +exceedeth +exceeding +exceedingly +exceeds +excel +excelled +excellence +excellencies +excellency +excellent +excellently +excelling +excels +except +excepted +excepting +exception +exceptions +exceptless +excess +excessive +exchang +exchange +exchanged +exchequer +exchequers +excite +excited +excitements +excites +exclaim +exclaims +exclamation +exclamations +excludes +excommunicate +excommunication +excrement +excrements +excursion +excursions +excus +excusable +excuse +excused +excuses +excusez +excusing +execrable +execrations +execute +executed +executing +execution +executioner +executioners +executor +executors +exempt +exempted +exequies +exercise +exercises +exeter +exeunt +exhal +exhalation +exhalations +exhale +exhales +exhaust +exhibit +exhibiters +exhibition +exhort +exhortation +exigent +exil +exile +exiled +exion +exist +exists +exit +exits +exorciser +exorcisms +exorcist +expect +expectance +expectancy +expectation +expectations +expected +expecters +expecting +expects +expedience +expedient +expediently +expedition +expeditious +expel +expell +expelling +expels +expend +expense +expenses +experienc +experience +experiences +experiment +experimental +experiments +expert +expertness +expiate +expiation +expir +expiration +expire +expired +expires +expiring +explication +exploit +exploits +expos +expose +exposing +exposition +expositor +expostulate +expostulation +exposture +exposure +expound +expounded +express +expressed +expresseth +expressing +expressive +expressly +expressure +expuls +expulsion +exquisite +exsufflicate +extant +extemporal +extemporally +extempore +extend +extended +extends +extent +extenuate +extenuated +extenuates +extenuation +exterior +exteriorly +exteriors +extermin +extern +external +extinct +extincted +extincture +extinguish +extirp +extirpate +extirped +extol +extoll +extolment +exton +extort +extorted +extortion +extortions +extra +extract +extracted +extracting +extraordinarily +extraordinary +extraught +extravagancy +extravagant +extreme +extremely +extremes +extremest +extremities +extremity +exuent +exult +exultation +ey +eyas +eyases +eye +eyeball +eyeballs +eyebrow +eyebrows +eyed +eyeless +eyelid +eyelids +eyes +eyesight +eyestrings +eying +eyne +eyrie +fa +fabian +fable +fables +fabric +fabulous +fac +face +faced +facere +faces +faciant +facile +facility +facinerious +facing +facit +fact +faction +factionary +factions +factious +factor +factors +faculties +faculty +fade +faded +fadeth +fadge +fading +fadings +fadom +fadoms +fagot +fagots +fail +failing +fails +fain +faint +fainted +fainter +fainting +faintly +faintness +faints +fair +fairer +fairest +fairies +fairing +fairings +fairly +fairness +fairs +fairwell +fairy +fais +fait +faites +faith +faithful +faithfull +faithfully +faithless +faiths +faitors +fal +falchion +falcon +falconbridge +falconer +falconers +fall +fallacy +fallen +falleth +falliable +fallible +falling +fallow +fallows +falls +fally +falorous +false +falsehood +falsely +falseness +falser +falsify +falsing +falstaff +falstaffs +falter +fam +fame +famed +familiar +familiarity +familiarly +familiars +family +famine +famish +famished +famous +famoused +famously +fan +fanatical +fancies +fancy +fane +fanes +fang +fangled +fangless +fangs +fann +fanning +fans +fantasied +fantasies +fantastic +fantastical +fantastically +fantasticoes +fantasy +fap +far +farborough +farced +fardel +fardels +fare +fares +farewell +farewells +fariner +faring +farm +farmer +farmhouse +farms +farre +farrow +farther +farthest +farthing +farthingale +farthingales +farthings +fartuous +fas +fashion +fashionable +fashioning +fashions +fast +fasted +fasten +fastened +faster +fastest +fasting +fastly +fastolfe +fasts +fat +fatal +fatally +fate +fated +fates +father +fathered +fatherless +fatherly +fathers +fathom +fathomless +fathoms +fatigate +fatness +fats +fatted +fatter +fattest +fatting +fatuus +fauconbridge +faulconbridge +fault +faultiness +faultless +faults +faulty +fausse +fauste +faustuses +faut +favor +favorable +favorably +favors +favour +favourable +favoured +favouredly +favourer +favourers +favouring +favourite +favourites +favours +favout +fawn +fawneth +fawning +fawns +fay +fe +fealty +fear +feared +fearest +fearful +fearfull +fearfully +fearfulness +fearing +fearless +fears +feast +feasted +feasting +feasts +feat +feated +feater +feather +feathered +feathers +featly +feats +featur +feature +featured +featureless +features +february +fecks +fed +fedary +federary +fee +feeble +feebled +feebleness +feebling +feebly +feed +feeder +feeders +feedeth +feeding +feeds +feel +feeler +feeling +feelingly +feels +fees +feet +fehemently +feign +feigned +feigning +feil +feith +felicitate +felicity +fell +fellest +fellies +fellow +fellowly +fellows +fellowship +fellowships +fells +felon +felonious +felony +felt +female +females +feminine +fen +fenc +fence +fencer +fencing +fends +fennel +fenny +fens +fenton +fer +ferdinand +fere +fernseed +ferrara +ferrers +ferret +ferry +ferryman +fertile +fertility +fervency +fervour +fery +fest +feste +fester +festinate +festinately +festival +festivals +fet +fetch +fetches +fetching +fetlock +fetlocks +fett +fetter +fettering +fetters +fettle +feu +feud +fever +feverous +fevers +few +fewer +fewest +fewness +fickle +fickleness +fico +fiction +fiddle +fiddler +fiddlestick +fidele +fidelicet +fidelity +fidius +fie +field +fielded +fields +fiend +fiends +fierce +fiercely +fierceness +fiery +fife +fifes +fifteen +fifteens +fifteenth +fifth +fifty +fiftyfold +fig +fight +fighter +fightest +fighteth +fighting +fights +figo +figs +figur +figure +figured +figures +figuring +fike +fil +filberts +filch +filches +filching +file +filed +files +filial +filius +fill +filled +fillet +filling +fillip +fills +filly +film +fils +filth +filths +filthy +fin +finally +finch +find +finder +findeth +finding +findings +finds +fine +fineless +finely +finem +fineness +finer +fines +finest +fing +finger +fingering +fingers +fingre +fingres +finical +finish +finished +finisher +finless +finn +fins +finsbury +fir +firago +fire +firebrand +firebrands +fired +fires +firework +fireworks +firing +firk +firm +firmament +firmly +firmness +first +firstlings +fish +fisher +fishermen +fishers +fishes +fishified +fishmonger +fishpond +fisnomy +fist +fisting +fists +fistula +fit +fitchew +fitful +fitly +fitment +fitness +fits +fitted +fitter +fittest +fitteth +fitting +fitzwater +five +fivepence +fives +fix +fixed +fixes +fixeth +fixing +fixture +fl +flag +flagging +flagon +flagons +flags +flail +flakes +flaky +flam +flame +flamen +flamens +flames +flaming +flaminius +flanders +flannel +flap +flaring +flash +flashes +flashing +flask +flat +flatly +flatness +flats +flatt +flatter +flattered +flatterer +flatterers +flatterest +flatteries +flattering +flatters +flattery +flaunts +flavio +flavius +flaw +flaws +flax +flaxen +flay +flaying +flea +fleance +fleas +flecked +fled +fledge +flee +fleec +fleece +fleeces +fleer +fleering +fleers +fleet +fleeter +fleeting +fleming +flemish +flesh +fleshes +fleshly +fleshment +fleshmonger +flew +flexible +flexure +flibbertigibbet +flickering +flidge +fliers +flies +flieth +flight +flights +flighty +flinch +fling +flint +flints +flinty +flirt +float +floated +floating +flock +flocks +flood +floodgates +floods +floor +flora +florence +florentine +florentines +florentius +florizel +flote +floulish +flour +flourish +flourishes +flourisheth +flourishing +flout +flouted +flouting +flouts +flow +flowed +flower +flowerets +flowers +flowing +flown +flows +fluellen +fluent +flung +flush +flushing +fluster +flute +flutes +flutter +flux +fluxive +fly +flying +fo +foal +foals +foam +foamed +foaming +foams +foamy +fob +focative +fodder +foe +foeman +foemen +foes +fog +foggy +fogs +foh +foi +foil +foiled +foils +foin +foining +foins +fois +foison +foisons +foist +foix +fold +folded +folds +folio +folk +folks +follies +follow +followed +follower +followers +followest +following +follows +folly +fond +fonder +fondly +fondness +font +fontibell +food +fool +fooleries +foolery +foolhardy +fooling +foolish +foolishly +foolishness +fools +foot +football +footboy +footboys +footed +footfall +footing +footman +footmen +footpath +footsteps +footstool +fopp +fopped +foppery +foppish +fops +for +forage +foragers +forbade +forbear +forbearance +forbears +forbid +forbidden +forbiddenly +forbids +forbod +forborne +forc +force +forced +forceful +forceless +forces +forcible +forcibly +forcing +ford +fordid +fordo +fordoes +fordone +fore +forecast +forefather +forefathers +forefinger +forego +foregone +forehand +forehead +foreheads +forehorse +foreign +foreigner +foreigners +foreknowing +foreknowledge +foremost +forenamed +forenoon +forerun +forerunner +forerunning +foreruns +foresaid +foresaw +foresay +foresee +foreseeing +foresees +foreshow +foreskirt +forespent +forest +forestall +forestalled +forester +foresters +forests +foretell +foretelling +foretells +forethink +forethought +foretold +forever +foreward +forewarn +forewarned +forewarning +forfeit +forfeited +forfeiters +forfeiting +forfeits +forfeiture +forfeitures +forfend +forfended +forg +forgave +forge +forged +forgeries +forgery +forges +forget +forgetful +forgetfulness +forgetive +forgets +forgetting +forgive +forgiven +forgiveness +forgo +forgoing +forgone +forgot +forgotten +fork +forked +forks +forlorn +form +formal +formally +formed +former +formerly +formless +forms +fornication +fornications +fornicatress +forres +forrest +forsake +forsaken +forsaketh +forslow +forsook +forsooth +forspent +forspoke +forswear +forswearing +forswore +forsworn +fort +forted +forth +forthcoming +forthlight +forthright +forthwith +fortification +fortifications +fortified +fortifies +fortify +fortinbras +fortitude +fortnight +fortress +fortresses +forts +fortun +fortuna +fortunate +fortunately +fortune +fortuned +fortunes +fortward +forty +forum +forward +forwarding +forwardness +forwards +forwearied +fosset +fost +foster +fostered +fought +foughten +foul +fouler +foulest +foully +foulness +found +foundation +foundations +founded +founder +fount +fountain +fountains +founts +four +fourscore +fourteen +fourth +foutra +fowl +fowler +fowling +fowls +fox +foxes +foxship +fracted +fraction +fractions +fragile +fragment +fragments +fragrant +frail +frailer +frailties +frailty +fram +frame +framed +frames +frampold +fran +francais +france +frances +franchise +franchised +franchisement +franchises +franciae +francis +francisca +franciscan +francisco +frank +franker +frankfort +franklin +franklins +frankly +frankness +frantic +franticly +frateretto +fratrum +fraud +fraudful +fraught +fraughtage +fraughting +fray +frays +freckl +freckled +freckles +frederick +free +freed +freedom +freedoms +freehearted +freelier +freely +freeman +freemen +freeness +freer +frees +freestone +freetown +freeze +freezes +freezing +freezings +french +frenchman +frenchmen +frenchwoman +frenzy +frequent +frequents +fresh +fresher +freshes +freshest +freshly +freshness +fret +fretful +frets +fretted +fretten +fretting +friar +friars +friday +fridays +friend +friended +friending +friendless +friendliness +friendly +friends +friendship +friendships +frieze +fright +frighted +frightened +frightful +frighting +frights +fringe +fringed +frippery +frisk +fritters +frivolous +fro +frock +frog +frogmore +froissart +frolic +from +front +fronted +frontier +frontiers +fronting +frontlet +fronts +frost +frosts +frosty +froth +froward +frown +frowning +frowningly +frowns +froze +frozen +fructify +frugal +fruit +fruiterer +fruitful +fruitfully +fruitfulness +fruition +fruitless +fruits +frush +frustrate +frutify +fry +fubb +fuel +fugitive +fulfil +fulfill +fulfilling +fulfils +full +fullam +fuller +fullers +fullest +fullness +fully +fulness +fulsome +fulvia +fum +fumble +fumbles +fumblest +fumbling +fume +fumes +fuming +fumiter +fumitory +fun +function +functions +fundamental +funeral +funerals +fur +furbish +furies +furious +furlongs +furnace +furnaces +furnish +furnished +furnishings +furniture +furnival +furor +furr +furrow +furrowed +furrows +furth +further +furtherance +furtherer +furthermore +furthest +fury +furze +furzes +fust +fustian +fustilarian +fusty +fut +future +futurity +g +gabble +gaberdine +gabriel +gad +gadding +gads +gadshill +gag +gage +gaged +gagg +gaging +gagne +gain +gained +gainer +gaingiving +gains +gainsaid +gainsay +gainsaying +gainsays +gainst +gait +gaited +galathe +gale +galen +gales +gall +gallant +gallantly +gallantry +gallants +galled +gallery +galley +galleys +gallia +gallian +galliard +galliasses +gallimaufry +galling +gallons +gallop +galloping +gallops +gallow +galloway +gallowglasses +gallows +gallowses +galls +gallus +gam +gambol +gambold +gambols +gamboys +game +gamers +games +gamesome +gamester +gaming +gammon +gamut +gan +gangren +ganymede +gaol +gaoler +gaolers +gaols +gap +gape +gapes +gaping +gar +garb +garbage +garboils +garcon +gard +garde +garden +gardener +gardeners +gardens +gardez +gardiner +gardon +gargantua +gargrave +garish +garland +garlands +garlic +garment +garments +garmet +garner +garners +garnish +garnished +garret +garrison +garrisons +gart +garter +garterd +gartering +garters +gascony +gash +gashes +gaskins +gasp +gasping +gasted +gastness +gat +gate +gated +gates +gath +gather +gathered +gathering +gathers +gatories +gatory +gaud +gaudeo +gaudy +gauge +gaul +gaultree +gaunt +gauntlet +gauntlets +gav +gave +gavest +gawded +gawds +gawsey +gay +gayness +gaz +gaze +gazed +gazer +gazers +gazes +gazeth +gazing +gear +geck +geese +geffrey +geld +gelded +gelding +gelida +gelidus +gelt +gem +geminy +gems +gen +gender +genders +general +generally +generals +generation +generations +generative +generosity +generous +genitive +genitivo +genius +gennets +genoa +genoux +gens +gent +gentilhomme +gentility +gentle +gentlefolks +gentleman +gentlemanlike +gentlemen +gentleness +gentler +gentles +gentlest +gentlewoman +gentlewomen +gently +gentry +george +gerard +germaines +germains +german +germane +germans +germany +gertrude +gest +gests +gesture +gestures +get +getrude +gets +getter +getting +ghastly +ghost +ghosted +ghostly +ghosts +gi +giant +giantess +giantlike +giants +gib +gibber +gibbet +gibbets +gibe +giber +gibes +gibing +gibingly +giddily +giddiness +giddy +gift +gifts +gig +giglets +giglot +gilbert +gild +gilded +gilding +gilliams +gillian +gills +gillyvors +gilt +gimmal +gimmers +gin +ging +ginger +gingerbread +gingerly +ginn +gins +gioucestershire +gipes +gipsies +gipsy +gird +girded +girdle +girdled +girdles +girdling +girl +girls +girt +girth +gis +giv +give +given +giver +givers +gives +givest +giveth +giving +givings +glad +gladded +gladding +gladly +gladness +glamis +glanc +glance +glanced +glances +glancing +glanders +glansdale +glare +glares +glass +glasses +glassy +glaz +glazed +gleams +glean +gleaned +gleaning +gleeful +gleek +gleeking +gleeks +glend +glendower +glib +glide +glided +glides +glideth +gliding +glimmer +glimmering +glimmers +glimpse +glimpses +glist +glistening +glister +glistering +glisters +glitt +glittering +globe +globes +glooming +gloomy +glories +glorified +glorify +glorious +gloriously +glory +glose +gloss +glosses +glou +glouceste +gloucester +gloucestershire +glove +glover +gloves +glow +glowed +glowing +glowworm +gloz +gloze +glozes +glu +glue +glued +glues +glut +glutt +glutted +glutton +gluttoning +gluttony +gnarled +gnarling +gnat +gnats +gnaw +gnawing +gnawn +gnaws +go +goad +goaded +goads +goal +goat +goatish +goats +gobbets +gobbo +goblet +goblets +goblin +goblins +god +godded +godden +goddess +goddesses +goddild +godfather +godfathers +godhead +godlike +godliness +godly +godmother +gods +godson +goer +goers +goes +goest +goeth +goffe +gogs +going +gold +golden +goldenly +goldsmith +goldsmiths +golgotha +goliases +goliath +gon +gondola +gondolier +gone +goneril +gong +gonzago +gonzalo +good +goodfellow +goodlier +goodliest +goodly +goodman +goodness +goodnight +goodrig +goods +goodwife +goodwill +goodwin +goodwins +goodyear +goodyears +goose +gooseberry +goosequills +goot +gor +gorbellied +gorboduc +gordian +gore +gored +gorg +gorge +gorgeous +gorget +gorging +gorgon +gormandize +gormandizing +gory +gosling +gospel +gospels +goss +gossamer +gossip +gossiping +gossiplike +gossips +got +goth +goths +gotten +gourd +gout +gouts +gouty +govern +governance +governed +governess +government +governor +governors +governs +gower +gown +gowns +grac +grace +graced +graceful +gracefully +graceless +graces +gracing +gracious +graciously +gradation +graff +graffing +graft +grafted +grafters +grain +grained +grains +gramercies +gramercy +grammar +grand +grandam +grandame +grandchild +grande +grandeur +grandfather +grandjurors +grandmother +grandpre +grandsir +grandsire +grandsires +grange +grant +granted +granting +grants +grape +grapes +grapple +grapples +grappling +grasp +grasped +grasps +grass +grasshoppers +grassy +grate +grated +grateful +grates +gratiano +gratify +gratii +gratillity +grating +gratis +gratitude +gratulate +grav +grave +gravediggers +gravel +graveless +gravell +gravely +graven +graveness +graver +graves +gravest +gravestone +gravities +gravity +gravy +gray +graymalkin +graz +graze +grazed +grazing +grease +greases +greasily +greasy +great +greater +greatest +greatly +greatness +grecian +grecians +gree +greece +greed +greedily +greediness +greedy +greeing +greek +greekish +greeks +green +greener +greenly +greens +greensleeves +greenwich +greenwood +greet +greeted +greeting +greetings +greets +greg +gregory +gremio +grew +grey +greybeard +greybeards +greyhound +greyhounds +grief +griefs +griev +grievance +grievances +grieve +grieved +grieves +grievest +grieving +grievingly +grievous +grievously +griffin +griffith +grim +grime +grimly +grin +grind +grinding +grindstone +grinning +grip +gripe +gripes +griping +grise +grisly +grissel +grize +grizzle +grizzled +groan +groaning +groans +groat +groats +groin +groom +grooms +grop +groping +gros +gross +grosser +grossly +grossness +ground +grounded +groundlings +grounds +grove +grovel +grovelling +groves +grow +groweth +growing +grown +grows +growth +grub +grubb +grubs +grudge +grudged +grudges +grudging +gruel +grumble +grumblest +grumbling +grumblings +grumio +grund +grunt +gualtier +guard +guardage +guardant +guarded +guardian +guardians +guards +guardsman +gud +gudgeon +guerdon +guerra +guess +guesses +guessingly +guest +guests +guiana +guichard +guide +guided +guider +guiderius +guides +guiding +guidon +guienne +guil +guildenstern +guilders +guildford +guildhall +guile +guiled +guileful +guilfords +guilt +guiltian +guiltier +guiltily +guiltiness +guiltless +guilts +guilty +guinea +guinever +guise +gul +gules +gulf +gulfs +gull +gulls +gum +gumm +gums +gun +gunner +gunpowder +guns +gurnet +gurney +gust +gusts +gusty +guts +gutter +guy +guynes +guysors +gypsy +gyve +gyved +gyves +h +ha +haberdasher +habiliment +habiliments +habit +habitation +habited +habits +habitude +hack +hacket +hackney +hacks +had +hadst +haec +haeres +hag +hagar +haggard +haggards +haggish +haggled +hags +hail +hailed +hailstone +hailstones +hair +hairless +hairs +hairy +hal +halberd +halberds +halcyon +hale +haled +hales +half +halfcan +halfpence +halfpenny +halfpennyworth +halfway +halidom +hall +halloa +halloing +hallond +halloo +hallooing +hallow +hallowed +hallowmas +hallown +hals +halt +halter +halters +halting +halts +halves +ham +hames +hamlet +hammer +hammered +hammering +hammers +hamper +hampton +hams +hamstring +hand +handed +handful +handicraft +handicraftsmen +handing +handiwork +handkercher +handkerchers +handkerchief +handle +handled +handles +handless +handlest +handling +handmaid +handmaids +hands +handsaw +handsome +handsomely +handsomeness +handwriting +handy +hang +hanged +hangers +hangeth +hanging +hangings +hangman +hangmen +hangs +hannibal +hap +hapless +haply +happ +happen +happened +happier +happies +happiest +happily +happiness +happy +haps +harbinger +harbingers +harbor +harbour +harbourage +harbouring +harbours +harcourt +hard +harder +hardest +hardiest +hardiment +hardiness +hardly +hardness +hardocks +hardy +hare +harelip +hares +harfleur +hark +harlot +harlotry +harlots +harm +harmed +harmful +harming +harmless +harmonious +harmony +harms +harness +harp +harper +harpier +harping +harpy +harried +harrow +harrows +harry +harsh +harshly +harshness +hart +harts +harum +harvest +has +hast +haste +hasted +hasten +hastes +hastily +hasting +hastings +hasty +hat +hatch +hatches +hatchet +hatching +hatchment +hate +hated +hateful +hater +haters +hates +hateth +hatfield +hath +hating +hatred +hats +haud +hauf +haught +haughtiness +haughty +haunch +haunches +haunt +haunted +haunting +haunts +hautboy +hautboys +have +haven +havens +haver +having +havings +havior +haviour +havoc +hawk +hawking +hawks +hawthorn +hawthorns +hay +hazard +hazarded +hazards +hazel +hazelnut +he +head +headborough +headed +headier +heading +headland +headless +headlong +heads +headsman +headstrong +heady +heal +healed +healing +heals +health +healthful +healths +healthsome +healthy +heap +heaping +heaps +hear +heard +hearer +hearers +hearest +heareth +hearing +hearings +heark +hearken +hearkens +hears +hearsay +hearse +hearsed +hearst +heart +heartache +heartbreak +heartbreaking +hearted +hearten +hearth +hearths +heartily +heartiness +heartless +heartlings +heartly +hearts +heartsick +heartstrings +hearty +heat +heated +heath +heathen +heathenish +heating +heats +heauties +heav +heave +heaved +heaven +heavenly +heavens +heaves +heavier +heaviest +heavily +heaviness +heaving +heavings +heavy +hebona +hebrew +hecate +hectic +hector +hectors +hecuba +hedg +hedge +hedgehog +hedgehogs +hedges +heed +heeded +heedful +heedfull +heedfully +heedless +heel +heels +hefted +hefts +heifer +heifers +heigh +height +heighten +heinous +heinously +heir +heiress +heirless +heirs +held +helen +helena +helenus +helias +helicons +hell +hellespont +hellfire +hellish +helm +helmed +helmet +helmets +helms +help +helper +helpers +helpful +helping +helpless +helps +helter +hem +heme +hemlock +hemm +hemp +hempen +hems +hen +hence +henceforth +henceforward +henchman +henri +henricus +henry +hens +hent +henton +her +herald +heraldry +heralds +herb +herbert +herblets +herbs +herculean +hercules +herd +herds +herdsman +herdsmen +here +hereabout +hereabouts +hereafter +hereby +hereditary +hereford +herefordshire +herein +hereof +heresies +heresy +heretic +heretics +hereto +hereupon +heritage +heritier +hermes +hermia +hermione +hermit +hermitage +hermits +herne +hero +herod +herods +heroes +heroic +heroical +herring +herrings +hers +herself +hesperides +hesperus +hest +hests +heure +heureux +hew +hewgh +hewing +hewn +hews +hey +heyday +hibocrates +hic +hiccups +hick +hid +hidden +hide +hideous +hideously +hideousness +hides +hidest +hiding +hie +hied +hiems +hies +hig +high +higher +highest +highly +highmost +highness +hight +highway +highways +hilding +hildings +hill +hillo +hilloa +hills +hilt +hilts +hily +him +himself +hinc +hinckley +hind +hinder +hindered +hinders +hindmost +hinds +hing +hinge +hinges +hint +hip +hipp +hipparchus +hippolyta +hips +hir +hire +hired +hiren +hirtius +his +hisperia +hiss +hisses +hissing +hist +historical +history +hit +hither +hitherto +hitherward +hitherwards +hits +hitting +hive +hives +hizzing +ho +hoa +hoar +hoard +hoarded +hoarding +hoars +hoarse +hoary +hob +hobbididence +hobby +hobbyhorse +hobgoblin +hobnails +hoc +hod +hodge +hog +hogs +hogshead +hogsheads +hois +hoise +hoist +hoisted +hoists +holborn +hold +holden +holder +holdeth +holdfast +holding +holds +hole +holes +holidam +holidame +holiday +holidays +holier +holiest +holily +holiness +holla +holland +hollander +hollanders +holloa +holloaing +hollow +hollowly +hollowness +holly +holmedon +holofernes +holp +holy +homage +homager +home +homely +homes +homespuns +homeward +homewards +homicide +homicides +homily +hominem +hommes +homo +honest +honester +honestest +honestly +honesty +honey +honeycomb +honeying +honeyless +honeysuckle +honeysuckles +honi +honneur +honor +honorable +honorably +honorato +honorificabilitudinitatibus +honors +honour +honourable +honourably +honoured +honourest +honourible +honouring +honours +hoo +hood +hooded +hoodman +hoods +hoodwink +hoof +hoofs +hook +hooking +hooks +hoop +hoops +hoot +hooted +hooting +hoots +hop +hope +hopeful +hopeless +hopes +hopest +hoping +hopkins +hoppedance +hor +horace +horatio +horizon +horn +hornbook +horned +horner +horning +hornpipes +horns +horologe +horrible +horribly +horrid +horrider +horridly +horror +horrors +hors +horse +horseback +horsed +horsehairs +horseman +horsemanship +horsemen +horses +horseway +horsing +hortensio +hortensius +horum +hose +hospitable +hospital +hospitality +host +hostage +hostages +hostess +hostile +hostility +hostilius +hosts +hot +hotly +hotspur +hotter +hottest +hound +hounds +hour +hourly +hours +hous +house +household +householder +householders +households +housekeeper +housekeepers +housekeeping +houseless +houses +housewife +housewifery +housewives +hovel +hover +hovered +hovering +hovers +how +howbeit +howe +howeer +however +howl +howled +howlet +howling +howls +howsoe +howsoever +howsome +hoxes +hoy +hoyday +hubert +huddled +huddling +hue +hued +hues +hug +huge +hugely +hugeness +hugg +hugger +hugh +hugs +hujus +hulk +hulks +hull +hulling +hullo +hum +human +humane +humanely +humanity +humble +humbled +humbleness +humbler +humbles +humblest +humbling +humbly +hume +humh +humidity +humility +humming +humor +humorous +humors +humour +humourists +humours +humphrey +humphry +hums +hundred +hundreds +hundredth +hung +hungarian +hungary +hunger +hungerford +hungerly +hungry +hunt +hunted +hunter +hunters +hunteth +hunting +huntington +huntress +hunts +huntsman +huntsmen +hurdle +hurl +hurling +hurls +hurly +hurlyburly +hurricano +hurricanoes +hurried +hurries +hurry +hurt +hurting +hurtled +hurtless +hurtling +hurts +husband +husbanded +husbandless +husbandry +husbands +hush +hushes +husht +husks +huswife +huswifes +hutch +hybla +hydra +hyen +hymen +hymenaeus +hymn +hymns +hyperboles +hyperbolical +hyperion +hypocrisy +hypocrite +hypocrites +hyrcan +hyrcania +hyrcanian +hyssop +hysterica +i +iachimo +iaculis +iago +iament +ibat +icarus +ice +iceland +ici +icicle +icicles +icy +idea +ideas +idem +iden +ides +idiot +idiots +idle +idleness +idles +idly +idol +idolatrous +idolatry +ield +if +ifs +ignis +ignoble +ignobly +ignominious +ignominy +ignomy +ignorance +ignorant +ii +iii +iiii +il +ilbow +ild +ilion +ilium +ill +illegitimate +illiterate +illness +illo +ills +illume +illumin +illuminate +illumineth +illusion +illusions +illustrate +illustrated +illustrious +illyria +illyrian +ils +im +image +imagery +images +imagin +imaginary +imagination +imaginations +imagine +imagining +imaginings +imbar +imbecility +imbrue +imitari +imitate +imitated +imitation +imitations +immaculate +immanity +immask +immaterial +immediacy +immediate +immediately +imminence +imminent +immoderate +immoderately +immodest +immoment +immortal +immortaliz +immortally +immur +immured +immures +imogen +imp +impaint +impair +impairing +impale +impaled +impanelled +impart +imparted +impartial +impartment +imparts +impasted +impatience +impatient +impatiently +impawn +impeach +impeached +impeachment +impeachments +impedes +impediment +impediments +impenetrable +imperator +imperceiverant +imperfect +imperfection +imperfections +imperfectly +imperial +imperious +imperiously +impertinency +impertinent +impeticos +impetuosity +impetuous +impieties +impiety +impious +implacable +implements +implies +implor +implorators +implore +implored +imploring +impon +import +importance +importancy +important +importantly +imported +importeth +importing +importless +imports +importun +importunacy +importunate +importune +importunes +importunity +impos +impose +imposed +imposition +impositions +impossibilities +impossibility +impossible +imposthume +impostor +impostors +impotence +impotent +impounded +impregnable +imprese +impress +impressed +impressest +impression +impressure +imprimendum +imprimis +imprint +imprinted +imprison +imprisoned +imprisoning +imprisonment +improbable +improper +improve +improvident +impudence +impudency +impudent +impudently +impudique +impugn +impugns +impure +imputation +impute +in +inaccessible +inaidable +inaudible +inauspicious +incaged +incantations +incapable +incardinate +incarnadine +incarnate +incarnation +incens +incense +incensed +incensement +incenses +incensing +incertain +incertainties +incertainty +incessant +incessantly +incest +incestuous +inch +incharitable +inches +incidency +incident +incision +incite +incites +incivil +incivility +inclin +inclinable +inclination +incline +inclined +inclines +inclining +inclips +include +included +includes +inclusive +incomparable +incomprehensible +inconsiderate +inconstancy +inconstant +incontinency +incontinent +incontinently +inconvenience +inconveniences +inconvenient +incony +incorporate +incorps +incorrect +increas +increase +increases +increaseth +increasing +incredible +incredulous +incur +incurable +incurr +incurred +incursions +ind +inde +indebted +indeed +indent +indented +indenture +indentures +index +indexes +india +indian +indict +indicted +indictment +indies +indifferency +indifferent +indifferently +indigent +indigest +indigested +indign +indignation +indignations +indigne +indignities +indignity +indirect +indirection +indirections +indirectly +indiscreet +indiscretion +indispos +indisposition +indissoluble +indistinct +indistinguish +indistinguishable +indited +individable +indrench +indu +indubitate +induc +induce +induced +inducement +induction +inductions +indue +indued +indues +indulgence +indulgences +indulgent +indurance +industrious +industriously +industry +inequality +inestimable +inevitable +inexecrable +inexorable +inexplicable +infallible +infallibly +infamonize +infamous +infamy +infancy +infant +infants +infect +infected +infecting +infection +infections +infectious +infectiously +infects +infer +inference +inferior +inferiors +infernal +inferr +inferreth +inferring +infest +infidel +infidels +infinite +infinitely +infinitive +infirm +infirmities +infirmity +infixed +infixing +inflam +inflame +inflaming +inflammation +inflict +infliction +influence +influences +infold +inform +informal +information +informations +informed +informer +informs +infortunate +infring +infringe +infringed +infus +infuse +infused +infusing +infusion +ingener +ingenious +ingeniously +inglorious +ingots +ingraffed +ingraft +ingrate +ingrated +ingrateful +ingratitude +ingratitudes +ingredient +ingredients +ingross +inhabit +inhabitable +inhabitants +inhabited +inhabits +inhearse +inhearsed +inherent +inherit +inheritance +inherited +inheriting +inheritor +inheritors +inheritrix +inherits +inhibited +inhibition +inhoop +inhuman +iniquities +iniquity +initiate +injointed +injunction +injunctions +injur +injure +injurer +injuries +injurious +injury +injustice +ink +inkhorn +inkle +inkles +inkling +inky +inlaid +inland +inlay +inly +inmost +inn +inner +innkeeper +innocence +innocency +innocent +innocents +innovation +innovator +inns +innumerable +inoculate +inordinate +inprimis +inquir +inquire +inquiry +inquisition +inquisitive +inroads +insane +insanie +insatiate +insconce +inscrib +inscription +inscriptions +inscroll +inscrutable +insculp +insculpture +insensible +inseparable +inseparate +insert +inserted +inset +inshell +inshipp +inside +insinewed +insinuate +insinuateth +insinuating +insinuation +insisted +insisting +insisture +insociable +insolence +insolent +insomuch +inspir +inspiration +inspirations +inspire +inspired +install +installed +instalment +instance +instances +instant +instantly +instate +instead +insteeped +instigate +instigated +instigation +instigations +instigator +instinct +instinctively +institute +institutions +instruct +instructed +instruction +instructions +instructs +instrument +instrumental +instruments +insubstantial +insufficience +insufficiency +insult +insulted +insulting +insultment +insults +insupportable +insuppressive +insurrection +insurrections +int +integer +integritas +integrity +intellect +intellects +intellectual +intelligence +intelligencer +intelligencing +intelligent +intelligis +intelligo +intemperance +intemperate +intend +intended +intendeth +intending +intendment +intends +intenible +intent +intention +intentively +intents +inter +intercept +intercepted +intercepter +interception +intercepts +intercession +intercessors +interchained +interchang +interchange +interchangeably +interchangement +interchanging +interdiction +interest +interim +interims +interior +interjections +interjoin +interlude +intermingle +intermission +intermissive +intermit +intermix +intermixed +interpose +interposer +interposes +interpret +interpretation +interpreted +interpreter +interpreters +interprets +interr +interred +interrogatories +interrupt +interrupted +interrupter +interruptest +interruption +interrupts +intertissued +intervallums +interview +intestate +intestine +intil +intimate +intimation +intitled +intituled +into +intolerable +intoxicates +intreasured +intreat +intrench +intrenchant +intricate +intrinse +intrinsicate +intrude +intruder +intruding +intrusion +inundation +inure +inurn +invade +invades +invasion +invasive +invectively +invectives +inveigled +invent +invented +invention +inventions +inventor +inventorially +inventoried +inventors +inventory +inverness +invert +invest +invested +investing +investments +inveterate +invincible +inviolable +invised +invisible +invitation +invite +invited +invites +inviting +invitis +invocate +invocation +invoke +invoked +invulnerable +inward +inwardly +inwardness +inwards +ionia +ionian +ipse +ipswich +ira +irae +iras +ire +ireful +ireland +iris +irish +irishman +irishmen +irks +irksome +iron +irons +irreconcil +irrecoverable +irregular +irregulous +irreligious +irremovable +irreparable +irresolute +irrevocable +is +isabel +isabella +isbel +isbels +iscariot +ise +ish +isidore +isis +island +islander +islanders +islands +isle +isles +israel +issu +issue +issued +issueless +issues +issuing +ist +ista +it +italian +italy +itch +itches +itching +item +items +iteration +ithaca +its +itself +itshall +iv +ivory +ivy +iwis +ix +j +jacet +jack +jackanapes +jacks +jacksauce +jackslave +jacob +jade +jaded +jades +jail +jakes +jamany +james +jamy +jane +jangled +jangling +january +janus +japhet +jaquenetta +jaques +jar +jarring +jars +jarteer +jasons +jaunce +jauncing +jaundice +jaundies +jaw +jawbone +jaws +jay +jays +jc +je +jealous +jealousies +jealousy +jeer +jeering +jelly +jenny +jeopardy +jephtha +jephthah +jerkin +jerkins +jerks +jeronimy +jerusalem +jeshu +jesses +jessica +jest +jested +jester +jesters +jesting +jests +jesu +jesus +jet +jets +jew +jewel +jeweller +jewels +jewess +jewish +jewry +jews +jezebel +jig +jigging +jill +jills +jingling +joan +job +jockey +jocund +jog +jogging +john +johns +join +joinder +joined +joiner +joineth +joins +joint +jointed +jointing +jointly +jointress +joints +jointure +jollity +jolly +jolt +joltheads +jordan +joseph +joshua +jot +jour +jourdain +journal +journey +journeying +journeyman +journeymen +journeys +jove +jovem +jovial +jowl +jowls +joy +joyed +joyful +joyfully +joyless +joyous +joys +juan +jud +judas +judases +jude +judg +judge +judged +judgement +judges +judgest +judging +judgment +judgments +judicious +jug +juggle +juggled +juggler +jugglers +juggling +jugs +juice +juiced +jul +jule +julia +juliet +julietta +julio +julius +july +jump +jumpeth +jumping +jumps +june +junes +junior +junius +junkets +juno +jupiter +jure +jurement +jurisdiction +juror +jurors +jury +jurymen +just +justeius +justest +justice +justicer +justicers +justices +justification +justified +justify +justle +justled +justles +justling +justly +justness +justs +jutting +jutty +juvenal +kam +kate +kated +kates +katharine +katherina +katherine +kecksies +keech +keel +keels +keen +keenness +keep +keepdown +keeper +keepers +keepest +keeping +keeps +keiser +ken +kendal +kennel +kent +kentish +kentishman +kentishmen +kept +kerchief +kerely +kern +kernal +kernel +kernels +kerns +kersey +kettle +kettledrum +kettledrums +key +keys +kibe +kibes +kick +kicked +kickshaws +kickshawses +kicky +kid +kidney +kikely +kildare +kill +killed +killer +killeth +killing +killingworth +kills +kiln +kimbolton +kin +kind +kinder +kindest +kindle +kindled +kindless +kindlier +kindling +kindly +kindness +kindnesses +kindred +kindreds +kinds +kine +king +kingdom +kingdoms +kingly +kings +kinred +kins +kinsman +kinsmen +kinswoman +kirtle +kirtles +kiss +kissed +kisses +kissing +kitchen +kitchens +kite +kites +kitten +kj +kl +klll +knack +knacks +knapp +knav +knave +knaveries +knavery +knaves +knavish +knead +kneaded +kneading +knee +kneel +kneeling +kneels +knees +knell +knew +knewest +knife +knight +knighted +knighthood +knighthoods +knightly +knights +knit +knits +knitters +knitteth +knives +knobs +knock +knocking +knocks +knog +knoll +knot +knots +knotted +knotty +know +knower +knowest +knowing +knowingly +knowings +knowledge +known +knows +l +la +laban +label +labell +labienus +labio +labor +laboring +labors +labour +laboured +labourer +labourers +labouring +labours +laboursome +labras +labyrinth +lac +lace +laced +lacedaemon +laces +lacies +lack +lackbeard +lacked +lackey +lackeying +lackeys +lacking +lacks +lad +ladder +ladders +lade +laden +ladies +lading +lads +lady +ladybird +ladyship +ladyships +laer +laertes +lafeu +lag +lagging +laid +lain +laissez +lake +lakes +lakin +lam +lamb +lambert +lambkin +lambkins +lambs +lame +lamely +lameness +lament +lamentable +lamentably +lamentation +lamentations +lamented +lamenting +lamentings +laments +lames +laming +lammas +lammastide +lamound +lamp +lampass +lamps +lanc +lancaster +lance +lances +lanceth +lanch +land +landed +landing +landless +landlord +landmen +lands +lane +lanes +langage +langley +langton +language +languageless +languages +langues +languish +languished +languishes +languishing +languishings +languishment +languor +lank +lantern +lanterns +lanthorn +lap +lapis +lapland +lapp +laps +lapse +lapsed +lapsing +lapwing +laquais +larded +larder +larding +lards +large +largely +largeness +larger +largess +largest +lark +larks +larron +lartius +larum +larums +las +lascivious +lash +lass +lasses +last +lasted +lasting +lastly +lasts +latch +latches +late +lated +lately +later +latest +lath +latin +latten +latter +lattice +laud +laudable +laudis +laugh +laughable +laughed +laugher +laughest +laughing +laughs +laughter +launce +launcelot +launces +launch +laund +laundress +laundry +laur +laura +laurel +laurels +laurence +laus +lavache +lave +lavee +lavender +lavina +lavinia +lavish +lavishly +lavolt +lavoltas +law +lawful +lawfully +lawless +lawlessly +lawn +lawns +lawrence +laws +lawyer +lawyers +lay +layer +layest +laying +lays +lazar +lazars +lazarus +lazy +lc +ld +ldst +le +lead +leaden +leader +leaders +leadest +leading +leads +leaf +leagu +league +leagued +leaguer +leagues +leah +leak +leaky +lean +leander +leaner +leaning +leanness +leans +leap +leaped +leaping +leaps +leapt +lear +learn +learned +learnedly +learning +learnings +learns +learnt +leas +lease +leases +leash +leasing +least +leather +leathern +leav +leave +leaven +leavening +leaver +leaves +leaving +leavy +lecher +lecherous +lechers +lechery +lecon +lecture +lectures +led +leda +leech +leeches +leek +leeks +leer +leers +lees +leese +leet +leets +left +leg +legacies +legacy +legate +legatine +lege +legerity +leges +legg +legion +legions +legitimate +legitimation +legs +leicester +leicestershire +leiger +leigers +leisure +leisurely +leisures +leman +lemon +lena +lend +lender +lending +lendings +lends +length +lengthen +lengthens +lengths +lenity +lennox +lent +lenten +lentus +leo +leon +leonardo +leonati +leonato +leonatus +leontes +leopard +leopards +leper +leperous +lepidus +leprosy +lequel +lers +les +less +lessen +lessens +lesser +lesson +lessoned +lessons +lest +lestrake +let +lethargied +lethargies +lethargy +lethe +lets +lett +letter +letters +letting +lettuce +leur +leve +level +levell +levelled +levels +leven +levers +leviathan +leviathans +levied +levies +levity +levy +levying +lewd +lewdly +lewdness +lewdsters +lewis +liable +liar +liars +libbard +libelling +libels +liberal +liberality +liberte +liberties +libertine +libertines +liberty +library +libya +licence +licens +license +licentious +lichas +licio +lick +licked +licker +lictors +lid +lids +lie +lied +lief +liefest +liege +liegeman +liegemen +lien +lies +liest +lieth +lieu +lieutenant +lieutenantry +lieutenants +lieve +life +lifeblood +lifeless +lifelings +lift +lifted +lifter +lifteth +lifting +lifts +lig +ligarius +liggens +light +lighted +lighten +lightens +lighter +lightest +lightly +lightness +lightning +lightnings +lights +lik +like +liked +likeliest +likelihood +likelihoods +likely +likeness +liker +likes +likest +likewise +liking +likings +lilies +lily +lim +limander +limb +limbeck +limbecks +limber +limbo +limbs +lime +limed +limehouse +limekilns +limit +limitation +limited +limits +limn +limp +limping +limps +lin +lincoln +lincolnshire +line +lineal +lineally +lineament +lineaments +lined +linen +linens +lines +ling +lingare +linger +lingered +lingers +linguist +lining +link +links +linsey +linstock +linta +lion +lionel +lioness +lions +lip +lipp +lips +lipsbury +liquid +liquor +liquorish +liquors +lirra +lisbon +lisp +lisping +list +listen +listening +lists +literatured +lither +litter +little +littlest +liv +live +lived +livelier +livelihood +livelong +lively +liver +liveries +livers +livery +lives +livest +liveth +livia +living +livings +lizard +lizards +ll +lll +llous +lnd +lo +loa +loach +load +loaden +loading +loads +loaf +loam +loan +loath +loathe +loathed +loather +loathes +loathing +loathly +loathness +loathsome +loathsomeness +loathsomest +loaves +lob +lobbies +lobby +local +lochaber +lock +locked +locking +lockram +locks +locusts +lode +lodg +lodge +lodged +lodgers +lodges +lodging +lodgings +lodovico +lodowick +lofty +log +logger +loggerhead +loggerheads +loggets +logic +logs +loins +loiter +loiterer +loiterers +loitering +lolling +lolls +lombardy +london +londoners +lone +loneliness +lonely +long +longaville +longboat +longed +longer +longest +longeth +longing +longings +longly +longs +longtail +loo +loof +look +looked +looker +lookers +lookest +looking +looks +loon +loop +loos +loose +loosed +loosely +loosen +loosing +lop +lopp +loquitur +lord +lorded +lording +lordings +lordliness +lordly +lords +lordship +lordships +lorenzo +lorn +lorraine +lorship +los +lose +loser +losers +loses +losest +loseth +losing +loss +losses +lost +lot +lots +lott +lottery +loud +louder +loudly +lour +loureth +louring +louse +louses +lousy +lout +louted +louts +louvre +lov +love +loved +lovedst +lovel +lovelier +loveliness +lovell +lovely +lover +lovered +lovers +loves +lovest +loveth +loving +lovingly +low +lowe +lower +lowest +lowing +lowliness +lowly +lown +lowness +loyal +loyally +loyalties +loyalty +lozel +lt +lubber +lubberly +luc +luccicos +luce +lucentio +luces +lucetta +luciana +lucianus +lucifer +lucifier +lucilius +lucina +lucio +lucius +luck +luckier +luckiest +luckily +luckless +lucky +lucre +lucrece +lucretia +lucullius +lucullus +lucy +lud +ludlow +lug +lugg +luggage +luke +lukewarm +lull +lulla +lullaby +lulls +lumbert +lump +lumpish +luna +lunacies +lunacy +lunatic +lunatics +lunes +lungs +lupercal +lurch +lure +lurk +lurketh +lurking +lurks +luscious +lush +lust +lusted +luster +lustful +lustier +lustiest +lustig +lustihood +lustily +lustre +lustrous +lusts +lusty +lute +lutes +lutestring +lutheran +luxurious +luxuriously +luxury +ly +lycaonia +lycurguses +lydia +lye +lyen +lying +lym +lymoges +lynn +lysander +m +ma +maan +mab +macbeth +maccabaeus +macdonwald +macduff +mace +macedon +maces +machiavel +machination +machinations +machine +mack +macmorris +maculate +maculation +mad +madam +madame +madams +madcap +madded +madding +made +madeira +madly +madman +madmen +madness +madonna +madrigals +mads +maecenas +maggot +maggots +magic +magical +magician +magistrate +magistrates +magnanimity +magnanimous +magni +magnifi +magnificence +magnificent +magnifico +magnificoes +magnus +mahomet +mahu +maid +maiden +maidenhead +maidenheads +maidenhood +maidenhoods +maidenliest +maidenly +maidens +maidhood +maids +mail +mailed +mails +maim +maimed +maims +main +maincourse +maine +mainly +mainmast +mains +maintain +maintained +maintains +maintenance +mais +maison +majestas +majestee +majestic +majestical +majestically +majesties +majesty +major +majority +mak +make +makeless +maker +makers +makes +makest +maketh +making +makings +mal +mala +maladies +malady +malapert +malcolm +malcontent +malcontents +male +maledictions +malefactions +malefactor +malefactors +males +malevolence +malevolent +malhecho +malice +malicious +maliciously +malign +malignancy +malignant +malignantly +malkin +mall +mallard +mallet +mallows +malmsey +malt +maltworms +malvolio +mamillius +mammering +mammet +mammets +mammock +man +manacle +manacles +manage +managed +manager +managing +manakin +manchus +mandate +mandragora +mandrake +mandrakes +mane +manent +manes +manet +manfully +mangle +mangled +mangles +mangling +mangy +manhood +manhoods +manifest +manifested +manifests +manifold +manifoldly +manka +mankind +manlike +manly +mann +manna +manner +mannerly +manners +manningtree +mannish +manor +manors +mans +mansion +mansionry +mansions +manslaughter +mantle +mantled +mantles +mantua +mantuan +manual +manure +manured +manus +many +map +mapp +maps +mar +marble +marbled +marcade +marcellus +march +marches +marcheth +marching +marchioness +marchpane +marcians +marcius +marcus +mardian +mare +mares +marg +margarelon +margaret +marge +margent +margery +maria +marian +mariana +maries +marigold +mariner +mariners +maritime +marjoram +mark +marked +market +marketable +marketplace +markets +marking +markman +marks +marl +marle +marmoset +marquess +marquis +marr +marriage +marriages +married +marries +marring +marrow +marrowless +marrows +marry +marrying +mars +marseilles +marsh +marshal +marshalsea +marshalship +mart +marted +martem +martext +martial +martin +martino +martius +martlemas +martlet +marts +martyr +martyrs +marullus +marv +marvel +marvell +marvellous +marvellously +marvels +mary +mas +masculine +masham +mask +masked +masker +maskers +masking +masks +mason +masonry +masons +masque +masquers +masques +masquing +mass +massacre +massacres +masses +massy +mast +mastcr +master +masterdom +masterest +masterless +masterly +masterpiece +masters +mastership +mastic +mastiff +mastiffs +masts +match +matches +matcheth +matching +matchless +mate +mated +mater +material +mates +mathematics +matin +matron +matrons +matter +matters +matthew +mattock +mattress +mature +maturity +maud +maudlin +maugre +maul +maund +mauri +mauritania +mauvais +maw +maws +maxim +may +mayday +mayest +mayor +maypole +mayst +maz +maze +mazed +mazes +mazzard +me +meacock +mead +meadow +meadows +meads +meagre +meal +meals +mealy +mean +meanders +meaner +meanest +meaneth +meaning +meanings +meanly +means +meant +meantime +meanwhile +measles +measur +measurable +measure +measured +measureless +measures +measuring +meat +meats +mechanic +mechanical +mechanicals +mechanics +mechante +med +medal +meddle +meddler +meddling +mede +medea +media +mediation +mediators +medice +medicinal +medicine +medicines +meditate +meditates +meditating +meditation +meditations +mediterranean +mediterraneum +medlar +medlars +meed +meeds +meek +meekly +meekness +meet +meeter +meetest +meeting +meetings +meetly +meetness +meets +meg +mehercle +meilleur +meiny +meisen +melancholies +melancholy +melford +mell +mellifluous +mellow +mellowing +melodious +melody +melt +melted +melteth +melting +melts +melun +member +members +memento +memorable +memorandums +memorial +memorials +memories +memoriz +memorize +memory +memphis +men +menac +menace +menaces +menaphon +menas +mend +mended +mender +mending +mends +menecrates +menelaus +menenius +mental +menteith +mention +mentis +menton +mephostophilus +mer +mercatante +mercatio +mercenaries +mercenary +mercer +merchandise +merchandized +merchant +merchants +mercies +merciful +mercifully +merciless +mercurial +mercuries +mercury +mercutio +mercy +mere +mered +merely +merest +meridian +merit +merited +meritorious +merits +merlin +mermaid +mermaids +merops +merrier +merriest +merrily +merriman +merriment +merriments +merriness +merry +mervailous +mes +mesh +meshes +mesopotamia +mess +message +messages +messala +messaline +messenger +messengers +messes +messina +met +metal +metals +metamorphis +metamorphoses +metaphor +metaphysical +metaphysics +mete +metellus +meteor +meteors +meteyard +metheglin +metheglins +methink +methinks +method +methods +methought +methoughts +metre +metres +metropolis +mette +mettle +mettled +meus +mew +mewed +mewling +mexico +mi +mice +michael +michaelmas +micher +miching +mickle +microcosm +mid +midas +middest +middle +middleham +midnight +midriff +midst +midsummer +midway +midwife +midwives +mienne +might +mightful +mightier +mightiest +mightily +mightiness +mightst +mighty +milan +milch +mild +milder +mildest +mildew +mildews +mildly +mildness +mile +miles +milford +militarist +military +milk +milking +milkmaid +milks +milksops +milky +mill +mille +miller +milliner +million +millioned +millions +mills +millstones +milo +mimic +minc +mince +minces +mincing +mind +minded +minding +mindless +minds +mine +mineral +minerals +minerva +mines +mingle +mingled +mingling +minikin +minim +minime +minimo +minimus +mining +minion +minions +minist +minister +ministers +ministration +minnow +minnows +minola +minority +minos +minotaurs +minstrel +minstrels +minstrelsy +mint +mints +minute +minutely +minutes +minx +mio +mir +mirable +miracle +miracles +miraculous +miranda +mire +mirror +mirrors +mirth +mirthful +miry +mis +misadventur +misadventure +misanthropos +misapplied +misbecame +misbecom +misbecome +misbegot +misbegotten +misbeliever +misbelieving +misbhav +miscall +miscalled +miscarried +miscarries +miscarry +miscarrying +mischance +mischances +mischief +mischiefs +mischievous +misconceived +misconst +misconster +misconstruction +misconstrued +misconstrues +miscreant +miscreate +misdeed +misdeeds +misdemean +misdemeanours +misdoubt +misdoubteth +misdoubts +misenum +miser +miserable +miserably +misericorde +miseries +misers +misery +misfortune +misfortunes +misgive +misgives +misgiving +misgoverned +misgovernment +misgraffed +misguide +mishap +mishaps +misheard +misinterpret +mislead +misleader +misleaders +misleading +misled +mislike +misord +misplac +misplaced +misplaces +mispris +misprised +misprision +misprizing +misproud +misquote +misreport +miss +missed +misses +misshap +misshapen +missheathed +missing +missingly +missions +missive +missives +misspoke +mist +mista +mistak +mistake +mistaken +mistakes +mistaketh +mistaking +mistakings +mistemp +mistempered +misterm +mistful +misthink +misthought +mistletoe +mistook +mistreadings +mistress +mistresses +mistresss +mistriship +mistrust +mistrusted +mistrustful +mistrusting +mists +misty +misus +misuse +misused +misuses +mites +mithridates +mitigate +mitigation +mix +mixed +mixture +mixtures +mm +mnd +moan +moans +moat +moated +mobled +mock +mockable +mocker +mockeries +mockers +mockery +mocking +mocks +mockvater +mockwater +model +modena +moderate +moderately +moderation +modern +modest +modesties +modestly +modesty +modicums +modo +module +moe +moi +moiety +moist +moisten +moisture +moldwarp +mole +molehill +moles +molest +molestation +mollification +mollis +molten +molto +mome +moment +momentary +moming +mon +monachum +monarch +monarchies +monarchize +monarcho +monarchs +monarchy +monast +monastery +monastic +monday +monde +money +moneys +mong +monger +mongers +monging +mongrel +mongrels +mongst +monk +monkey +monkeys +monks +monmouth +monopoly +mons +monsieur +monsieurs +monster +monsters +monstrous +monstrously +monstrousness +monstruosity +montacute +montage +montague +montagues +montano +montant +montez +montferrat +montgomery +month +monthly +months +montjoy +monument +monumental +monuments +mood +moods +moody +moon +moonbeams +moonish +moonlight +moons +moonshine +moonshines +moor +moorfields +moors +moorship +mop +mope +moping +mopping +mopsa +moral +moraler +morality +moralize +mordake +more +moreover +mores +morgan +mori +morisco +morn +morning +mornings +morocco +morris +morrow +morrows +morsel +morsels +mort +mortal +mortality +mortally +mortals +mortar +mortgaged +mortified +mortifying +mortimer +mortimers +mortis +mortise +morton +mose +moss +mossgrown +most +mote +moth +mother +mothers +moths +motion +motionless +motions +motive +motives +motley +mots +mought +mould +moulded +mouldeth +moulds +mouldy +moult +moulten +mounch +mounseur +mounsieur +mount +mountain +mountaineer +mountaineers +mountainous +mountains +mountant +mountanto +mountebank +mountebanks +mounted +mounteth +mounting +mounts +mourn +mourned +mourner +mourners +mournful +mournfully +mourning +mourningly +mournings +mourns +mous +mouse +mousetrap +mousing +mouth +mouthed +mouths +mov +movables +move +moveable +moveables +moved +mover +movers +moves +moveth +moving +movingly +movousus +mow +mowbray +mower +mowing +mows +moy +moys +moyses +mrs +much +muck +mud +mudded +muddied +muddy +muffins +muffl +muffle +muffled +muffler +muffling +mugger +mugs +mulberries +mulberry +mule +mules +muleteers +mulier +mulieres +muliteus +mull +mulmutius +multiplied +multiply +multiplying +multipotent +multitude +multitudes +multitudinous +mum +mumble +mumbling +mummers +mummy +mun +munch +muniments +munition +murd +murder +murdered +murderer +murderers +murdering +murderous +murders +mure +murk +murkiest +murky +murmur +murmurers +murmuring +murrain +murray +murrion +murther +murtherer +murtherers +murthering +murtherous +murthers +mus +muscadel +muscovites +muscovits +muscovy +muse +muses +mush +mushrooms +music +musical +musician +musicians +musics +musing +musings +musk +musket +muskets +muskos +muss +mussel +mussels +must +mustachio +mustard +mustardseed +muster +mustering +musters +musty +mutability +mutable +mutation +mutations +mute +mutes +mutest +mutine +mutineer +mutineers +mutines +mutinies +mutinous +mutiny +mutius +mutter +muttered +mutton +muttons +mutual +mutualities +mutually +muzzl +muzzle +muzzled +mv +mww +my +mynheers +myrmidon +myrmidons +myrtle +myself +myst +mysteries +mystery +n +nag +nage +nags +naiads +nail +nails +nak +naked +nakedness +nal +nam +name +named +nameless +namely +names +namest +naming +nan +nance +nap +nape +napes +napkin +napkins +naples +napless +napping +naps +narbon +narcissus +narines +narrow +narrowly +naso +nasty +nathaniel +natifs +nation +nations +native +nativity +natur +natural +naturalize +naturally +nature +natured +natures +natus +naught +naughtily +naughty +navarre +nave +navel +navigation +navy +nay +nayward +nayword +nazarite +ne +neaf +neamnoins +neanmoins +neapolitan +neapolitans +near +nearer +nearest +nearly +nearness +neat +neatly +neb +nebour +nebuchadnezzar +nec +necessaries +necessarily +necessary +necessitied +necessities +necessity +neck +necklace +necks +nectar +ned +nedar +need +needed +needer +needful +needfull +needing +needle +needles +needless +needly +needs +needy +neer +neeze +nefas +negation +negative +negatives +neglect +neglected +neglecting +neglectingly +neglection +negligence +negligent +negotiate +negotiations +negro +neigh +neighbors +neighbour +neighbourhood +neighbouring +neighbourly +neighbours +neighing +neighs +neither +nell +nemean +nemesis +neoptolemus +nephew +nephews +neptune +ner +nereides +nerissa +nero +neroes +ners +nerve +nerves +nervii +nervy +nessus +nest +nestor +nests +net +nether +netherlands +nets +nettle +nettled +nettles +neuter +neutral +nev +never +nevil +nevils +new +newborn +newer +newest +newgate +newly +newness +news +newsmongers +newt +newts +next +nibbling +nicanor +nice +nicely +niceness +nicer +nicety +nicholas +nick +nickname +nicks +niece +nieces +niggard +niggarding +niggardly +nigh +night +nightcap +nightcaps +nighted +nightgown +nightingale +nightingales +nightly +nightmare +nights +nightwork +nihil +nile +nill +nilus +nimble +nimbleness +nimbler +nimbly +nine +nineteen +ning +ningly +ninny +ninth +ninus +niobe +niobes +nip +nipp +nipping +nipple +nips +nit +nly +nnight +nnights +no +noah +nob +nobility +nobis +noble +nobleman +noblemen +nobleness +nobler +nobles +noblesse +noblest +nobly +nobody +noces +nod +nodded +nodding +noddle +noddles +noddy +nods +noes +nointed +nois +noise +noiseless +noisemaker +noises +noisome +nole +nominate +nominated +nomination +nominativo +non +nonage +nonce +none +nonino +nonny +nonpareil +nonsuits +nony +nook +nooks +noon +noonday +noontide +nor +norbery +norfolk +norman +normandy +normans +north +northampton +northamptonshire +northerly +northern +northgate +northumberland +northumberlands +northward +norway +norways +norwegian +norweyan +nos +nose +nosegays +noseless +noses +noster +nostra +nostril +nostrils +not +notable +notably +notary +notch +note +notebook +noted +notedly +notes +notest +noteworthy +nothing +nothings +notice +notify +noting +notion +notorious +notoriously +notre +notwithstanding +nought +noun +nouns +nourish +nourished +nourisher +nourishes +nourisheth +nourishing +nourishment +nous +novel +novelties +novelty +noverbs +novi +novice +novices +novum +now +nowhere +noyance +ns +nt +nubibus +numa +numb +number +numbered +numbering +numberless +numbers +numbness +nun +nuncio +nuncle +nunnery +nuns +nuntius +nuptial +nurs +nurse +nursed +nurser +nursery +nurses +nurseth +nursh +nursing +nurtur +nurture +nut +nuthook +nutmeg +nutmegs +nutriment +nuts +nutshell +ny +nym +nymph +nymphs +o +oak +oaken +oaks +oared +oars +oatcake +oaten +oath +oathable +oaths +oats +ob +obduracy +obdurate +obedience +obedient +obeisance +oberon +obey +obeyed +obeying +obeys +obidicut +object +objected +objections +objects +oblation +oblations +obligation +obligations +obliged +oblique +oblivion +oblivious +obloquy +obscene +obscenely +obscur +obscure +obscured +obscurely +obscures +obscuring +obscurity +obsequies +obsequious +obsequiously +observ +observance +observances +observancy +observant +observants +observation +observe +observed +observer +observers +observing +observingly +obsque +obstacle +obstacles +obstinacy +obstinate +obstinately +obstruct +obstruction +obstructions +obtain +obtained +obtaining +occasion +occasions +occident +occidental +occulted +occupat +occupation +occupations +occupied +occupies +occupy +occurrence +occurrences +occurrents +ocean +oceans +octavia +octavius +ocular +od +odd +oddest +oddly +odds +ode +odes +odious +odoriferous +odorous +odour +odours +ods +oeillades +oes +oeuvres +of +ofephesus +off +offal +offence +offenceful +offences +offend +offended +offendendo +offender +offenders +offendeth +offending +offendress +offends +offense +offenseless +offenses +offensive +offer +offered +offering +offerings +offers +offert +offic +office +officed +officer +officers +offices +official +officious +offspring +oft +often +oftener +oftentimes +oh +oil +oils +oily +old +oldcastle +olden +older +oldest +oldness +olive +oliver +olivers +olives +olivia +olympian +olympus +oman +omans +omen +ominous +omission +omit +omittance +omitted +omitting +omne +omnes +omnipotent +on +once +one +ones +oneyers +ongles +onion +onions +only +onset +onward +onwards +oo +ooze +oozes +oozy +op +opal +ope +open +opener +opening +openly +openness +opens +operant +operate +operation +operations +operative +opes +oph +ophelia +opinion +opinions +opportune +opportunities +opportunity +oppos +oppose +opposed +opposeless +opposer +opposers +opposes +opposing +opposite +opposites +opposition +oppositions +oppress +oppressed +oppresses +oppresseth +oppressing +oppression +oppressor +opprest +opprobriously +oppugnancy +opulency +opulent +or +oracle +oracles +orange +oration +orator +orators +oratory +orb +orbed +orbs +orchard +orchards +ord +ordain +ordained +ordaining +order +ordered +ordering +orderless +orderly +orders +ordinance +ordinant +ordinaries +ordinary +ordnance +ords +ordure +ore +organ +organs +orgillous +orient +orifex +origin +original +orisons +ork +orlando +orld +orleans +ornament +ornaments +orodes +orphan +orphans +orpheus +orsino +ort +orthography +orts +oscorbidulchos +osier +osiers +osprey +osr +osric +ossa +ost +ostent +ostentare +ostentation +ostents +ostler +ostlers +ostrich +osw +oswald +othello +other +othergates +others +otherwhere +otherwhiles +otherwise +otter +ottoman +ottomites +oublie +ouches +ought +oui +ounce +ounces +ouphes +our +ours +ourself +ourselves +ousel +out +outbids +outbrave +outbraves +outbreak +outcast +outcries +outcry +outdar +outdare +outdares +outdone +outfac +outface +outfaced +outfacing +outfly +outfrown +outgo +outgoes +outgrown +outjest +outlaw +outlawry +outlaws +outliv +outlive +outlives +outliving +outlook +outlustres +outpriz +outrage +outrageous +outrages +outran +outright +outroar +outrun +outrunning +outruns +outscold +outscorn +outsell +outsells +outside +outsides +outspeaks +outsport +outstare +outstay +outstood +outstretch +outstretched +outstrike +outstrip +outstripped +outswear +outvenoms +outward +outwardly +outwards +outwear +outweighs +outwent +outworn +outworths +oven +over +overawe +overbear +overblown +overboard +overbold +overborne +overbulk +overbuys +overcame +overcast +overcharg +overcharged +overcome +overcomes +overdone +overearnest +overfar +overflow +overflown +overglance +overgo +overgone +overgorg +overgrown +overhead +overhear +overheard +overhold +overjoyed +overkind +overland +overleather +overlive +overlook +overlooking +overlooks +overmaster +overmounting +overmuch +overpass +overpeer +overpeering +overplus +overrul +overrun +overscutch +overset +overshades +overshine +overshines +overshot +oversights +overspread +overstain +overswear +overt +overta +overtake +overtaketh +overthrow +overthrown +overthrows +overtook +overtopp +overture +overturn +overwatch +overween +overweening +overweigh +overwhelm +overwhelming +overworn +ovid +ovidius +ow +owe +owed +owedst +owen +owes +owest +oweth +owing +owl +owls +own +owner +owners +owning +owns +owy +ox +oxen +oxford +oxfordshire +oxlips +oyes +oyster +p +pabble +pabylon +pac +pace +paced +paces +pacified +pacify +pacing +pack +packet +packets +packhorses +packing +packings +packs +packthread +pacorus +paction +pad +paddle +paddling +paddock +padua +pagan +pagans +page +pageant +pageants +pages +pah +paid +pail +pailfuls +pails +pain +pained +painful +painfully +pains +paint +painted +painter +painting +paintings +paints +pair +paired +pairs +pajock +pal +palabras +palace +palaces +palamedes +palate +palates +palatine +palating +pale +paled +paleness +paler +pales +palestine +palfrey +palfreys +palisadoes +pall +pallabris +pallas +pallets +palm +palmer +palmers +palms +palmy +palpable +palsied +palsies +palsy +palt +palter +paltry +paly +pamp +pamper +pamphlets +pan +pancackes +pancake +pancakes +pandar +pandars +pandarus +pander +panderly +panders +pandulph +panel +pang +panging +pangs +pannier +pannonians +pansa +pansies +pant +pantaloon +panted +pantheon +panther +panthino +panting +pantingly +pantler +pantry +pants +pap +papal +paper +papers +paphlagonia +paphos +papist +paps +par +parable +paracelsus +paradise +paradox +paradoxes +paragon +paragons +parallel +parallels +paramour +paramours +parapets +paraquito +parasite +parasites +parca +parcel +parcell +parcels +parch +parched +parching +parchment +pard +pardon +pardona +pardoned +pardoner +pardoning +pardonne +pardonner +pardonnez +pardons +pare +pared +parel +parent +parentage +parents +parfect +paring +parings +paris +parish +parishioners +parisians +paritors +park +parks +parle +parler +parles +parley +parlez +parliament +parlors +parlour +parlous +parmacity +parolles +parricide +parricides +parrot +parrots +parsley +parson +part +partake +partaken +partaker +partakers +parted +parthia +parthian +parthians +parti +partial +partialize +partially +participate +participation +particle +particular +particularities +particularize +particularly +particulars +parties +parting +partisan +partisans +partition +partizan +partlet +partly +partner +partners +partridge +parts +party +pas +pash +pashed +pashful +pass +passable +passado +passage +passages +passant +passed +passenger +passengers +passes +passeth +passing +passio +passion +passionate +passioning +passions +passive +passport +passy +past +paste +pasterns +pasties +pastime +pastimes +pastoral +pastorals +pastors +pastry +pasture +pastures +pasty +pat +patay +patch +patchery +patches +pate +pated +patent +patents +paternal +pates +path +pathetical +paths +pathway +pathways +patience +patient +patiently +patients +patines +patrician +patricians +patrick +patrimony +patroclus +patron +patronage +patroness +patrons +patrum +patter +pattern +patterns +pattle +pauca +paucas +paul +paulina +paunch +paunches +pause +pauser +pauses +pausingly +pauvres +pav +paved +pavement +pavilion +pavilions +pavin +paw +pawn +pawns +paws +pax +pay +payest +paying +payment +payments +pays +paysan +paysans +pe +peace +peaceable +peaceably +peaceful +peacemakers +peaces +peach +peaches +peacock +peacocks +peak +peaking +peal +peals +pear +peard +pearl +pearls +pears +peas +peasant +peasantry +peasants +peascod +pease +peaseblossom +peat +peaten +peating +pebble +pebbled +pebbles +peck +pecks +peculiar +pecus +pedant +pedantical +pedascule +pede +pedestal +pedigree +pedlar +pedlars +pedro +peds +peel +peep +peeped +peeping +peeps +peer +peereth +peering +peerless +peers +peesel +peevish +peevishly +peflur +peg +pegasus +pegs +peise +peised +peize +pelf +pelican +pelion +pell +pella +pelleted +peloponnesus +pelt +pelting +pembroke +pen +penalties +penalty +penance +pence +pencil +pencill +pencils +pendant +pendent +pendragon +pendulous +penelope +penetrable +penetrate +penetrative +penitence +penitent +penitential +penitently +penitents +penker +penknife +penn +penned +penning +pennons +penny +pennyworth +pennyworths +pens +pense +pension +pensioners +pensive +pensived +pensively +pent +pentecost +penthesilea +penthouse +penurious +penury +peopl +people +peopled +peoples +pepin +pepper +peppercorn +peppered +per +peradventure +peradventures +perceiv +perceive +perceived +perceives +perceiveth +perch +perchance +percies +percussion +percy +perdie +perdita +perdition +perdonato +perdu +perdurable +perdurably +perdy +pere +peregrinate +peremptorily +peremptory +perfect +perfected +perfecter +perfectest +perfection +perfections +perfectly +perfectness +perfidious +perfidiously +perforce +perform +performance +performances +performed +performer +performers +performing +performs +perfum +perfume +perfumed +perfumer +perfumes +perge +perhaps +periapts +perigort +perigouna +peril +perilous +perils +period +periods +perish +perished +perishest +perisheth +perishing +periwig +perjur +perjure +perjured +perjuries +perjury +perk +perkes +permafoy +permanent +permission +permissive +permit +permitted +pernicious +perniciously +peroration +perpend +perpendicular +perpendicularly +perpetual +perpetually +perpetuity +perplex +perplexed +perplexity +pers +persecuted +persecutions +persecutor +perseus +persever +perseverance +persevers +persia +persian +persist +persisted +persistency +persistive +persists +person +personae +personage +personages +personal +personally +personate +personated +personates +personating +persons +perspective +perspectively +perspectives +perspicuous +persuade +persuaded +persuades +persuading +persuasion +persuasions +pert +pertain +pertaining +pertains +pertaunt +pertinent +pertly +perturb +perturbation +perturbations +perturbed +perus +perusal +peruse +perused +perusing +perverse +perversely +perverseness +pervert +perverted +peseech +pest +pester +pestiferous +pestilence +pestilent +pet +petar +peter +petit +petition +petitionary +petitioner +petitioners +petitions +peto +petrarch +petruchio +petter +petticoat +petticoats +pettiness +pettish +pettitoes +petty +peu +pew +pewter +pewterer +phaethon +phaeton +phantasime +phantasimes +phantasma +pharamond +pharaoh +pharsalia +pheasant +pheazar +phebe +phebes +pheebus +pheeze +phibbus +philadelphos +philario +philarmonus +philemon +philip +philippan +philippe +philippi +phillida +philo +philomel +philomela +philosopher +philosophers +philosophical +philosophy +philostrate +philotus +phlegmatic +phoebe +phoebus +phoenicia +phoenicians +phoenix +phorbus +photinus +phrase +phraseless +phrases +phrygia +phrygian +phrynia +physic +physical +physician +physicians +physics +pia +pibble +pible +picardy +pick +pickaxe +pickaxes +pickbone +picked +pickers +picking +pickle +picklock +pickpurse +picks +pickt +pickthanks +pictur +picture +pictured +pictures +pid +pie +piec +piece +pieces +piecing +pied +piedness +pier +pierc +pierce +pierced +pierces +pierceth +piercing +piercy +piers +pies +piety +pig +pigeon +pigeons +pight +pigmy +pigrogromitus +pike +pikes +pil +pilate +pilates +pilchers +pile +piles +pilf +pilfering +pilgrim +pilgrimage +pilgrims +pill +pillage +pillagers +pillar +pillars +pillicock +pillory +pillow +pillows +pills +pilot +pilots +pimpernell +pin +pinch +pinched +pinches +pinching +pindarus +pine +pined +pines +pinfold +pining +pinion +pink +pinn +pinnace +pins +pinse +pint +pintpot +pioned +pioneers +pioner +pioners +pious +pip +pipe +piper +pipers +pipes +piping +pippin +pippins +pirate +pirates +pisa +pisanio +pish +pismires +piss +pissing +pistol +pistols +pit +pitch +pitched +pitcher +pitchers +pitchy +piteous +piteously +pitfall +pith +pithless +pithy +pitie +pitied +pities +pitiful +pitifully +pitiless +pits +pittance +pittie +pittikins +pity +pitying +pius +plac +place +placed +placentio +places +placeth +placid +placing +plack +placket +plackets +plagu +plague +plagued +plagues +plaguing +plaguy +plain +plainer +plainest +plaining +plainings +plainly +plainness +plains +plainsong +plaintful +plaintiff +plaintiffs +plaints +planched +planet +planetary +planets +planks +plant +plantage +plantagenet +plantagenets +plantain +plantation +planted +planteth +plants +plash +plashy +plast +plaster +plasterer +plat +plate +plated +plates +platform +platforms +plats +platted +plausible +plausive +plautus +play +played +player +players +playeth +playfellow +playfellows +playhouse +playing +plays +plea +pleach +pleached +plead +pleaded +pleader +pleaders +pleading +pleads +pleas +pleasance +pleasant +pleasantly +please +pleased +pleaser +pleasers +pleases +pleasest +pleaseth +pleasing +pleasure +pleasures +plebeians +plebeii +plebs +pledge +pledges +pleines +plenitude +plenteous +plenteously +plenties +plentiful +plentifully +plenty +pless +plessed +plessing +pliant +plied +plies +plight +plighted +plighter +plod +plodded +plodders +plodding +plods +plood +ploody +plot +plots +plotted +plotter +plough +ploughed +ploughman +ploughmen +plow +plows +pluck +plucked +plucker +plucking +plucks +plue +plum +plume +plumed +plumes +plummet +plump +plumpy +plums +plung +plunge +plunged +plural +plurisy +plus +pluto +plutus +ply +po +pocket +pocketing +pockets +pocky +pody +poem +poesy +poet +poetical +poetry +poets +poictiers +poinards +poins +point +pointblank +pointed +pointing +points +pois +poise +poising +poison +poisoned +poisoner +poisoning +poisonous +poisons +poke +poking +pol +polack +polacks +poland +pold +pole +poleaxe +polecat +polecats +polemon +poles +poli +policies +policy +polish +polished +politic +politician +politicians +politicly +polixenes +poll +polluted +pollution +polonius +poltroons +polusion +polydamus +polydore +polyxena +pomander +pomegranate +pomewater +pomfret +pomgarnet +pommel +pomp +pompeius +pompey +pompion +pompous +pomps +pond +ponder +ponderous +ponds +poniard +poniards +pont +pontic +pontifical +ponton +pooh +pool +poole +poop +poor +poorer +poorest +poorly +pop +pope +popedom +popilius +popingay +popish +popp +poppy +pops +popular +popularity +populous +porch +porches +pore +poring +pork +porn +porpentine +porridge +porringer +port +portable +portage +portal +portance +portcullis +portend +portends +portent +portentous +portents +porter +porters +portia +portion +portly +portotartarossa +portrait +portraiture +ports +portugal +pose +posied +posies +position +positive +positively +posse +possess +possessed +possesses +possesseth +possessing +possession +possessions +possessor +posset +possets +possibilities +possibility +possible +possibly +possitable +post +poste +posted +posterior +posteriors +posterity +postern +posterns +posters +posthorse +posthorses +posthumus +posting +postmaster +posts +postscript +posture +postures +posy +pot +potable +potations +potato +potatoes +potch +potency +potent +potentates +potential +potently +potents +pothecary +pother +potion +potions +potpan +pots +potter +potting +pottle +pouch +poulter +poultice +poultney +pouncet +pound +pounds +pour +pourest +pouring +pourquoi +pours +pout +poverty +pow +powd +powder +power +powerful +powerfully +powerless +powers +pox +poys +poysam +prabbles +practic +practice +practiced +practicer +practices +practicing +practis +practisants +practise +practiser +practisers +practises +practising +praeclarissimus +praemunire +praetor +praetors +pragging +prague +prain +prains +prais +praise +praised +praises +praisest +praiseworthy +praising +prancing +prank +pranks +prat +prate +prated +prater +prating +prattle +prattler +prattling +prave +prawls +prawns +pray +prayer +prayers +praying +prays +pre +preach +preached +preachers +preaches +preaching +preachment +pread +preambulate +precedence +precedent +preceding +precept +preceptial +precepts +precinct +precious +preciously +precipice +precipitating +precipitation +precise +precisely +preciseness +precisian +precor +precurse +precursors +predeceased +predecessor +predecessors +predestinate +predicament +predict +prediction +predictions +predominance +predominant +predominate +preeches +preeminence +preface +prefer +preferment +preferments +preferr +preferreth +preferring +prefers +prefiguring +prefix +prefixed +preformed +pregnancy +pregnant +pregnantly +prejudicates +prejudice +prejudicial +prelate +premeditated +premeditation +premised +premises +prenez +prenominate +prentice +prentices +preordinance +prepar +preparation +preparations +prepare +prepared +preparedly +prepares +preparing +prepost +preposterous +preposterously +prerogatifes +prerogative +prerogatived +presage +presagers +presages +presageth +presaging +prescience +prescribe +prescript +prescription +prescriptions +prescripts +presence +presences +present +presentation +presented +presenter +presenters +presenteth +presenting +presently +presentment +presents +preserv +preservation +preservative +preserve +preserved +preserver +preservers +preserving +president +press +pressed +presser +presses +pressing +pressure +pressures +prest +prester +presume +presumes +presuming +presumption +presumptuous +presuppos +pret +pretence +pretences +pretend +pretended +pretending +pretense +pretext +pretia +prettier +prettiest +prettily +prettiness +pretty +prevail +prevailed +prevaileth +prevailing +prevailment +prevails +prevent +prevented +prevention +preventions +prevents +prey +preyful +preys +priam +priami +priamus +pribbles +price +prick +pricked +pricket +pricking +pricks +pricksong +pride +prides +pridge +prie +pried +prief +pries +priest +priesthood +priests +prig +primal +prime +primer +primero +primest +primitive +primo +primogenity +primrose +primroses +primy +prince +princely +princes +princess +principal +principalities +principality +principle +principles +princox +prings +print +printed +printing +printless +prints +prioress +priories +priority +priory +priscian +prison +prisoner +prisoners +prisonment +prisonnier +prisons +pristine +prithe +prithee +privacy +private +privately +privates +privilage +privileg +privilege +privileged +privileges +privilegio +privily +privity +privy +priz +prize +prized +prizer +prizes +prizest +prizing +pro +probable +probal +probation +proceed +proceeded +proceeders +proceeding +proceedings +proceeds +process +procession +proclaim +proclaimed +proclaimeth +proclaims +proclamation +proclamations +proconsul +procrastinate +procreant +procreants +procreation +procrus +proculeius +procur +procurator +procure +procured +procures +procuring +prodigal +prodigality +prodigally +prodigals +prodigies +prodigious +prodigiously +prodigy +proditor +produc +produce +produced +produces +producing +proface +profan +profanation +profane +profaned +profanely +profaneness +profaners +profaning +profess +professed +professes +profession +professions +professors +proffer +proffered +profferer +proffers +proficient +profit +profitable +profitably +profited +profiting +profitless +profits +profound +profoundest +profoundly +progenitors +progeny +progne +prognosticate +prognostication +progress +progression +prohibit +prohibition +project +projection +projects +prolixious +prolixity +prologue +prologues +prolong +prolongs +promethean +prometheus +promis +promise +promised +promises +promiseth +promising +promontory +promotion +promotions +prompt +prompted +promptement +prompter +prompting +prompts +prompture +promulgate +prone +prononcer +prononcez +pronoun +pronounc +pronounce +pronounced +pronouncing +pronouns +proof +proofs +prop +propagate +propagation +propend +propension +proper +properer +properly +propertied +properties +property +prophecies +prophecy +prophesied +prophesier +prophesy +prophesying +prophet +prophetess +prophetic +prophetically +prophets +propinquity +propontic +proportion +proportionable +proportions +propos +propose +proposed +proposer +proposes +proposing +proposition +propositions +propounded +propp +propre +propriety +props +propugnation +prorogue +prorogued +proscription +proscriptions +prose +prosecute +prosecution +proselytes +proserpina +prosp +prospect +prosper +prosperity +prospero +prosperous +prosperously +prospers +prostitute +prostrate +protect +protected +protection +protector +protectors +protectorship +protectress +protects +protest +protestation +protestations +protested +protester +protesting +protests +proteus +protheus +protract +protractive +proud +prouder +proudest +proudlier +proudly +prouds +prov +provand +prove +proved +provender +proverb +proverbs +proves +proveth +provide +provided +providence +provident +providently +provider +provides +province +provinces +provincial +proving +provision +proviso +provocation +provok +provoke +provoked +provoker +provokes +provoketh +provoking +provost +prowess +prudence +prudent +prun +prune +prunes +pruning +pry +prying +psalm +psalmist +psalms +psalteries +ptolemies +ptolemy +public +publican +publication +publicly +publicola +publish +published +publisher +publishing +publius +pucelle +puck +pudder +pudding +puddings +puddle +puddled +pudency +pueritia +puff +puffing +puffs +pugging +puis +puissance +puissant +puke +puking +pulcher +puling +pull +puller +pullet +pulling +pulls +pulpit +pulpiter +pulpits +pulse +pulsidge +pump +pumpion +pumps +pun +punched +punish +punished +punishes +punishment +punishments +punk +punto +puny +pupil +pupils +puppet +puppets +puppies +puppy +pur +purblind +purchas +purchase +purchased +purchases +purchaseth +purchasing +pure +purely +purer +purest +purg +purgation +purgative +purgatory +purge +purged +purgers +purging +purifies +purifying +puritan +purity +purlieus +purple +purpled +purples +purport +purpos +purpose +purposed +purposely +purposes +purposeth +purposing +purr +purs +purse +pursents +purses +pursu +pursue +pursued +pursuers +pursues +pursuest +pursueth +pursuing +pursuit +pursuivant +pursuivants +pursy +purus +purveyor +push +pushes +pusillanimity +put +putrefy +putrified +puts +putter +putting +puttock +puzzel +puzzle +puzzled +puzzles +py +pygmalion +pygmies +pygmy +pyramid +pyramides +pyramids +pyramis +pyramises +pyramus +pyrenean +pyrrhus +pythagoras +qu +quadrangle +quae +quaff +quaffing +quagmire +quail +quailing +quails +quaint +quaintly +quak +quake +quakes +qualification +qualified +qualifies +qualify +qualifying +qualite +qualities +quality +qualm +qualmish +quam +quand +quando +quantities +quantity +quare +quarrel +quarrell +quarreller +quarrelling +quarrelous +quarrels +quarrelsome +quarries +quarry +quart +quarter +quartered +quartering +quarters +quarts +quasi +quat +quatch +quay +que +quean +queas +queasiness +queasy +queen +queens +quell +queller +quench +quenched +quenching +quenchless +quern +quest +questant +question +questionable +questioned +questioning +questionless +questions +questrists +quests +queubus +qui +quick +quicken +quickens +quicker +quicklier +quickly +quickness +quicksand +quicksands +quicksilverr +quid +quiddities +quiddits +quier +quiet +quieter +quietly +quietness +quietus +quill +quillets +quills +quilt +quinapalus +quince +quinces +quintain +quintessence +quintus +quip +quips +quire +quiring +quirk +quirks +quis +quit +quite +quits +quittance +quitted +quitting +quiver +quivering +quivers +quo +quod +quoifs +quoint +quoit +quoits +quondam +quoniam +quote +quoted +quotes +quoth +quotidian +r +rabbit +rabble +rabblement +race +rack +rackers +racket +rackets +racking +racks +radiance +radiant +radish +rafe +raft +rag +rage +rages +rageth +ragg +ragged +raggedness +raging +ragozine +rags +rah +rail +railed +railer +railest +raileth +railing +rails +raiment +rain +rainbow +raineth +raining +rainold +rains +rainy +rais +raise +raised +raises +raising +raisins +rak +rake +rakers +rakes +ral +rald +ralph +ram +rambures +ramm +rampallian +rampant +ramping +rampir +ramps +rams +ramsey +ramston +ran +rance +rancorous +rancors +rancour +random +rang +range +ranged +rangers +ranges +ranging +rank +ranker +rankest +ranking +rankle +rankly +rankness +ranks +ransack +ransacking +ransom +ransomed +ransoming +ransomless +ransoms +rant +ranting +rap +rape +rapes +rapier +rapiers +rapine +raps +rapt +rapture +raptures +rar +rare +rarely +rareness +rarer +rarest +rarities +rarity +rascal +rascalliest +rascally +rascals +rased +rash +rasher +rashly +rashness +rat +ratcatcher +ratcliff +rate +rated +rately +rates +rather +ratherest +ratified +ratifiers +ratify +rating +rational +ratolorum +rats +ratsbane +rattle +rattles +rattling +rature +raught +rav +rave +ravel +raven +ravening +ravenous +ravens +ravenspurgh +raves +ravin +raving +ravish +ravished +ravisher +ravishing +ravishments +raw +rawer +rawly +rawness +ray +rayed +rays +raz +raze +razed +razes +razeth +razing +razor +razorable +razors +razure +re +reach +reaches +reacheth +reaching +read +reader +readiest +readily +readiness +reading +readins +reads +ready +real +really +realm +realms +reap +reapers +reaping +reaps +rear +rears +rearward +reason +reasonable +reasonably +reasoned +reasoning +reasonless +reasons +reave +rebate +rebato +rebeck +rebel +rebell +rebelling +rebellion +rebellious +rebels +rebound +rebuk +rebuke +rebukeable +rebuked +rebukes +rebus +recall +recant +recantation +recanter +recanting +receipt +receipts +receiv +receive +received +receiver +receives +receivest +receiveth +receiving +receptacle +rechate +reciprocal +reciprocally +recite +recited +reciterai +reck +recking +reckless +reckon +reckoned +reckoning +reckonings +recks +reclaim +reclaims +reclusive +recognizance +recognizances +recoil +recoiling +recollected +recomforted +recomforture +recommend +recommended +recommends +recompens +recompense +reconcil +reconcile +reconciled +reconcilement +reconciler +reconciles +reconciliation +record +recordation +recorded +recorder +recorders +records +recount +recounted +recounting +recountments +recounts +recourse +recov +recover +recoverable +recovered +recoveries +recovers +recovery +recreant +recreants +recreate +recreation +rectify +rector +rectorship +recure +recured +red +redbreast +redder +reddest +rede +redeem +redeemed +redeemer +redeeming +redeems +redeliver +redemption +redime +redness +redoubled +redoubted +redound +redress +redressed +redresses +reduce +reechy +reed +reeds +reek +reeking +reeks +reeky +reel +reeleth +reeling +reels +refell +refer +reference +referr +referred +refigured +refin +refined +reflect +reflecting +reflection +reflex +reform +reformation +reformed +refractory +refrain +refresh +refreshing +reft +refts +refuge +refus +refusal +refuse +refused +refusest +refusing +reg +regal +regalia +regan +regard +regardance +regarded +regardfully +regarding +regards +regenerate +regent +regentship +regia +regiment +regiments +regina +region +regions +regist +register +registers +regreet +regreets +regress +reguerdon +regular +rehears +rehearsal +rehearse +reign +reigned +reignier +reigning +reigns +rein +reinforc +reinforce +reinforcement +reins +reiterate +reject +rejected +rejoic +rejoice +rejoices +rejoiceth +rejoicing +rejoicingly +rejoindure +rejourn +rel +relapse +relate +relates +relation +relations +relative +releas +release +released +releasing +relent +relenting +relents +reliances +relics +relief +reliev +relieve +relieved +relieves +relieving +religion +religions +religious +religiously +relinquish +reliques +reliquit +relish +relume +rely +relying +remain +remainder +remainders +remained +remaineth +remaining +remains +remark +remarkable +remediate +remedied +remedies +remedy +rememb +remember +remembered +remembers +remembrance +remembrancer +remembrances +remercimens +remiss +remission +remissness +remit +remnant +remnants +remonstrance +remorse +remorseful +remorseless +remote +remotion +remov +remove +removed +removedness +remover +removes +removing +remunerate +remuneration +rence +rend +render +rendered +renders +rendezvous +renegado +renege +reneges +renew +renewed +renewest +renounce +renouncement +renouncing +renowmed +renown +renowned +rent +rents +repaid +repair +repaired +repairing +repairs +repass +repast +repasture +repay +repaying +repays +repeal +repealing +repeals +repeat +repeated +repeating +repeats +repel +repent +repentance +repentant +repented +repenting +repents +repetition +repetitions +repin +repine +repining +replant +replenish +replenished +replete +replication +replied +replies +repliest +reply +replying +report +reported +reporter +reportest +reporting +reportingly +reports +reposal +repose +reposeth +reposing +repossess +reprehend +reprehended +reprehending +represent +representing +reprieve +reprieves +reprisal +reproach +reproaches +reproachful +reproachfully +reprobate +reprobation +reproof +reprov +reprove +reproveable +reproves +reproving +repugn +repugnancy +repugnant +repulse +repulsed +repurchas +repured +reputation +repute +reputed +reputeless +reputes +reputing +request +requested +requesting +requests +requiem +requir +require +required +requires +requireth +requiring +requisite +requisites +requit +requital +requite +requited +requites +rer +rere +rers +rescu +rescue +rescued +rescues +rescuing +resemblance +resemble +resembled +resembles +resembleth +resembling +reserv +reservation +reserve +reserved +reserves +reside +residence +resident +resides +residing +residue +resign +resignation +resist +resistance +resisted +resisting +resists +resolute +resolutely +resolutes +resolution +resolv +resolve +resolved +resolvedly +resolves +resolveth +resort +resorted +resounding +resounds +respeaking +respect +respected +respecting +respective +respectively +respects +respice +respite +respites +responsive +respose +ress +rest +rested +resteth +restful +resting +restitution +restless +restor +restoration +restorative +restore +restored +restores +restoring +restrain +restrained +restraining +restrains +restraint +rests +resty +resum +resume +resumes +resurrections +retail +retails +retain +retainers +retaining +retell +retention +retentive +retinue +retir +retire +retired +retirement +retires +retiring +retold +retort +retorts +retourne +retract +retreat +retrograde +rets +return +returned +returnest +returneth +returning +returns +revania +reveal +reveals +revel +reveler +revell +reveller +revellers +revelling +revelry +revels +reveng +revenge +revenged +revengeful +revengement +revenger +revengers +revenges +revenging +revengingly +revenue +revenues +reverb +reverberate +reverbs +reverenc +reverence +reverend +reverent +reverently +revers +reverse +reversion +reverted +review +reviewest +revil +revile +revisits +reviv +revive +revives +reviving +revok +revoke +revokement +revolt +revolted +revolting +revolts +revolution +revolutions +revolve +revolving +reward +rewarded +rewarder +rewarding +rewards +reword +reworded +rex +rey +reynaldo +rford +rful +rfull +rhapsody +rheims +rhenish +rhesus +rhetoric +rheum +rheumatic +rheums +rheumy +rhinoceros +rhodes +rhodope +rhubarb +rhym +rhyme +rhymers +rhymes +rhyming +rialto +rib +ribald +riband +ribands +ribaudred +ribb +ribbed +ribbon +ribbons +ribs +rice +rich +richard +richer +riches +richest +richly +richmond +richmonds +rid +riddance +ridden +riddle +riddles +riddling +ride +rider +riders +rides +ridest +rideth +ridge +ridges +ridiculous +riding +rids +rien +ries +rifle +rift +rifted +rig +rigg +riggish +right +righteous +righteously +rightful +rightfully +rightly +rights +rigol +rigorous +rigorously +rigour +ril +rim +rin +rinaldo +rind +ring +ringing +ringleader +ringlets +rings +ringwood +riot +rioter +rioting +riotous +riots +rip +ripe +ripely +ripen +ripened +ripeness +ripening +ripens +riper +ripest +riping +ripp +ripping +rise +risen +rises +riseth +rish +rising +rite +rites +rivage +rival +rivality +rivall +rivals +rive +rived +rivelled +river +rivers +rivet +riveted +rivets +rivo +rj +rless +road +roads +roam +roaming +roan +roar +roared +roarers +roaring +roars +roast +roasted +rob +roba +robas +robb +robbed +robber +robbers +robbery +robbing +robe +robed +robert +robes +robin +robs +robustious +rochester +rochford +rock +rocks +rocky +rod +rode +roderigo +rods +roe +roes +roger +rogero +rogue +roguery +rogues +roguish +roi +roisting +roll +rolled +rolling +rolls +rom +romage +roman +romano +romanos +romans +rome +romeo +romish +rondure +ronyon +rood +roof +roofs +rook +rooks +rooky +room +rooms +root +rooted +rootedly +rooteth +rooting +roots +rope +ropery +ropes +roping +ros +rosalind +rosalinda +rosalinde +rosaline +roscius +rose +rosed +rosemary +rosencrantz +roses +ross +rosy +rot +rote +roted +rother +rotherham +rots +rotted +rotten +rottenness +rotting +rotundity +rouen +rough +rougher +roughest +roughly +roughness +round +rounded +roundel +rounder +roundest +rounding +roundly +rounds +roundure +rous +rouse +roused +rousillon +rously +roussi +rout +routed +routs +rove +rover +row +rowel +rowland +rowlands +roy +royal +royalize +royally +royalties +royalty +roynish +rs +rt +rub +rubb +rubbing +rubbish +rubies +rubious +rubs +ruby +rud +rudand +rudder +ruddiness +ruddock +ruddy +rude +rudely +rudeness +ruder +rudesby +rudest +rudiments +rue +rued +ruff +ruffian +ruffians +ruffle +ruffling +ruffs +rug +rugby +rugemount +rugged +ruin +ruinate +ruined +ruining +ruinous +ruins +rul +rule +ruled +ruler +rulers +rules +ruling +rumble +ruminaies +ruminat +ruminate +ruminated +ruminates +rumination +rumor +rumour +rumourer +rumours +rump +run +runagate +runagates +runaway +runaways +rung +runn +runner +runners +running +runs +rupture +ruptures +rural +rush +rushes +rushing +rushling +rushy +russet +russia +russian +russians +rust +rusted +rustic +rustically +rustics +rustle +rustling +rusts +rusty +rut +ruth +ruthful +ruthless +rutland +ruttish +ry +rye +rything +s +sa +saba +sabbath +sable +sables +sack +sackbuts +sackcloth +sacked +sackerson +sacks +sacrament +sacred +sacrific +sacrifice +sacrificers +sacrifices +sacrificial +sacrificing +sacrilegious +sacring +sad +sadder +saddest +saddle +saddler +saddles +sadly +sadness +saf +safe +safeguard +safely +safer +safest +safeties +safety +saffron +sag +sage +sagittary +said +saidst +sail +sailing +sailmaker +sailor +sailors +sails +sain +saint +sainted +saintlike +saints +saith +sake +sakes +sala +salad +salamander +salary +sale +salerio +salicam +salique +salisbury +sall +sallet +sallets +sallies +sallow +sally +salmon +salmons +salt +salter +saltiers +saltness +saltpetre +salutation +salutations +salute +saluted +salutes +saluteth +salv +salvation +salve +salving +same +samingo +samp +sampire +sample +sampler +sampson +samson +samsons +sancta +sanctified +sanctifies +sanctify +sanctimonies +sanctimonious +sanctimony +sanctities +sanctity +sanctuarize +sanctuary +sand +sandal +sandbag +sanded +sands +sandy +sandys +sang +sanguine +sanguis +sanity +sans +santrailles +sap +sapient +sapit +sapless +sapling +sapphire +sapphires +saracens +sarcenet +sard +sardians +sardinia +sardis +sarum +sat +satan +satchel +sate +sated +satiate +satiety +satin +satire +satirical +satis +satisfaction +satisfied +satisfies +satisfy +satisfying +saturday +saturdays +saturn +saturnine +saturninus +satyr +satyrs +sauc +sauce +sauced +saucers +sauces +saucily +sauciness +saucy +sauf +saunder +sav +savage +savagely +savageness +savagery +savages +save +saved +saves +saving +saviour +savory +savour +savouring +savours +savoury +savoy +saw +sawed +sawest +sawn +sawpit +saws +sawyer +saxons +saxony +saxton +say +sayest +saying +sayings +says +sayst +sblood +sc +scab +scabbard +scabs +scaffold +scaffoldage +scal +scald +scalded +scalding +scale +scaled +scales +scaling +scall +scalp +scalps +scaly +scamble +scambling +scamels +scan +scandal +scandaliz +scandalous +scandy +scann +scant +scanted +scanter +scanting +scantling +scants +scap +scape +scaped +scapes +scapeth +scar +scarce +scarcely +scarcity +scare +scarecrow +scarecrows +scarf +scarfed +scarfs +scaring +scarlet +scarr +scarre +scars +scarus +scath +scathe +scathful +scatt +scatter +scattered +scattering +scatters +scelera +scelerisque +scene +scenes +scent +scented +scept +scepter +sceptre +sceptred +sceptres +schedule +schedules +scholar +scholarly +scholars +school +schoolboy +schoolboys +schoolfellows +schooling +schoolmaster +schoolmasters +schools +sciatica +sciaticas +science +sciences +scimitar +scion +scions +scissors +scoff +scoffer +scoffing +scoffs +scoggin +scold +scolding +scolds +sconce +scone +scope +scopes +scorch +scorched +score +scored +scores +scoring +scorn +scorned +scornful +scornfully +scorning +scorns +scorpion +scorpions +scot +scotch +scotches +scotland +scots +scottish +scoundrels +scour +scoured +scourg +scourge +scouring +scout +scouts +scowl +scrap +scrape +scraping +scraps +scratch +scratches +scratching +scream +screams +screech +screeching +screen +screens +screw +screws +scribbl +scribbled +scribe +scribes +scrimers +scrip +scrippage +scripture +scriptures +scrivener +scroll +scrolls +scroop +scrowl +scroyles +scrubbed +scruple +scruples +scrupulous +scuffles +scuffling +scullion +sculls +scum +scurril +scurrility +scurrilous +scurvy +scuse +scut +scutcheon +scutcheons +scylla +scythe +scythed +scythia +scythian +sdeath +se +sea +seacoal +seafaring +seal +sealed +sealing +seals +seam +seamen +seamy +seaport +sear +searce +search +searchers +searches +searcheth +searching +seared +seas +seasick +seaside +season +seasoned +seasons +seat +seated +seats +sebastian +second +secondarily +secondary +seconded +seconds +secrecy +secret +secretaries +secretary +secretly +secrets +sect +sectary +sects +secundo +secure +securely +securing +security +sedg +sedge +sedges +sedgy +sedition +seditious +seduc +seduce +seduced +seducer +seducing +see +seed +seeded +seedness +seeds +seedsman +seein +seeing +seek +seeking +seeks +seel +seeling +seely +seem +seemed +seemers +seemest +seemeth +seeming +seemingly +seemly +seems +seen +seer +sees +seese +seest +seethe +seethes +seething +seeting +segregation +seigneur +seigneurs +seiz +seize +seized +seizes +seizeth +seizing +seizure +seld +seldom +select +seleucus +self +selfsame +sell +seller +selling +sells +selves +semblable +semblably +semblance +semblances +semblative +semi +semicircle +semiramis +semper +sempronius +senate +senator +senators +send +sender +sendeth +sending +sends +seneca +senior +seniory +senis +sennet +senoys +sense +senseless +senses +sensible +sensibly +sensual +sensuality +sent +sentenc +sentence +sentences +sententious +sentinel +sentinels +separable +separate +separated +separates +separation +septentrion +sepulchre +sepulchres +sepulchring +sequel +sequence +sequent +sequest +sequester +sequestration +sere +serenis +serge +sergeant +serious +seriously +sermon +sermons +serpent +serpentine +serpents +serpigo +serv +servant +servanted +servants +serve +served +server +serves +serveth +service +serviceable +services +servile +servility +servilius +serving +servingman +servingmen +serviteur +servitor +servitors +servitude +sessa +session +sessions +sestos +set +setebos +sets +setter +setting +settle +settled +settlest +settling +sev +seven +sevenfold +sevennight +seventeen +seventh +seventy +sever +several +severally +severals +severe +severed +severely +severest +severing +severity +severn +severs +sew +seward +sewer +sewing +sex +sexes +sexton +sextus +seymour +seyton +sfoot +sh +shackle +shackles +shade +shades +shadow +shadowed +shadowing +shadows +shadowy +shady +shafalus +shaft +shafts +shag +shak +shake +shaked +shaken +shakes +shaking +shales +shall +shallenge +shallow +shallowest +shallowly +shallows +shalt +sham +shambles +shame +shamed +shameful +shamefully +shameless +shames +shamest +shaming +shank +shanks +shap +shape +shaped +shapeless +shapen +shapes +shaping +shar +shard +sharded +shards +share +shared +sharers +shares +sharing +shark +sharp +sharpen +sharpened +sharpens +sharper +sharpest +sharply +sharpness +sharps +shatter +shav +shave +shaven +shaw +she +sheaf +sheal +shear +shearers +shearing +shearman +shears +sheath +sheathe +sheathed +sheathes +sheathing +sheaved +sheaves +shed +shedding +sheds +sheen +sheep +sheepcote +sheepcotes +sheeps +sheepskins +sheer +sheet +sheeted +sheets +sheffield +shelf +shell +shells +shelt +shelter +shelters +shelves +shelving +shelvy +shent +shepherd +shepherdes +shepherdess +shepherdesses +shepherds +sher +sheriff +sherris +shes +sheweth +shield +shielded +shields +shift +shifted +shifting +shifts +shilling +shillings +shin +shine +shines +shineth +shining +shins +shiny +ship +shipboard +shipman +shipmaster +shipmen +shipp +shipped +shipping +ships +shipt +shipwreck +shipwrecking +shipwright +shipwrights +shire +shirley +shirt +shirts +shive +shiver +shivering +shivers +shoal +shoals +shock +shocks +shod +shoe +shoeing +shoemaker +shoes +shog +shone +shook +shoon +shoot +shooter +shootie +shooting +shoots +shop +shops +shore +shores +shorn +short +shortcake +shorten +shortened +shortens +shorter +shortly +shortness +shot +shotten +shoughs +should +shoulder +shouldering +shoulders +shouldst +shout +shouted +shouting +shouts +shov +shove +shovel +shovels +show +showed +shower +showers +showest +showing +shown +shows +shreds +shrew +shrewd +shrewdly +shrewdness +shrewish +shrewishly +shrewishness +shrews +shrewsbury +shriek +shrieking +shrieks +shrieve +shrift +shrill +shriller +shrills +shrilly +shrimp +shrine +shrink +shrinking +shrinks +shriv +shrive +shriver +shrives +shriving +shroud +shrouded +shrouding +shrouds +shrove +shrow +shrows +shrub +shrubs +shrug +shrugs +shrunk +shudd +shudders +shuffl +shuffle +shuffled +shuffling +shun +shunless +shunn +shunned +shunning +shuns +shut +shuts +shuttle +shy +shylock +si +sibyl +sibylla +sibyls +sicil +sicilia +sicilian +sicilius +sicils +sicily +sicinius +sick +sicken +sickens +sicker +sickle +sicklemen +sicklied +sickliness +sickly +sickness +sicles +sicyon +side +sided +sides +siege +sieges +sienna +sies +sieve +sift +sifted +sigeia +sigh +sighed +sighing +sighs +sight +sighted +sightless +sightly +sights +sign +signal +signet +signieur +significant +significants +signified +signifies +signify +signifying +signior +signiories +signiors +signiory +signor +signories +signs +signum +silenc +silence +silenced +silencing +silent +silently +silius +silk +silken +silkman +silks +silliest +silliness +silling +silly +silva +silver +silvered +silverly +silvia +silvius +sima +simile +similes +simois +simon +simony +simp +simpcox +simple +simpleness +simpler +simples +simplicity +simply +simular +simulation +sin +since +sincere +sincerely +sincerity +sinel +sinew +sinewed +sinews +sinewy +sinful +sinfully +sing +singe +singeing +singer +singes +singeth +singing +single +singled +singleness +singly +sings +singular +singulariter +singularities +singularity +singuled +sinister +sink +sinking +sinks +sinn +sinner +sinners +sinning +sinon +sins +sip +sipping +sir +sire +siren +sirrah +sirs +sist +sister +sisterhood +sisterly +sisters +sit +sith +sithence +sits +sitting +situate +situation +situations +siward +six +sixpence +sixpences +sixpenny +sixteen +sixth +sixty +siz +size +sizes +sizzle +skains +skamble +skein +skelter +skies +skilful +skilfully +skill +skilless +skillet +skillful +skills +skim +skimble +skin +skinker +skinny +skins +skip +skipp +skipper +skipping +skirmish +skirmishes +skirr +skirted +skirts +skittish +skulking +skull +skulls +sky +skyey +skyish +slab +slack +slackly +slackness +slain +slake +sland +slander +slandered +slanderer +slanderers +slandering +slanderous +slanders +slash +slaught +slaughter +slaughtered +slaughterer +slaughterman +slaughtermen +slaughterous +slaughters +slave +slaver +slavery +slaves +slavish +slay +slayeth +slaying +slays +sleave +sledded +sleek +sleekly +sleep +sleeper +sleepers +sleepest +sleeping +sleeps +sleepy +sleeve +sleeves +sleid +sleided +sleight +sleights +slender +slenderer +slenderly +slept +slew +slewest +slice +slid +slide +slides +sliding +slight +slighted +slightest +slightly +slightness +slights +slily +slime +slimy +slings +slink +slip +slipp +slipper +slippers +slippery +slips +slish +slit +sliver +slobb +slomber +slop +slope +slops +sloth +slothful +slough +slovenly +slovenry +slow +slower +slowly +slowness +slubber +slug +sluggard +sluggardiz +sluggish +sluic +slumb +slumber +slumbers +slumbery +slunk +slut +sluts +sluttery +sluttish +sluttishness +sly +slys +smack +smacking +smacks +small +smaller +smallest +smallness +smalus +smart +smarting +smartly +smatch +smatter +smear +smell +smelling +smells +smelt +smil +smile +smiled +smiles +smilest +smilets +smiling +smilingly +smirch +smirched +smit +smite +smites +smith +smithfield +smock +smocks +smok +smoke +smoked +smokes +smoking +smoky +smooth +smoothed +smoothing +smoothly +smoothness +smooths +smote +smoth +smother +smothered +smothering +smug +smulkin +smutch +snaffle +snail +snails +snake +snakes +snaky +snap +snapp +snapper +snar +snare +snares +snarl +snarleth +snarling +snatch +snatchers +snatches +snatching +sneak +sneaking +sneap +sneaping +sneck +snip +snipe +snipt +snore +snores +snoring +snorting +snout +snow +snowballs +snowed +snowy +snuff +snuffs +snug +so +soak +soaking +soaks +soar +soaring +soars +sob +sobbing +sober +soberly +sobriety +sobs +sociable +societies +society +socks +socrates +sod +sodden +soe +soever +soft +soften +softens +softer +softest +softly +softness +soil +soiled +soilure +soit +sojourn +sol +sola +solace +solanio +sold +soldat +solder +soldest +soldier +soldiers +soldiership +sole +solely +solem +solemn +solemness +solemnities +solemnity +solemniz +solemnize +solemnized +solemnly +soles +solicit +solicitation +solicited +soliciting +solicitings +solicitor +solicits +solid +solidares +solidity +solinus +solitary +solomon +solon +solum +solus +solyman +some +somebody +someone +somerset +somerville +something +sometime +sometimes +somever +somewhat +somewhere +somewhither +somme +son +sonance +song +songs +sonnet +sonneting +sonnets +sons +sont +sonties +soon +sooner +soonest +sooth +soothe +soothers +soothing +soothsay +soothsayer +sooty +sop +sophister +sophisticated +sophy +sops +sorcerer +sorcerers +sorceress +sorceries +sorcery +sore +sorel +sorely +sorer +sores +sorrier +sorriest +sorrow +sorrowed +sorrowest +sorrowful +sorrowing +sorrows +sorry +sort +sortance +sorted +sorting +sorts +sossius +sot +soto +sots +sottish +soud +sought +soul +sould +soulless +souls +sound +sounded +sounder +soundest +sounding +soundless +soundly +soundness +soundpost +sounds +sour +source +sources +sourest +sourly +sours +sous +souse +south +southam +southampton +southerly +southern +southward +southwark +southwell +souviendrai +sov +sovereign +sovereignest +sovereignly +sovereignty +sovereignvours +sow +sowing +sowl +sowter +space +spaces +spacious +spade +spades +spain +spak +spake +spakest +span +spangle +spangled +spaniard +spaniel +spaniels +spanish +spann +spans +spar +spare +spares +sparing +sparingly +spark +sparkle +sparkles +sparkling +sparks +sparrow +sparrows +sparta +spartan +spavin +spavins +spawn +speak +speaker +speakers +speakest +speaketh +speaking +speaks +spear +speargrass +spears +special +specialities +specially +specialties +specialty +specify +speciously +spectacle +spectacled +spectacles +spectators +spectatorship +speculation +speculations +speculative +sped +speech +speeches +speechless +speed +speeded +speedier +speediest +speedily +speediness +speeding +speeds +speedy +speens +spell +spelling +spells +spelt +spencer +spend +spendest +spending +spends +spendthrift +spent +sperato +sperm +spero +sperr +spher +sphere +sphered +spheres +spherical +sphery +sphinx +spice +spiced +spicery +spices +spider +spiders +spied +spies +spieth +spightfully +spigot +spill +spilling +spills +spilt +spilth +spin +spinii +spinners +spinster +spinsters +spire +spirit +spirited +spiritless +spirits +spiritual +spiritualty +spirt +spit +spital +spite +spited +spiteful +spites +spits +spitted +spitting +splay +spleen +spleenful +spleens +spleeny +splendour +splenitive +splinter +splinters +split +splits +splitted +splitting +spoil +spoils +spok +spoke +spoken +spokes +spokesman +sponge +spongy +spoon +spoons +sport +sportful +sporting +sportive +sports +spot +spotless +spots +spotted +spousal +spouse +spout +spouting +spouts +sprag +sprang +sprat +sprawl +spray +sprays +spread +spreading +spreads +sprighted +sprightful +sprightly +sprigs +spring +springe +springes +springeth +springhalt +springing +springs +springtime +sprinkle +sprinkles +sprite +sprited +spritely +sprites +spriting +sprout +spruce +sprung +spun +spur +spurio +spurn +spurns +spurr +spurrer +spurring +spurs +spy +spying +squabble +squadron +squadrons +squand +squar +square +squarer +squares +squash +squeak +squeaking +squeal +squealing +squeezes +squeezing +squele +squier +squints +squiny +squire +squires +squirrel +st +stab +stabb +stabbed +stabbing +stable +stableness +stables +stablish +stablishment +stabs +stacks +staff +stafford +staffords +staffordshire +stag +stage +stages +stagger +staggering +staggers +stags +staid +staider +stain +stained +staines +staineth +staining +stainless +stains +stair +stairs +stake +stakes +stale +staled +stalk +stalking +stalks +stall +stalling +stalls +stamford +stammer +stamp +stamped +stamps +stanch +stanchless +stand +standard +standards +stander +standers +standest +standeth +standing +stands +staniel +stanley +stanze +stanzo +stanzos +staple +staples +star +stare +stared +stares +staring +starings +stark +starkly +starlight +starling +starr +starry +stars +start +started +starting +startingly +startle +startles +starts +starv +starve +starved +starvelackey +starveling +starveth +starving +state +statelier +stately +states +statesman +statesmen +statilius +station +statist +statists +statue +statues +stature +statures +statute +statutes +stave +staves +stay +stayed +stayest +staying +stays +stead +steaded +steadfast +steadier +steads +steal +stealer +stealers +stealing +steals +stealth +stealthy +steed +steeds +steel +steeled +steely +steep +steeped +steeple +steeples +steeps +steepy +steer +steerage +steering +steers +stelled +stem +stemming +stench +step +stepdame +stephano +stephen +stepmothers +stepp +stepping +steps +sterile +sterility +sterling +stern +sternage +sterner +sternest +sternness +steterat +stew +steward +stewards +stewardship +stewed +stews +stick +sticking +stickler +sticks +stiff +stiffen +stiffly +stifle +stifled +stifles +stigmatic +stigmatical +stile +still +stiller +stillest +stillness +stilly +sting +stinging +stingless +stings +stink +stinking +stinkingly +stinks +stint +stinted +stints +stir +stirr +stirred +stirrer +stirrers +stirreth +stirring +stirrup +stirrups +stirs +stitchery +stitches +stithied +stithy +stoccadoes +stoccata +stock +stockfish +stocking +stockings +stockish +stocks +stog +stogs +stoics +stokesly +stol +stole +stolen +stolest +stomach +stomachers +stomaching +stomachs +ston +stone +stonecutter +stones +stonish +stony +stood +stool +stools +stoop +stooping +stoops +stop +stope +stopp +stopped +stopping +stops +stor +store +storehouse +storehouses +stores +stories +storm +stormed +storming +storms +stormy +story +stoup +stoups +stout +stouter +stoutly +stoutness +stover +stow +stowage +stowed +strachy +stragglers +straggling +straight +straightest +straightway +strain +strained +straining +strains +strait +straited +straiter +straitly +straitness +straits +strand +strange +strangely +strangeness +stranger +strangers +strangest +strangle +strangled +strangler +strangles +strangling +strappado +straps +stratagem +stratagems +stratford +strato +straw +strawberries +strawberry +straws +strawy +stray +straying +strays +streak +streaks +stream +streamers +streaming +streams +streching +street +streets +strength +strengthen +strengthened +strengthless +strengths +stretch +stretched +stretches +stretching +strew +strewing +strewings +strewments +stricken +strict +stricter +strictest +strictly +stricture +stride +strides +striding +strife +strifes +strik +strike +strikers +strikes +strikest +striking +string +stringless +strings +strip +stripes +stripling +striplings +stripp +stripping +striv +strive +strives +striving +strok +stroke +strokes +strond +stronds +strong +stronger +strongest +strongly +strooke +strossers +strove +strown +stroy +struck +strucken +struggle +struggles +struggling +strumpet +strumpeted +strumpets +strung +strut +struts +strutted +strutting +stubble +stubborn +stubbornest +stubbornly +stubbornness +stuck +studded +student +students +studied +studies +studious +studiously +studs +study +studying +stuff +stuffing +stuffs +stumble +stumbled +stumblest +stumbling +stump +stumps +stung +stupefy +stupid +stupified +stuprum +sturdy +sty +styga +stygian +styl +style +styx +su +sub +subcontracted +subdu +subdue +subdued +subduements +subdues +subduing +subject +subjected +subjection +subjects +submerg +submission +submissive +submit +submits +submitting +suborn +subornation +suborned +subscrib +subscribe +subscribed +subscribes +subscription +subsequent +subsidies +subsidy +subsist +subsisting +substance +substances +substantial +substitute +substituted +substitutes +substitution +subtile +subtilly +subtle +subtleties +subtlety +subtly +subtractors +suburbs +subversion +subverts +succedant +succeed +succeeded +succeeders +succeeding +succeeds +success +successantly +successes +successful +successfully +succession +successive +successively +successor +successors +succour +succours +such +suck +sucker +suckers +sucking +suckle +sucks +sudden +suddenly +sue +sued +suerly +sues +sueth +suff +suffer +sufferance +sufferances +suffered +suffering +suffers +suffic +suffice +sufficed +suffices +sufficeth +sufficiency +sufficient +sufficiently +sufficing +sufficit +suffigance +suffocate +suffocating +suffocation +suffolk +suffrage +suffrages +sug +sugar +sugarsop +suggest +suggested +suggesting +suggestion +suggestions +suggests +suis +suit +suitable +suited +suiting +suitor +suitors +suits +suivez +sullen +sullens +sullied +sullies +sully +sulph +sulpherous +sulphur +sulphurous +sultan +sultry +sum +sumless +summ +summa +summary +summer +summers +summit +summon +summoners +summons +sumpter +sumptuous +sumptuously +sums +sun +sunbeams +sunburning +sunburnt +sund +sunday +sundays +sunder +sunders +sundry +sung +sunk +sunken +sunny +sunrising +suns +sunset +sunshine +sup +super +superficial +superficially +superfluity +superfluous +superfluously +superflux +superior +supernal +supernatural +superpraise +superscript +superscription +superserviceable +superstition +superstitious +superstitiously +supersubtle +supervise +supervisor +supp +supper +suppers +suppertime +supping +supplant +supple +suppler +suppliance +suppliant +suppliants +supplicant +supplication +supplications +supplie +supplied +supplies +suppliest +supply +supplyant +supplying +supplyment +support +supportable +supportance +supported +supporter +supporters +supporting +supportor +suppos +supposal +suppose +supposed +supposes +supposest +supposing +supposition +suppress +suppressed +suppresseth +supremacy +supreme +sups +sur +surance +surcease +surd +sure +surecard +surely +surer +surest +sureties +surety +surfeit +surfeited +surfeiter +surfeiting +surfeits +surge +surgeon +surgeons +surgere +surgery +surges +surly +surmis +surmise +surmised +surmises +surmount +surmounted +surmounts +surnam +surname +surnamed +surpasseth +surpassing +surplice +surplus +surpris +surprise +surprised +surrender +surrey +surreys +survey +surveyest +surveying +surveyor +surveyors +surveys +survive +survives +survivor +susan +suspect +suspected +suspecting +suspects +suspend +suspense +suspicion +suspicions +suspicious +suspiration +suspire +sust +sustain +sustaining +sutler +sutton +suum +swabber +swaddling +swag +swagg +swagger +swaggerer +swaggerers +swaggering +swain +swains +swallow +swallowed +swallowing +swallows +swam +swan +swans +sward +sware +swarm +swarming +swart +swarth +swarths +swarthy +swashers +swashing +swath +swathing +swathling +sway +swaying +sways +swear +swearer +swearers +swearest +swearing +swearings +swears +sweat +sweaten +sweating +sweats +sweaty +sweep +sweepers +sweeps +sweet +sweeten +sweetens +sweeter +sweetest +sweetheart +sweeting +sweetly +sweetmeats +sweetness +sweets +swell +swelling +swellings +swells +swelter +sweno +swept +swerve +swerver +swerving +swift +swifter +swiftest +swiftly +swiftness +swill +swills +swim +swimmer +swimmers +swimming +swims +swine +swineherds +swing +swinge +swinish +swinstead +switches +swits +switzers +swol +swoll +swoln +swoon +swooned +swooning +swoons +swoop +swoopstake +swor +sword +sworder +swords +swore +sworn +swounded +swounds +swum +swung +sy +sycamore +sycorax +sylla +syllable +syllables +syllogism +symbols +sympathise +sympathiz +sympathize +sympathized +sympathy +synagogue +synod +synods +syracuse +syracusian +syracusians +syria +syrups +t +ta +taber +table +tabled +tables +tablet +tabor +taborer +tabors +tabourines +taciturnity +tack +tackle +tackled +tackles +tackling +tacklings +taddle +tadpole +taffeta +taffety +tag +tagrag +tah +tail +tailor +tailors +tails +taint +tainted +tainting +taints +tainture +tak +take +taken +taker +takes +takest +taketh +taking +tal +talbot +talbotites +talbots +tale +talent +talents +taleporter +tales +talk +talked +talker +talkers +talkest +talking +talks +tall +taller +tallest +tallies +tallow +tally +talons +tam +tambourines +tame +tamed +tamely +tameness +tamer +tames +taming +tamora +tamworth +tan +tang +tangle +tangled +tank +tanlings +tann +tanned +tanner +tanquam +tanta +tantaene +tap +tape +taper +tapers +tapestries +tapestry +taphouse +tapp +tapster +tapsters +tar +tardied +tardily +tardiness +tardy +tarentum +targe +targes +target +targets +tarpeian +tarquin +tarquins +tarr +tarre +tarriance +tarried +tarries +tarry +tarrying +tart +tartar +tartars +tartly +tartness +task +tasker +tasking +tasks +tassel +taste +tasted +tastes +tasting +tatt +tatter +tattered +tatters +tattle +tattling +tattlings +taught +taunt +taunted +taunting +tauntingly +taunts +taurus +tavern +taverns +tavy +tawdry +tawny +tax +taxation +taxations +taxes +taxing +tc +te +teach +teacher +teachers +teaches +teachest +teacheth +teaching +team +tear +tearful +tearing +tears +tearsheet +teat +tedious +tediously +tediousness +teem +teeming +teems +teen +teeth +teipsum +telamon +telamonius +tell +teller +telling +tells +tellus +temp +temper +temperality +temperance +temperate +temperately +tempers +tempest +tempests +tempestuous +temple +temples +temporal +temporary +temporiz +temporize +temporizer +temps +tempt +temptation +temptations +tempted +tempter +tempters +tempteth +tempting +tempts +ten +tenable +tenant +tenantius +tenantless +tenants +tench +tend +tendance +tended +tender +tendered +tenderly +tenderness +tenders +tending +tends +tenedos +tenement +tenements +tenfold +tennis +tenour +tenours +tens +tent +tented +tenth +tenths +tents +tenure +tenures +tercel +tereus +term +termagant +termed +terminations +termless +terms +terra +terrace +terram +terras +terre +terrene +terrestrial +terrible +terribly +territories +territory +terror +terrors +tertian +tertio +test +testament +tested +tester +testern +testify +testimonied +testimonies +testimony +testiness +testril +testy +tetchy +tether +tetter +tevil +tewksbury +text +tgv +th +thaes +thames +than +thane +thanes +thank +thanked +thankful +thankfully +thankfulness +thanking +thankings +thankless +thanks +thanksgiving +thasos +that +thatch +thaw +thawing +thaws +the +theatre +theban +thebes +thee +theft +thefts +thein +their +theirs +theise +them +theme +themes +themselves +then +thence +thenceforth +theoric +there +thereabout +thereabouts +thereafter +thereat +thereby +therefore +therein +thereof +thereon +thereto +thereunto +thereupon +therewith +therewithal +thersites +these +theseus +thessalian +thessaly +thetis +thews +they +thick +thicken +thickens +thicker +thickest +thicket +thickskin +thief +thievery +thieves +thievish +thigh +thighs +thimble +thimbles +thin +thine +thing +things +think +thinkest +thinking +thinkings +thinks +thinkst +thinly +third +thirdly +thirds +thirst +thirsting +thirsts +thirsty +thirteen +thirties +thirtieth +thirty +this +thisby +thisne +thistle +thistles +thither +thitherward +thoas +thomas +thorn +thorns +thorny +thorough +thoroughly +those +thou +though +thought +thoughtful +thoughts +thousand +thousands +thracian +thraldom +thrall +thralled +thralls +thrash +thrasonical +thread +threadbare +threaden +threading +threat +threaten +threatening +threatens +threatest +threats +three +threefold +threepence +threepile +threes +threescore +thresher +threshold +threw +thrice +thrift +thriftless +thrifts +thrifty +thrill +thrilling +thrills +thrive +thrived +thrivers +thrives +thriving +throat +throats +throbbing +throbs +throca +throe +throes +thromuldo +thron +throne +throned +thrones +throng +thronging +throngs +throstle +throttle +through +throughfare +throughfares +throughly +throughout +throw +thrower +throwest +throwing +thrown +throws +thrum +thrumm +thrush +thrust +thrusteth +thrusting +thrusts +thumb +thumbs +thump +thund +thunder +thunderbolt +thunderbolts +thunderer +thunders +thunderstone +thunderstroke +thurio +thursday +thus +thwack +thwart +thwarted +thwarting +thwartings +thy +thyme +thymus +thyreus +thyself +ti +tib +tiber +tiberio +tibey +ticed +tick +tickl +tickle +tickled +tickles +tickling +ticklish +tiddle +tide +tides +tidings +tidy +tie +tied +ties +tiff +tiger +tigers +tight +tightly +tike +til +tile +till +tillage +tilly +tilt +tilter +tilth +tilting +tilts +tiltyard +tim +timandra +timber +time +timeless +timelier +timely +times +timon +timor +timorous +timorously +tinct +tincture +tinctures +tinder +tingling +tinker +tinkers +tinsel +tiny +tip +tipp +tippling +tips +tipsy +tiptoe +tir +tire +tired +tires +tirest +tiring +tirra +tirrits +tis +tish +tisick +tissue +titan +titania +tithe +tithed +tithing +titinius +title +titled +titleless +titles +tittle +tittles +titular +titus +tn +to +toad +toads +toadstool +toast +toasted +toasting +toasts +toaze +toby +tock +tod +today +todpole +tods +toe +toes +tofore +toge +toged +together +toil +toiled +toiling +toils +token +tokens +told +toledo +tolerable +toll +tolling +tom +tomb +tombe +tombed +tombless +tomboys +tombs +tomorrow +tomyris +ton +tongs +tongu +tongue +tongued +tongueless +tongues +tonight +too +took +tool +tools +tooth +toothache +toothpick +toothpicker +top +topas +topful +topgallant +topless +topmast +topp +topping +topple +topples +tops +topsail +topsy +torch +torchbearer +torchbearers +torcher +torches +torchlight +tore +torment +tormenta +tormente +tormented +tormenting +tormentors +torments +torn +torrent +tortive +tortoise +tortur +torture +tortured +torturer +torturers +tortures +torturest +torturing +toryne +toss +tossed +tosseth +tossing +tot +total +totally +tott +tottered +totters +tou +touch +touched +touches +toucheth +touching +touchstone +tough +tougher +toughness +touraine +tournaments +tours +tous +tout +touze +tow +toward +towardly +towards +tower +towering +towers +town +towns +township +townsman +townsmen +towton +toy +toys +trace +traces +track +tract +tractable +trade +traded +traders +trades +tradesman +tradesmen +trading +tradition +traditional +traduc +traduced +traducement +traffic +traffickers +traffics +tragedian +tragedians +tragedies +tragedy +tragic +tragical +trail +train +trained +training +trains +trait +traitor +traitorly +traitorous +traitorously +traitors +traitress +traject +trammel +trample +trampled +trampling +tranc +trance +tranio +tranquil +tranquillity +transcendence +transcends +transferred +transfigur +transfix +transform +transformation +transformations +transformed +transgress +transgresses +transgressing +transgression +translate +translated +translates +translation +transmigrates +transmutation +transparent +transport +transportance +transported +transporting +transports +transpose +transshape +trap +trapp +trappings +traps +trash +travail +travails +travel +traveler +traveling +travell +travelled +traveller +travellers +travellest +travelling +travels +travers +traverse +tray +treacherous +treacherously +treachers +treachery +tread +treading +treads +treason +treasonable +treasonous +treasons +treasure +treasurer +treasures +treasuries +treasury +treat +treaties +treatise +treats +treaty +treble +trebled +trebles +trebonius +tree +trees +tremble +trembled +trembles +tremblest +trembling +tremblingly +tremor +trempling +trench +trenchant +trenched +trencher +trenchering +trencherman +trenchers +trenches +trenching +trent +tres +trespass +trespasses +tressel +tresses +treys +trial +trials +trib +tribe +tribes +tribulation +tribunal +tribune +tribunes +tributaries +tributary +tribute +tributes +trice +trick +tricking +trickling +tricks +tricksy +trident +tried +trier +trifle +trifled +trifler +trifles +trifling +trigon +trill +trim +trimly +trimm +trimmed +trimming +trims +trinculo +trinculos +trinkets +trip +tripartite +tripe +triple +triplex +tripoli +tripolis +tripp +tripping +trippingly +trips +tristful +triton +triumph +triumphant +triumphantly +triumpher +triumphers +triumphing +triumphs +triumvir +triumvirate +triumvirs +triumviry +trivial +troat +trod +trodden +troiant +troien +troilus +troiluses +trojan +trojans +troll +tromperies +trompet +troop +trooping +troops +trop +trophies +trophy +tropically +trot +troth +trothed +troths +trots +trotting +trouble +troubled +troubler +troubles +troublesome +troublest +troublous +trough +trout +trouts +trovato +trow +trowel +trowest +troy +troyan +troyans +truant +truce +truckle +trudge +true +trueborn +truepenny +truer +truest +truie +trull +trulls +truly +trump +trumpery +trumpet +trumpeter +trumpeters +trumpets +truncheon +truncheoners +trundle +trunk +trunks +trust +trusted +truster +trusters +trusting +trusts +trusty +truth +truths +try +ts +tu +tuae +tub +tubal +tubs +tuck +tucket +tuesday +tuft +tufts +tug +tugg +tugging +tuition +tullus +tully +tumble +tumbled +tumbler +tumbling +tumult +tumultuous +tun +tune +tuneable +tuned +tuners +tunes +tunis +tuns +tupping +turban +turbans +turbulence +turbulent +turd +turf +turfy +turk +turkey +turkeys +turkish +turks +turlygod +turmoil +turmoiled +turn +turnbull +turncoat +turncoats +turned +turneth +turning +turnips +turns +turph +turpitude +turquoise +turret +turrets +turtle +turtles +turvy +tuscan +tush +tut +tutor +tutored +tutors +tutto +twain +twang +twangling +twas +tway +tweaks +tween +twelfth +twelve +twelvemonth +twentieth +twenty +twere +twice +twig +twiggen +twigs +twilight +twill +twilled +twin +twine +twink +twinkle +twinkled +twinkling +twinn +twins +twire +twist +twisted +twit +twits +twitting +twixt +two +twofold +twopence +twopences +twos +twould +tyb +tybalt +tybalts +tyburn +tying +tyke +tymbria +type +types +typhon +tyrannical +tyrannically +tyrannize +tyrannous +tyranny +tyrant +tyrants +tyrian +tyrrel +u +ubique +udders +udge +uds +uglier +ugliest +ugly +ulcer +ulcerous +ulysses +um +umber +umbra +umbrage +umfrevile +umpire +umpires +un +unable +unaccommodated +unaccompanied +unaccustom +unaching +unacquainted +unactive +unadvis +unadvised +unadvisedly +unagreeable +unanel +unanswer +unappeas +unapproved +unapt +unaptness +unarm +unarmed +unarms +unassail +unassailable +unattainted +unattempted +unattended +unauspicious +unauthorized +unavoided +unawares +unback +unbak +unbanded +unbar +unbarb +unbashful +unbated +unbatter +unbecoming +unbefitting +unbegot +unbegotten +unbelieved +unbend +unbent +unbewail +unbid +unbidden +unbind +unbinds +unbitted +unbless +unblest +unbloodied +unblown +unbodied +unbolt +unbolted +unbonneted +unbookish +unborn +unbosom +unbound +unbounded +unbow +unbowed +unbrac +unbraced +unbraided +unbreathed +unbred +unbreech +unbridled +unbroke +unbruis +unbruised +unbuckle +unbuckles +unbuckling +unbuild +unburden +unburdens +unburied +unburnt +unburthen +unbutton +unbuttoning +uncapable +uncape +uncase +uncasing +uncaught +uncertain +uncertainty +unchain +unchanging +uncharge +uncharged +uncharitably +unchary +unchaste +uncheck +unchilded +uncivil +unclaim +unclasp +uncle +unclean +uncleanliness +uncleanly +uncleanness +uncles +unclew +unclog +uncoined +uncolted +uncomeliness +uncomfortable +uncompassionate +uncomprehensive +unconfinable +unconfirm +unconfirmed +unconquer +unconquered +unconsidered +unconstant +unconstrain +unconstrained +uncontemn +uncontroll +uncorrected +uncounted +uncouple +uncourteous +uncouth +uncover +uncovered +uncropped +uncross +uncrown +unction +unctuous +uncuckolded +uncurable +uncurbable +uncurbed +uncurls +uncurrent +uncurse +undaunted +undeaf +undeck +undeeded +under +underbearing +underborne +undercrest +underfoot +undergo +undergoes +undergoing +undergone +underground +underhand +underlings +undermine +underminers +underneath +underprizing +underprop +understand +understandeth +understanding +understandings +understands +understood +underta +undertake +undertakeing +undertaker +undertakes +undertaking +undertakings +undertook +undervalu +undervalued +underwent +underwrit +underwrite +undescried +undeserved +undeserver +undeservers +undeserving +undetermin +undid +undinted +undiscernible +undiscover +undishonoured +undispos +undistinguishable +undistinguished +undividable +undivided +undivulged +undo +undoes +undoing +undone +undoubted +undoubtedly +undream +undress +undressed +undrown +unduteous +undutiful +une +uneared +unearned +unearthly +uneasines +uneasy +uneath +uneducated +uneffectual +unelected +unequal +uneven +unexamin +unexecuted +unexpected +unexperienc +unexperient +unexpressive +unfair +unfaithful +unfallible +unfam +unfashionable +unfasten +unfather +unfathered +unfed +unfeed +unfeeling +unfeigned +unfeignedly +unfellowed +unfelt +unfenced +unfilial +unfill +unfinish +unfirm +unfit +unfitness +unfix +unfledg +unfold +unfolded +unfoldeth +unfolding +unfolds +unfool +unforc +unforced +unforfeited +unfortified +unfortunate +unfought +unfrequented +unfriended +unfurnish +ungain +ungalled +ungart +ungarter +ungenitur +ungentle +ungentleness +ungently +ungird +ungodly +ungor +ungot +ungotten +ungovern +ungracious +ungrateful +ungravely +ungrown +unguarded +unguem +unguided +unhack +unhair +unhallow +unhallowed +unhand +unhandled +unhandsome +unhang +unhappied +unhappily +unhappiness +unhappy +unhardened +unharm +unhatch +unheard +unhearts +unheedful +unheedfully +unheedy +unhelpful +unhidden +unholy +unhop +unhopefullest +unhorse +unhospitable +unhous +unhoused +unhurtful +unicorn +unicorns +unimproved +uninhabitable +uninhabited +unintelligent +union +unions +unite +united +unity +universal +universe +universities +university +unjointed +unjust +unjustice +unjustly +unkennel +unkept +unkind +unkindest +unkindly +unkindness +unking +unkinglike +unkiss +unknit +unknowing +unknown +unlace +unlaid +unlawful +unlawfully +unlearn +unlearned +unless +unlesson +unletter +unlettered +unlick +unlike +unlikely +unlimited +unlineal +unlink +unload +unloaded +unloading +unloads +unlock +unlocks +unlook +unlooked +unloos +unloose +unlov +unloving +unluckily +unlucky +unmade +unmake +unmanly +unmann +unmanner +unmannerd +unmannerly +unmarried +unmask +unmasked +unmasking +unmasks +unmast +unmatch +unmatchable +unmatched +unmeasurable +unmeet +unmellowed +unmerciful +unmeritable +unmeriting +unminded +unmindfull +unmingled +unmitigable +unmitigated +unmix +unmoan +unmov +unmoved +unmoving +unmuffles +unmuffling +unmusical +unmuzzle +unmuzzled +unnatural +unnaturally +unnaturalness +unnecessarily +unnecessary +unneighbourly +unnerved +unnoble +unnoted +unnumb +unnumber +unowed +unpack +unpaid +unparagon +unparallel +unpartial +unpath +unpaved +unpay +unpeaceable +unpeg +unpeople +unpeopled +unperfect +unperfectness +unpick +unpin +unpink +unpitied +unpitifully +unplagu +unplausive +unpleas +unpleasant +unpleasing +unpolicied +unpolish +unpolished +unpolluted +unpossess +unpossessing +unpossible +unpractis +unpregnant +unpremeditated +unprepar +unprepared +unpress +unprevailing +unprevented +unpriz +unprizable +unprofitable +unprofited +unproper +unproperly +unproportion +unprovide +unprovided +unprovident +unprovokes +unprun +unpruned +unpublish +unpurged +unpurpos +unqualitied +unqueen +unquestion +unquestionable +unquiet +unquietly +unquietness +unraised +unrak +unread +unready +unreal +unreasonable +unreasonably +unreclaimed +unreconciled +unreconciliable +unrecounted +unrecuring +unregarded +unregist +unrelenting +unremovable +unremovably +unreprievable +unresolv +unrespected +unrespective +unrest +unrestor +unrestrained +unreveng +unreverend +unreverent +unrevers +unrewarded +unrighteous +unrightful +unripe +unripp +unrivall +unroll +unroof +unroosted +unroot +unrough +unruly +unsafe +unsaluted +unsanctified +unsatisfied +unsavoury +unsay +unscalable +unscann +unscarr +unschool +unscorch +unscour +unscratch +unseal +unseam +unsearch +unseason +unseasonable +unseasonably +unseasoned +unseconded +unsecret +unseduc +unseeing +unseeming +unseemly +unseen +unseminar +unseparable +unserviceable +unset +unsettle +unsettled +unsever +unsex +unshak +unshaked +unshaken +unshaped +unshapes +unsheath +unsheathe +unshorn +unshout +unshown +unshrinking +unshrubb +unshunn +unshunnable +unsifted +unsightly +unsinew +unsisting +unskilful +unskilfully +unskillful +unslipping +unsmirched +unsoil +unsolicited +unsorted +unsought +unsound +unsounded +unspeak +unspeakable +unspeaking +unsphere +unspoke +unspoken +unspotted +unsquar +unstable +unstaid +unstain +unstained +unstanched +unstate +unsteadfast +unstooping +unstringed +unstuff +unsubstantial +unsuitable +unsuiting +unsullied +unsunn +unsur +unsure +unsuspected +unsway +unswayable +unswayed +unswear +unswept +unsworn +untainted +untalk +untangle +untangled +untasted +untaught +untempering +untender +untent +untented +unthankful +unthankfulness +unthink +unthought +unthread +unthrift +unthrifts +unthrifty +untie +untied +until +untimber +untimely +untir +untirable +untired +untitled +unto +untold +untouch +untoward +untowardly +untraded +untrain +untrained +untread +untreasur +untried +untrimmed +untrod +untrodden +untroubled +untrue +untrussing +untruth +untruths +untucked +untun +untune +untuneable +untutor +untutored +untwine +unurg +unus +unused +unusual +unvalued +unvanquish +unvarnish +unveil +unveiling +unvenerable +unvex +unviolated +unvirtuous +unvisited +unvulnerable +unwares +unwarily +unwash +unwatch +unwearied +unwed +unwedgeable +unweeded +unweighed +unweighing +unwelcome +unwept +unwhipp +unwholesome +unwieldy +unwilling +unwillingly +unwillingness +unwind +unwiped +unwise +unwisely +unwish +unwished +unwitted +unwittingly +unwonted +unwooed +unworthier +unworthiest +unworthily +unworthiness +unworthy +unwrung +unyok +unyoke +up +upbraid +upbraided +upbraidings +upbraids +uphoarded +uphold +upholdeth +upholding +upholds +uplift +uplifted +upmost +upon +upper +uprear +upreared +upright +uprighteously +uprightness +uprise +uprising +uproar +uproars +uprous +upshoot +upshot +upside +upspring +upstairs +upstart +upturned +upward +upwards +urchin +urchinfield +urchins +urg +urge +urged +urgent +urges +urgest +urging +urinal +urinals +urine +urn +urns +urs +ursa +ursley +ursula +urswick +us +usage +usance +usances +use +used +useful +useless +user +uses +usest +useth +usher +ushered +ushering +ushers +using +usual +usually +usurer +usurers +usuries +usuring +usurp +usurpation +usurped +usurper +usurpers +usurping +usurpingly +usurps +usury +ut +utensil +utensils +utility +utmost +utt +utter +utterance +uttered +uttereth +uttering +utterly +uttermost +utters +uy +v +va +vacancy +vacant +vacation +vade +vagabond +vagabonds +vagram +vagrom +vail +vailed +vailing +vaillant +vain +vainer +vainglory +vainly +vainness +vais +valanc +valance +vale +valence +valentine +valentinus +valentio +valeria +valerius +vales +valiant +valiantly +valiantness +validity +vallant +valley +valleys +vally +valor +valorous +valorously +valour +valu +valuation +value +valued +valueless +values +valuing +vane +vanish +vanished +vanishes +vanishest +vanishing +vanities +vanity +vanquish +vanquished +vanquisher +vanquishest +vanquisheth +vant +vantage +vantages +vantbrace +vapians +vapor +vaporous +vapour +vapours +vara +variable +variance +variation +variations +varied +variest +variety +varld +varlet +varletry +varlets +varletto +varnish +varrius +varro +vary +varying +vassal +vassalage +vassals +vast +vastidity +vasty +vat +vater +vaudemont +vaughan +vault +vaultages +vaulted +vaulting +vaults +vaulty +vaumond +vaunt +vaunted +vaunter +vaunting +vauntingly +vaunts +vauvado +vaux +vaward +ve +veal +vede +vehemence +vehemency +vehement +vehor +veil +veiled +veiling +vein +veins +vell +velure +velutus +velvet +vendible +venerable +venereal +venetia +venetian +venetians +veneys +venge +vengeance +vengeances +vengeful +veni +venial +venice +venison +venit +venom +venomous +venomously +vent +ventages +vented +ventidius +ventricle +vents +ventur +venture +ventured +ventures +venturing +venturous +venue +venus +venuto +ver +verb +verba +verbal +verbatim +verbosity +verdict +verdun +verdure +vere +verefore +verg +verge +vergers +verges +verier +veriest +verified +verify +verily +veritable +verite +verities +verity +vermilion +vermin +vernon +verona +veronesa +versal +verse +verses +versing +vert +very +vesper +vessel +vessels +vestal +vestments +vesture +vetch +vetches +veux +vex +vexation +vexations +vexed +vexes +vexest +vexeth +vexing +vi +via +vial +vials +viand +viands +vic +vicar +vice +vicegerent +vicentio +viceroy +viceroys +vices +vici +vicious +viciousness +vict +victims +victor +victoress +victories +victorious +victors +victory +victual +victuall +victuals +videlicet +video +vides +videsne +vidi +vie +vied +vienna +view +viewest +vieweth +viewing +viewless +views +vigil +vigilance +vigilant +vigitant +vigour +vii +viii +vile +vilely +vileness +viler +vilest +vill +village +villager +villagery +villages +villain +villainies +villainous +villainously +villains +villainy +villanies +villanous +villany +villiago +villian +villianda +villians +vinaigre +vincentio +vincere +vindicative +vine +vinegar +vines +vineyard +vineyards +vint +vintner +viol +viola +violate +violated +violates +violation +violator +violence +violent +violenta +violenteth +violently +violet +violets +viper +viperous +vipers +vir +virgilia +virgin +virginal +virginalling +virginity +virginius +virgins +virgo +virtue +virtues +virtuous +virtuously +visag +visage +visages +visard +viscount +visible +visibly +vision +visions +visit +visitation +visitations +visited +visiting +visitings +visitor +visitors +visits +visor +vita +vitae +vital +vitement +vitruvio +vitx +viva +vivant +vive +vixen +viz +vizaments +vizard +vizarded +vizards +vizor +vlouting +vocation +vocativo +vocatur +voce +voic +voice +voices +void +voided +voiding +voke +volable +volant +volivorco +volley +volquessen +volsce +volsces +volscian +volscians +volt +voltemand +volubility +voluble +volume +volumes +volumnia +volumnius +voluntaries +voluntary +voluptuously +voluptuousness +vomissement +vomit +vomits +vor +vore +vortnight +vot +votaries +votarist +votarists +votary +votre +vouch +voucher +vouchers +vouches +vouching +vouchsaf +vouchsafe +vouchsafed +vouchsafes +vouchsafing +voudrais +vour +vous +voutsafe +vow +vowed +vowel +vowels +vowing +vows +vox +voyage +voyages +vraiment +vulcan +vulgar +vulgarly +vulgars +vulgo +vulnerable +vulture +vultures +vurther +w +wad +waddled +wade +waded +wafer +waft +waftage +wafting +wafts +wag +wage +wager +wagers +wages +wagging +waggish +waggling +waggon +waggoner +wagon +wagoner +wags +wagtail +wail +wailful +wailing +wails +wain +wainropes +wainscot +waist +wait +waited +waiter +waiteth +waiting +waits +wak +wake +waked +wakefield +waken +wakened +wakes +wakest +waking +wales +walk +walked +walking +walks +wall +walled +wallet +wallets +wallon +walloon +wallow +walls +walnut +walter +wan +wand +wander +wanderer +wanderers +wandering +wanders +wands +wane +waned +wanes +waning +wann +want +wanted +wanteth +wanting +wanton +wantonly +wantonness +wantons +wants +wappen +war +warble +warbling +ward +warded +warden +warder +warders +wardrobe +wardrop +wards +ware +wares +warily +warkworth +warlike +warm +warmed +warmer +warming +warms +warmth +warn +warned +warning +warnings +warns +warp +warped +warr +warrant +warranted +warranteth +warrantise +warrantize +warrants +warranty +warren +warrener +warring +warrior +warriors +wars +wart +warwick +warwickshire +wary +was +wash +washed +washer +washes +washford +washing +wasp +waspish +wasps +wassail +wassails +wast +waste +wasted +wasteful +wasters +wastes +wasting +wat +watch +watched +watchers +watches +watchful +watching +watchings +watchman +watchmen +watchword +water +waterdrops +watered +waterfly +waterford +watering +waterish +waterpots +waterrugs +waters +waterton +watery +wav +wave +waved +waver +waverer +wavering +waves +waving +waw +wawl +wax +waxed +waxen +waxes +waxing +way +waylaid +waylay +ways +wayward +waywarder +waywardness +we +weak +weaken +weakens +weaker +weakest +weakling +weakly +weakness +weal +wealsmen +wealth +wealthiest +wealthily +wealthy +wealtlly +wean +weapon +weapons +wear +wearer +wearers +wearied +wearies +weariest +wearily +weariness +wearing +wearisome +wears +weary +weasel +weather +weathercock +weathers +weav +weave +weaver +weavers +weaves +weaving +web +wed +wedded +wedding +wedg +wedged +wedges +wedlock +wednesday +weed +weeded +weeder +weeding +weeds +weedy +week +weeke +weekly +weeks +ween +weening +weep +weeper +weeping +weepingly +weepings +weeps +weet +weigh +weighed +weighing +weighs +weight +weightier +weightless +weights +weighty +weird +welcom +welcome +welcomer +welcomes +welcomest +welfare +welkin +well +wells +welsh +welshman +welshmen +welshwomen +wench +wenches +wenching +wend +went +wept +weraday +were +wert +west +western +westminster +westmoreland +westward +wet +wether +wetting +wezand +whale +whales +wharf +wharfs +what +whate +whatever +whatsoe +whatsoever +whatsome +whe +wheat +wheaten +wheel +wheeling +wheels +wheer +wheeson +wheezing +whelk +whelks +whelm +whelp +whelped +whelps +when +whenas +whence +whencesoever +whene +whenever +whensoever +where +whereabout +whereas +whereat +whereby +wherefore +wherein +whereinto +whereof +whereon +whereout +whereso +wheresoe +wheresoever +wheresome +whereto +whereuntil +whereunto +whereupon +wherever +wherewith +wherewithal +whet +whether +whetstone +whetted +whew +whey +which +whiff +whiffler +while +whiles +whilst +whin +whine +whined +whinid +whining +whip +whipp +whippers +whipping +whips +whipster +whipstock +whipt +whirl +whirled +whirligig +whirling +whirlpool +whirls +whirlwind +whirlwinds +whisp +whisper +whispering +whisperings +whispers +whist +whistle +whistles +whistling +whit +white +whitehall +whitely +whiteness +whiter +whites +whitest +whither +whiting +whitmore +whitsters +whitsun +whittle +whizzing +who +whoa +whoe +whoever +whole +wholesom +wholesome +wholly +whom +whoobub +whoop +whooping +whor +whore +whoremaster +whoremasterly +whoremonger +whores +whoreson +whoresons +whoring +whorish +whose +whoso +whosoe +whosoever +why +wi +wick +wicked +wickednes +wickedness +wicket +wicky +wid +wide +widens +wider +widow +widowed +widower +widowhood +widows +wield +wife +wight +wights +wild +wildcats +wilder +wilderness +wildest +wildfire +wildly +wildness +wilds +wiles +wilful +wilfull +wilfully +wilfulnes +wilfulness +will +willed +willers +willeth +william +williams +willing +willingly +willingness +willoughby +willow +wills +wilt +wiltshire +wimpled +win +wince +winch +winchester +wincot +wind +winded +windgalls +winding +windlasses +windmill +window +windows +windpipe +winds +windsor +windy +wine +wing +winged +wingfield +wingham +wings +wink +winking +winks +winner +winners +winning +winnow +winnowed +winnows +wins +winter +winterly +winters +wip +wipe +wiped +wipes +wiping +wire +wires +wiry +wisdom +wisdoms +wise +wiselier +wisely +wiser +wisest +wish +wished +wisher +wishers +wishes +wishest +wisheth +wishful +wishing +wishtly +wisp +wist +wit +witb +witch +witchcraft +witches +witching +with +withal +withdraw +withdrawing +withdrawn +withdrew +wither +withered +withering +withers +withheld +withhold +withholds +within +withold +without +withstand +withstanding +withstood +witless +witness +witnesses +witnesseth +witnessing +wits +witted +wittenberg +wittiest +wittily +witting +wittingly +wittol +wittolly +witty +wiv +wive +wived +wives +wiving +wizard +wizards +wo +woe +woeful +woefull +woefullest +woes +woful +wolf +wolfish +wolsey +wolves +wolvish +woman +womanhood +womanish +womankind +womanly +womb +wombs +womby +women +won +woncot +wond +wonder +wondered +wonderful +wonderfully +wondering +wonders +wondrous +wondrously +wont +wonted +woo +wood +woodbine +woodcock +woodcocks +wooden +woodland +woodman +woodmonger +woods +woodstock +woodville +wooed +wooer +wooers +wooes +woof +wooing +wooingly +wool +woollen +woolly +woolsack +woolsey +woolward +woos +wor +worcester +word +words +wore +worins +work +workers +working +workings +workman +workmanly +workmanship +workmen +works +worky +world +worldlings +worldly +worlds +worm +worms +wormwood +wormy +worn +worried +worries +worry +worrying +worse +worser +worship +worshipful +worshipfully +worshipp +worshipper +worshippers +worshippest +worships +worst +worsted +wort +worth +worthied +worthier +worthies +worthiest +worthily +worthiness +worthless +worths +worthy +worts +wot +wots +wotting +wouid +would +wouldest +wouldst +wound +wounded +wounding +woundings +woundless +wounds +wouns +woven +wow +wrack +wrackful +wrangle +wrangler +wranglers +wrangling +wrap +wrapp +wraps +wrapt +wrath +wrathful +wrathfully +wraths +wreak +wreakful +wreaks +wreath +wreathed +wreathen +wreaths +wreck +wrecked +wrecks +wren +wrench +wrenching +wrens +wrest +wrested +wresting +wrestle +wrestled +wrestler +wrestling +wretch +wretchcd +wretched +wretchedness +wretches +wring +wringer +wringing +wrings +wrinkle +wrinkled +wrinkles +wrist +wrists +writ +write +writer +writers +writes +writhled +writing +writings +writs +written +wrong +wronged +wronger +wrongful +wrongfully +wronging +wrongly +wrongs +wronk +wrote +wroth +wrought +wrung +wry +wrying +wt +wul +wye +x +xanthippe +xi +xii +xiii +xiv +xv +y +yard +yards +yare +yarely +yarn +yaughan +yaw +yawn +yawning +ycleped +ycliped +ye +yea +yead +year +yearly +yearn +yearns +years +yeas +yeast +yedward +yell +yellow +yellowed +yellowing +yellowness +yellows +yells +yelping +yeoman +yeomen +yerk +yes +yesterday +yesterdays +yesternight +yesty +yet +yew +yicld +yield +yielded +yielder +yielders +yielding +yields +yok +yoke +yoked +yokefellow +yokes +yoketh +yon +yond +yonder +yongrey +yore +yorick +york +yorkists +yorks +yorkshire +you +young +younger +youngest +youngling +younglings +youngly +younker +your +yours +yourself +yourselves +youth +youthful +youths +youtli +zanies +zany +zeal +zealous +zeals +zed +zenelophon +zenith +zephyrs +zir +zo +zodiac +zodiacs +zone +zounds +zwagger \ No newline at end of file diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/stemmer/porter/output.txt b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/stemmer/porter/output.txt new file mode 100644 index 0000000..a13aef6 --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/stemmer/porter/output.txt @@ -0,0 +1,23531 @@ +a +aaron +abaissiez +abandon +abandon +abas +abash +abat +abat +abat +abat +abat +abbess +abbei +abbei +abbomin +abbot +abbot +abbrevi +ab +abel +aberga +abergavenni +abet +abet +abhomin +abhor +abhorr +abhor +abhor +abhor +abhorson +abid +abid +abil +abil +abject +abjectli +abject +abjur +abjur +abl +abler +aboard +abod +abod +abod +abod +abomin +abomin +abomin +abort +abort +abound +abound +about +abov +abr +abraham +abram +abreast +abridg +abridg +abridg +abridg +abroach +abroad +abrog +abrook +abrupt +abrupt +abruptli +absenc +absent +absei +absolut +absolut +absolv +absolv +abstain +abstemi +abstin +abstract +absurd +absyrtu +abund +abund +abundantli +abu +abus +abus +abus +abus +abus +abut +abi +abysm +ac +academ +academ +accent +accent +accept +accept +accept +accept +accept +access +accessari +access +accid +accid +accident +accident +accid +accit +accit +accit +acclam +accommod +accommod +accommod +accommod +accommodo +accompani +accompani +accompani +accomplic +accomplish +accomplish +accomplish +accomplish +accompt +accord +accord +accord +accordeth +accord +accordingli +accord +accost +accost +account +account +account +account +accoutr +accoutr +accoutr +accru +accumul +accumul +accumul +accur +accurs +accurst +accu +accus +accus +accus +accusativo +accus +accus +accus +accus +accus +accuseth +accus +accustom +accustom +ac +acerb +ach +acheron +ach +achiev +achiev +achiev +achiev +achiev +achiev +achiev +achiev +achil +ach +achitophel +acknowledg +acknowledg +acknowledg +acknowledg +acknown +acold +aconitum +acordo +acorn +acquaint +acquaint +acquaint +acquaint +acquir +acquir +acquisit +acquit +acquitt +acquitt +acquit +acr +acr +across +act +actaeon +act +act +action +action +actium +activ +activ +activ +actor +actor +act +actual +actur +acut +acut +ad +adag +adalla +adam +adam +add +ad +adder +adder +addeth +addict +addict +addict +ad +addit +addit +addl +address +address +addrest +add +adher +adher +adieu +adieu +adjac +adjoin +adjoin +adjourn +adjudg +adjudg +adjunct +administ +administr +admir +admir +admir +admir +admir +admir +admir +admir +admiringli +admiss +admit +admit +admitt +admit +admit +admonish +admonish +admonish +admonish +admonit +ado +adoni +adopt +adopt +adoptedli +adopt +adopti +adopt +ador +ador +ador +ador +ador +ador +adorest +adoreth +ador +adorn +adorn +adorn +adorn +adorn +adown +adramadio +adrian +adriana +adriano +adriat +adsum +adul +adulter +adulter +adulter +adulteress +adulteri +adulter +adulteri +adultress +advanc +advanc +advanc +advanc +advanc +advanc +advanc +advantag +advantag +advantag +advantag +advantag +advantag +advent +adventur +adventur +adventur +adventur +adventur +adventur +adversari +adversari +advers +advers +advers +advers +adverti +advertis +advertis +advertis +advertis +advic +advi +advis +advis +advisedli +advis +advis +advoc +advoc +aeacida +aeacid +aedil +aedil +aegeon +aegion +aegl +aemelia +aemilia +aemiliu +aenea +aeolu +aer +aerial +aeri +aesculapiu +aeson +aesop +aetna +afar +afear +afeard +affabl +affabl +affair +affair +affair +affect +affect +affect +affect +affectedli +affecteth +affect +affect +affection +affection +affect +affect +affeer +affianc +affianc +affianc +affi +affin +affin +affin +affirm +affirm +affirm +afflict +afflict +afflict +afflict +afflict +afford +affordeth +afford +affrai +affright +affright +affright +affront +affront +affi +afield +afir +afloat +afoot +afor +aforehand +aforesaid +afraid +afresh +afric +africa +african +afront +after +afternoon +afterward +afterward +ag +again +against +agamemmon +agamemnon +agat +agaz +ag +ag +agenor +agent +agent +ag +aggrav +aggrief +agil +agincourt +agit +aglet +agniz +ago +agon +agoni +agre +agre +agre +agreement +agre +agrippa +aground +agu +aguecheek +agu +aguefac +agu +ah +aha +ahungri +ai +aialvolio +aiaria +aid +aidanc +aidant +aid +aid +aidless +aid +ail +aim +aim +aimest +aim +aim +ainsi +aio +air +air +airless +air +airi +ajax +akil +al +alabast +alack +alacr +alarbu +alarm +alarm +alarum +alarum +ala +alb +alban +alban +albani +albeit +albion +alchemist +alchemi +alcibiad +alcid +alder +alderman +aldermen +al +alecto +alehous +alehous +alencon +alengon +aleppo +al +alewif +alexand +alexand +alexandria +alexandrian +alexa +alia +alic +alien +aliena +alight +alight +alight +alii +alik +alisand +aliv +all +alla +allai +allai +allai +allay +allay +allai +alleg +alleg +alleg +alleg +allegi +allegi +allei +allei +allhallowma +allianc +allicholi +alli +alli +allig +allig +allon +allot +allot +allot +allotteri +allow +allow +allow +allow +allow +allur +allur +allur +allur +allus +alli +allycholli +almain +almanac +almanack +almanac +almighti +almond +almost +alm +almsman +alo +aloft +alon +along +alonso +aloof +aloud +alphabet +alphabet +alphonso +alp +alreadi +also +alt +altar +altar +alter +alter +alter +alter +althaea +although +altitud +altogeth +alton +alwai +alwai +am +amaimon +amain +amak +amamon +amaz +amaz +amaz +amazedli +amazed +amaz +amaz +amazeth +amaz +amazon +amazonian +amazon +ambassador +ambassador +amber +ambiguid +ambigu +ambigu +ambit +ambit +ambiti +ambiti +ambl +ambl +ambl +ambl +ambo +ambuscado +ambush +amen +amend +amend +amend +amend +amerc +america +am +amiabl +amid +amidst +amien +ami +amiss +amiti +amiti +amnipot +among +amongst +amor +amor +amort +amount +amount +amour +amphimacu +ampl +ampler +amplest +amplifi +amplifi +ampli +ampthil +amurath +amynta +an +anatomiz +anatom +anatomi +ancestor +ancestor +ancestri +anchis +anchor +anchorag +anchor +anchor +anchor +anchovi +ancient +ancientri +ancient +ancu +and +andiron +andpholu +andren +andrew +andromach +andronici +andronicu +anew +ang +angel +angelica +angel +angelo +angel +anger +angerli +anger +ang +angier +angl +anglai +angl +angler +angleterr +anglia +angl +anglish +angrili +angri +anguish +angu +anim +anim +animi +anjou +ankl +anna +annal +ann +annex +annex +annexion +annex +annothan +announc +annoi +annoy +annoi +annual +anoint +anoint +anon +anoth +anselmo +answer +answer +answer +answerest +answer +answer +ant +ant +antenor +antenorid +anteroom +anthem +anthem +anthoni +anthropophagi +anthropophaginian +antiat +antic +anticip +anticip +anticipatest +anticip +anticip +antick +anticli +antic +antidot +antidot +antigonu +antiopa +antipathi +antipholu +antipholus +antipod +antiquari +antiqu +antiqu +antium +antoniad +antonio +antoniu +antoni +antr +anvil +ani +anybodi +anyon +anyth +anywher +ap +apac +apart +apart +apart +ap +apemantu +apennin +ap +apiec +apish +apollinem +apollo +apollodoru +apolog +apoplex +apoplexi +apostl +apostl +apostropha +apoth +apothecari +appal +appal +appal +appal +apparel +apparel +apparel +appar +appar +apparit +apparit +appeach +appeal +appeal +appear +appear +appear +appeareth +appear +appear +appea +appeas +appeas +appel +appel +appele +appel +appelez +appel +appel +appelon +appendix +apperil +appertain +appertain +appertain +appertain +appertin +appertin +appetit +appetit +applaud +applaud +applaud +applaus +applaus +appl +appl +appletart +applianc +applianc +applic +appli +appli +appli +appli +appoint +appoint +appoint +appoint +appoint +apprehend +apprehend +apprehend +apprehens +apprehens +apprehens +apprendr +apprenn +apprenticehood +appri +approach +approach +approach +approacheth +approach +approb +approof +appropri +approv +approv +approv +approv +approv +appurten +appurten +apricock +april +apron +apron +apt +apter +aptest +aptli +apt +aqua +aquilon +aquitain +arabia +arabian +arais +arbitr +arbitr +arbitr +arbitr +arbor +arbour +arc +arch +archbishop +archbishopr +archdeacon +arch +archelau +archer +archer +archeri +archibald +archidamu +architect +arcu +ard +arden +ardent +ardour +ar +argal +argier +argo +argosi +argosi +argu +argu +argu +argu +argu +argument +argument +argu +ariachn +ariadn +ariel +ari +aright +arinado +arini +arion +aris +aris +ariseth +aris +aristod +aristotl +arithmet +arithmetician +ark +arm +arma +armado +armado +armagnac +arm +arm +armenia +armi +armigero +arm +armipot +armor +armour +armour +armour +armour +armouri +arm +armi +arn +aroint +aros +arous +arous +arragon +arraign +arraign +arraign +arraign +arrant +arra +arrai +arrearag +arrest +arrest +arrest +arriv +arriv +arriv +arriv +arriv +arriv +arriv +arrog +arrog +arrog +arrow +arrow +art +artemidoru +arteri +arthur +articl +articl +articul +artific +artifici +artilleri +artir +artist +artist +artless +artoi +art +artu +arviragu +as +asaph +ascaniu +ascend +ascend +ascendeth +ascend +ascens +ascent +ascrib +ascrib +ash +asham +asham +asher +ash +ashford +ashor +ashout +ashi +asia +asid +ask +askanc +ask +asker +asketh +ask +ask +aslant +asleep +asmath +asp +aspect +aspect +aspen +aspers +aspic +aspici +aspic +aspir +aspir +aspir +aspir +asquint +ass +assail +assail +assail +assail +assail +assaileth +assail +assail +assassin +assault +assault +assault +assai +assai +assai +assembl +assembl +assembl +assembl +assembl +assent +ass +assez +assign +assign +assign +assinico +assist +assist +assist +assist +assist +assist +assist +associ +associ +associ +assuag +assubjug +assum +assum +assum +assumpt +assur +assur +assur +assur +assuredli +assur +assyrian +astonish +astonish +astraea +astrai +astrea +astronom +astronom +astronom +astronomi +asund +at +atalanta +at +at +athenian +athenian +athen +athol +athversari +athwart +atla +atomi +atomi +aton +aton +aton +atropo +attach +attach +attach +attain +attaind +attain +attaint +attaint +attaintur +attempt +attempt +attempt +attempt +attempt +attend +attend +attend +attend +attend +attend +attendeth +attend +attend +attent +attent +attent +attentiven +attest +attest +attir +attir +attir +attir +attornei +attornei +attornei +attorneyship +attract +attract +attract +attract +attribut +attribut +attribut +attribut +attribut +atwain +au +aubrei +auburn +aucun +audaci +audaci +audac +audibl +audienc +audi +audit +auditor +auditor +auditori +audr +audrei +aufidiu +aufidius +auger +aught +augment +augment +augment +augment +augur +augur +augur +augur +augur +auguri +august +augustu +auld +aumerl +aunchient +aunt +aunt +auricular +aurora +auspici +aussi +auster +auster +auster +auster +austria +aut +authent +author +author +author +author +author +author +autolycu +autr +autumn +auvergn +avail +avail +avaric +avarici +avaunt +av +aveng +aveng +aveng +aver +avert +av +avez +avi +avoid +avoid +avoid +avoid +avoirdupoi +avouch +avouch +avouch +avouch +avow +aw +await +await +awak +awak +awak +awaken +awaken +awaken +awak +awak +award +award +awasi +awai +aw +aweari +aweless +aw +awhil +awkward +awl +awoo +awork +awri +ax +axl +axletre +ay +ay +ayez +ayli +azur +azur +b +ba +baa +babbl +babbl +babbl +babe +babe +babi +baboon +baboon +babi +babylon +bacar +bacchan +bacchu +bach +bachelor +bachelor +back +backbit +backbitten +back +back +backward +backwardli +backward +bacon +bacon +bad +bade +badg +badg +badg +badli +bad +bae +baffl +baffl +baffl +bag +baggag +bagot +bagpip +bag +bail +bailiff +baillez +baili +baisant +baise +baiser +bait +bait +bait +bait +bait +bajazet +bak +bake +bake +baker +baker +bake +bake +bal +balanc +balanc +balconi +bald +baldrick +bale +bale +balk +ball +ballad +ballad +ballast +ballast +ballet +ballow +ball +balm +balm +balmi +balsam +balsamum +balth +balthasar +balthazar +bame +ban +banburi +band +bandi +band +bandit +banditti +banditto +band +bandi +bandi +bane +bane +bang +bangor +banish +banish +banish +banish +banist +bank +bankrout +bankrupt +bankrupt +bank +banner +banneret +banner +ban +bann +banquet +banquet +banquet +banquet +banquo +ban +baptism +baptista +baptiz +bar +barbarian +barbarian +barbar +barbar +barbari +barbason +barb +barber +barbermong +bard +bardolph +bard +bare +bare +barefac +barefac +barefoot +barehead +bare +bare +bar +bargain +bargain +barg +bargulu +bare +bark +bark +barkloughli +bark +barki +barlei +barm +barn +barnacl +barnardin +barn +barn +barnet +barn +baron +baron +baroni +barr +barraba +barrel +barrel +barren +barrenli +barren +barricado +barricado +barrow +bar +barson +barter +bartholomew +ba +basan +base +baseless +base +base +baser +base +basest +bash +bash +basilisco +basilisk +basilisk +basimecu +basin +basingstok +basin +basi +bask +basket +basket +bass +bassanio +basset +bassianu +basta +bastard +bastard +bastardli +bastard +bastardi +bast +bast +bastinado +bast +bat +batail +batch +bate +bate +bate +bath +bath +bath +bath +bath +bate +batler +bat +batt +battalia +battalion +batten +batter +batter +batter +batteri +battl +battl +battlefield +battlement +battl +batti +baubl +baubl +baubl +baulk +bavin +bawcock +bawd +bawdri +bawd +bawdi +bawl +bawl +bai +bai +baynard +bayonn +bai +be +beach +beach +beachi +beacon +bead +bead +beadl +beadl +bead +beadsmen +beagl +beagl +beak +beak +beam +beam +beam +bean +bean +bear +beard +beard +beardless +beard +bearer +bearer +bearest +beareth +bear +bear +beast +beastliest +beastli +beastli +beast +beat +beat +beaten +beat +beatric +beat +beau +beaufort +beaumond +beaumont +beauteou +beauti +beauti +beautifi +beauti +beautifi +beauti +beaver +beaver +becam +becaus +bechanc +bechanc +bechanc +beck +beckon +beckon +beck +becom +becom +becom +becom +becom +becom +bed +bedabbl +bedash +bedaub +bedazzl +bedchamb +bedcloth +bed +bedeck +bedeck +bedew +bedfellow +bedfellow +bedford +bedlam +bedrench +bedrid +bed +bedtim +bedward +bee +beef +beef +beehiv +been +beer +bee +beest +beetl +beetl +beev +befal +befallen +befal +befel +befit +befit +befit +befor +befor +beforehand +befortun +befriend +befriend +befriend +beg +began +beget +beget +beget +begg +beggar +beggar +beggarli +beggarman +beggar +beggari +beg +begin +beginn +begin +begin +begin +begnawn +begon +begot +begotten +begrim +beg +beguil +beguil +beguil +beguil +beguil +begun +behalf +behalf +behav +behav +behavedst +behavior +behavior +behaviour +behaviour +behead +behead +beheld +behest +behest +behind +behold +behold +behold +beholdest +behold +behold +behoof +behoofful +behoov +behov +behov +behowl +be +bel +belariu +belch +belch +beldam +beldam +beldam +bele +belgia +beli +beli +belief +beliest +believ +believ +believ +believ +believest +believ +belik +bell +bellario +bell +belli +belli +bellman +bellona +bellow +bellow +bellow +bellow +bell +belli +belly +belman +belmont +belock +belong +belong +belong +belong +belov +belov +belov +below +belt +belzebub +bemad +bemet +bemet +bemoan +bemoan +bemock +bemoil +bemonst +ben +bench +bencher +bench +bend +bend +bend +bend +bene +beneath +benedicit +benedick +benedict +benedictu +benefactor +benefic +benefici +benefit +benefit +benefit +benet +benevol +benevol +beni +benison +bennet +bent +bentii +bentivolii +bent +benumb +benvolio +bepaint +beprai +bequeath +bequeath +bequeath +bequest +ber +berard +berattl +berai +bere +bereav +bereav +bereav +bereft +bergamo +bergomask +berhym +berhym +berkelei +bermooth +bernardo +berod +berown +berri +berri +berrord +berri +bertram +berwick +bescreen +beseech +beseech +beseech +beseech +beseek +beseem +beseemeth +beseem +beseem +beset +beshrew +besid +besid +besieg +besieg +besieg +beslubb +besmear +besmear +besmirch +besom +besort +besot +bespak +bespeak +bespic +bespok +bespot +bess +bessi +best +bestain +best +bestial +bestir +bestirr +bestow +bestow +bestow +bestow +bestraught +bestrew +bestrid +bestrid +bestrid +bet +betak +beteem +bethink +bethought +bethroth +bethump +betid +betid +betideth +betim +betim +betoken +betook +betoss +betrai +betrai +betrai +betrai +betrim +betroth +betroth +betroth +bett +bet +better +better +better +better +bet +bettr +between +betwixt +bevel +beverag +bevi +bevi +bewail +bewail +bewail +bewail +bewar +bewast +beweep +bewept +bewet +bewhor +bewitch +bewitch +bewitch +bewrai +beyond +bezonian +bezonian +bianca +bianco +bia +bibbl +bicker +bid +bidden +bid +bid +biddi +bide +bide +bide +bid +bien +bier +bifold +big +bigami +biggen +bigger +big +bigot +bilberri +bilbo +bilbo +bilbow +bill +billet +billet +billiard +bill +billow +billow +bill +bin +bind +bindeth +bind +bind +biondello +birch +bird +bird +birdlim +bird +birnam +birth +birthdai +birthdom +birthplac +birthright +birthright +birth +bi +biscuit +bishop +bishop +bisson +bit +bitch +bite +biter +bite +bite +bit +bitt +bitten +bitter +bitterest +bitterli +bitter +blab +blabb +blab +blab +black +blackamoor +blackamoor +blackberri +blackberri +blacker +blackest +blackfriar +blackheath +blackmer +black +black +bladder +bladder +blade +blade +blade +blain +blam +blame +blame +blame +blameless +blame +blanc +blanca +blanch +blank +blanket +blank +blasphem +blasphem +blasphem +blasphemi +blast +blast +blast +blastment +blast +blaz +blaze +blaze +blaze +blazon +blazon +blazon +bleach +bleach +bleak +blear +blear +bleat +bleat +bleat +bled +bleed +bleedest +bleedeth +bleed +bleed +blemish +blemish +blench +blench +blend +blend +blent +bless +bless +blessedli +blessed +bless +blesseth +bless +bless +blest +blew +blind +blind +blindfold +blind +blindli +blind +blind +blink +blink +bliss +blist +blister +blister +blith +blithild +bloat +block +blockish +block +bloi +blood +blood +bloodhound +bloodi +bloodier +bloodiest +bloodili +bloodless +blood +bloodsh +bloodshed +bloodstain +bloodi +bloom +bloom +blossom +blossom +blossom +blot +blot +blot +blot +blount +blow +blow +blower +blowest +blow +blown +blow +blows +blubb +blubber +blubber +blue +bluecap +bluest +blunt +blunt +blunter +bluntest +blunt +bluntli +blunt +blunt +blur +blurr +blur +blush +blush +blushest +blush +blust +bluster +bluster +bluster +bo +boar +board +board +board +board +boarish +boar +boast +boast +boast +boast +boast +boat +boat +boatswain +bob +bobb +boblibindo +bobtail +bocchu +bode +bode +bodement +bode +bodg +bodi +bodi +bodiless +bodili +bode +bodkin +bodi +bodykin +bog +boggl +boggler +bog +bohemia +bohemian +bohun +boil +boil +boil +boist +boister +boister +boitier +bold +bolden +bolder +boldest +boldli +bold +bold +bolingbrok +bolster +bolt +bolt +bolter +bolter +bolt +bolt +bombard +bombard +bombast +bon +bona +bond +bondag +bond +bondmaid +bondman +bondmen +bond +bondslav +bone +boneless +bone +bonfir +bonfir +bonjour +bonn +bonnet +bonnet +bonni +bono +bonto +bonvil +bood +book +bookish +book +boon +boor +boorish +boor +boot +boot +booti +bootless +boot +booti +bor +bora +borachio +bordeaux +border +border +border +border +bore +borea +bore +bore +born +born +borough +borough +borrow +borrow +borrow +borrow +borrow +bosko +bosko +boski +bosom +bosom +boson +boss +bosworth +botch +botcher +botch +botchi +both +bot +bottl +bottl +bottl +bottom +bottomless +bottom +bouciqualt +boug +bough +bough +bought +bounc +bounc +bound +bound +bounden +boundeth +bound +boundless +bound +bounteou +bounteous +bounti +bounti +bountifulli +bounti +bourbier +bourbon +bourchier +bourdeaux +bourn +bout +bout +bove +bow +bowcas +bow +bowel +bower +bow +bowl +bowler +bowl +bowl +bow +bowsprit +bowstr +box +box +boi +boyet +boyish +boi +brabant +brabantio +brabbl +brabbler +brac +brace +bracelet +bracelet +brach +braci +brag +bragg +braggard +braggard +braggart +braggart +brag +brag +bragless +brag +braid +braid +brain +brain +brainford +brainish +brainless +brain +brainsick +brainsickli +brake +brakenburi +brake +brambl +bran +branch +branch +branchless +brand +brand +brandish +brandon +brand +bra +brass +brassi +brat +brat +brav +brave +brave +brave +braver +braveri +brave +bravest +brave +brawl +brawler +brawl +brawl +brawn +brawn +brai +brai +braz +brazen +brazier +breach +breach +bread +breadth +break +breaker +breakfast +break +break +breast +breast +breast +breastplat +breast +breath +breath +breath +breather +breather +breath +breathest +breath +breathless +breath +brecknock +bred +breech +breech +breech +breed +breeder +breeder +breed +breed +brees +breez +breff +bretagn +brethen +bretheren +brethren +brevi +breviti +brew +brewag +brewer +brewer +brew +brew +briareu +briar +brib +bribe +briber +bribe +brick +bricklay +brick +bridal +bride +bridegroom +bridegroom +bride +bridg +bridgenorth +bridg +bridget +bridl +bridl +brief +briefer +briefest +briefli +brief +brier +brier +brigandin +bright +brighten +brightest +brightli +bright +brim +brim +brim +brimston +brind +brine +bring +bringer +bringeth +bring +bring +bring +brinish +brink +brisk +briski +bristl +bristl +bristli +bristol +bristow +britain +britain +britain +british +briton +briton +brittani +brittl +broach +broach +broad +broader +broadsid +broca +brock +brogu +broil +broil +broil +broke +broken +brokenli +broker +broker +broke +broke +brooch +brooch +brood +brood +brood +brook +brook +broom +broomstaff +broth +brothel +brother +brotherhood +brotherhood +brotherli +brother +broth +brought +brow +brown +browner +brownist +browni +brow +brows +brows +brui +bruis +bruis +bruis +bruis +bruit +bruit +brundusium +brunt +brush +brush +brute +brutish +brutu +bubbl +bubbl +bubbl +bubukl +buck +bucket +bucket +buck +buckingham +buckl +buckl +buckler +buckler +bucklersburi +buckl +buckram +buck +bud +bud +bud +budg +budger +budget +bud +buff +buffet +buffet +buffet +bug +bugbear +bugl +bug +build +build +buildeth +build +build +build +built +bulk +bulk +bull +bullcalf +bullen +bullen +bullet +bullet +bullock +bull +bulli +bulmer +bulwark +bulwark +bum +bumbast +bump +bumper +bum +bunch +bunch +bundl +bung +bunghol +bungl +bunt +buoi +bur +burbolt +burd +burden +burden +burden +burden +burden +burgh +burgher +burgher +burglari +burgomast +burgonet +burgundi +burial +buri +burier +buriest +burli +burn +burn +burnet +burneth +burn +burnish +burn +burnt +burr +burrow +bur +burst +burst +burst +burthen +burthen +burton +buri +buri +bush +bushel +bush +bushi +busi +busili +busin +busi +busi +buskin +buski +buss +buss +buss +bustl +bustl +busi +but +butche +butcher +butcher +butcheri +butcherli +butcher +butcheri +butler +butt +butter +butter +butterfli +butterfli +butterwoman +butteri +buttock +buttock +button +buttonhol +button +buttress +buttri +butt +buxom +bui +buyer +bui +bui +buzz +buzzard +buzzard +buzzer +buzz +by +bye +byzantium +c +ca +cabbag +cabilero +cabin +cabin +cabl +cabl +cackl +cacodemon +caddi +caddiss +cade +cadenc +cadent +cade +cadmu +caduceu +cadwal +cadwallad +caeliu +caelo +caesar +caesarion +caesar +cage +cage +cagion +cain +caith +caitiff +caitiff +caiu +cak +cake +cake +calab +calai +calam +calam +calcha +calcul +calen +calendar +calendar +calf +caliban +caliban +calipoli +caliti +caliv +call +callat +call +callet +call +call +calm +calmest +calmli +calm +calm +calpurnia +calumni +calumni +calumni +calumni +calv +calv +calv +calveskin +calydon +cam +cambio +cambria +cambric +cambric +cambridg +cambys +came +camel +camelot +camel +camest +camillo +camlet +camomil +camp +campeiu +camp +camp +can +canakin +canari +canari +cancel +cancel +cancel +cancel +cancel +cancer +candidatu +candi +candl +candl +candlestick +candi +canidiu +cank +canker +cankerblossom +canker +cannib +cannib +cannon +cannon +cannon +cannot +canon +canoniz +canon +canon +canon +canopi +canopi +canopi +canst +canstick +canterburi +cantl +canton +canu +canva +canvass +canzonet +cap +capabl +capabl +capac +capac +caparison +capdv +cape +capel +capel +caper +caper +capet +caphi +capilet +capitain +capit +capit +capitol +capitul +capocchia +capon +capon +capp +cappadocia +capriccio +caprici +cap +capt +captain +captain +captainship +captiou +captiv +captiv +captiv +captiv +captiv +captiv +captum +capuciu +capulet +capulet +car +carack +carack +carat +carawai +carbonado +carbuncl +carbuncl +carbuncl +carcanet +carcas +carcas +carcass +carcass +card +cardecu +card +carder +cardin +cardin +cardin +cardmak +card +carduu +care +care +career +career +care +carefulli +careless +carelessli +careless +care +caret +cargo +carl +carlisl +carlot +carman +carmen +carnal +carnal +carnarvonshir +carnat +carnat +carol +carou +carous +carous +carous +carous +carp +carpent +carper +carpet +carpet +carp +carriag +carriag +carri +carrier +carrier +carri +carrion +carrion +carri +carri +car +cart +carter +carthag +cart +carv +carv +carv +carver +carv +carv +ca +casa +casaer +casca +case +casement +casement +case +cash +cashier +case +cask +casket +casket +casket +casqu +casqu +cassado +cassandra +cassibelan +cassio +cassiu +cassock +cast +castalion +castawai +castawai +cast +caster +castig +castig +castil +castiliano +cast +castl +castl +cast +casual +casual +casualti +casualti +cat +cataian +catalogu +cataplasm +cataract +catarrh +catastroph +catch +catcher +catch +catch +cate +catechis +catech +catech +cater +caterpillar +cater +caterwaul +cate +catesbi +cathedr +catlik +catl +catl +cato +cat +cattl +caucasu +caudl +cauf +caught +cauldron +cau +caus +caus +causeless +causer +caus +causest +causeth +cautel +cautel +cautel +cauter +caution +caution +cavaleiro +cavaleri +cavali +cave +cavern +cavern +cave +caveto +caviari +cavil +cavil +cawdor +cawdron +caw +ce +cea +ceas +ceas +ceaseth +cedar +cedar +cediu +celebr +celebr +celebr +celebr +celer +celesti +celia +cell +cellar +cellarag +celsa +cement +censer +censor +censorinu +censur +censur +censur +censur +censur +censur +centaur +centaur +centr +cent +centuri +centurion +centurion +centuri +cerberu +cerecloth +cerement +ceremoni +ceremoni +ceremoni +ceremoni +ceremoni +cere +cern +certain +certain +certainli +certainti +certainti +cert +certif +certifi +certifi +certifi +ce +cesario +cess +cess +cestern +cetera +cett +chace +chaf +chafe +chafe +chafe +chaff +chaffless +chafe +chain +chain +chair +chair +chalic +chalic +chalic +chalk +chalk +chalki +challeng +challeng +challeng +challeng +challeng +challeng +cham +chamber +chamber +chamberlain +chamberlain +chambermaid +chambermaid +chamber +chameleon +champ +champagn +champain +champain +champion +champion +chanc +chanc +chanc +chancellor +chanc +chandler +chang +chang +changeabl +chang +chang +changel +changel +changer +chang +changest +chang +channel +channel +chanson +chant +chanticl +chant +chantri +chantri +chant +chao +chap +chape +chapel +chapeless +chapel +chaplain +chaplain +chapless +chaplet +chapmen +chap +chapter +charact +charact +characterless +charact +characteri +charact +charbon +chare +chare +charg +charg +charg +charg +charg +chargeth +charg +chariest +chari +chare +chariot +chariot +charit +charit +chariti +chariti +charlemain +charl +charm +charm +charmer +charmeth +charmian +charm +charmingli +charm +charneco +charnel +charoloi +charon +charter +charter +chartreux +chari +charybdi +cha +chase +chase +chaser +chaseth +chase +chast +chast +chasti +chastis +chastis +chastis +chastiti +chat +chatham +chatillon +chat +chatt +chattel +chatter +chatter +chattl +chaud +chaunt +chaw +chawdron +che +cheap +cheapen +cheaper +cheapest +cheapli +cheapsid +cheat +cheat +cheater +cheater +cheat +cheat +check +check +checker +check +check +cheek +cheek +cheer +cheer +cheerer +cheer +cheerfulli +cheer +cheerless +cheerli +cheer +chees +chequer +cher +cherish +cherish +cherish +cherish +cherish +cherri +cherri +cherrypit +chertsei +cherub +cherubim +cherubin +cherubin +cheshu +chess +chest +chester +chestnut +chestnut +chest +cheta +chev +cheval +chevali +chevali +cheveril +chew +chew +chewet +chew +chez +chi +chick +chicken +chicken +chicurmurco +chid +chidden +chide +chider +chide +chide +chief +chiefest +chiefli +chien +child +child +childer +childhood +childhood +child +childish +childish +childlik +child +children +chill +chill +chime +chime +chimnei +chimneypiec +chimnei +chimurcho +chin +china +chine +chine +chink +chink +chin +chipp +chipper +chip +chiron +chirp +chirrah +chirurgeonli +chisel +chitoph +chivalr +chivalri +choic +choic +choicest +choir +choir +chok +choke +choke +choke +choke +choler +choler +choler +chollor +choos +chooser +choos +chooseth +choos +chop +chopin +choplog +chopp +chop +chop +choppi +chop +chopt +chor +chorist +choru +chose +chosen +chough +chough +chrish +christ +christen +christendom +christendom +christen +christen +christian +christianlik +christian +christma +christom +christoph +christophero +chronicl +chronicl +chronicl +chronicl +chronicl +chrysolit +chuck +chuck +chud +chuff +church +church +churchman +churchmen +churchyard +churchyard +churl +churlish +churlishli +churl +churn +chu +cicatric +cicatric +cice +cicero +cicet +ciel +ciitzen +cilicia +cimber +cimmerian +cinabl +cinctur +cinder +cine +cinna +cinqu +cipher +cipher +circa +circ +circl +circl +circlet +circl +circuit +circum +circumcis +circumfer +circummur +circumscrib +circumscrib +circumscript +circumspect +circumst +circumstanc +circumst +circumstanti +circumv +circumvent +cistern +citadel +cital +cite +cite +cite +citi +cite +citizen +citizen +cittern +citi +civet +civil +civil +civilli +clack +clad +claim +claim +claim +clamb +clamber +clammer +clamor +clamor +clamor +clamour +clamour +clang +clangor +clap +clapp +clap +clapper +clap +clap +clare +clarenc +claret +claribel +clasp +clasp +clatter +claud +claudio +claudiu +claus +claw +claw +claw +claw +clai +clai +clean +cleanliest +cleanli +clean +cleans +cleans +clear +clearer +clearest +clearli +clear +clear +cleav +cleav +clef +cleft +cleitu +clemenc +clement +cleomen +cleopatpa +cleopatra +clepeth +clept +clerestori +clergi +clergyman +clergymen +clerk +clerkli +clerk +clew +client +client +cliff +clifford +clifford +cliff +clifton +climat +climatur +climb +climb +climber +climbeth +climb +climb +clime +cling +clink +clink +clinquant +clip +clipp +clipper +clippeth +clip +clipt +clitu +clo +cloak +cloakbag +cloak +clock +clock +clod +cloddi +clodpol +clog +clog +clog +cloister +cloistress +cloquenc +clo +close +close +close +close +closer +close +closest +closet +close +closur +cloten +cloten +cloth +clothair +clothariu +cloth +cloth +clothier +clothier +cloth +cloth +clotpol +clotpol +cloud +cloud +cloudi +cloud +cloudi +clout +clout +clout +cloven +clover +clove +clovest +clowder +clown +clownish +clown +cloi +cloi +cloi +cloyless +cloyment +cloi +club +club +cluck +clung +clust +cluster +clutch +clyster +cneiu +cnemi +co +coach +coach +coachmak +coact +coactiv +coagul +coal +coal +coars +coars +coast +coast +coast +coat +coat +coat +cobbl +cobbl +cobbler +cobham +cobloaf +cobweb +cobweb +cock +cockatric +cockatric +cockl +cockl +cocknei +cockpit +cock +cocksur +coctu +cocytu +cod +cod +codl +codpiec +codpiec +cod +coelestibu +coesar +coeur +coffer +coffer +coffin +coffin +cog +cog +cogit +cogit +cognit +cogniz +cogscomb +cohabit +coher +coher +coher +coher +cohort +coif +coign +coil +coin +coinag +coiner +coin +coin +col +colbrand +colcho +cold +colder +coldest +coldli +cold +coldspur +colebrook +colic +collar +collar +collater +colleagu +collect +collect +collect +colleg +colleg +colli +collier +collier +collop +collus +colm +colmekil +coloquintida +color +color +colossu +colour +colour +colour +colour +colour +colt +colt +colt +columbin +columbin +colvil +com +comagen +comart +comb +combat +combat +combat +combat +combat +combin +combin +combin +combin +combin +combless +combust +come +comedian +comedian +comedi +comeli +come +comer +comer +come +comest +comet +cometh +comet +comfect +comfit +comfit +comfort +comfort +comfort +comfort +comfort +comfortless +comfort +comic +comic +come +come +cominiu +comma +command +command +command +command +command +command +command +command +command +comm +commenc +commenc +commenc +commenc +commenc +commenc +commend +commend +commend +commend +commend +commend +commend +comment +commentari +comment +comment +commerc +commingl +commiser +commiss +commission +commiss +commit +commit +committ +commit +commit +commix +commix +commixt +commixtur +commodi +commod +commod +common +commonalti +common +common +commonli +common +commonw +commonwealth +commot +commot +commun +communicat +commun +commun +commun +commun +comonti +compact +compani +companion +companion +companionship +compani +compar +compar +compar +compar +compar +comparison +comparison +compartn +compass +compass +compass +compass +compassion +compeer +compel +compel +compel +compel +compel +compens +compet +compet +compet +competitor +competitor +compil +compil +compil +complain +complain +complainest +complain +complain +complain +complaint +complaint +complement +complement +complet +complexion +complexion +complexion +complic +compli +compliment +compliment +compliment +complot +complot +complot +compli +compo +compos +compos +composit +compost +compostur +composur +compound +compound +compound +comprehend +comprehend +comprehend +compremis +compri +compris +compromi +compromis +compt +comptibl +comptrol +compulsatori +compuls +compuls +compuncti +comput +comrad +comrad +comutu +con +concav +concav +conceal +conceal +conceal +conceal +conceal +conceal +conceit +conceit +conceitless +conceit +conceiv +conceiv +conceiv +conceiv +conceiv +concept +concept +concepti +concern +concern +concerneth +concern +concern +concern +conclav +conclud +conclud +conclud +conclud +conclud +conclus +conclus +concolinel +concord +concubin +concupisc +concupi +concur +concur +concur +condemn +condemn +condemn +condemn +condemn +condescend +condign +condit +condition +condit +condol +condol +condol +conduc +conduct +conduct +conduct +conductor +conduit +conduit +conect +conei +confect +confectionari +confect +confederaci +confeder +confeder +confer +confer +conferr +confer +confess +confess +confess +confesseth +confess +confess +confess +confessor +confid +confid +confid +confin +confin +confin +confineless +confin +confin +confin +confirm +confirm +confirm +confirm +confirm +confirm +confirm +confirm +confirm +confisc +confisc +confisc +confix +conflict +conflict +conflict +confluenc +conflux +conform +conform +confound +confound +confound +confound +confront +confront +confu +confus +confusedli +confus +confus +confut +confut +congeal +congeal +congeal +conge +conger +congest +congi +congratul +congre +congreet +congreg +congreg +congreg +congreg +congruent +congru +coni +conjectur +conjectur +conjectur +conjoin +conjoin +conjoin +conjointli +conjunct +conjunct +conjunct +conjur +conjur +conjur +conjur +conjur +conjur +conjur +conjur +conjur +conjuro +conn +connect +conniv +conqu +conquer +conquer +conquer +conqueror +conqueror +conquer +conquest +conquest +conqur +conrad +con +consanguin +consanguin +conscienc +conscienc +conscienc +conscion +consecr +consecr +consecr +consent +consent +consent +consent +consequ +consequ +consequ +conserv +conserv +conserv +consid +consider +consider +consider +consider +consid +consid +consid +consid +consign +consign +consist +consisteth +consist +consistori +consist +consol +consol +conson +conson +consort +consort +consortest +conspectu +conspir +conspiraci +conspir +conspir +conspir +conspir +conspir +conspir +conspir +conspir +constabl +constabl +constanc +constanc +constanc +constant +constantin +constantinopl +constantli +constel +constitut +constrain +constrain +constraineth +constrain +constraint +constr +construct +constru +consul +consul +consulship +consulship +consult +consult +consult +consum +consum +consum +consum +consum +consumm +consumm +consumpt +consumpt +contagion +contagi +contain +contain +contain +contamin +contamin +contemn +contemn +contemn +contemn +contempl +contempl +contempl +contempt +contempt +contempt +contemptu +contemptu +contend +contend +contend +contendon +content +contenta +content +contenteth +content +contenti +contentless +contento +content +contest +contest +contin +contin +contin +contin +continu +continu +continu +continu +continuantli +continu +continu +continu +continu +continu +continu +contract +contract +contract +contract +contradict +contradict +contradict +contradict +contrari +contrarieti +contrarieti +contrari +contrari +contrari +contr +contribut +contributor +contrit +contriv +contriv +contriv +contriv +contriv +contriv +control +control +control +control +control +control +controversi +contumeli +contumeli +contum +contus +conveni +conveni +conveni +conveni +conveni +convent +conventicl +convent +conver +convers +convers +convers +convers +convers +convers +convers +convers +convert +convert +convertest +convert +convertit +convertit +convert +convei +convey +convey +convey +convei +convict +convict +convinc +convinc +convinc +conviv +convoc +convoi +convuls +coni +cook +cookeri +cook +cool +cool +cool +cool +coop +coop +cop +copatain +cope +cophetua +copi +copi +copiou +copper +copperspur +coppic +copul +copul +copi +cor +coragio +coral +coram +corambu +coranto +coranto +corbo +cord +cord +cordelia +cordial +cordi +cord +core +corin +corinth +corinthian +coriolanu +corioli +cork +corki +cormor +corn +cornelia +corneliu +corner +corner +cornerston +cornet +cornish +corn +cornuto +cornwal +corollari +coron +coron +coronet +coronet +corpor +corpor +corpor +corps +corpul +correct +correct +correct +correct +correction +correct +correspond +correspond +correspond +correspons +corrig +corriv +corriv +corrobor +corros +corrupt +corrupt +corrupt +corrupt +corrupt +corrupt +corrupt +corrupt +corruptli +corrupt +cors +cors +corslet +cosmo +cost +costard +costermong +costlier +costli +cost +cot +cote +cote +cotsal +cotsol +cotswold +cottag +cottag +cotu +couch +couch +couch +couch +coud +cough +cough +could +couldst +coulter +council +councillor +council +counsel +counsel +counsellor +counsellor +counselor +counselor +counsel +count +count +countenanc +counten +counten +counter +counterchang +countercheck +counterfeit +counterfeit +counterfeit +counterfeitli +counterfeit +countermand +countermand +countermin +counterpart +counterpoint +counterpoi +counterpois +counter +countervail +countess +countess +counti +count +countless +countri +countrv +countri +countryman +countrymen +count +counti +couper +coupl +coupl +couplement +coupl +couplet +couplet +cour +courag +courag +courag +courag +courier +courier +couronn +cour +cours +cours +courser +courser +cours +cours +court +court +courteou +courteous +courtesan +courtesi +courtesi +courtezan +courtezan +courtier +courtier +courtlik +courtli +courtnei +court +courtship +cousin +cousin +couterfeit +coutum +coven +coven +covent +coventri +cover +cover +cover +coverlet +cover +covert +covertli +covertur +covet +covet +covet +covet +covet +covet +covet +covet +cow +coward +coward +cowardic +cowardli +coward +cowardship +cowish +cowl +cowslip +cowslip +cox +coxcomb +coxcomb +coi +coystril +coz +cozen +cozenag +cozen +cozen +cozen +cozen +cozier +crab +crab +crab +crack +crack +cracker +cracker +crack +crack +cradl +cradl +cradl +craft +craft +crafti +craftier +craftili +craft +craftsmen +crafti +cram +cramm +cramp +cramp +cram +crank +crank +cranmer +cranni +cranni +cranni +crant +crare +crash +crassu +crav +crave +crave +craven +craven +crave +craveth +crave +crawl +crawl +crawl +craz +craze +crazi +creak +cream +creat +creat +creat +creat +creation +creator +creatur +creatur +credenc +credent +credibl +credit +creditor +creditor +credo +credul +credul +creed +creek +creek +creep +creep +creep +crept +crescent +cresciv +cresset +cressid +cressida +cressid +cressi +crest +crest +crestfal +crestless +crest +cretan +crete +crevic +crew +crew +crib +cribb +crib +cricket +cricket +cri +criedst +crier +cri +criest +crieth +crime +crime +crimeless +crime +crimin +crimson +cring +crippl +crisp +crisp +crispian +crispianu +crispin +critic +critic +critic +croak +croak +croak +crocodil +cromer +cromwel +crone +crook +crookback +crook +crook +crop +cropp +crosbi +cross +cross +cross +crossest +cross +cross +crossli +cross +crost +crotchet +crouch +crouch +crow +crowd +crowd +crowd +crowd +crowflow +crow +crowkeep +crown +crown +crowner +crownet +crownet +crown +crown +crow +crudi +cruel +cruell +crueller +cruelli +cruel +cruelti +crum +crumbl +crumb +crupper +crusado +crush +crush +crushest +crush +crust +crust +crusti +crutch +crutch +cry +cry +crystal +crystallin +crystal +cub +cubbert +cubiculo +cubit +cub +cuckold +cuckoldli +cuckold +cuckoo +cucullu +cudgel +cudgel +cudgel +cudgel +cudgel +cue +cue +cuff +cuff +cuiqu +cull +cull +cullion +cullionli +cullion +culpabl +culverin +cum +cumber +cumberland +cun +cunningli +cun +cuor +cup +cupbear +cupboard +cupid +cupid +cuppel +cup +cur +curan +curat +curb +curb +curb +curb +curd +curdi +curd +cure +cure +cureless +curer +cure +curfew +cure +curio +curios +curiou +curious +curl +curl +curl +curl +curranc +currant +current +current +currish +curri +cur +curs +curs +curs +cursi +curs +cursorari +curst +curster +curstest +curst +cursi +curtail +curtain +curtain +curtal +curti +curtl +curtsi +curtsi +curtsi +curvet +curvet +cush +cushion +cushion +custalorum +custard +custodi +custom +customari +custom +custom +custom +custom +custur +cut +cutler +cutpurs +cutpurs +cut +cutter +cut +cuttl +cxsar +cyclop +cydnu +cygnet +cygnet +cym +cymbal +cymbelin +cyme +cynic +cynthia +cypress +cypriot +cypru +cyru +cytherea +d +dabbl +dace +dad +daedalu +daemon +daff +daf +daffest +daffodil +dagger +dagger +dagonet +daili +daintier +dainti +daintiest +daintili +dainti +daintri +dainti +daisi +daisi +daisi +dale +dallianc +dalli +dalli +dalli +dalli +dalmatian +dam +damag +damascu +damask +damask +dame +dame +damm +damn +damnabl +damnabl +damnat +damn +damn +damoisel +damon +damosella +damp +dam +damsel +damson +dan +danc +danc +dancer +danc +danc +dandl +dandi +dane +dang +danger +danger +danger +danger +dangl +daniel +danish +dank +dankish +dansker +daphn +dappl +dappl +dar +dardan +dardanian +dardaniu +dare +dare +dare +dare +darest +dare +dariu +dark +darken +darken +darken +darker +darkest +darkl +darkli +dark +darl +darl +darnel +darraign +dart +dart +darter +dartford +dart +dart +dash +dash +dash +dastard +dastard +dat +datchet +date +date +dateless +date +daub +daughter +daughter +daunt +daunt +dauntless +dauphin +daventri +davi +daw +dawn +dawn +daw +dai +daylight +dai +dazzl +dazzl +dazzl +de +dead +deadli +deaf +deaf +deaf +deaf +deal +dealer +dealer +dealest +deal +deal +deal +dealt +dean +deaneri +dear +dearer +dearest +dearli +dear +dear +dearth +dearth +death +deathb +death +death +deathsman +deathsmen +debar +debas +debat +debat +debat +debateth +debat +debauch +debil +debil +debitor +debonair +deborah +debosh +debt +debt +debtor +debtor +debt +debuti +decai +decai +decay +decai +decai +decea +deceas +deceas +deceit +deceit +deceit +deceiv +deceiv +deceiv +deceiv +deceiv +deceiv +deceiv +deceivest +deceiveth +deceiv +decemb +decent +decepti +decern +decid +decid +decim +deciph +deciph +decis +deciu +deck +deck +deck +deckt +declar +declar +declens +declens +declin +declin +declin +declin +declin +decoct +decorum +decrea +decreas +decreas +decre +decre +decre +decrepit +dedic +dedic +dedic +dedic +deed +deedless +deed +deem +deem +deep +deeper +deepest +deepli +deep +deepvow +deer +deess +defac +defac +defac +defac +defac +defac +defam +default +defeat +defeat +defeat +defeatur +defect +defect +defect +defenc +defenc +defend +defend +defend +defend +defend +defend +defend +defens +defens +defens +defer +deferr +defianc +defici +defi +defi +defil +defil +defil +defil +defil +defin +defin +definit +definit +definit +deflow +deflow +deflow +deform +deform +deform +deform +deftli +defunct +defunct +defus +defi +defi +degener +degrad +degre +degre +deifi +deifi +deign +deign +deiphobu +deiti +deiti +deja +deject +deject +delabreth +delai +delai +delai +delai +delect +deliber +delic +delic +delici +delici +delight +delight +delight +delight +delinqu +deliv +deliv +deliver +deliv +deliv +deliv +deliveri +delpho +delud +delud +delug +delv +delver +delv +demand +demand +demand +demand +demean +demeanor +demeanour +demerit +demesn +demetriu +demi +demigod +demis +demoisel +demon +demonstr +demonstr +demonstr +demonstr +demonstr +demonstr +demur +demur +demur +den +denai +deni +denial +denial +deni +denier +deni +deniest +deni +denmark +denni +denni +denot +denot +denot +denounc +denounc +denounc +den +denunci +deni +deni +deo +depart +depart +departest +depart +departur +depech +depend +depend +depend +depend +depend +depend +depend +depend +depend +depend +depend +depend +deplor +deplor +depopul +depo +depos +depos +depos +depositari +deprav +deprav +deprav +deprav +deprav +depress +depriv +depriv +depth +depth +deput +deput +deput +deputi +deput +deputi +deracin +derbi +derceta +dere +derid +deris +deriv +deriv +deriv +deriv +deriv +deriv +derog +derog +derog +de +desartless +descant +descend +descend +descend +descend +descens +descent +descent +describ +describ +describ +descri +descript +descript +descri +desdemon +desdemona +desert +desert +deserv +deserv +deserv +deservedli +deserv +deserv +deserv +deservest +deserv +deserv +design +design +design +design +desir +desir +desir +desir +desir +desirest +desir +desir +desist +desk +desol +desol +desp +despair +despair +despair +despatch +desper +desper +desper +despi +despis +despis +despis +despiseth +despis +despit +despit +despoil +dest +destin +destin +destini +destini +destitut +destroi +destroi +destroy +destroy +destroi +destroi +destruct +destruct +det +detain +detain +detect +detect +detect +detect +detector +detect +detent +determin +determin +determin +determin +determin +determin +determin +detest +detest +detest +detest +detest +detract +detract +detract +deucalion +deuc +deum +deux +devant +devest +devic +devic +devil +devilish +devil +devi +devis +devis +devis +devis +devoid +devonshir +devot +devot +devot +devour +devour +devour +devour +devour +devout +devoutli +dew +dewberri +dewdrop +dewlap +dewlapp +dew +dewi +dexter +dexteri +dexter +di +diabl +diablo +diadem +dial +dialect +dialogu +dialogu +dial +diamet +diamond +diamond +dian +diana +diaper +dibbl +dic +dice +dicer +dich +dick +dicken +dickon +dicki +dictat +diction +dictynna +did +diddl +didest +dido +didst +die +di +diedst +di +diest +diet +diet +dieter +dieu +diff +differ +differ +differ +differ +differ +differ +differ +difficil +difficult +difficulti +difficulti +diffid +diffid +diffu +diffus +diffusest +dig +digest +digest +digest +digest +digg +dig +dighton +dignifi +dignifi +dignifi +digniti +digniti +digress +digress +digress +dig +digt +dilat +dilat +dilat +dilatori +dild +dildo +dilemma +dilemma +dilig +dilig +diluculo +dim +dimens +dimens +diminish +diminish +diminut +diminut +diminut +dimm +dim +dim +dimpl +dimpl +dim +din +dine +dine +diner +dine +ding +dine +dinner +dinner +dinnertim +dint +diom +diomed +diomed +dion +dip +dipp +dip +dip +dir +dire +direct +direct +direct +direct +direct +directitud +direct +directli +direct +dire +dire +direst +dirg +dirg +dirt +dirti +di +disabl +disabl +disabl +disabl +disadvantag +disagre +disallow +disanim +disannul +disannul +disappoint +disarm +disarm +disarmeth +disarm +disast +disast +disastr +disbench +disbranch +disburden +disbur +disburs +disburs +discandi +discandi +discard +discard +discas +discas +discern +discern +discern +discern +discern +discharg +discharg +discharg +discharg +discipl +discipl +disciplin +disciplin +disciplin +disciplin +disclaim +disclaim +disclaim +disclo +disclos +disclos +disclos +discolour +discolour +discolour +discomfit +discomfit +discomfitur +discomfort +discomfort +discommend +disconsol +discont +discont +discontentedli +discont +discont +discontinu +discontinu +discord +discord +discord +discours +discours +discours +discours +discours +discourtesi +discov +discov +discov +discover +discoveri +discov +discov +discoveri +discredit +discredit +discredit +discreet +discreetli +discret +discret +discuss +disdain +disdain +disdaineth +disdain +disdainfulli +disdain +disdain +disdnguish +disea +diseas +diseas +diseas +disedg +disembark +disfigur +disfigur +disfurnish +disgorg +disgrac +disgrac +disgrac +disgrac +disgrac +disgrac +disgraci +disgui +disguis +disguis +disguis +disguis +disguis +dish +dishabit +dishclout +dishearten +dishearten +dish +dishonest +dishonestli +dishonesti +dishonor +dishonor +dishonor +dishonour +dishonour +dishonour +dishonour +disinherit +disinherit +disjoin +disjoin +disjoin +disjoint +disjunct +dislik +dislik +disliken +dislik +dislimn +disloc +dislodg +disloy +disloyalti +dismal +dismantl +dismantl +dismask +dismai +dismai +dismemb +dismemb +dism +dismiss +dismiss +dismiss +dismiss +dismount +dismount +disnatur +disobedi +disobedi +disobei +disobei +disorb +disord +disord +disorderli +disord +disparag +disparag +disparag +dispark +dispatch +dispens +dispens +dispens +disper +dispers +dispers +dispersedli +dispers +dispit +displac +displac +displac +displant +displant +displai +displai +displea +displeas +displeas +displeas +displeasur +displeasur +dispong +disport +disport +dispo +dispos +dispos +dispos +dispos +disposit +disposit +dispossess +dispossess +disprai +disprais +disprais +dispraisingli +disproperti +disproport +disproport +disprov +disprov +disprov +dispurs +disput +disput +disput +disput +disput +disput +disput +disquant +disquiet +disquietli +disrelish +disrob +disseat +dissembl +dissembl +dissembl +dissembl +dissembl +dissembl +dissens +dissens +dissenti +dissev +dissip +dissolut +dissolut +dissolut +dissolut +dissolv +dissolv +dissolv +dissolv +dissuad +dissuad +distaff +distaff +distain +distain +distanc +distant +distast +distast +distast +distemp +distemp +distemperatur +distemperatur +distemp +distemp +distil +distil +distil +distil +distil +distil +distinct +distinct +distinctli +distingu +distinguish +distinguish +distinguish +distract +distract +distractedli +distract +distract +distract +distrain +distraught +distress +distress +distress +distress +distribut +distribut +distribut +distrust +distrust +disturb +disturb +disturb +disturb +disunit +disvalu +disvouch +dit +ditch +ditcher +ditch +dite +ditti +ditti +diurnal +div +dive +diver +diver +divers +divers +divert +divert +divert +dive +divest +divid +divid +divid +divid +divid +divideth +divin +divin +divin +divin +divin +divin +divin +divinest +divin +divin +divis +divis +divorc +divorc +divorc +divorc +divorc +divulg +divulg +divulg +divulg +dizi +dizzi +do +doat +dobbin +dock +dock +doct +doctor +doctor +doctrin +document +dodg +doe +doer +doer +doe +doest +doff +dog +dogberri +dogfish +dogg +dog +dog +doigt +do +do +doit +doit +dolabella +dole +dole +doll +dollar +dollar +dolor +dolor +dolour +dolour +dolphin +dolt +dolt +domest +domest +domin +domin +domin +domin +domin +domin +domin +dominion +dominion +domitiu +dommelton +don +donalbain +donat +donc +doncast +done +dong +donn +donn +donner +donnerai +doom +doomsdai +door +doorkeep +door +dorca +doreu +doricl +dormous +dorothi +dorset +dorsetshir +dost +dotag +dotant +dotard +dotard +dote +dote +doter +dote +doteth +doth +dote +doubl +doubl +doubl +doubler +doublet +doublet +doubl +doubli +doubt +doubt +doubt +doubtfulli +doubt +doubtless +doubt +doug +dough +doughti +doughi +dougla +dout +dout +dout +dove +dovehous +dover +dove +dow +dowag +dowdi +dower +dowerless +dower +dowla +dowl +down +downfal +downright +down +downstair +downtrod +downward +downward +downi +dowri +dowri +dowsabel +doxi +doze +dozen +dozen +dozi +drab +drab +drab +drachma +drachma +draff +drag +dragg +drag +drag +dragon +dragonish +dragon +drain +drain +drain +drake +dram +dramati +drank +draught +draught +drave +draw +drawbridg +drawer +drawer +draweth +draw +drawl +drawn +draw +drayman +draymen +dread +dread +dread +dreadfulli +dread +dread +dream +dreamer +dreamer +dream +dream +dreamt +drearn +dreari +dreg +dreg +drench +drench +dress +dress +dresser +dress +dress +drest +drew +dribbl +dri +drier +dri +drift +drili +drink +drinketh +drink +drink +drink +driv +drive +drivel +driven +drive +driveth +drive +drizzl +drizzl +drizzl +droit +drolleri +dromio +dromio +drone +drone +droop +droopeth +droop +droop +drop +dropheir +droplet +dropp +dropper +droppeth +drop +drop +drop +dropsi +dropsi +dropsi +dropt +dross +drossi +drought +drove +droven +drovier +drown +drown +drown +drown +drow +drows +drowsili +drowsi +drowsi +drudg +drudgeri +drudg +drug +drugg +drug +drum +drumbl +drummer +drum +drum +drunk +drunkard +drunkard +drunken +drunkenli +drunken +dry +dryness +dst +du +dub +dubb +ducat +ducat +ducdam +duchess +duchi +duchi +duck +duck +duck +dudgeon +due +duellist +duello +duer +due +duff +dug +dug +duke +dukedom +dukedom +duke +dulcet +dulch +dull +dullard +duller +dullest +dull +dull +dull +dulli +dul +duli +dumain +dumb +dumb +dumbl +dumb +dump +dump +dun +duncan +dung +dungeon +dungeon +dunghil +dunghil +dungi +dunnest +dunsinan +dunsmor +dunstabl +dupp +duranc +dure +durst +duski +dust +dust +dusti +dutch +dutchman +duteou +duti +duti +duti +dwarf +dwarfish +dwell +dweller +dwell +dwell +dwelt +dwindl +dy +dye +dy +dyer +dy +e +each +eager +eagerli +eager +eagl +eagl +ean +eanl +ear +ear +earl +earldom +earlier +earliest +earli +earl +earli +earn +earn +earnest +earnestli +earnest +earn +ear +earth +earthen +earthlier +earthli +earthquak +earthquak +earthi +ea +eas +eas +eas +eas +easier +easiest +easiliest +easili +easi +eas +east +eastcheap +easter +eastern +eastward +easi +eat +eaten +eater +eater +eat +eat +eaux +eav +ebb +eb +ebb +ebon +eboni +ebrew +ecc +echapp +echo +echo +eclip +eclips +eclips +ecoli +ecoutez +ecstaci +ecstasi +ecstasi +ecu +eden +edg +edgar +edg +edg +edgeless +edg +edict +edict +edific +edific +edifi +edifi +edit +edm +edmund +edmund +edmundsburi +educ +educ +educ +edward +eel +eel +effect +effect +effectless +effect +effectu +effectu +effemin +effigi +effu +effus +effus +eftest +egal +egal +eget +egeu +egg +egg +eggshel +eglamour +eglantin +egma +ego +egregi +egregi +egress +egypt +egyptian +egyptian +eie +eight +eighteen +eighth +eightpenni +eighti +eisel +either +eject +ek +el +elb +elbow +elbow +eld +elder +elder +eldest +eleanor +elect +elect +elect +eleg +elegi +element +element +eleph +eleph +elev +eleven +eleventh +elf +elflock +eliad +elinor +elizabeth +ell +ell +ellen +elm +eloqu +eloqu +els +elsewher +elsinor +eltham +elv +elvish +eli +elysium +em +embal +embalm +embalm +embark +embark +embarqu +embassad +embassag +embassi +embassi +embattail +embattl +embattl +embai +embellish +ember +emblaz +emblem +emblem +embodi +embold +embolden +emboss +emboss +embound +embowel +embowel +embrac +embrac +embrac +embrac +embrac +embrac +embrac +embrasur +embroid +embroideri +emhrac +emilia +emin +emin +emin +emmanuel +emniti +empal +emper +emperess +emperi +emperor +emperi +emphasi +empir +empir +empiricut +empleach +emploi +emploi +employ +employ +employ +empoison +empress +empti +emptier +empti +empti +empti +empti +emul +emul +emul +emul +emul +en +enact +enact +enact +enactur +enamel +enamel +enamour +enamour +enanmour +encamp +encamp +encav +enceladu +enchaf +enchaf +enchant +enchant +enchant +enchantingli +enchant +enchantress +enchant +encha +encircl +encircl +enclo +enclos +enclos +enclos +encloseth +enclos +encloud +encompass +encompass +encompasseth +encompass +encor +encorpor +encount +encount +encount +encount +encourag +encourag +encourag +encrimson +encroach +encumb +end +endamag +endamag +endang +endart +endear +endear +endeavour +endeavour +end +ender +end +end +endit +endless +endow +endow +endow +endow +end +endu +endu +endur +endur +endur +endur +endur +endur +endymion +enea +enemi +enemi +enerni +enew +enfeebl +enfeebl +enfeoff +enfett +enfold +enforc +enforc +enforc +enforcedli +enforc +enforc +enforcest +enfranch +enfranchi +enfranchis +enfranchis +enfranchis +enfre +enfreedom +engag +engag +engag +engag +engag +engaol +engend +engend +engend +engild +engin +engin +engin +engin +engirt +england +english +englishman +englishmen +englut +englut +engraf +engraft +engraft +engrav +engrav +engross +engross +engrossest +engross +engross +enguard +enigma +enigmat +enjoin +enjoin +enjoi +enjoi +enjoy +enjoi +enjoi +enkindl +enkindl +enlard +enlarg +enlarg +enlarg +enlarg +enlargeth +enlighten +enlink +enmesh +enmiti +enmiti +ennobl +ennobl +enobarb +enobarbu +enon +enorm +enorm +enough +enow +enpatron +enpierc +enquir +enquir +enquir +enrag +enrag +enrag +enrag +enrank +enrapt +enrich +enrich +enrich +enridg +enr +enrob +enrob +enrol +enrol +enroot +enround +enschedul +ensconc +ensconc +enseam +ensear +enseign +enseignez +ensembl +enshelt +enshield +enshrin +ensign +ensign +enski +ensman +ensnar +ensnar +ensnareth +ensteep +ensu +ensu +ensu +ensu +ensu +enswath +ent +entail +entam +entangl +entangl +entendr +enter +enter +enter +enterpris +enterpris +enter +entertain +entertain +entertain +entertain +entertain +entertain +enthral +enthral +enthron +enthron +entic +entic +entic +entir +entir +entitl +entitl +entitl +entomb +entomb +entrail +entranc +entranc +entrap +entrapp +entr +entreat +entreat +entreati +entreat +entreat +entreat +entreati +entrench +entri +entwist +envelop +envenom +envenom +envenom +envi +envi +enviou +envious +environ +environ +envoi +envi +envi +enwheel +enwomb +enwrap +ephesian +ephesian +ephesu +epicur +epicurean +epicur +epicur +epicuru +epidamnum +epidauru +epigram +epilepsi +epilept +epilogu +epilogu +epistl +epistrophu +epitaph +epitaph +epithet +epitheton +epithet +epitom +equal +equal +equal +equal +equal +equal +equal +equinocti +equinox +equipag +equiti +equivoc +equivoc +equivoc +equivoc +equivoc +er +erbear +erbear +erbear +erbeat +erblow +erboard +erborn +ercam +ercast +ercharg +ercharg +ercharg +ercl +ercom +ercov +ercrow +erdo +er +erebu +erect +erect +erect +erect +erect +erewhil +erflourish +erflow +erflow +erflow +erfraught +erga +ergal +erglanc +ergo +ergon +ergrow +ergrown +ergrowth +erhang +erhang +erhasti +erhear +erheard +eringo +erjoi +erleap +erleap +erleaven +erlook +erlook +ermast +ermengar +ermount +ern +ernight +ero +erpaid +erpart +erpast +erpai +erpeer +erperch +erpictur +erpingham +erpost +erpow +erpress +erpress +err +errand +errand +errant +errat +erraught +erreach +er +errest +er +erron +error +error +err +errul +errun +erset +ershad +ershad +ershin +ershot +ersiz +erskip +erslip +erspread +erst +erstar +erstep +erstunk +erswai +erswai +erswel +erta +ertak +erteem +erthrow +erthrown +erthrow +ertook +ertop +ertop +ertrip +erturn +erudit +erupt +erupt +ervalu +erwalk +erwatch +erween +erween +erweigh +erweigh +erwhelm +erwhelm +erworn +es +escalu +escap +escap +escap +escap +eschew +escot +esil +especi +especi +esper +espial +espi +espi +espou +espous +espi +esquir +esquir +essai +essai +essenc +essenti +essenti +ess +essex +est +establish +establish +estat +estat +esteem +esteem +esteemeth +esteem +esteem +estim +estim +estim +estim +estim +estrang +estridg +estridg +et +etc +etcetera +et +etern +etern +etern +etern +eterniz +et +ethiop +ethiop +ethiop +ethiopian +etna +eton +etr +eunuch +eunuch +euphrat +euphroniu +euriphil +europa +europ +ev +evad +evad +evan +evas +evas +ev +even +even +evenli +event +event +event +ever +everlast +everlastingli +evermor +everi +everyon +everyth +everywher +evid +evid +evid +evil +evilli +evil +evit +ew +ewer +ewer +ew +exact +exact +exactest +exact +exact +exact +exactli +exact +exalt +exalt +examin +examin +examin +examin +examin +examin +exampl +exampl +exampl +exampl +exasper +exasper +exce +exceed +exceedeth +exceed +exceedingli +exce +excel +excel +excel +excel +excel +excel +excel +excel +excel +except +except +except +except +except +exceptless +excess +excess +exchang +exchang +exchang +exchequ +exchequ +excit +excit +excit +excit +exclaim +exclaim +exclam +exclam +exclud +excommun +excommun +excrement +excrement +excurs +excurs +excu +excus +excus +excus +excus +excusez +excus +execr +execr +execut +execut +execut +execut +execution +execution +executor +executor +exempt +exempt +exequi +exercis +exercis +exet +exeunt +exhal +exhal +exhal +exhal +exhal +exhaust +exhibit +exhibit +exhibit +exhort +exhort +exig +exil +exil +exil +exion +exist +exist +exit +exit +exorcis +exorc +exorcist +expect +expect +expect +expect +expect +expect +expect +expect +expect +expedi +expedi +expedi +expedit +expediti +expel +expel +expel +expel +expend +expens +expens +experienc +experi +experi +experi +experiment +experi +expert +expert +expiat +expiat +expir +expir +expir +expir +expir +expir +explic +exploit +exploit +expo +expos +expos +exposit +expositor +expostul +expostul +expostur +exposur +expound +expound +express +express +expresseth +express +express +expressli +expressur +expul +expuls +exquisit +exsuffl +extant +extempor +extempor +extempor +extend +extend +extend +extent +extenu +extenu +extenu +extenu +exterior +exteriorli +exterior +extermin +extern +extern +extinct +extinct +extinctur +extinguish +extirp +extirp +extirp +extol +extol +extol +exton +extort +extort +extort +extort +extra +extract +extract +extract +extraordinarili +extraordinari +extraught +extravag +extravag +extrem +extrem +extrem +extremest +extrem +extrem +exuent +exult +exult +ey +eya +eyas +ey +eyebal +eyebal +eyebrow +eyebrow +ei +eyeless +eyelid +eyelid +ey +eyesight +eyestr +ei +eyn +eyri +fa +fabian +fabl +fabl +fabric +fabul +fac +face +face +facer +face +faciant +facil +facil +facineri +face +facit +fact +faction +factionari +faction +factiou +factor +factor +faculti +faculti +fade +fade +fadeth +fadg +fade +fade +fadom +fadom +fagot +fagot +fail +fail +fail +fain +faint +faint +fainter +faint +faintli +faint +faint +fair +fairer +fairest +fairi +fair +fair +fairli +fair +fair +fairwel +fairi +fai +fait +fait +faith +faith +faithful +faithfulli +faithless +faith +faitor +fal +falchion +falcon +falconbridg +falcon +falcon +fall +fallaci +fallen +falleth +falliabl +fallibl +fall +fallow +fallow +fall +falli +falor +fals +falsehood +fals +fals +falser +falsifi +fals +falstaff +falstaff +falter +fam +fame +fame +familiar +familiar +familiarli +familiar +famili +famin +famish +famish +famou +famous +famous +fan +fanat +fanci +fanci +fane +fane +fang +fangl +fangless +fang +fann +fan +fan +fantasi +fantasi +fantast +fantast +fantast +fantastico +fantasi +fap +far +farborough +farc +fardel +fardel +fare +fare +farewel +farewel +farin +fare +farm +farmer +farmhous +farm +farr +farrow +farther +farthest +farth +farthingal +farthingal +farth +fartuou +fa +fashion +fashion +fashion +fashion +fast +fast +fasten +fasten +faster +fastest +fast +fastli +fastolf +fast +fat +fatal +fatal +fate +fate +fate +father +father +fatherless +fatherli +father +fathom +fathomless +fathom +fatig +fat +fat +fat +fatter +fattest +fat +fatuu +fauconbridg +faulconbridg +fault +faulti +faultless +fault +faulti +fauss +faust +faustus +faut +favor +favor +favor +favor +favour +favour +favour +favouredli +favour +favour +favour +favourit +favourit +favour +favout +fawn +fawneth +fawn +fawn +fai +fe +fealti +fear +fear +fearest +fear +fearful +fearfulli +fear +fear +fearless +fear +feast +feast +feast +feast +feat +feat +feater +feather +feather +feather +featli +feat +featur +featur +featur +featureless +featur +februari +feck +fed +fedari +federari +fee +feebl +feebl +feebl +feebl +feebli +feed +feeder +feeder +feedeth +feed +feed +feel +feeler +feel +feelingli +feel +fee +feet +fehement +feign +feign +feign +feil +feith +felicit +felic +fell +fellest +felli +fellow +fellowli +fellow +fellowship +fellowship +fell +felon +feloni +feloni +felt +femal +femal +feminin +fen +fenc +fenc +fencer +fenc +fend +fennel +fenni +fen +fenton +fer +ferdinand +fere +fernse +ferrara +ferrer +ferret +ferri +ferryman +fertil +fertil +fervenc +fervour +feri +fest +fest +fester +festin +festin +festiv +festiv +fet +fetch +fetch +fetch +fetlock +fetlock +fett +fetter +fetter +fetter +fettl +feu +feud +fever +fever +fever +few +fewer +fewest +few +fickl +fickl +fico +fiction +fiddl +fiddler +fiddlestick +fidel +fidelicet +fidel +fidiu +fie +field +field +field +fiend +fiend +fierc +fierc +fierc +fieri +fife +fife +fifteen +fifteen +fifteenth +fifth +fifti +fiftyfold +fig +fight +fighter +fightest +fighteth +fight +fight +figo +fig +figur +figur +figur +figur +figur +fike +fil +filbert +filch +filch +filch +file +file +file +filial +filiu +fill +fill +fillet +fill +fillip +fill +filli +film +fil +filth +filth +filthi +fin +final +finch +find +finder +findeth +find +find +find +fine +fineless +fine +finem +fine +finer +fine +finest +fing +finger +finger +finger +fingr +fingr +finic +finish +finish +finish +finless +finn +fin +finsburi +fir +firago +fire +firebrand +firebrand +fire +fire +firework +firework +fire +firk +firm +firmament +firmli +firm +first +firstl +fish +fisher +fishermen +fisher +fish +fishifi +fishmong +fishpond +fisnomi +fist +fist +fist +fistula +fit +fitchew +fit +fitli +fitment +fit +fit +fit +fitter +fittest +fitteth +fit +fitzwat +five +fivep +five +fix +fix +fix +fixeth +fix +fixtur +fl +flag +flag +flagon +flagon +flag +flail +flake +flaki +flam +flame +flamen +flamen +flame +flame +flaminiu +flander +flannel +flap +flare +flash +flash +flash +flask +flat +flatli +flat +flat +flatt +flatter +flatter +flatter +flatter +flatterest +flatteri +flatter +flatter +flatteri +flaunt +flavio +flaviu +flaw +flaw +flax +flaxen +flai +flai +flea +fleanc +flea +fleck +fled +fledg +flee +fleec +fleec +fleec +fleer +fleer +fleer +fleet +fleeter +fleet +fleme +flemish +flesh +flesh +fleshli +fleshment +fleshmong +flew +flexibl +flexur +flibbertigibbet +flicker +flidg +flier +fli +flieth +flight +flight +flighti +flinch +fling +flint +flint +flinti +flirt +float +float +float +flock +flock +flood +floodgat +flood +floor +flora +florenc +florentin +florentin +florentiu +florizel +flote +floulish +flour +flourish +flourish +flourisheth +flourish +flout +flout +flout +flout +flow +flow +flower +floweret +flower +flow +flown +flow +fluellen +fluent +flung +flush +flush +fluster +flute +flute +flutter +flux +fluxiv +fly +fly +fo +foal +foal +foam +foam +foam +foam +foami +fob +foc +fodder +foe +foeman +foemen +foe +fog +foggi +fog +foh +foi +foil +foil +foil +foin +foin +foin +foi +foison +foison +foist +foix +fold +fold +fold +folio +folk +folk +folli +follow +follow +follow +follow +followest +follow +follow +folli +fond +fonder +fondli +fond +font +fontibel +food +fool +fooleri +fooleri +foolhardi +fool +foolish +foolishli +foolish +fool +foot +footbal +footboi +footboi +foot +footfal +foot +footman +footmen +footpath +footstep +footstool +fopp +fop +fopperi +foppish +fop +for +forag +forag +forbad +forbear +forbear +forbear +forbid +forbidden +forbiddenli +forbid +forbod +forborn +forc +forc +forc +forc +forceless +forc +forcibl +forcibl +forc +ford +fordid +fordo +fordo +fordon +fore +forecast +forefath +forefath +forefing +forego +foregon +forehand +forehead +forehead +forehors +foreign +foreign +foreign +foreknow +foreknowledg +foremost +forenam +forenoon +forerun +forerunn +forerun +forerun +foresaid +foresaw +foresai +forese +forese +forese +foreshow +foreskirt +foresp +forest +forestal +forestal +forest +forest +forest +foretel +foretel +foretel +forethink +forethought +foretold +forev +foreward +forewarn +forewarn +forewarn +forfeit +forfeit +forfeit +forfeit +forfeit +forfeitur +forfeitur +forfend +forfend +forg +forgav +forg +forg +forgeri +forgeri +forg +forget +forget +forget +forget +forget +forget +forgiv +forgiven +forgiv +forgo +forgo +forgon +forgot +forgotten +fork +fork +fork +forlorn +form +formal +formal +form +former +formerli +formless +form +fornic +fornic +fornicatress +forr +forrest +forsak +forsaken +forsaketh +forslow +forsook +forsooth +forspent +forspok +forswear +forswear +forswor +forsworn +fort +fort +forth +forthcom +forthlight +forthright +forthwith +fortif +fortif +fortifi +fortifi +fortifi +fortinbra +fortitud +fortnight +fortress +fortress +fort +fortun +fortuna +fortun +fortun +fortun +fortun +fortun +fortward +forti +forum +forward +forward +forward +forward +forweari +fosset +fost +foster +foster +fought +foughten +foul +fouler +foulest +foulli +foul +found +foundat +foundat +found +founder +fount +fountain +fountain +fount +four +fourscor +fourteen +fourth +foutra +fowl +fowler +fowl +fowl +fox +fox +foxship +fract +fraction +fraction +fragil +fragment +fragment +fragrant +frail +frailer +frailti +frailti +fram +frame +frame +frame +frampold +fran +francai +franc +franc +franchis +franchis +franchis +franchis +francia +franci +francisca +franciscan +francisco +frank +franker +frankfort +franklin +franklin +frankli +frank +frantic +franticli +frateretto +fratrum +fraud +fraud +fraught +fraughtag +fraught +frai +frai +freckl +freckl +freckl +frederick +free +freed +freedom +freedom +freeheart +freelier +freeli +freeman +freemen +freeness +freer +free +freeston +freetown +freez +freez +freez +freez +french +frenchman +frenchmen +frenchwoman +frenzi +frequent +frequent +fresh +fresher +fresh +freshest +freshli +fresh +fret +fret +fret +fret +fretten +fret +friar +friar +fridai +fridai +friend +friend +friend +friendless +friendli +friendli +friend +friendship +friendship +friez +fright +fright +frighten +fright +fright +fright +fring +fring +fripperi +frisk +fritter +frivol +fro +frock +frog +frogmor +froissart +frolic +from +front +front +frontier +frontier +front +frontlet +front +frost +frost +frosti +froth +froward +frown +frown +frowningli +frown +froze +frozen +fructifi +frugal +fruit +fruiter +fruit +fruitfulli +fruit +fruition +fruitless +fruit +frush +frustrat +frutifi +fry +fubb +fuel +fugit +fulfil +fulfil +fulfil +fulfil +full +fullam +fuller +fuller +fullest +full +fulli +ful +fulsom +fulvia +fum +fumbl +fumbl +fumblest +fumbl +fume +fume +fume +fumit +fumitori +fun +function +function +fundament +funer +funer +fur +furbish +furi +furiou +furlong +furnac +furnac +furnish +furnish +furnish +furnitur +furniv +furor +furr +furrow +furrow +furrow +furth +further +further +further +furthermor +furthest +furi +furz +furz +fust +fustian +fustilarian +fusti +fut +futur +futur +g +gabbl +gaberdin +gabriel +gad +gad +gad +gadshil +gag +gage +gage +gagg +gage +gagn +gain +gain +gainer +gaingiv +gain +gainsaid +gainsai +gainsai +gainsai +gainst +gait +gait +galath +gale +galen +gale +gall +gallant +gallantli +gallantri +gallant +gall +galleri +gallei +gallei +gallia +gallian +galliard +galliass +gallimaufri +gall +gallon +gallop +gallop +gallop +gallow +gallowai +gallowglass +gallow +gallows +gall +gallu +gam +gambol +gambold +gambol +gamboi +game +gamer +game +gamesom +gamest +game +gammon +gamut +gan +gangren +ganymed +gaol +gaoler +gaoler +gaol +gap +gape +gape +gape +gar +garb +garbag +garboil +garcon +gard +gard +garden +garden +garden +garden +gardez +gardin +gardon +gargantua +gargrav +garish +garland +garland +garlic +garment +garment +garmet +garner +garner +garnish +garnish +garret +garrison +garrison +gart +garter +garterd +garter +garter +gasconi +gash +gash +gaskin +gasp +gasp +gast +gast +gat +gate +gate +gate +gath +gather +gather +gather +gather +gatori +gatori +gaud +gaudeo +gaudi +gaug +gaul +gaultre +gaunt +gauntlet +gauntlet +gav +gave +gavest +gawd +gawd +gawsei +gai +gay +gaz +gaze +gaze +gazer +gazer +gaze +gazeth +gaze +gear +geck +gees +geffrei +geld +geld +geld +gelida +gelidu +gelt +gem +gemini +gem +gen +gender +gender +gener +gener +gener +gener +gener +gener +generos +gener +genit +genitivo +geniu +gennet +genoa +genoux +gen +gent +gentilhomm +gentil +gentl +gentlefolk +gentleman +gentlemanlik +gentlemen +gentl +gentler +gentl +gentlest +gentlewoman +gentlewomen +gentli +gentri +georg +gerard +germain +germain +german +german +german +germani +gertrud +gest +gest +gestur +gestur +get +getrud +get +getter +get +ghastli +ghost +ghost +ghostli +ghost +gi +giant +giantess +giantlik +giant +gib +gibber +gibbet +gibbet +gibe +giber +gibe +gibe +gibingli +giddili +giddi +giddi +gift +gift +gig +giglet +giglot +gilbert +gild +gild +gild +gilliam +gillian +gill +gillyvor +gilt +gimmal +gimmer +gin +ging +ginger +gingerbread +gingerli +ginn +gin +gioucestershir +gipe +gipsi +gipsi +gird +gird +girdl +girdl +girdl +girdl +girl +girl +girt +girth +gi +giv +give +given +giver +giver +give +givest +giveth +give +give +glad +glad +glad +gladli +glad +glami +glanc +glanc +glanc +glanc +glanc +glander +glansdal +glare +glare +glass +glass +glassi +glaz +glaze +gleam +glean +glean +glean +gleeful +gleek +gleek +gleek +glend +glendow +glib +glide +glide +glide +glideth +glide +glimmer +glimmer +glimmer +glimps +glimps +glist +glisten +glister +glister +glister +glitt +glitter +globe +globe +gloom +gloomi +glori +glorifi +glorifi +gloriou +glorious +glori +glose +gloss +gloss +glou +gloucest +gloucest +gloucestershir +glove +glover +glove +glow +glow +glow +glowworm +gloz +gloze +gloze +glu +glue +glu +glue +glut +glutt +glut +glutton +glutton +gluttoni +gnarl +gnarl +gnat +gnat +gnaw +gnaw +gnawn +gnaw +go +goad +goad +goad +goal +goat +goatish +goat +gobbet +gobbo +goblet +goblet +goblin +goblin +god +god +godden +goddess +goddess +goddild +godfath +godfath +godhead +godlik +godli +godli +godmoth +god +godson +goer +goer +goe +goest +goeth +goff +gog +go +gold +golden +goldenli +goldsmith +goldsmith +golgotha +golias +goliath +gon +gondola +gondoli +gone +goneril +gong +gonzago +gonzalo +good +goodfellow +goodlier +goodliest +goodli +goodman +good +goodnight +goodrig +good +goodwif +goodwil +goodwin +goodwin +goodyear +goodyear +goos +gooseberri +goosequil +goot +gor +gorbelli +gorboduc +gordian +gore +gore +gorg +gorg +gorgeou +gorget +gorg +gorgon +gormand +gormand +gori +gosl +gospel +gospel +goss +gossam +gossip +gossip +gossiplik +gossip +got +goth +goth +gotten +gourd +gout +gout +gouti +govern +govern +govern +gover +govern +governor +governor +govern +gower +gown +gown +grac +grace +grace +grace +gracefulli +graceless +grace +grace +graciou +gracious +gradat +graff +graf +graft +graft +grafter +grain +grain +grain +gramerci +gramerci +grammar +grand +grandam +grandam +grandchild +grand +grandeur +grandfath +grandjuror +grandmoth +grandpr +grandsir +grandsir +grandsir +grang +grant +grant +grant +grant +grape +grape +grappl +grappl +grappl +grasp +grasp +grasp +grass +grasshopp +grassi +grate +grate +grate +grate +gratiano +gratifi +gratii +gratil +grate +grati +gratitud +gratul +grav +grave +gravedigg +gravel +graveless +gravel +grave +graven +grave +graver +grave +gravest +graveston +graviti +graviti +gravi +grai +graymalkin +graz +graze +graze +graze +greas +greas +greasili +greasi +great +greater +greatest +greatli +great +grecian +grecian +gree +greec +greed +greedili +greedi +greedi +gree +greek +greekish +greek +green +greener +greenli +green +greensleev +greenwich +greenwood +greet +greet +greet +greet +greet +greg +gregori +gremio +grew +grei +greybeard +greybeard +greyhound +greyhound +grief +grief +griev +grievanc +grievanc +griev +griev +griev +grievest +griev +grievingli +grievou +grievous +griffin +griffith +grim +grime +grimli +grin +grind +grind +grindston +grin +grip +gripe +gripe +gripe +grise +grisli +grissel +grize +grizzl +grizzl +groan +groan +groan +groat +groat +groin +groom +groom +grop +grope +gro +gross +grosser +grossli +gross +ground +ground +groundl +ground +grove +grovel +grovel +grove +grow +groweth +grow +grown +grow +growth +grub +grubb +grub +grudg +grudg +grudg +grudg +gruel +grumbl +grumblest +grumbl +grumbl +grumio +grund +grunt +gualtier +guard +guardag +guardant +guard +guardian +guardian +guard +guardsman +gud +gudgeon +guerdon +guerra +guess +guess +guessingli +guest +guest +guiana +guichard +guid +guid +guider +guideriu +guid +guid +guidon +guienn +guil +guildenstern +guilder +guildford +guildhal +guil +guil +guil +guilford +guilt +guiltian +guiltier +guiltili +guilti +guiltless +guilt +guilti +guinea +guinev +guis +gul +gule +gulf +gulf +gull +gull +gum +gumm +gum +gun +gunner +gunpowd +gun +gurnet +gurnei +gust +gust +gusti +gut +gutter +gui +guyn +guysor +gypsi +gyve +gyve +gyve +h +ha +haberdash +habili +habili +habit +habit +habit +habit +habitud +hack +hacket +hacknei +hack +had +hadst +haec +haer +hag +hagar +haggard +haggard +haggish +haggl +hag +hail +hail +hailston +hailston +hair +hairless +hair +hairi +hal +halberd +halberd +halcyon +hale +hale +hale +half +halfcan +halfpenc +halfpenni +halfpennyworth +halfwai +halidom +hall +halloa +hallo +hallond +halloo +halloo +hallow +hallow +hallowma +hallown +hal +halt +halter +halter +halt +halt +halv +ham +hame +hamlet +hammer +hammer +hammer +hammer +hamper +hampton +ham +hamstr +hand +hand +hand +handicraft +handicraftsmen +hand +handiwork +handkerch +handkerch +handkerchief +handl +handl +handl +handless +handlest +handl +handmaid +handmaid +hand +handsaw +handsom +handsom +handsom +handwrit +handi +hang +hang +hanger +hangeth +hang +hang +hangman +hangmen +hang +hannib +hap +hapless +hapli +happ +happen +happen +happier +happi +happiest +happili +happi +happi +hap +harbing +harbing +harbor +harbour +harbourag +harbour +harbour +harcourt +hard +harder +hardest +hardiest +hardiment +hardi +hardli +hard +hardock +hardi +hare +harelip +hare +harfleur +hark +harlot +harlotri +harlot +harm +harm +harm +harm +harmless +harmoni +harmoni +harm +har +harp +harper +harpier +harp +harpi +harri +harrow +harrow +harri +harsh +harshli +harsh +hart +hart +harum +harvest +ha +hast +hast +hast +hasten +hast +hastili +hast +hast +hasti +hat +hatch +hatch +hatchet +hatch +hatchment +hate +hate +hate +hater +hater +hate +hateth +hatfield +hath +hate +hatr +hat +haud +hauf +haught +haughti +haughti +haunch +haunch +haunt +haunt +haunt +haunt +hautboi +hautboi +have +haven +haven +haver +have +have +havior +haviour +havoc +hawk +hawk +hawk +hawthorn +hawthorn +hai +hazard +hazard +hazard +hazel +hazelnut +he +head +headborough +head +headier +head +headland +headless +headlong +head +headsman +headstrong +headi +heal +heal +heal +heal +health +health +health +healthsom +healthi +heap +heap +heap +hear +heard +hearer +hearer +hearest +heareth +hear +hear +heark +hearken +hearken +hear +hearsai +hears +hears +hearst +heart +heartach +heartbreak +heartbreak +heart +hearten +hearth +hearth +heartili +hearti +heartless +heartl +heartli +heart +heartsick +heartstr +hearti +heat +heat +heath +heathen +heathenish +heat +heat +heauti +heav +heav +heav +heaven +heavenli +heaven +heav +heavier +heaviest +heavili +heavi +heav +heav +heavi +hebona +hebrew +hecat +hectic +hector +hector +hecuba +hedg +hedg +hedgehog +hedgehog +hedg +heed +heed +heed +heedful +heedfulli +heedless +heel +heel +heft +heft +heifer +heifer +heigh +height +heighten +heinou +heinous +heir +heiress +heirless +heir +held +helen +helena +helenu +helia +helicon +hell +hellespont +hellfir +hellish +helm +helm +helmet +helmet +helm +help +helper +helper +help +help +helpless +help +helter +hem +heme +hemlock +hemm +hemp +hempen +hem +hen +henc +henceforth +henceforward +henchman +henri +henricu +henri +hen +hent +henton +her +herald +heraldri +herald +herb +herbert +herblet +herb +herculean +hercul +herd +herd +herdsman +herdsmen +here +hereabout +hereabout +hereaft +herebi +hereditari +hereford +herefordshir +herein +hereof +heresi +heresi +heret +heret +hereto +hereupon +heritag +heriti +herm +hermia +hermion +hermit +hermitag +hermit +hern +hero +herod +herod +hero +heroic +heroic +her +her +her +herself +hesperid +hesperu +hest +hest +heur +heureux +hew +hewgh +hew +hewn +hew +hei +heydai +hibocr +hic +hiccup +hick +hid +hidden +hide +hideou +hideous +hideous +hide +hidest +hide +hie +hi +hiem +hi +hig +high +higher +highest +highli +highmost +high +hight +highwai +highwai +hild +hild +hill +hillo +hilloa +hill +hilt +hilt +hili +him +himself +hinc +hincklei +hind +hinder +hinder +hinder +hindmost +hind +hing +hing +hing +hint +hip +hipp +hipparchu +hippolyta +hip +hir +hire +hire +hiren +hirtiu +hi +hisperia +hiss +hiss +hiss +hist +histor +histori +hit +hither +hitherto +hitherward +hitherward +hit +hit +hive +hive +hizz +ho +hoa +hoar +hoard +hoard +hoard +hoar +hoars +hoari +hob +hobbidid +hobbi +hobbyhors +hobgoblin +hobnail +hoc +hod +hodg +hog +hog +hogshead +hogshead +hoi +hois +hoist +hoist +hoist +holborn +hold +holden +holder +holdeth +holdfast +hold +hold +hole +hole +holidam +holidam +holidai +holidai +holier +holiest +holili +holi +holla +holland +holland +holland +holloa +holloa +hollow +hollowli +hollow +holli +holmedon +holofern +holp +holi +homag +homag +home +home +home +homespun +homeward +homeward +homicid +homicid +homili +hominem +homm +homo +honest +honest +honestest +honestli +honesti +honei +honeycomb +honei +honeyless +honeysuckl +honeysuckl +honi +honneur +honor +honor +honor +honorato +honorificabilitudinitatibu +honor +honour +honour +honour +honour +honourest +honour +honour +honour +hoo +hood +hood +hoodman +hood +hoodwink +hoof +hoof +hook +hook +hook +hoop +hoop +hoot +hoot +hoot +hoot +hop +hope +hope +hopeless +hope +hopest +hope +hopkin +hopped +hor +horac +horatio +horizon +horn +hornbook +horn +horner +horn +hornpip +horn +horolog +horribl +horribl +horrid +horrid +horridli +horror +horror +hor +hors +horseback +hors +horsehair +horseman +horsemanship +horsemen +hors +horsewai +hors +hortensio +hortensiu +horum +hose +hospit +hospit +hospit +host +hostag +hostag +hostess +hostil +hostil +hostiliu +host +hot +hotli +hotspur +hotter +hottest +hound +hound +hour +hourli +hour +hou +hous +household +household +household +household +housekeep +housekeep +housekeep +houseless +hous +housewif +housewiferi +housew +hovel +hover +hover +hover +hover +how +howbeit +how +howeer +howev +howl +howl +howlet +howl +howl +howso +howsoev +howsom +hox +hoi +hoydai +hubert +huddl +huddl +hue +hu +hue +hug +huge +huge +huge +hugg +hugger +hugh +hug +huju +hulk +hulk +hull +hull +hullo +hum +human +human +human +human +humbl +humbl +humbl +humbler +humbl +humblest +humbl +humbl +hume +humh +humid +humil +hum +humor +humor +humor +humour +humourist +humour +humphrei +humphri +hum +hundr +hundr +hundredth +hung +hungarian +hungari +hunger +hungerford +hungerli +hungri +hunt +hunt +hunter +hunter +hunteth +hunt +huntington +huntress +hunt +huntsman +huntsmen +hurdl +hurl +hurl +hurl +hurli +hurlyburli +hurricano +hurricano +hurri +hurri +hurri +hurt +hurt +hurtl +hurtless +hurtl +hurt +husband +husband +husbandless +husbandri +husband +hush +hush +husht +husk +huswif +huswif +hutch +hybla +hydra +hyen +hymen +hymenaeu +hymn +hymn +hyperbol +hyperbol +hyperion +hypocrisi +hypocrit +hypocrit +hyrcan +hyrcania +hyrcanian +hyssop +hysterica +i +iachimo +iaculi +iago +iament +ibat +icaru +ic +iceland +ici +icicl +icicl +ici +idea +idea +idem +iden +id +idiot +idiot +idl +idl +idl +idli +idol +idolatr +idolatri +ield +if +if +igni +ignobl +ignobl +ignomini +ignomini +ignomi +ignor +ignor +ii +iii +iiii +il +ilbow +ild +ilion +ilium +ill +illegitim +illiter +ill +illo +ill +illum +illumin +illumin +illumineth +illus +illus +illustr +illustr +illustri +illyria +illyrian +il +im +imag +imageri +imag +imagin +imaginari +imagin +imagin +imagin +imagin +imagin +imbar +imbecil +imbru +imitari +imit +imit +imit +imit +immacul +imman +immask +immateri +immediaci +immedi +immedi +immin +immin +immoder +immoder +immodest +immoment +immort +immortaliz +immort +immur +immur +immur +imogen +imp +impaint +impair +impair +impal +impal +impanel +impart +impart +imparti +impart +impart +impast +impati +impati +impati +impawn +impeach +impeach +impeach +impeach +imped +impedi +impedi +impenetr +imper +imperceiver +imperfect +imperfect +imperfect +imperfectli +imperi +imperi +imperi +impertin +impertin +impetico +impetuos +impetu +impieti +impieti +impiou +implac +implement +impli +implor +implor +implor +implor +implor +impon +import +import +import +import +importantli +import +importeth +import +importless +import +importun +importunaci +importun +importun +importun +importun +impo +impos +impos +imposit +imposit +imposs +imposs +imposs +imposthum +impostor +impostor +impot +impot +impound +impregn +impres +impress +impress +impressest +impress +impressur +imprimendum +imprimi +imprint +imprint +imprison +imprison +imprison +imprison +improb +improp +improv +improvid +impud +impud +impud +impud +impudiqu +impugn +impugn +impur +imput +imput +in +inaccess +inaid +inaud +inauspici +incag +incant +incap +incardin +incarnadin +incarn +incarn +incen +incens +incens +incens +incens +incens +incertain +incertainti +incertainti +incess +incessantli +incest +incestu +inch +incharit +inch +incid +incid +incis +incit +incit +incivil +incivil +inclin +inclin +inclin +inclin +inclin +inclin +inclin +inclip +includ +includ +includ +inclus +incompar +incomprehens +inconsider +inconst +inconst +incontin +incontin +incontin +inconveni +inconveni +inconveni +inconi +incorpor +incorp +incorrect +increa +increas +increas +increaseth +increas +incred +incredul +incur +incur +incurr +incur +incurs +ind +ind +indebt +inde +indent +indent +indentur +indentur +index +index +india +indian +indict +indict +indict +indi +indiffer +indiffer +indiffer +indig +indigest +indigest +indign +indign +indign +indign +indign +indign +indirect +indirect +indirect +indirectli +indiscreet +indiscret +indispo +indisposit +indissolubl +indistinct +indistinguish +indistinguish +indit +individ +indrench +indu +indubit +induc +induc +induc +induc +induct +induct +indu +indu +indu +indulg +indulg +indulg +indur +industri +industri +industri +inequ +inestim +inevit +inexecr +inexor +inexplic +infal +infal +infamon +infam +infami +infanc +infant +infant +infect +infect +infect +infect +infect +infecti +infecti +infect +infer +infer +inferior +inferior +infern +inferr +inferreth +infer +infest +infidel +infidel +infinit +infinit +infinit +infirm +infirm +infirm +infix +infix +inflam +inflam +inflam +inflamm +inflict +inflict +influenc +influenc +infold +inform +inform +inform +inform +inform +inform +inform +infortun +infr +infring +infring +infu +infus +infus +infus +infus +ingen +ingeni +ingeni +inglori +ingot +ingraf +ingraft +ingrat +ingrat +ingrat +ingratitud +ingratitud +ingredi +ingredi +ingross +inhabit +inhabit +inhabit +inhabit +inhabit +inhears +inhears +inher +inherit +inherit +inherit +inherit +inheritor +inheritor +inheritrix +inherit +inhibit +inhibit +inhoop +inhuman +iniqu +iniqu +initi +injoint +injunct +injunct +injur +injur +injur +injuri +injuri +injuri +injustic +ink +inkhorn +inkl +inkl +inkl +inki +inlaid +inland +inlai +inli +inmost +inn +inner +innkeep +innoc +innoc +innoc +innoc +innov +innov +inn +innumer +inocul +inordin +inprimi +inquir +inquir +inquiri +inquisit +inquisit +inroad +insan +insani +insati +insconc +inscrib +inscript +inscript +inscrol +inscrut +insculp +insculptur +insens +insepar +insepar +insert +insert +inset +inshel +inshipp +insid +insinew +insinu +insinuateth +insinu +insinu +insist +insist +insistur +insoci +insol +insol +insomuch +inspir +inspir +inspir +inspir +inspir +instal +instal +instal +instanc +instanc +instant +instantli +instat +instead +insteep +instig +instig +instig +instig +instig +instinct +instinct +institut +institut +instruct +instruct +instruct +instruct +instruct +instrument +instrument +instrument +insubstanti +insuffici +insuffici +insult +insult +insult +insult +insult +insupport +insuppress +insurrect +insurrect +int +integ +integrita +integr +intellect +intellect +intellectu +intellig +intelligenc +intelligenc +intellig +intelligi +intelligo +intemper +intemper +intend +intend +intendeth +intend +intend +intend +inten +intent +intent +intent +intent +inter +intercept +intercept +intercept +intercept +intercept +intercess +intercessor +interchain +interchang +interchang +interchang +interchang +interchang +interdict +interest +interim +interim +interior +interject +interjoin +interlud +intermingl +intermiss +intermiss +intermit +intermix +intermix +interpos +interpos +interpos +interpret +interpret +interpret +interpret +interpret +interpret +interr +inter +interrogatori +interrupt +interrupt +interrupt +interruptest +interrupt +interrupt +intertissu +intervallum +interview +intest +intestin +intil +intim +intim +intitl +intitul +into +intoler +intox +intreasur +intreat +intrench +intrench +intric +intrins +intrins +intrud +intrud +intrud +intrus +inund +inur +inurn +invad +invad +invas +invas +invect +invect +inveigl +invent +invent +invent +invent +inventor +inventori +inventori +inventor +inventori +inver +invert +invest +invest +invest +invest +inveter +invinc +inviol +invis +invis +invit +invit +invit +invit +invit +inviti +invoc +invoc +invok +invok +invulner +inward +inwardli +inward +inward +ionia +ionian +ips +ipswich +ira +ira +ira +ir +ir +ireland +iri +irish +irishman +irishmen +irk +irksom +iron +iron +irreconcil +irrecover +irregular +irregul +irreligi +irremov +irrepar +irresolut +irrevoc +is +isabel +isabella +isbel +isbel +iscariot +is +ish +isidor +isi +island +island +island +island +isl +isl +israel +issu +issu +issu +issueless +issu +issu +ist +ista +it +italian +itali +itch +itch +itch +item +item +iter +ithaca +it +itself +itshal +iv +ivori +ivi +iwi +ix +j +jacet +jack +jackanap +jack +jacksauc +jackslav +jacob +jade +jade +jade +jail +jake +jamani +jame +jami +jane +jangl +jangl +januari +janu +japhet +jaquenetta +jaqu +jar +jar +jar +jarteer +jason +jaunc +jaunc +jaundic +jaundi +jaw +jawbon +jaw +jai +jai +jc +je +jealou +jealousi +jealousi +jeer +jeer +jelli +jenni +jeopardi +jephtha +jephthah +jerkin +jerkin +jerk +jeronimi +jerusalem +jeshu +jess +jessica +jest +jest +jester +jester +jest +jest +jesu +jesu +jet +jet +jew +jewel +jewel +jewel +jewess +jewish +jewri +jew +jezebel +jig +jig +jill +jill +jingl +joan +job +jockei +jocund +jog +jog +john +john +join +joinder +join +joiner +joineth +join +joint +joint +joint +jointli +jointress +joint +jointur +jolliti +jolli +jolt +jolthead +jordan +joseph +joshua +jot +jour +jourdain +journal +journei +journei +journeyman +journeymen +journei +jove +jovem +jovial +jowl +jowl +joi +joi +joy +joyfulli +joyless +joyou +joi +juan +jud +juda +judas +jude +judg +judg +judg +judgement +judg +judgest +judg +judgment +judgment +judici +jug +juggl +juggl +juggler +juggler +juggl +jug +juic +juic +jul +jule +julia +juliet +julietta +julio +juliu +juli +jump +jumpeth +jump +jump +june +june +junior +juniu +junket +juno +jupit +jure +jurement +jurisdict +juror +juror +juri +jurymen +just +justeiu +justest +justic +justic +justic +justic +justif +justifi +justifi +justl +justl +justl +justl +justli +just +just +jut +jutti +juven +kam +kate +kate +kate +katharin +katherina +katherin +kecksi +keech +keel +keel +keen +keen +keep +keepdown +keeper +keeper +keepest +keep +keep +keiser +ken +kendal +kennel +kent +kentish +kentishman +kentishmen +kept +kerchief +kere +kern +kernal +kernel +kernel +kern +kersei +kettl +kettledrum +kettledrum +kei +kei +kibe +kibe +kick +kick +kickshaw +kickshaws +kicki +kid +kidnei +kike +kildar +kill +kill +killer +killeth +kill +killingworth +kill +kiln +kimbolton +kin +kind +kinder +kindest +kindl +kindl +kindless +kindlier +kindl +kindli +kind +kind +kindr +kindr +kind +kine +king +kingdom +kingdom +kingli +king +kinr +kin +kinsman +kinsmen +kinswoman +kirtl +kirtl +kiss +kiss +kiss +kiss +kitchen +kitchen +kite +kite +kitten +kj +kl +klll +knack +knack +knapp +knav +knave +knaveri +knaveri +knave +knavish +knead +knead +knead +knee +kneel +kneel +kneel +knee +knell +knew +knewest +knife +knight +knight +knighthood +knighthood +knightli +knight +knit +knit +knitter +knitteth +knive +knob +knock +knock +knock +knog +knoll +knot +knot +knot +knotti +know +knower +knowest +know +knowingli +know +knowledg +known +know +l +la +laban +label +label +labienu +labio +labor +labor +labor +labour +labour +labour +labour +labour +labour +laboursom +labra +labyrinth +lac +lace +lace +lacedaemon +lace +laci +lack +lackbeard +lack +lackei +lackei +lackei +lack +lack +lad +ladder +ladder +lade +laden +ladi +lade +lad +ladi +ladybird +ladyship +ladyship +laer +laert +lafeu +lag +lag +laid +lain +laissez +lake +lake +lakin +lam +lamb +lambert +lambkin +lambkin +lamb +lame +lame +lame +lament +lament +lament +lament +lament +lament +lament +lament +lament +lame +lame +lamma +lammastid +lamound +lamp +lampass +lamp +lanc +lancast +lanc +lanc +lanceth +lanch +land +land +land +landless +landlord +landmen +land +lane +lane +langag +langlei +langton +languag +languageless +languag +langu +languish +languish +languish +languish +languish +languish +languor +lank +lantern +lantern +lanthorn +lap +lapi +lapland +lapp +lap +laps +laps +laps +lapw +laquai +lard +larder +lard +lard +larg +larg +larg +larger +largess +largest +lark +lark +larron +lartiu +larum +larum +la +lascivi +lash +lass +lass +last +last +last +lastli +last +latch +latch +late +late +late +later +latest +lath +latin +latten +latter +lattic +laud +laudabl +laudi +laugh +laughabl +laugh +laugher +laughest +laugh +laugh +laughter +launc +launcelot +launc +launch +laund +laundress +laundri +laur +laura +laurel +laurel +laurenc +lau +lavach +lave +lave +lavend +lavina +lavinia +lavish +lavishli +lavolt +lavolta +law +law +lawfulli +lawless +lawlessli +lawn +lawn +lawrenc +law +lawyer +lawyer +lai +layer +layest +lai +lai +lazar +lazar +lazaru +lazi +lc +ld +ldst +le +lead +leaden +leader +leader +leadest +lead +lead +leaf +leagu +leagu +leagu +leaguer +leagu +leah +leak +leaki +lean +leander +leaner +lean +lean +lean +leap +leap +leap +leap +leapt +lear +learn +learn +learnedli +learn +learn +learn +learnt +lea +leas +leas +leash +leas +least +leather +leathern +leav +leav +leaven +leaven +leaver +leav +leav +leavi +lecher +lecher +lecher +lecheri +lecon +lectur +lectur +led +leda +leech +leech +leek +leek +leer +leer +lee +lees +leet +leet +left +leg +legaci +legaci +legat +legatin +lege +leger +lege +legg +legion +legion +legitim +legitim +leg +leicest +leicestershir +leiger +leiger +leisur +leisur +leisur +leman +lemon +lena +lend +lender +lend +lend +lend +length +lengthen +lengthen +length +leniti +lennox +lent +lenten +lentu +leo +leon +leonardo +leonati +leonato +leonatu +leont +leopard +leopard +leper +leper +lepidu +leprosi +lequel +ler +le +less +lessen +lessen +lesser +lesson +lesson +lesson +lest +lestrak +let +lethargi +lethargi +lethargi +leth +let +lett +letter +letter +let +lettuc +leur +leve +level +level +level +level +leven +lever +leviathan +leviathan +levi +levi +leviti +levi +levi +lewd +lewdli +lewd +lewdster +lewi +liabl +liar +liar +libbard +libel +libel +liber +liber +libert +liberti +libertin +libertin +liberti +librari +libya +licenc +licen +licens +licenti +licha +licio +lick +lick +licker +lictor +lid +lid +lie +li +lief +liefest +lieg +liegeman +liegemen +lien +li +liest +lieth +lieu +lieuten +lieutenantri +lieuten +liev +life +lifeblood +lifeless +lifel +lift +lift +lifter +lifteth +lift +lift +lig +ligariu +liggen +light +light +lighten +lighten +lighter +lightest +lightli +light +lightn +lightn +light +lik +like +like +likeliest +likelihood +likelihood +like +like +liker +like +likest +likewis +like +like +lili +lili +lim +limand +limb +limbeck +limbeck +limber +limbo +limb +lime +lime +limehous +limekiln +limit +limit +limit +limit +limn +limp +limp +limp +lin +lincoln +lincolnshir +line +lineal +lineal +lineament +lineament +line +linen +linen +line +ling +lingar +linger +linger +linger +linguist +line +link +link +linsei +linstock +linta +lion +lionel +lioness +lion +lip +lipp +lip +lipsburi +liquid +liquor +liquorish +liquor +lirra +lisbon +lisp +lisp +list +listen +listen +list +literatur +lither +litter +littl +littlest +liv +live +live +liveli +livelihood +livelong +live +liver +liveri +liver +liveri +live +livest +liveth +livia +live +live +lizard +lizard +ll +lll +llou +lnd +lo +loa +loach +load +loaden +load +load +loaf +loam +loan +loath +loath +loath +loather +loath +loath +loathli +loath +loathsom +loathsom +loathsomest +loav +lob +lobbi +lobbi +local +lochab +lock +lock +lock +lockram +lock +locust +lode +lodg +lodg +lodg +lodger +lodg +lodg +lodg +lodovico +lodowick +lofti +log +logger +loggerhead +loggerhead +logget +logic +log +loin +loiter +loiter +loiter +loiter +loll +loll +lombardi +london +london +lone +loneli +lone +long +longavil +longboat +long +longer +longest +longeth +long +long +longli +long +longtail +loo +loof +look +look +looker +looker +lookest +look +look +loon +loop +loo +loos +loos +loos +loosen +loos +lop +lopp +loquitur +lord +lord +lord +lord +lordli +lordli +lord +lordship +lordship +lorenzo +lorn +lorrain +lorship +lo +lose +loser +loser +lose +losest +loseth +lose +loss +loss +lost +lot +lot +lott +lotteri +loud +louder +loudli +lour +loureth +lour +lous +lous +lousi +lout +lout +lout +louvr +lov +love +love +lovedst +lovel +loveli +loveli +lovel +love +lover +lover +lover +love +lovest +loveth +love +lovingli +low +low +lower +lowest +low +lowli +lowli +lown +low +loyal +loyal +loyalti +loyalti +lozel +lt +lubber +lubberli +luc +luccico +luce +lucentio +luce +lucetta +luciana +lucianu +lucif +lucifi +luciliu +lucina +lucio +luciu +luck +luckier +luckiest +luckili +luckless +lucki +lucr +lucrec +lucretia +luculliu +lucullu +luci +lud +ludlow +lug +lugg +luggag +luke +lukewarm +lull +lulla +lullabi +lull +lumbert +lump +lumpish +luna +lunaci +lunaci +lunat +lunat +lune +lung +luperc +lurch +lure +lurk +lurketh +lurk +lurk +lusciou +lush +lust +lust +luster +lust +lustier +lustiest +lustig +lustihood +lustili +lustr +lustrou +lust +lusti +lute +lute +lutestr +lutheran +luxuri +luxuri +luxuri +ly +lycaonia +lycurgus +lydia +lye +lyen +ly +lym +lymog +lynn +lysand +m +ma +maan +mab +macbeth +maccabaeu +macdonwald +macduff +mace +macedon +mace +machiavel +machin +machin +machin +mack +macmorri +macul +macul +mad +madam +madam +madam +madcap +mad +mad +made +madeira +madli +madman +madmen +mad +madonna +madrig +mad +maecena +maggot +maggot +magic +magic +magician +magistr +magistr +magnanim +magnanim +magni +magnifi +magnific +magnific +magnifico +magnifico +magnu +mahomet +mahu +maid +maiden +maidenhead +maidenhead +maidenhood +maidenhood +maidenliest +maidenli +maiden +maidhood +maid +mail +mail +mail +maim +maim +maim +main +maincours +main +mainli +mainmast +main +maintain +maintain +maintain +mainten +mai +maison +majesta +majeste +majest +majest +majest +majesti +majesti +major +major +mak +make +makeless +maker +maker +make +makest +maketh +make +make +mal +mala +maladi +maladi +malapert +malcolm +malcont +malcont +male +maledict +malefact +malefactor +malefactor +male +malevol +malevol +malhecho +malic +malici +malici +malign +malign +malign +malignantli +malkin +mall +mallard +mallet +mallow +malmsei +malt +maltworm +malvolio +mamilliu +mammer +mammet +mammet +mammock +man +manacl +manacl +manag +manag +manag +manag +manakin +manchu +mandat +mandragora +mandrak +mandrak +mane +manent +mane +manet +manfulli +mangl +mangl +mangl +mangl +mangi +manhood +manhood +manifest +manifest +manifest +manifold +manifoldli +manka +mankind +manlik +manli +mann +manna +manner +mannerli +manner +manningtre +mannish +manor +manor +man +mansion +mansionri +mansion +manslaught +mantl +mantl +mantl +mantua +mantuan +manual +manur +manur +manu +mani +map +mapp +map +mar +marbl +marbl +marcad +marcellu +march +march +marcheth +march +marchio +marchpan +marcian +marciu +marcu +mardian +mare +mare +marg +margarelon +margaret +marg +margent +margeri +maria +marian +mariana +mari +marigold +marin +marin +maritim +marjoram +mark +mark +market +market +marketplac +market +mark +markman +mark +marl +marl +marmoset +marquess +marqui +marr +marriag +marriag +marri +marri +mar +marrow +marrowless +marrow +marri +marri +mar +marseil +marsh +marshal +marshalsea +marshalship +mart +mart +martem +martext +martial +martin +martino +martiu +martlema +martlet +mart +martyr +martyr +marullu +marv +marvel +marvel +marvel +marvel +marvel +mari +ma +masculin +masham +mask +mask +masker +masker +mask +mask +mason +masonri +mason +masqu +masquer +masqu +masqu +mass +massacr +massacr +mass +massi +mast +mastcr +master +masterdom +masterest +masterless +masterli +masterpiec +master +mastership +mastic +mastiff +mastiff +mast +match +match +matcheth +match +matchless +mate +mate +mater +materi +mate +mathemat +matin +matron +matron +matter +matter +matthew +mattock +mattress +matur +matur +maud +maudlin +maugr +maul +maund +mauri +mauritania +mauvai +maw +maw +maxim +mai +maydai +mayest +mayor +maypol +mayst +maz +maze +maze +maze +mazzard +me +meacock +mead +meadow +meadow +mead +meagr +meal +meal +meali +mean +meander +meaner +meanest +meaneth +mean +mean +meanli +mean +meant +meantim +meanwhil +measl +measur +measur +measur +measur +measureless +measur +measur +meat +meat +mechan +mechan +mechan +mechan +mechant +med +medal +meddl +meddler +meddl +mede +medea +media +mediat +mediat +medic +medicin +medicin +medicin +medit +medit +medit +medit +medit +mediterranean +mediterraneum +medlar +medlar +meed +meed +meek +meekli +meek +meet +meeter +meetest +meet +meet +meetli +meet +meet +meg +mehercl +meilleur +meini +meisen +melancholi +melancholi +melford +mell +melliflu +mellow +mellow +melodi +melodi +melt +melt +melteth +melt +melt +melun +member +member +memento +memor +memorandum +memori +memori +memori +memoriz +memor +memori +memphi +men +menac +menac +menac +menaphon +mena +mend +mend +mender +mend +mend +menecr +menelau +meneniu +mental +menteith +mention +menti +menton +mephostophilu +mer +mercatant +mercatio +mercenari +mercenari +mercer +merchandis +merchand +merchant +merchant +merci +merci +mercifulli +merciless +mercuri +mercuri +mercuri +mercutio +merci +mere +mere +mere +merest +meridian +merit +merit +meritori +merit +merlin +mermaid +mermaid +merop +merrier +merriest +merrili +merriman +merriment +merriment +merri +merri +mervail +me +mesh +mesh +mesopotamia +mess +messag +messag +messala +messalin +messeng +messeng +mess +messina +met +metal +metal +metamorphi +metamorphos +metaphor +metaphys +metaphys +mete +metellu +meteor +meteor +meteyard +metheglin +metheglin +methink +methink +method +method +methought +methought +metr +metr +metropoli +mett +mettl +mettl +meu +mew +mew +mewl +mexico +mi +mice +michael +michaelma +micher +mich +mickl +microcosm +mid +mida +middest +middl +middleham +midnight +midriff +midst +midsumm +midwai +midwif +midwiv +mienn +might +might +mightier +mightiest +mightili +mighti +mightst +mighti +milan +milch +mild +milder +mildest +mildew +mildew +mildli +mild +mile +mile +milford +militarist +militari +milk +milk +milkmaid +milk +milksop +milki +mill +mill +miller +millin +million +million +million +mill +millston +milo +mimic +minc +minc +minc +minc +mind +mind +mind +mindless +mind +mine +miner +miner +minerva +mine +mingl +mingl +mingl +minikin +minim +minim +minimo +minimu +mine +minion +minion +minist +minist +minist +ministr +minnow +minnow +minola +minor +mino +minotaur +minstrel +minstrel +minstrelsi +mint +mint +minut +minut +minut +minx +mio +mir +mirabl +miracl +miracl +miracul +miranda +mire +mirror +mirror +mirth +mirth +miri +mi +misadventur +misadventur +misanthropo +misappli +misbecam +misbecom +misbecom +misbegot +misbegotten +misbeliev +misbeliev +misbhav +miscal +miscal +miscarri +miscarri +miscarri +miscarri +mischanc +mischanc +mischief +mischief +mischiev +misconceiv +misconst +misconst +misconstruct +misconstru +misconstru +miscreant +miscreat +misde +misde +misdemean +misdemeanour +misdoubt +misdoubteth +misdoubt +misenum +miser +miser +miser +misericord +miseri +miser +miseri +misfortun +misfortun +misgiv +misgiv +misgiv +misgovern +misgovern +misgraf +misguid +mishap +mishap +misheard +misinterpret +mislead +mislead +mislead +mislead +misl +mislik +misord +misplac +misplac +misplac +mispri +mispris +mispris +mispriz +misproud +misquot +misreport +miss +miss +miss +misshap +misshapen +missheath +miss +missingli +mission +missiv +missiv +misspok +mist +mista +mistak +mistak +mistaken +mistak +mistaketh +mistak +mistak +mistemp +mistemp +misterm +mist +misthink +misthought +mistleto +mistook +mistread +mistress +mistress +mistresss +mistriship +mistrust +mistrust +mistrust +mistrust +mist +misti +misu +misus +misus +misus +mite +mithrid +mitig +mitig +mix +mix +mixtur +mixtur +mm +mnd +moan +moan +moat +moat +mobl +mock +mockabl +mocker +mockeri +mocker +mockeri +mock +mock +mockvat +mockwat +model +modena +moder +moder +moder +modern +modest +modesti +modestli +modesti +modicum +modo +modul +moe +moi +moieti +moist +moisten +moistur +moldwarp +mole +molehil +mole +molest +molest +mollif +molli +molten +molto +mome +moment +momentari +mome +mon +monachum +monarch +monarchi +monarch +monarcho +monarch +monarchi +monast +monasteri +monast +mondai +mond +monei +monei +mong +monger +monger +mong +mongrel +mongrel +mongst +monk +monkei +monkei +monk +monmouth +monopoli +mon +monsieur +monsieur +monster +monster +monstrou +monstrous +monstrous +monstruos +montacut +montag +montagu +montagu +montano +montant +montez +montferrat +montgomeri +month +monthli +month +montjoi +monument +monument +monument +mood +mood +moodi +moon +moonbeam +moonish +moonlight +moon +moonshin +moonshin +moor +moorfield +moor +moorship +mop +mope +mope +mop +mopsa +moral +moral +moral +moral +mordak +more +moreov +more +morgan +mori +morisco +morn +morn +morn +morocco +morri +morrow +morrow +morsel +morsel +mort +mortal +mortal +mortal +mortal +mortar +mortgag +mortifi +mortifi +mortim +mortim +morti +mortis +morton +mose +moss +mossgrown +most +mote +moth +mother +mother +moth +motion +motionless +motion +motiv +motiv +motlei +mot +mought +mould +mould +mouldeth +mould +mouldi +moult +moulten +mounch +mounseur +mounsieur +mount +mountain +mountain +mountain +mountain +mountain +mountant +mountanto +mountebank +mountebank +mount +mounteth +mount +mount +mourn +mourn +mourner +mourner +mourn +mournfulli +mourn +mourningli +mourn +mourn +mou +mous +mousetrap +mous +mouth +mouth +mouth +mov +movabl +move +moveabl +moveabl +move +mover +mover +move +moveth +move +movingli +movousu +mow +mowbrai +mower +mow +mow +moi +moi +moys +mr +much +muck +mud +mud +muddi +muddi +muffin +muffl +muffl +muffl +muffler +muffl +mugger +mug +mulberri +mulberri +mule +mule +mulet +mulier +mulier +muliteu +mull +mulmutiu +multipli +multipli +multipli +multipot +multitud +multitud +multitudin +mum +mumbl +mumbl +mummer +mummi +mun +munch +muniment +munit +murd +murder +murder +murder +murder +murder +murder +murder +mure +murk +murkiest +murki +murmur +murmur +murmur +murrain +murrai +murrion +murther +murther +murther +murther +murther +murther +mu +muscadel +muscovit +muscovit +muscovi +muse +muse +mush +mushroom +music +music +musician +musician +music +muse +muse +musk +musket +musket +musko +muss +mussel +mussel +must +mustachio +mustard +mustardse +muster +muster +muster +musti +mutabl +mutabl +mutat +mutat +mute +mute +mutest +mutin +mutin +mutin +mutin +mutini +mutin +mutini +mutiu +mutter +mutter +mutton +mutton +mutual +mutual +mutual +muzzl +muzzl +muzzl +mv +mww +my +mynheer +myrmidon +myrmidon +myrtl +myself +myst +mysteri +mysteri +n +nag +nage +nag +naiad +nail +nail +nak +nake +naked +nal +nam +name +name +nameless +name +name +namest +name +nan +nanc +nap +nape +nape +napkin +napkin +napl +napless +nap +nap +narbon +narcissu +narin +narrow +narrowli +naso +nasti +nathaniel +natif +nation +nation +nativ +nativ +natur +natur +natur +natur +natur +natur +natur +natu +naught +naughtili +naughti +navarr +nave +navel +navig +navi +nai +nayward +nayword +nazarit +ne +neaf +neamnoin +neanmoin +neapolitan +neapolitan +near +nearer +nearest +nearli +near +neat +neatli +neb +nebour +nebuchadnezzar +nec +necessari +necessarili +necessari +necess +necess +necess +neck +necklac +neck +nectar +ned +nedar +need +need +needer +need +needful +need +needl +needl +needless +needli +need +needi +neer +neez +nefa +negat +neg +neg +neglect +neglect +neglect +neglectingli +neglect +neglig +neglig +negoti +negoti +negro +neigh +neighbor +neighbour +neighbourhood +neighbour +neighbourli +neighbour +neigh +neigh +neither +nell +nemean +nemesi +neoptolemu +nephew +nephew +neptun +ner +nereid +nerissa +nero +nero +ner +nerv +nerv +nervii +nervi +nessu +nest +nestor +nest +net +nether +netherland +net +nettl +nettl +nettl +neuter +neutral +nev +never +nevil +nevil +new +newborn +newer +newest +newgat +newli +new +new +newsmong +newt +newt +next +nibbl +nicanor +nice +nice +nice +nicer +niceti +nichola +nick +nicknam +nick +niec +niec +niggard +niggard +niggardli +nigh +night +nightcap +nightcap +night +nightgown +nightingal +nightingal +nightli +nightmar +night +nightwork +nihil +nile +nill +nilu +nimbl +nimbl +nimbler +nimbl +nine +nineteen +ning +ningli +ninni +ninth +ninu +niob +niob +nip +nipp +nip +nippl +nip +nit +nly +nnight +nnight +no +noah +nob +nobil +nobi +nobl +nobleman +noblemen +nobl +nobler +nobl +nobless +noblest +nobli +nobodi +noce +nod +nod +nod +noddl +noddl +noddi +nod +noe +noint +noi +nois +noiseless +noisemak +nois +noisom +nole +nomin +nomin +nomin +nominativo +non +nonag +nonc +none +nonino +nonni +nonpareil +nonsuit +noni +nook +nook +noon +noondai +noontid +nor +norberi +norfolk +norman +normandi +norman +north +northampton +northamptonshir +northerli +northern +northgat +northumberland +northumberland +northward +norwai +norwai +norwegian +norweyan +no +nose +nosegai +noseless +nose +noster +nostra +nostril +nostril +not +notabl +notabl +notari +notch +note +notebook +note +notedli +note +notest +noteworthi +noth +noth +notic +notifi +note +notion +notori +notori +notr +notwithstand +nought +noun +noun +nourish +nourish +nourish +nourish +nourisheth +nourish +nourish +nou +novel +novelti +novelti +noverb +novi +novic +novic +novum +now +nowher +noyanc +ns +nt +nubibu +numa +numb +number +number +number +numberless +number +numb +nun +nuncio +nuncl +nunneri +nun +nuntiu +nuptial +nur +nurs +nurs +nurser +nurseri +nurs +nurseth +nursh +nurs +nurtur +nurtur +nut +nuthook +nutmeg +nutmeg +nutriment +nut +nutshel +ny +nym +nymph +nymph +o +oak +oaken +oak +oar +oar +oatcak +oaten +oath +oathabl +oath +oat +ob +obduraci +obdur +obedi +obedi +obeis +oberon +obei +obei +obei +obei +obidicut +object +object +object +object +oblat +oblat +oblig +oblig +oblig +obliqu +oblivion +oblivi +obloqui +obscen +obscen +obscur +obscur +obscur +obscur +obscur +obscur +obscur +obsequi +obsequi +obsequi +observ +observ +observ +observ +observ +observ +observ +observ +observ +observ +observ +observ +observingli +obsqu +obstacl +obstacl +obstinaci +obstin +obstin +obstruct +obstruct +obstruct +obtain +obtain +obtain +occas +occas +occid +occident +occult +occupat +occup +occup +occupi +occupi +occupi +occurr +occurr +occurr +ocean +ocean +octavia +octaviu +ocular +od +odd +oddest +oddli +odd +od +od +odiou +odorifer +odor +odour +odour +od +oeillad +oe +oeuvr +of +ofephesu +off +offal +offenc +offenc +offenc +offend +offend +offendendo +offend +offend +offendeth +offend +offendress +offend +offens +offenseless +offens +offens +offer +offer +offer +offer +offer +offert +offic +offic +offic +offic +offic +offic +offici +offici +offspr +oft +often +often +oftentim +oh +oil +oil +oili +old +oldcastl +olden +older +oldest +old +oliv +oliv +oliv +oliv +olivia +olympian +olympu +oman +oman +omen +omin +omiss +omit +omitt +omit +omit +omn +omn +omnipot +on +onc +on +on +oney +ongl +onion +onion +onli +onset +onward +onward +oo +ooz +ooz +oozi +op +opal +op +open +open +open +openli +open +open +oper +oper +oper +oper +oper +op +oph +ophelia +opinion +opinion +opportun +opportun +opportun +oppo +oppos +oppos +opposeless +oppos +oppos +oppos +oppos +opposit +opposit +opposit +opposit +oppress +oppress +oppress +oppresseth +oppress +oppress +oppressor +opprest +opprobri +oppugn +opul +opul +or +oracl +oracl +orang +orat +orat +orat +oratori +orb +orb +orb +orchard +orchard +ord +ordain +ordain +ordain +order +order +order +orderless +orderli +order +ordin +ordin +ordinari +ordinari +ordnanc +ord +ordur +or +organ +organ +orgil +orient +orifex +origin +origin +orison +ork +orlando +orld +orlean +ornament +ornament +orod +orphan +orphan +orpheu +orsino +ort +orthographi +ort +oscorbidulcho +osier +osier +osprei +osr +osric +ossa +ost +ostent +ostentar +ostent +ostent +ostler +ostler +ostrich +osw +oswald +othello +other +otherg +other +otherwher +otherwhil +otherwis +otter +ottoman +ottomit +oubli +ouch +ought +oui +ounc +ounc +ouph +our +our +ourself +ourselv +ousel +out +outbid +outbrav +outbrav +outbreak +outcast +outcri +outcri +outdar +outdar +outdar +outdon +outfac +outfac +outfac +outfac +outfli +outfrown +outgo +outgo +outgrown +outjest +outlaw +outlawri +outlaw +outliv +outliv +outliv +outliv +outlook +outlustr +outpriz +outrag +outrag +outrag +outran +outright +outroar +outrun +outrun +outrun +outscold +outscorn +outsel +outsel +outsid +outsid +outspeak +outsport +outstar +outstai +outstood +outstretch +outstretch +outstrik +outstrip +outstrip +outswear +outvenom +outward +outwardli +outward +outwear +outweigh +outwent +outworn +outworth +oven +over +overaw +overbear +overblown +overboard +overbold +overborn +overbulk +overbui +overcam +overcast +overcharg +overcharg +overcom +overcom +overdon +overearnest +overfar +overflow +overflown +overgl +overgo +overgon +overgorg +overgrown +overhead +overhear +overheard +overhold +overjoi +overkind +overland +overleath +overl +overlook +overlook +overlook +overmast +overmount +overmuch +overpass +overp +overp +overplu +overrul +overrun +overscutch +overset +overshad +overshin +overshin +overshot +oversight +overspread +overstain +overswear +overt +overta +overtak +overtaketh +overthrow +overthrown +overthrow +overtook +overtopp +overtur +overturn +overwatch +overween +overween +overweigh +overwhelm +overwhelm +overworn +ovid +ovidiu +ow +ow +ow +owedst +owen +ow +owest +oweth +ow +owl +owl +own +owner +owner +own +own +owi +ox +oxen +oxford +oxfordshir +oxlip +oy +oyster +p +pabbl +pabylon +pac +pace +pace +pace +pacifi +pacifi +pace +pack +packet +packet +packhors +pack +pack +pack +packthread +pacoru +paction +pad +paddl +paddl +paddock +padua +pagan +pagan +page +pageant +pageant +page +pah +paid +pail +pail +pail +pain +pain +pain +painfulli +pain +paint +paint +painter +paint +paint +paint +pair +pair +pair +pajock +pal +palabra +palac +palac +palamed +palat +palat +palatin +palat +pale +pale +pale +paler +pale +palestin +palfrei +palfrei +palisado +pall +pallabri +palla +pallet +palm +palmer +palmer +palm +palmi +palpabl +palsi +palsi +palsi +palt +palter +paltri +pali +pamp +pamper +pamphlet +pan +pancack +pancak +pancak +pandar +pandar +pandaru +pander +panderli +pander +pandulph +panel +pang +pang +pang +pannier +pannonian +pansa +pansi +pant +pantaloon +pant +pantheon +panther +panthino +pant +pantingli +pantler +pantri +pant +pap +papal +paper +paper +paphlagonia +papho +papist +pap +par +parabl +paracelsu +paradis +paradox +paradox +paragon +paragon +parallel +parallel +paramour +paramour +parapet +paraquito +parasit +parasit +parca +parcel +parcel +parcel +parch +parch +parch +parchment +pard +pardon +pardona +pardon +pardon +pardon +pardonn +pardonn +pardonnez +pardon +pare +pare +parel +parent +parentag +parent +parfect +pare +pare +pari +parish +parishion +parisian +paritor +park +park +parl +parler +parl +parlei +parlez +parliament +parlor +parlour +parlou +parmac +parol +parricid +parricid +parrot +parrot +parslei +parson +part +partak +partaken +partak +partak +part +parthia +parthian +parthian +parti +partial +partial +partial +particip +particip +particl +particular +particular +particular +particularli +particular +parti +part +partisan +partisan +partit +partizan +partlet +partli +partner +partner +partridg +part +parti +pa +pash +pash +pash +pass +passabl +passado +passag +passag +passant +pass +passeng +passeng +pass +passeth +pass +passio +passion +passion +passion +passion +passiv +passport +passi +past +past +pastern +pasti +pastim +pastim +pastor +pastor +pastor +pastri +pastur +pastur +pasti +pat +patai +patch +patcheri +patch +pate +pate +patent +patent +patern +pate +path +pathet +path +pathwai +pathwai +patienc +patient +patient +patient +patin +patrician +patrician +patrick +patrimoni +patroclu +patron +patronag +patro +patron +patrum +patter +pattern +pattern +pattl +pauca +pauca +paul +paulina +paunch +paunch +paus +pauser +paus +pausingli +pauvr +pav +pave +pavement +pavilion +pavilion +pavin +paw +pawn +pawn +paw +pax +pai +payest +pai +payment +payment +pai +paysan +paysan +pe +peac +peaceabl +peaceabl +peac +peacemak +peac +peach +peach +peacock +peacock +peak +peak +peal +peal +pear +peard +pearl +pearl +pear +pea +peasant +peasantri +peasant +peascod +peas +peaseblossom +peat +peaten +peat +pebbl +pebbl +pebbl +peck +peck +peculiar +pecu +pedant +pedant +pedascul +pede +pedest +pedigre +pedlar +pedlar +pedro +ped +peel +peep +peep +peep +peep +peer +peereth +peer +peerless +peer +peesel +peevish +peevishli +peflur +peg +pegasu +peg +peis +peis +peiz +pelf +pelican +pelion +pell +pella +pellet +peloponnesu +pelt +pelt +pembrok +pen +penalti +penalti +penanc +penc +pencil +pencil +pencil +pendant +pendent +pendragon +pendul +penelop +penetr +penetr +penetr +penit +penit +penitenti +penit +penit +penker +penknif +penn +pen +pen +pennon +penni +pennyworth +pennyworth +pen +pens +pension +pension +pensiv +pensiv +pensiv +pent +pentecost +penthesilea +penthous +penuri +penuri +peopl +peopl +peopl +peopl +pepin +pepper +peppercorn +pepper +per +peradventur +peradventur +perceiv +perceiv +perceiv +perceiv +perceiveth +perch +perchanc +perci +percuss +perci +perdi +perdita +perdit +perdonato +perdu +perdur +perdur +perdi +pere +peregrin +peremptorili +peremptori +perfect +perfect +perfect +perfectest +perfect +perfect +perfectli +perfect +perfidi +perfidi +perforc +perform +perform +perform +perform +perform +perform +perform +perform +perfum +perfum +perfum +perfum +perfum +perg +perhap +periapt +perigort +perigouna +peril +peril +peril +period +period +perish +perish +perishest +perisheth +perish +periwig +perjur +perjur +perjur +perjuri +perjuri +perk +perk +permafoi +perman +permiss +permiss +permit +permit +pernici +pernici +peror +perpend +perpendicular +perpendicularli +perpetu +perpetu +perpetu +perplex +perplex +perplex +per +persecut +persecut +persecutor +perseu +persev +persever +persev +persia +persian +persist +persist +persist +persist +persist +person +persona +personag +personag +person +person +person +person +person +person +person +perspect +perspect +perspect +perspicu +persuad +persuad +persuad +persuad +persuas +persuas +pert +pertain +pertain +pertain +pertaunt +pertin +pertli +perturb +perturb +perturb +perturb +peru +perus +perus +perus +perus +pervers +pervers +pervers +pervert +pervert +peseech +pest +pester +pestifer +pestil +pestil +pet +petar +peter +petit +petit +petitionari +petition +petition +petit +peto +petrarch +petruchio +petter +petticoat +petticoat +petti +pettish +pettito +petti +peu +pew +pewter +pewter +phaethon +phaeton +phantasim +phantasim +phantasma +pharamond +pharaoh +pharsalia +pheasant +pheazar +phebe +phebe +pheebu +pheez +phibbu +philadelpho +philario +philarmonu +philemon +philip +philippan +philipp +philippi +phillida +philo +philomel +philomela +philosoph +philosoph +philosoph +philosophi +philostr +philotu +phlegmat +phoeb +phoebu +phoenicia +phoenician +phoenix +phorbu +photinu +phrase +phraseless +phrase +phrygia +phrygian +phrynia +physic +physic +physician +physician +physic +pia +pibbl +pibl +picardi +pick +pickax +pickax +pickbon +pick +picker +pick +pickl +picklock +pickpurs +pick +pickt +pickthank +pictur +pictur +pictur +pictur +pid +pie +piec +piec +piec +piec +pi +pied +pier +pierc +pierc +pierc +pierc +pierceth +pierc +pierci +pier +pi +pieti +pig +pigeon +pigeon +pight +pigmi +pigrogromitu +pike +pike +pil +pilat +pilat +pilcher +pile +pile +pilf +pilfer +pilgrim +pilgrimag +pilgrim +pill +pillag +pillag +pillar +pillar +pillicock +pillori +pillow +pillow +pill +pilot +pilot +pimpernel +pin +pinch +pinch +pinch +pinch +pindaru +pine +pine +pine +pinfold +pine +pinion +pink +pinn +pinnac +pin +pins +pint +pintpot +pion +pioneer +pioner +pioner +piou +pip +pipe +piper +piper +pipe +pipe +pippin +pippin +pirat +pirat +pisa +pisanio +pish +pismir +piss +piss +pistol +pistol +pit +pitch +pitch +pitcher +pitcher +pitchi +piteou +piteous +pitfal +pith +pithless +pithi +piti +piti +piti +piti +pitifulli +pitiless +pit +pittanc +pitti +pittikin +piti +piti +piu +plac +place +place +placentio +place +placeth +placid +place +plack +placket +placket +plagu +plagu +plagu +plagu +plagu +plagui +plain +plainer +plainest +plain +plain +plainli +plain +plain +plainsong +plaint +plaintiff +plaintiff +plaint +planch +planet +planetari +planet +plank +plant +plantag +plantagenet +plantagenet +plantain +plantat +plant +planteth +plant +plash +plashi +plast +plaster +plaster +plat +plate +plate +plate +platform +platform +plat +plat +plausibl +plausiv +plautu +plai +plai +player +player +playeth +playfellow +playfellow +playhous +plai +plai +plea +pleach +pleach +plead +plead +pleader +pleader +plead +plead +plea +pleasanc +pleasant +pleasantli +pleas +pleas +pleaser +pleaser +pleas +pleasest +pleaseth +pleas +pleasur +pleasur +plebeian +plebeii +pleb +pledg +pledg +plein +plenitud +plenteou +plenteous +plenti +plenti +plentifulli +plenti +pless +pless +pless +pliant +pli +pli +plight +plight +plighter +plod +plod +plodder +plod +plod +plood +ploodi +plot +plot +plot +plotter +plough +plough +ploughman +ploughmen +plow +plow +pluck +pluck +plucker +pluck +pluck +plue +plum +plume +plume +plume +plummet +plump +plumpi +plum +plung +plung +plung +plural +plurisi +plu +pluto +plutu +ply +po +pocket +pocket +pocket +pocki +podi +poem +poesi +poet +poetic +poetri +poet +poictier +poinard +poin +point +pointblank +point +point +point +poi +pois +pois +poison +poison +poison +poison +poison +poison +poke +poke +pol +polack +polack +poland +pold +pole +poleax +polecat +polecat +polemon +pole +poli +polici +polici +polish +polish +polit +politician +politician +politicli +polixen +poll +pollut +pollut +poloniu +poltroon +polus +polydamu +polydor +polyxena +pomand +pomegran +pomewat +pomfret +pomgarnet +pommel +pomp +pompeiu +pompei +pompion +pompou +pomp +pond +ponder +ponder +pond +poniard +poniard +pont +pontic +pontif +ponton +pooh +pool +pool +poop +poor +poorer +poorest +poorli +pop +pope +popedom +popiliu +popingai +popish +popp +poppi +pop +popular +popular +popul +porch +porch +pore +pore +pork +porn +porpentin +porridg +porring +port +portabl +portag +portal +portanc +portculli +portend +portend +portent +portent +portent +porter +porter +portia +portion +portli +portotartarossa +portrait +portraitur +port +portug +pose +posi +posi +posit +posit +posit +poss +possess +possess +possess +possesseth +possess +possess +possess +possessor +posset +posset +possibl +possibl +possibl +possibl +possit +post +post +post +posterior +posterior +poster +postern +postern +poster +posthors +posthors +posthumu +post +postmast +post +postscript +postur +postur +posi +pot +potabl +potat +potato +potato +potch +potenc +potent +potent +potenti +potent +potent +pothecari +pother +potion +potion +potpan +pot +potter +pot +pottl +pouch +poulter +poultic +poultnei +pouncet +pound +pound +pour +pourest +pour +pourquoi +pour +pout +poverti +pow +powd +powder +power +power +powerfulli +powerless +power +pox +poi +poysam +prabbl +practic +practic +practic +practic +practic +practic +practi +practis +practis +practis +practis +practis +practis +praeclarissimu +praemunir +praetor +praetor +prag +pragu +prain +prain +prai +prais +prais +prais +praisest +praiseworthi +prais +pranc +prank +prank +prat +prate +prate +prater +prate +prattl +prattler +prattl +prave +prawl +prawn +prai +prayer +prayer +prai +prai +pre +preach +preach +preacher +preach +preach +preachment +pread +preambul +preced +preced +preced +precept +precepti +precept +precinct +preciou +precious +precipic +precipit +precipit +precis +precis +precis +precisian +precor +precurs +precursor +predeceas +predecessor +predecessor +predestin +predica +predict +predict +predict +predomin +predomin +predomin +preech +preemin +prefac +prefer +prefer +prefer +preferr +preferreth +prefer +prefer +prefigur +prefix +prefix +preform +pregnanc +pregnant +pregnantli +prejud +prejudic +prejudici +prelat +premedit +premedit +premis +premis +prenez +prenomin +prentic +prentic +preordin +prepar +prepar +prepar +prepar +prepar +preparedli +prepar +prepar +prepost +preposter +preposter +prerogatif +prerog +prerogativ +presag +presag +presag +presageth +presag +prescienc +prescrib +prescript +prescript +prescript +prescript +presenc +presenc +present +present +present +present +present +presenteth +present +present +present +present +preserv +preserv +preserv +preserv +preserv +preserv +preserv +preserv +presid +press +press +presser +press +press +pressur +pressur +prest +prester +presum +presum +presum +presumpt +presumptu +presuppo +pret +pretenc +pretenc +pretend +pretend +pretend +pretens +pretext +pretia +prettier +prettiest +prettili +pretti +pretti +prevail +prevail +prevaileth +prevail +prevail +prevail +prevent +prevent +prevent +prevent +prevent +prei +prey +prei +priam +priami +priamu +pribbl +price +prick +prick +pricket +prick +prick +pricksong +pride +pride +pridg +prie +pri +prief +pri +priest +priesthood +priest +prig +primal +prime +primer +primero +primest +primit +primo +primogen +primros +primros +primi +princ +princ +princ +princess +princip +princip +princip +principl +principl +princox +pring +print +print +print +printless +print +prioress +priori +prioriti +priori +priscian +prison +prison +prison +prison +prisonni +prison +pristin +prith +prithe +privaci +privat +privat +privat +privilag +privileg +privileg +privileg +privileg +privilegio +privili +priviti +privi +priz +prize +prize +prizer +prize +prizest +prize +pro +probabl +probal +probat +proce +proceed +proceed +proceed +proceed +proce +process +process +proclaim +proclaim +proclaimeth +proclaim +proclam +proclam +proconsul +procrastin +procreant +procreant +procreat +procru +proculeiu +procur +procur +procur +procur +procur +procur +prodig +prodig +prodig +prodig +prodigi +prodigi +prodigi +prodigi +proditor +produc +produc +produc +produc +produc +profac +profan +profan +profan +profan +profan +profan +profan +profan +profess +profess +profess +profess +profess +professor +proffer +proffer +proffer +proffer +profici +profit +profit +profit +profit +profit +profitless +profit +profound +profoundest +profoundli +progenitor +progeni +progn +prognost +prognost +progress +progress +prohibit +prohibit +project +project +project +prolixi +prolix +prologu +prologu +prolong +prolong +promethean +prometheu +promi +promis +promis +promis +promiseth +promis +promontori +promot +promot +prompt +prompt +promptement +prompter +prompt +prompt +promptur +promulg +prone +prononc +prononcez +pronoun +pronounc +pronounc +pronounc +pronounc +pronoun +proof +proof +prop +propag +propag +propend +propens +proper +proper +properli +properti +properti +properti +propheci +propheci +prophesi +prophesi +prophesi +prophesi +prophet +prophetess +prophet +prophet +prophet +propinqu +propont +proport +proportion +proport +propo +propos +propos +propos +propos +propos +proposit +proposit +propound +propp +propr +proprieti +prop +propugn +prorogu +prorogu +proscript +proscript +prose +prosecut +prosecut +proselyt +proserpina +prosp +prospect +prosper +prosper +prospero +prosper +prosper +prosper +prostitut +prostrat +protect +protect +protect +protector +protector +protectorship +protectress +protect +protest +protest +protest +protest +protest +protest +protest +proteu +protheu +protract +protract +proud +prouder +proudest +proudlier +proudli +proud +prov +provand +prove +prove +provend +proverb +proverb +prove +proveth +provid +provid +provid +provid +provid +provid +provid +provinc +provinc +provinci +prove +provis +proviso +provoc +provok +provok +provok +provok +provok +provoketh +provok +provost +prowess +prudenc +prudent +prun +prune +prune +prune +pry +pry +psalm +psalmist +psalm +psalteri +ptolemi +ptolemi +public +publican +public +publicli +publicola +publish +publish +publish +publish +publiu +pucel +puck +pudder +pud +pud +puddl +puddl +pudenc +pueritia +puff +puf +puff +pug +pui +puissanc +puissant +puke +puke +pulcher +pule +pull +puller +pullet +pull +pull +pulpit +pulpit +pulpit +puls +pulsidg +pump +pumpion +pump +pun +punch +punish +punish +punish +punish +punish +punk +punto +puni +pupil +pupil +puppet +puppet +puppi +puppi +pur +purblind +purcha +purchas +purchas +purchas +purchaseth +purchas +pure +pure +purer +purest +purg +purgat +purg +purgatori +purg +purg +purger +purg +purifi +purifi +puritan +puriti +purlieu +purpl +purpl +purpl +purport +purpo +purpos +purpos +purpos +purpos +purposeth +purpos +purr +pur +purs +pursent +purs +pursu +pursu +pursu +pursuer +pursu +pursuest +pursueth +pursu +pursuit +pursuiv +pursuiv +pursi +puru +purveyor +push +push +pusillanim +put +putrefi +putrifi +put +putter +put +puttock +puzzel +puzzl +puzzl +puzzl +py +pygmalion +pygmi +pygmi +pyramid +pyramid +pyramid +pyrami +pyramis +pyramu +pyrenean +pyrrhu +pythagora +qu +quadrangl +quae +quaff +quaf +quagmir +quail +quail +quail +quaint +quaintli +quak +quak +quak +qualif +qualifi +qualifi +qualifi +qualifi +qualit +qualiti +qualiti +qualm +qualmish +quam +quand +quando +quantiti +quantiti +quar +quarrel +quarrel +quarrel +quarrel +quarrel +quarrel +quarrelsom +quarri +quarri +quart +quarter +quarter +quarter +quarter +quart +quasi +quat +quatch +quai +que +quean +quea +queasi +queasi +queen +queen +quell +queller +quench +quench +quench +quenchless +quern +quest +questant +question +question +question +question +questionless +question +questrist +quest +queubu +qui +quick +quicken +quicken +quicker +quicklier +quickli +quick +quicksand +quicksand +quicksilverr +quid +quidditi +quiddit +quier +quiet +quieter +quietli +quiet +quietu +quill +quillet +quill +quilt +quinapalu +quinc +quinc +quintain +quintess +quintu +quip +quip +quir +quir +quirk +quirk +qui +quit +quit +quit +quittanc +quit +quit +quiver +quiver +quiver +quo +quod +quoif +quoint +quoit +quoit +quondam +quoniam +quot +quot +quot +quoth +quotidian +r +rabbit +rabbl +rabblement +race +rack +racker +racket +racket +rack +rack +radianc +radiant +radish +rafe +raft +rag +rage +rage +rageth +ragg +rag +ragged +rage +ragozin +rag +rah +rail +rail +railer +railest +raileth +rail +rail +raiment +rain +rainbow +raineth +rain +rainold +rain +raini +rai +rais +rais +rais +rais +raisin +rak +rake +raker +rake +ral +rald +ralph +ram +rambur +ramm +rampallian +rampant +ramp +rampir +ramp +ram +ramsei +ramston +ran +ranc +rancor +rancor +rancour +random +rang +rang +rang +ranger +rang +rang +rank +ranker +rankest +rank +rankl +rankli +rank +rank +ransack +ransack +ransom +ransom +ransom +ransomless +ransom +rant +rant +rap +rape +rape +rapier +rapier +rapin +rap +rapt +raptur +raptur +rar +rare +rare +rare +rarer +rarest +rariti +rariti +rascal +rascalliest +rascal +rascal +rase +rash +rasher +rashli +rash +rat +ratcatch +ratcliff +rate +rate +rate +rate +rather +ratherest +ratifi +ratifi +ratifi +rate +ration +ratolorum +rat +ratsban +rattl +rattl +rattl +ratur +raught +rav +rave +ravel +raven +raven +raven +raven +ravenspurgh +rave +ravin +rave +ravish +ravish +ravish +ravish +ravish +raw +rawer +rawli +raw +rai +rai +rai +raz +raze +raze +raze +razeth +raze +razor +razor +razor +razur +re +reach +reach +reacheth +reach +read +reader +readiest +readili +readi +read +readin +read +readi +real +realli +realm +realm +reap +reaper +reap +reap +rear +rear +rearward +reason +reason +reason +reason +reason +reasonless +reason +reav +rebat +rebato +rebeck +rebel +rebel +rebel +rebellion +rebelli +rebel +rebound +rebuk +rebuk +rebuk +rebuk +rebuk +rebu +recal +recant +recant +recant +recant +receipt +receipt +receiv +receiv +receiv +receiv +receiv +receivest +receiveth +receiv +receptacl +rechat +reciproc +reciproc +recit +recit +reciterai +reck +reck +reckless +reckon +reckon +reckon +reckon +reck +reclaim +reclaim +reclus +recogniz +recogniz +recoil +recoil +recollect +recomfort +recomfortur +recommend +recommend +recommend +recompen +recompens +reconcil +reconcil +reconcil +reconcil +reconcil +reconcil +reconcili +record +record +record +record +record +record +recount +recount +recount +recount +recount +recours +recov +recov +recover +recov +recoveri +recov +recoveri +recreant +recreant +recreat +recreat +rectifi +rector +rectorship +recur +recur +red +redbreast +redder +reddest +rede +redeem +redeem +redeem +redeem +redeem +redeliv +redempt +redim +red +redoubl +redoubt +redound +redress +redress +redress +reduc +reechi +reed +reed +reek +reek +reek +reeki +reel +reeleth +reel +reel +refel +refer +refer +referr +refer +refigur +refin +refin +reflect +reflect +reflect +reflex +reform +reform +reform +refractori +refrain +refresh +refresh +reft +reft +refug +refu +refus +refus +refus +refusest +refus +reg +regal +regalia +regan +regard +regard +regard +regardfulli +regard +regard +regener +regent +regentship +regia +regiment +regiment +regina +region +region +regist +regist +regist +regreet +regreet +regress +reguerdon +regular +rehear +rehears +rehears +reign +reign +reignier +reign +reign +rein +reinforc +reinforc +reinforc +rein +reiter +reject +reject +rejoic +rejoic +rejoic +rejoiceth +rejoic +rejoicingli +rejoindur +rejourn +rel +relaps +relat +relat +relat +relat +rel +relea +releas +releas +releas +relent +relent +relent +relianc +relic +relief +reliev +reliev +reliev +reliev +reliev +religion +religion +religi +religi +relinquish +reliqu +reliquit +relish +relum +reli +reli +remain +remaind +remaind +remain +remaineth +remain +remain +remark +remark +remedi +remedi +remedi +remedi +rememb +rememb +rememb +rememb +remembr +remembranc +remembr +remercimen +remiss +remiss +remiss +remit +remnant +remnant +remonstr +remors +remors +remorseless +remot +remot +remov +remov +remov +removed +remov +remov +remov +remuner +remuner +renc +rend +render +render +render +rendezv +renegado +reneg +reneg +renew +renew +renewest +renounc +renounc +renounc +renowm +renown +renown +rent +rent +repaid +repair +repair +repair +repair +repass +repast +repastur +repai +repai +repai +repeal +repeal +repeal +repeat +repeat +repeat +repeat +repel +repent +repent +repent +repent +repent +repent +repetit +repetit +repin +repin +repin +replant +replenish +replenish +replet +replic +repli +repli +repliest +repli +repli +report +report +report +reportest +report +reportingli +report +repos +repos +reposeth +repos +repossess +reprehend +reprehend +reprehend +repres +repres +repriev +repriev +repris +reproach +reproach +reproach +reproachfulli +reprob +reprob +reproof +reprov +reprov +reprov +reprov +reprov +repugn +repugn +repugn +repuls +repuls +repurcha +repur +reput +reput +reput +reputeless +reput +reput +request +request +request +request +requiem +requir +requir +requir +requir +requireth +requir +requisit +requisit +requit +requit +requit +requit +requit +rer +rere +rer +rescu +rescu +rescu +rescu +rescu +resembl +resembl +resembl +resembl +resembleth +resembl +reserv +reserv +reserv +reserv +reserv +resid +resid +resid +resid +resid +residu +resign +resign +resist +resist +resist +resist +resist +resolut +resolut +resolut +resolut +resolv +resolv +resolv +resolvedli +resolv +resolveth +resort +resort +resound +resound +respeak +respect +respect +respect +respect +respect +respect +respic +respit +respit +respons +respos +ress +rest +rest +resteth +rest +rest +restitut +restless +restor +restor +restor +restor +restor +restor +restor +restrain +restrain +restrain +restrain +restraint +rest +resti +resum +resum +resum +resurrect +retail +retail +retain +retain +retain +retel +retent +retent +retinu +retir +retir +retir +retir +retir +retir +retold +retort +retort +retourn +retract +retreat +retrograd +ret +return +return +returnest +returneth +return +return +revania +reveal +reveal +revel +revel +revel +revel +revel +revel +revelri +revel +reveng +reveng +reveng +reveng +reveng +reveng +reveng +reveng +reveng +revengingli +revenu +revenu +reverb +reverber +reverb +reverenc +rever +reverend +rever +rever +rever +revers +revers +revert +review +reviewest +revil +revil +revisit +reviv +reviv +reviv +reviv +revok +revok +revok +revolt +revolt +revolt +revolt +revolut +revolut +revolv +revolv +reward +reward +reward +reward +reward +reword +reword +rex +rei +reynaldo +rford +rful +rfull +rhapsodi +rheim +rhenish +rhesu +rhetor +rheum +rheumat +rheum +rheumi +rhinocero +rhode +rhodop +rhubarb +rhym +rhyme +rhymer +rhyme +rhyme +rialto +rib +ribald +riband +riband +ribaudr +ribb +rib +ribbon +ribbon +rib +rice +rich +richard +richer +rich +richest +richli +richmond +richmond +rid +riddanc +ridden +riddl +riddl +riddl +ride +rider +rider +ride +ridest +rideth +ridg +ridg +ridicul +ride +rid +rien +ri +rifl +rift +rift +rig +rigg +riggish +right +righteou +righteous +right +rightfulli +rightli +right +rigol +rigor +rigor +rigour +ril +rim +rin +rinaldo +rind +ring +ring +ringlead +ringlet +ring +ringwood +riot +rioter +riot +riotou +riot +rip +ripe +ripe +ripen +ripen +ripe +ripen +ripen +riper +ripest +ripe +ripp +rip +rise +risen +rise +riseth +rish +rise +rite +rite +rivag +rival +rival +rival +rival +rive +rive +rivel +river +river +rivet +rivet +rivet +rivo +rj +rless +road +road +roam +roam +roan +roar +roar +roarer +roar +roar +roast +roast +rob +roba +roba +robb +rob +robber +robber +robberi +rob +robe +robe +robert +robe +robin +rob +robusti +rochest +rochford +rock +rock +rocki +rod +rode +roderigo +rod +roe +roe +roger +rogero +rogu +rogueri +rogu +roguish +roi +roist +roll +roll +roll +roll +rom +romag +roman +romano +romano +roman +rome +romeo +romish +rondur +ronyon +rood +roof +roof +rook +rook +rooki +room +room +root +root +rootedli +rooteth +root +root +rope +roperi +rope +rope +ro +rosalind +rosalinda +rosalind +rosalin +rosciu +rose +rose +rosemari +rosencrantz +rose +ross +rosi +rot +rote +rote +rother +rotherham +rot +rot +rotten +rotten +rot +rotund +rouen +rough +rougher +roughest +roughli +rough +round +round +roundel +rounder +roundest +round +roundli +round +roundur +rou +rous +rous +rousillon +rousli +roussi +rout +rout +rout +rove +rover +row +rowel +rowland +rowland +roi +royal +royal +royal +royalti +royalti +roynish +rs +rt +rub +rubb +rub +rubbish +rubi +rubiou +rub +rubi +rud +rudand +rudder +ruddi +ruddock +ruddi +rude +rude +rude +ruder +rudesbi +rudest +rudiment +rue +ru +ruff +ruffian +ruffian +ruffl +ruffl +ruff +rug +rugbi +rugemount +rug +ruin +ruinat +ruin +ruin +ruinou +ruin +rul +rule +rule +ruler +ruler +rule +rule +rumbl +ruminai +ruminat +rumin +rumin +rumin +rumin +rumor +rumour +rumour +rumour +rump +run +runag +runag +runawai +runawai +rung +runn +runner +runner +run +run +ruptur +ruptur +rural +rush +rush +rush +rushl +rushi +russet +russia +russian +russian +rust +rust +rustic +rustic +rustic +rustl +rustl +rust +rusti +rut +ruth +ruth +ruthless +rutland +ruttish +ry +rye +ryth +s +sa +saba +sabbath +sabl +sabl +sack +sackbut +sackcloth +sack +sackerson +sack +sacrament +sacr +sacrif +sacrific +sacrific +sacrific +sacrifici +sacrif +sacrilegi +sacr +sad +sadder +saddest +saddl +saddler +saddl +sadli +sad +saf +safe +safeguard +safe +safer +safest +safeti +safeti +saffron +sag +sage +sagittari +said +saidst +sail +sail +sailmak +sailor +sailor +sail +sain +saint +saint +saintlik +saint +saith +sake +sake +sala +salad +salamand +salari +sale +salerio +salicam +saliqu +salisburi +sall +sallet +sallet +salli +sallow +salli +salmon +salmon +salt +salter +saltier +salt +saltpetr +salut +salut +salut +salut +salut +saluteth +salv +salvat +salv +salv +same +samingo +samp +sampir +sampl +sampler +sampson +samson +samson +sancta +sanctifi +sanctifi +sanctifi +sanctimoni +sanctimoni +sanctimoni +sanctiti +sanctiti +sanctuar +sanctuari +sand +sandal +sandbag +sand +sand +sandi +sandi +sang +sanguin +sangui +saniti +san +santrail +sap +sapient +sapit +sapless +sapl +sapphir +sapphir +saracen +sarcenet +sard +sardian +sardinia +sardi +sarum +sat +satan +satchel +sate +sate +satiat +satieti +satin +satir +satir +sati +satisfact +satisfi +satisfi +satisfi +satisfi +saturdai +saturdai +saturn +saturnin +saturninu +satyr +satyr +sauc +sauc +sauc +saucer +sauc +saucili +sauci +sauci +sauf +saunder +sav +savag +savag +savag +savageri +savag +save +save +save +save +saviour +savori +savour +savour +savour +savouri +savoi +saw +saw +sawest +sawn +sawpit +saw +sawyer +saxon +saxoni +saxton +sai +sayest +sai +sai +sai +sayst +sblood +sc +scab +scabbard +scab +scaffold +scaffoldag +scal +scald +scald +scald +scale +scale +scale +scale +scall +scalp +scalp +scali +scambl +scambl +scamel +scan +scandal +scandaliz +scandal +scandi +scann +scant +scant +scanter +scant +scantl +scant +scap +scape +scape +scape +scapeth +scar +scarc +scarc +scarciti +scare +scarecrow +scarecrow +scarf +scarf +scarf +scare +scarlet +scarr +scarr +scar +scaru +scath +scath +scath +scatt +scatter +scatter +scatter +scatter +scelera +scelerisqu +scene +scene +scent +scent +scept +scepter +sceptr +sceptr +sceptr +schedul +schedul +scholar +scholarli +scholar +school +schoolboi +schoolboi +schoolfellow +school +schoolmast +schoolmast +school +sciatica +sciatica +scienc +scienc +scimitar +scion +scion +scissor +scoff +scoffer +scof +scoff +scoggin +scold +scold +scold +sconc +scone +scope +scope +scorch +scorch +score +score +score +score +scorn +scorn +scorn +scornfulli +scorn +scorn +scorpion +scorpion +scot +scotch +scotch +scotland +scot +scottish +scoundrel +scour +scour +scourg +scourg +scour +scout +scout +scowl +scrap +scrape +scrape +scrap +scratch +scratch +scratch +scream +scream +screech +screech +screen +screen +screw +screw +scribbl +scribbl +scribe +scribe +scrimer +scrip +scrippag +scriptur +scriptur +scriven +scroll +scroll +scroop +scrowl +scroyl +scrub +scrupl +scrupl +scrupul +scuffl +scuffl +scullion +scull +scum +scurril +scurril +scurril +scurvi +scuse +scut +scutcheon +scutcheon +scylla +scyth +scyth +scythia +scythian +sdeath +se +sea +seacoal +seafar +seal +seal +seal +seal +seam +seamen +seami +seaport +sear +searc +search +searcher +search +searcheth +search +sear +sea +seasick +seasid +season +season +season +seat +seat +seat +sebastian +second +secondarili +secondari +second +second +secreci +secret +secretari +secretari +secretli +secret +sect +sectari +sect +secundo +secur +secur +secur +secur +sedg +sedg +sedg +sedgi +sedit +sediti +seduc +seduc +seduc +seduc +seduc +see +seed +seed +seed +seed +seedsman +seein +see +seek +seek +seek +seel +seel +seeli +seem +seem +seemer +seemest +seemeth +seem +seemingli +seemli +seem +seen +seer +see +sees +seest +seeth +seeth +seeth +seet +segreg +seigneur +seigneur +seiz +seiz +seiz +seiz +seizeth +seiz +seizur +seld +seldom +select +seleucu +self +selfsam +sell +seller +sell +sell +selv +semblabl +semblabl +semblanc +semblanc +sembl +semi +semicircl +semirami +semper +semproniu +senat +senat +senat +send +sender +sendeth +send +send +seneca +senior +seniori +seni +sennet +senoi +sens +senseless +sens +sensibl +sensibl +sensual +sensual +sent +sentenc +sentenc +sentenc +sententi +sentinel +sentinel +separ +separ +separ +separ +separ +septentrion +sepulchr +sepulchr +sepulchr +sequel +sequenc +sequent +sequest +sequest +sequestr +sere +sereni +serg +sergeant +seriou +serious +sermon +sermon +serpent +serpentin +serpent +serpigo +serv +servant +servant +servant +serv +serv +server +serv +serveth +servic +servic +servic +servil +servil +serviliu +serv +servingman +servingmen +serviteur +servitor +servitor +servitud +sessa +session +session +sesto +set +setebo +set +setter +set +settl +settl +settlest +settl +sev +seven +sevenfold +sevennight +seventeen +seventh +seventi +sever +sever +sever +sever +sever +sever +sever +severest +sever +sever +severn +sever +sew +seward +sewer +sew +sex +sex +sexton +sextu +seymour +seyton +sfoot +sh +shackl +shackl +shade +shade +shadow +shadow +shadow +shadow +shadowi +shadi +shafalu +shaft +shaft +shag +shak +shake +shake +shaken +shake +shake +shale +shall +shalleng +shallow +shallowest +shallowli +shallow +shalt +sham +shambl +shame +shame +shame +shamefulli +shameless +shame +shamest +shame +shank +shank +shap +shape +shape +shapeless +shapen +shape +shape +shar +shard +shard +shard +share +share +sharer +share +share +shark +sharp +sharpen +sharpen +sharpen +sharper +sharpest +sharpli +sharp +sharp +shatter +shav +shave +shaven +shaw +she +sheaf +sheal +shear +shearer +shear +shearman +shear +sheath +sheath +sheath +sheath +sheath +sheav +sheav +shed +shed +shed +sheen +sheep +sheepcot +sheepcot +sheep +sheepskin +sheer +sheet +sheet +sheet +sheffield +shelf +shell +shell +shelt +shelter +shelter +shelv +shelv +shelvi +shent +shepherd +shepherd +shepherdess +shepherdess +shepherd +sher +sheriff +sherri +she +sheweth +shield +shield +shield +shift +shift +shift +shift +shill +shill +shin +shine +shine +shineth +shine +shin +shini +ship +shipboard +shipman +shipmast +shipmen +shipp +ship +ship +ship +shipt +shipwreck +shipwreck +shipwright +shipwright +shire +shirlei +shirt +shirt +shive +shiver +shiver +shiver +shoal +shoal +shock +shock +shod +shoe +shoe +shoemak +shoe +shog +shone +shook +shoon +shoot +shooter +shooti +shoot +shoot +shop +shop +shore +shore +shorn +short +shortcak +shorten +shorten +shorten +shorter +shortli +short +shot +shotten +shough +should +shoulder +shoulder +shoulder +shouldst +shout +shout +shout +shout +shov +shove +shovel +shovel +show +show +shower +shower +showest +show +shown +show +shred +shrew +shrewd +shrewdli +shrewd +shrewish +shrewishli +shrewish +shrew +shrewsburi +shriek +shriek +shriek +shriev +shrift +shrill +shriller +shrill +shrilli +shrimp +shrine +shrink +shrink +shrink +shriv +shrive +shriver +shrive +shrive +shroud +shroud +shroud +shroud +shrove +shrow +shrow +shrub +shrub +shrug +shrug +shrunk +shudd +shudder +shuffl +shuffl +shuffl +shuffl +shun +shunless +shunn +shun +shun +shun +shut +shut +shuttl +shy +shylock +si +sibyl +sibylla +sibyl +sicil +sicilia +sicilian +siciliu +sicil +sicili +siciniu +sick +sicken +sicken +sicker +sickl +sicklemen +sickli +sickli +sickli +sick +sicl +sicyon +side +side +side +sieg +sieg +sienna +si +siev +sift +sift +sigeia +sigh +sigh +sigh +sigh +sight +sight +sightless +sightli +sight +sign +signal +signet +signieur +signific +signific +signifi +signifi +signifi +signifi +signior +signiori +signior +signiori +signor +signori +sign +signum +silenc +silenc +silenc +silenc +silent +silent +siliu +silk +silken +silkman +silk +silliest +silli +sill +silli +silva +silver +silver +silverli +silvia +silviu +sima +simil +simil +simoi +simon +simoni +simp +simpcox +simpl +simpl +simpler +simpl +simplic +simpli +simular +simul +sin +sinc +sincer +sincer +sincer +sinel +sinew +sinew +sinew +sinewi +sin +sinfulli +sing +sing +sing +singer +sing +singeth +sing +singl +singl +singl +singli +sing +singular +singularit +singular +singular +singul +sinist +sink +sink +sink +sinn +sinner +sinner +sin +sinon +sin +sip +sip +sir +sire +siren +sirrah +sir +sist +sister +sisterhood +sisterli +sister +sit +sith +sithenc +sit +sit +situat +situat +situat +siward +six +sixpenc +sixpenc +sixpenni +sixteen +sixth +sixti +siz +size +size +sizzl +skain +skambl +skein +skelter +ski +skil +skilfulli +skill +skilless +skillet +skill +skill +skim +skimbl +skin +skinker +skinni +skin +skip +skipp +skipper +skip +skirmish +skirmish +skirr +skirt +skirt +skittish +skulk +skull +skull +sky +skyei +skyish +slab +slack +slackli +slack +slain +slake +sland +slander +slander +slander +slander +slander +slander +slander +slash +slaught +slaughter +slaughter +slaughter +slaughterman +slaughtermen +slaughter +slaughter +slave +slaver +slaveri +slave +slavish +slai +slayeth +slai +slai +sleav +sled +sleek +sleekli +sleep +sleeper +sleeper +sleepest +sleep +sleep +sleepi +sleev +sleev +sleid +sleid +sleight +sleight +slender +slender +slenderli +slept +slew +slewest +slice +slid +slide +slide +slide +slight +slight +slightest +slightli +slight +slight +slili +slime +slimi +sling +slink +slip +slipp +slipper +slipper +slipperi +slip +slish +slit +sliver +slobb +slomber +slop +slope +slop +sloth +sloth +slough +slovenli +slovenri +slow +slower +slowli +slow +slubber +slug +sluggard +sluggardiz +sluggish +sluic +slumb +slumber +slumber +slumberi +slunk +slut +slut +slutteri +sluttish +sluttish +sly +sly +smack +smack +smack +small +smaller +smallest +small +smalu +smart +smart +smartli +smatch +smatter +smear +smell +smell +smell +smelt +smil +smile +smile +smile +smilest +smilet +smile +smilingli +smirch +smirch +smit +smite +smite +smith +smithfield +smock +smock +smok +smoke +smoke +smoke +smoke +smoki +smooth +smooth +smooth +smoothli +smooth +smooth +smote +smoth +smother +smother +smother +smug +smulkin +smutch +snaffl +snail +snail +snake +snake +snaki +snap +snapp +snapper +snar +snare +snare +snarl +snarleth +snarl +snatch +snatcher +snatch +snatch +sneak +sneak +sneap +sneap +sneck +snip +snipe +snipt +snore +snore +snore +snort +snout +snow +snowbal +snow +snowi +snuff +snuff +snug +so +soak +soak +soak +soar +soar +soar +sob +sob +sober +soberli +sobrieti +sob +sociabl +societi +societi +sock +socrat +sod +sodden +soe +soever +soft +soften +soften +softer +softest +softli +soft +soil +soil +soilur +soit +sojourn +sol +sola +solac +solanio +sold +soldat +solder +soldest +soldier +soldier +soldiership +sole +sole +solem +solemn +solem +solemn +solemn +solemniz +solemn +solemn +solemnli +sole +solicit +solicit +solicit +solicit +solicit +solicitor +solicit +solid +solidar +solid +solinu +solitari +solomon +solon +solum +solu +solyman +some +somebodi +someon +somerset +somervil +someth +sometim +sometim +somev +somewhat +somewher +somewhith +somm +son +sonanc +song +song +sonnet +sonnet +sonnet +son +sont +sonti +soon +sooner +soonest +sooth +sooth +soother +sooth +soothsai +soothsay +sooti +sop +sophist +sophist +sophi +sop +sorcer +sorcer +sorceress +sorceri +sorceri +sore +sorel +sore +sorer +sore +sorrier +sorriest +sorrow +sorrow +sorrowest +sorrow +sorrow +sorrow +sorri +sort +sortanc +sort +sort +sort +sossiu +sot +soto +sot +sottish +soud +sought +soul +sould +soulless +soul +sound +sound +sounder +soundest +sound +soundless +soundli +sound +soundpost +sound +sour +sourc +sourc +sourest +sourli +sour +sou +sous +south +southam +southampton +southerli +southern +southward +southwark +southwel +souviendrai +sov +sovereign +sovereignest +sovereignli +sovereignti +sovereignvour +sow +sow +sowl +sowter +space +space +spaciou +spade +spade +spain +spak +spake +spakest +span +spangl +spangl +spaniard +spaniel +spaniel +spanish +spann +span +spar +spare +spare +spare +sparingli +spark +sparkl +sparkl +sparkl +spark +sparrow +sparrow +sparta +spartan +spavin +spavin +spawn +speak +speaker +speaker +speakest +speaketh +speak +speak +spear +speargrass +spear +special +special +special +specialti +specialti +specifi +specious +spectacl +spectacl +spectacl +spectat +spectatorship +specul +specul +specul +sped +speech +speech +speechless +speed +speed +speedier +speediest +speedili +speedi +speed +speed +speedi +speen +spell +spell +spell +spelt +spencer +spend +spendest +spend +spend +spendthrift +spent +sperato +sperm +spero +sperr +spher +sphere +sphere +sphere +spheric +spheri +sphinx +spice +spice +spiceri +spice +spider +spider +spi +spi +spieth +spightfulli +spigot +spill +spill +spill +spilt +spilth +spin +spinii +spinner +spinster +spinster +spire +spirit +spirit +spiritless +spirit +spiritu +spiritualti +spirt +spit +spital +spite +spite +spite +spite +spit +spit +spit +splai +spleen +spleen +spleen +spleeni +splendour +splenit +splinter +splinter +split +split +split +split +spoil +spoil +spok +spoke +spoken +spoke +spokesman +spong +spongi +spoon +spoon +sport +sport +sport +sportiv +sport +spot +spotless +spot +spot +spousal +spous +spout +spout +spout +sprag +sprang +sprat +sprawl +sprai +sprai +spread +spread +spread +spright +spright +sprightli +sprig +spring +spring +spring +springeth +springhalt +spring +spring +springtim +sprinkl +sprinkl +sprite +sprite +sprite +sprite +sprite +sprout +spruce +sprung +spun +spur +spurio +spurn +spurn +spurr +spurrer +spur +spur +spy +spy +squabbl +squadron +squadron +squand +squar +squar +squarer +squar +squash +squeak +squeak +squeal +squeal +squeez +squeez +squel +squier +squint +squini +squir +squir +squirrel +st +stab +stabb +stab +stab +stabl +stabl +stabl +stablish +stablish +stab +stack +staff +stafford +stafford +staffordshir +stag +stage +stage +stagger +stagger +stagger +stag +staid +staider +stain +stain +stain +staineth +stain +stainless +stain +stair +stair +stake +stake +stale +stale +stalk +stalk +stalk +stall +stall +stall +stamford +stammer +stamp +stamp +stamp +stanch +stanchless +stand +standard +standard +stander +stander +standest +standeth +stand +stand +staniel +stanlei +stanz +stanzo +stanzo +stapl +stapl +star +stare +stare +stare +stare +stare +stark +starkli +starlight +starl +starr +starri +star +start +start +start +startingli +startl +startl +start +starv +starv +starv +starvelackei +starvel +starveth +starv +state +stateli +state +state +statesman +statesmen +statiliu +station +statist +statist +statu +statu +statur +statur +statut +statut +stave +stave +stai +stai +stayest +stai +stai +stead +stead +steadfast +steadier +stead +steal +stealer +stealer +steal +steal +stealth +stealthi +steed +steed +steel +steel +steeli +steep +steep +steepl +steepl +steep +steepi +steer +steerag +steer +steer +stell +stem +stem +stench +step +stepdam +stephano +stephen +stepmoth +stepp +step +step +steril +steril +sterl +stern +sternag +sterner +sternest +stern +steterat +stew +steward +steward +stewardship +stew +stew +stick +stick +stickler +stick +stiff +stiffen +stiffli +stifl +stifl +stifl +stigmat +stigmat +stile +still +stiller +stillest +still +stilli +sting +sting +stingless +sting +stink +stink +stinkingli +stink +stint +stint +stint +stir +stirr +stir +stirrer +stirrer +stirreth +stir +stirrup +stirrup +stir +stitcheri +stitch +stithi +stithi +stoccado +stoccata +stock +stockfish +stock +stock +stockish +stock +stog +stog +stoic +stokesli +stol +stole +stolen +stolest +stomach +stomach +stomach +stomach +ston +stone +stonecutt +stone +stonish +stoni +stood +stool +stool +stoop +stoop +stoop +stop +stope +stopp +stop +stop +stop +stor +store +storehous +storehous +store +stori +storm +storm +storm +storm +stormi +stori +stoup +stoup +stout +stouter +stoutli +stout +stover +stow +stowag +stow +strachi +straggler +straggl +straight +straightest +straightwai +strain +strain +strain +strain +strait +strait +straiter +straitli +strait +strait +strand +strang +strang +strang +stranger +stranger +strangest +strangl +strangl +strangler +strangl +strangl +strappado +strap +stratagem +stratagem +stratford +strato +straw +strawberri +strawberri +straw +strawi +strai +strai +strai +streak +streak +stream +streamer +stream +stream +strech +street +street +strength +strengthen +strengthen +strengthless +strength +stretch +stretch +stretch +stretch +strew +strew +strew +strewment +stricken +strict +stricter +strictest +strictli +strictur +stride +stride +stride +strife +strife +strik +strike +striker +strike +strikest +strike +string +stringless +string +strip +stripe +stripl +stripl +stripp +strip +striv +strive +strive +strive +strok +stroke +stroke +strond +strond +strong +stronger +strongest +strongli +strook +strosser +strove +strown +stroi +struck +strucken +struggl +struggl +struggl +strumpet +strumpet +strumpet +strung +strut +strut +strut +strut +stubbl +stubborn +stubbornest +stubbornli +stubborn +stuck +stud +student +student +studi +studi +studiou +studious +stud +studi +studi +stuff +stuf +stuff +stumbl +stumbl +stumblest +stumbl +stump +stump +stung +stupefi +stupid +stupifi +stuprum +sturdi +sty +styga +stygian +styl +style +styx +su +sub +subcontract +subdu +subdu +subdu +subduement +subdu +subdu +subject +subject +subject +subject +submerg +submiss +submiss +submit +submit +submit +suborn +suborn +suborn +subscrib +subscrib +subscrib +subscrib +subscript +subsequ +subsidi +subsidi +subsist +subsist +substanc +substanc +substanti +substitut +substitut +substitut +substitut +subtil +subtilli +subtl +subtleti +subtleti +subtli +subtractor +suburb +subvers +subvert +succed +succe +succeed +succeed +succeed +succe +success +successantli +success +success +successfulli +success +success +success +successor +successor +succour +succour +such +suck +sucker +sucker +suck +suckl +suck +sudden +suddenli +sue +su +suerli +sue +sueth +suff +suffer +suffer +suffer +suffer +suffer +suffer +suffic +suffic +suffic +suffic +sufficeth +suffici +suffici +suffici +suffic +sufficit +suffig +suffoc +suffoc +suffoc +suffolk +suffrag +suffrag +sug +sugar +sugarsop +suggest +suggest +suggest +suggest +suggest +suggest +sui +suit +suitabl +suit +suit +suitor +suitor +suit +suivez +sullen +sullen +sulli +sulli +sulli +sulph +sulpher +sulphur +sulphur +sultan +sultri +sum +sumless +summ +summa +summari +summer +summer +summit +summon +summon +summon +sumpter +sumptuou +sumptuous +sum +sun +sunbeam +sunburn +sunburnt +sund +sundai +sundai +sunder +sunder +sundri +sung +sunk +sunken +sunni +sunris +sun +sunset +sunshin +sup +super +superfici +superfici +superflu +superflu +superflu +superflux +superior +supern +supernatur +superprais +superscript +superscript +superservic +superstit +superstiti +superstiti +supersubtl +supervis +supervisor +supp +supper +supper +suppertim +sup +supplant +suppl +suppler +supplianc +suppliant +suppliant +supplic +supplic +supplic +suppli +suppli +suppli +suppliest +suppli +supplyant +suppli +supplyment +support +support +support +support +support +support +support +supportor +suppo +suppos +suppos +suppos +suppos +supposest +suppos +supposit +suppress +suppress +suppresseth +supremaci +suprem +sup +sur +suranc +surceas +surd +sure +surecard +sure +surer +surest +sureti +sureti +surfeit +surfeit +surfeit +surfeit +surfeit +surg +surgeon +surgeon +surger +surgeri +surg +surli +surmi +surmis +surmis +surmis +surmount +surmount +surmount +surnam +surnam +surnam +surpasseth +surpass +surplic +surplu +surpri +surpris +surpris +surrend +surrei +surrei +survei +surveyest +survei +surveyor +surveyor +survei +surviv +surviv +survivor +susan +suspect +suspect +suspect +suspect +suspend +suspens +suspicion +suspicion +suspici +suspir +suspir +sust +sustain +sustain +sutler +sutton +suum +swabber +swaddl +swag +swagg +swagger +swagger +swagger +swagger +swain +swain +swallow +swallow +swallow +swallow +swam +swan +swan +sward +sware +swarm +swarm +swart +swarth +swarth +swarthi +swasher +swash +swath +swath +swathl +swai +swai +swai +swear +swearer +swearer +swearest +swear +swear +swear +sweat +sweaten +sweat +sweat +sweati +sweep +sweeper +sweep +sweet +sweeten +sweeten +sweeter +sweetest +sweetheart +sweet +sweetli +sweetmeat +sweet +sweet +swell +swell +swell +swell +swelter +sweno +swept +swerv +swerver +swerv +swift +swifter +swiftest +swiftli +swift +swill +swill +swim +swimmer +swimmer +swim +swim +swine +swineherd +swing +swing +swinish +swinstead +switch +swit +switzer +swol +swoll +swoln +swoon +swoon +swoon +swoon +swoop +swoopstak +swor +sword +sworder +sword +swore +sworn +swound +swound +swum +swung +sy +sycamor +sycorax +sylla +syllabl +syllabl +syllog +symbol +sympathis +sympathiz +sympath +sympath +sympathi +synagogu +synod +synod +syracus +syracusian +syracusian +syria +syrup +t +ta +taber +tabl +tabl +tabl +tablet +tabor +tabor +tabor +tabourin +taciturn +tack +tackl +tackl +tackl +tackl +tackl +taddl +tadpol +taffeta +taffeti +tag +tagrag +tah +tail +tailor +tailor +tail +taint +taint +taint +taint +taintur +tak +take +taken +taker +take +takest +taketh +take +tal +talbot +talbotit +talbot +tale +talent +talent +taleport +tale +talk +talk +talker +talker +talkest +talk +talk +tall +taller +tallest +talli +tallow +talli +talon +tam +tambourin +tame +tame +tame +tame +tamer +tame +tame +tamora +tamworth +tan +tang +tangl +tangl +tank +tanl +tann +tan +tanner +tanquam +tanta +tantaen +tap +tape +taper +taper +tapestri +tapestri +taphous +tapp +tapster +tapster +tar +tardi +tardili +tardi +tardi +tarentum +targ +targ +target +target +tarpeian +tarquin +tarquin +tarr +tarr +tarrianc +tarri +tarri +tarri +tarri +tart +tartar +tartar +tartli +tart +task +tasker +task +task +tassel +tast +tast +tast +tast +tatt +tatter +tatter +tatter +tattl +tattl +tattl +taught +taunt +taunt +taunt +tauntingli +taunt +tauru +tavern +tavern +tavi +tawdri +tawni +tax +taxat +taxat +tax +tax +tc +te +teach +teacher +teacher +teach +teachest +teacheth +teach +team +tear +tear +tear +tear +tearsheet +teat +tediou +tedious +tedious +teem +teem +teem +teen +teeth +teipsum +telamon +telamoniu +tell +teller +tell +tell +tellu +temp +temper +temper +temper +temper +temper +temper +tempest +tempest +tempestu +templ +templ +tempor +temporari +temporiz +tempor +tempor +temp +tempt +temptat +temptat +tempt +tempter +tempter +tempteth +tempt +tempt +ten +tenabl +tenant +tenantiu +tenantless +tenant +tench +tend +tendanc +tend +tender +tender +tenderli +tender +tender +tend +tend +tenedo +tenement +tenement +tenfold +tenni +tenour +tenour +ten +tent +tent +tenth +tenth +tent +tenur +tenur +tercel +tereu +term +termag +term +termin +termless +term +terra +terrac +terram +terra +terr +terren +terrestri +terribl +terribl +territori +territori +terror +terror +tertian +tertio +test +testament +test +tester +testern +testifi +testimoni +testimoni +testimoni +testi +testril +testi +tetchi +tether +tetter +tevil +tewksburi +text +tgv +th +thae +thame +than +thane +thane +thank +thank +thank +thankfulli +thank +thank +thank +thankless +thank +thanksgiv +thaso +that +thatch +thaw +thaw +thaw +the +theatr +theban +thebe +thee +theft +theft +thein +their +their +theis +them +theme +theme +themselv +then +thenc +thenceforth +theoric +there +thereabout +thereabout +thereaft +thereat +therebi +therefor +therein +thereof +thereon +thereto +thereunto +thereupon +therewith +therewith +thersit +these +theseu +thessalian +thessali +theti +thew +thei +thick +thicken +thicken +thicker +thickest +thicket +thickskin +thief +thieveri +thiev +thievish +thigh +thigh +thimbl +thimbl +thin +thine +thing +thing +think +thinkest +think +think +think +thinkst +thinli +third +thirdli +third +thirst +thirst +thirst +thirsti +thirteen +thirti +thirtieth +thirti +thi +thisbi +thisn +thistl +thistl +thither +thitherward +thoa +thoma +thorn +thorn +thorni +thorough +thoroughli +those +thou +though +thought +thought +thought +thousand +thousand +thracian +thraldom +thrall +thrall +thrall +thrash +thrason +thread +threadbar +threaden +thread +threat +threaten +threaten +threaten +threatest +threat +three +threefold +threepenc +threepil +three +threescor +thresher +threshold +threw +thrice +thrift +thriftless +thrift +thrifti +thrill +thrill +thrill +thrive +thrive +thriver +thrive +thrive +throat +throat +throb +throb +throca +throe +throe +thromuldo +thron +throne +throne +throne +throng +throng +throng +throstl +throttl +through +throughfar +throughfar +throughli +throughout +throw +thrower +throwest +throw +thrown +throw +thrum +thrumm +thrush +thrust +thrusteth +thrust +thrust +thumb +thumb +thump +thund +thunder +thunderbolt +thunderbolt +thunder +thunder +thunderston +thunderstrok +thurio +thursdai +thu +thwack +thwart +thwart +thwart +thwart +thy +thyme +thymu +thyreu +thyself +ti +tib +tiber +tiberio +tibei +tice +tick +tickl +tickl +tickl +tickl +tickl +ticklish +tiddl +tide +tide +tide +tidi +tie +ti +ti +tiff +tiger +tiger +tight +tightli +tike +til +tile +till +tillag +tilli +tilt +tilter +tilth +tilt +tilt +tiltyard +tim +timandra +timber +time +timeless +timeli +time +time +timon +timor +timor +timor +tinct +tinctur +tinctur +tinder +tingl +tinker +tinker +tinsel +tini +tip +tipp +tippl +tip +tipsi +tipto +tir +tire +tire +tire +tirest +tire +tirra +tirrit +ti +tish +tisick +tissu +titan +titania +tith +tith +tith +titiniu +titl +titl +titleless +titl +tittl +tittl +titular +titu +tn +to +toad +toad +toadstool +toast +toast +toast +toast +toaz +tobi +tock +tod +todai +todpol +tod +toe +toe +tofor +toge +toge +togeth +toil +toil +toil +toil +token +token +told +toledo +toler +toll +toll +tom +tomb +tomb +tomb +tombless +tomboi +tomb +tomorrow +tomyri +ton +tong +tongu +tongu +tongu +tongueless +tongu +tonight +too +took +tool +tool +tooth +toothach +toothpick +toothpick +top +topa +top +topgal +topless +topmast +topp +top +toppl +toppl +top +topsail +topsi +torch +torchbear +torchbear +torcher +torch +torchlight +tore +torment +tormenta +torment +torment +torment +tormentor +torment +torn +torrent +tortiv +tortois +tortur +tortur +tortur +tortur +tortur +tortur +torturest +tortur +toryn +toss +toss +tosseth +toss +tot +total +total +tott +totter +totter +tou +touch +touch +touch +toucheth +touch +touchston +tough +tougher +tough +tourain +tournament +tour +tou +tout +touz +tow +toward +towardli +toward +tower +tower +tower +town +town +township +townsman +townsmen +towton +toi +toi +trace +trace +track +tract +tractabl +trade +trade +trader +trade +tradesman +tradesmen +trade +tradit +tradit +traduc +traduc +traduc +traffic +traffick +traffic +tragedian +tragedian +tragedi +tragedi +tragic +tragic +trail +train +train +train +train +trait +traitor +traitorli +traitor +traitor +traitor +traitress +traject +trammel +trampl +trampl +trampl +tranc +tranc +tranio +tranquil +tranquil +transcend +transcend +transfer +transfigur +transfix +transform +transform +transform +transform +transgress +transgress +transgress +transgress +translat +translat +translat +translat +transmigr +transmut +transpar +transport +transport +transport +transport +transport +transpos +transshap +trap +trapp +trap +trap +trash +travail +travail +travel +travel +travel +travel +travel +travel +travel +travellest +travel +travel +traver +travers +trai +treacher +treacher +treacher +treacheri +tread +tread +tread +treason +treason +treason +treason +treasur +treasur +treasur +treasuri +treasuri +treat +treati +treatis +treat +treati +trebl +trebl +trebl +treboniu +tree +tree +trembl +trembl +trembl +tremblest +trembl +tremblingli +tremor +trempl +trench +trenchant +trench +trencher +trencher +trencherman +trencher +trench +trench +trent +tre +trespass +trespass +tressel +tress +trei +trial +trial +trib +tribe +tribe +tribul +tribun +tribun +tribun +tributari +tributari +tribut +tribut +trice +trick +trick +trickl +trick +tricksi +trident +tri +trier +trifl +trifl +trifler +trifl +trifl +trigon +trill +trim +trimli +trimm +trim +trim +trim +trinculo +trinculo +trinket +trip +tripartit +tripe +tripl +triplex +tripoli +tripoli +tripp +trip +trippingli +trip +trist +triton +triumph +triumphant +triumphantli +triumpher +triumpher +triumph +triumph +triumvir +triumvir +triumvir +triumviri +trivial +troat +trod +trodden +troiant +troien +troilu +troilus +trojan +trojan +troll +tromperi +trompet +troop +troop +troop +trop +trophi +trophi +tropic +trot +troth +troth +troth +trot +trot +troubl +troubl +troubler +troubl +troublesom +troublest +troublou +trough +trout +trout +trovato +trow +trowel +trowest +troi +troyan +troyan +truant +truce +truckl +trudg +true +trueborn +truepenni +truer +truest +truie +trull +trull +truli +trump +trumperi +trumpet +trumpet +trumpet +trumpet +truncheon +truncheon +trundl +trunk +trunk +trust +trust +truster +truster +trust +trust +trusti +truth +truth +try +ts +tu +tuae +tub +tubal +tub +tuck +tucket +tuesdai +tuft +tuft +tug +tugg +tug +tuition +tullu +tulli +tumbl +tumbl +tumbler +tumbl +tumult +tumultu +tun +tune +tuneabl +tune +tuner +tune +tuni +tun +tup +turban +turban +turbul +turbul +turd +turf +turfi +turk +turkei +turkei +turkish +turk +turlygod +turmoil +turmoil +turn +turnbul +turncoat +turncoat +turn +turneth +turn +turnip +turn +turph +turpitud +turquois +turret +turret +turtl +turtl +turvi +tuscan +tush +tut +tutor +tutor +tutor +tutto +twain +twang +twangl +twa +twai +tweak +tween +twelfth +twelv +twelvemonth +twentieth +twenti +twere +twice +twig +twiggen +twig +twilight +twill +twill +twin +twine +twink +twinkl +twinkl +twinkl +twinn +twin +twire +twist +twist +twit +twit +twit +twixt +two +twofold +twopenc +twopenc +two +twould +tyb +tybalt +tybalt +tyburn +ty +tyke +tymbria +type +type +typhon +tyrann +tyrann +tyrann +tyrann +tyranni +tyrant +tyrant +tyrian +tyrrel +u +ubiqu +udder +udg +ud +uglier +ugliest +ugli +ulcer +ulcer +ulyss +um +umber +umbra +umbrag +umfrevil +umpir +umpir +un +unabl +unaccommod +unaccompani +unaccustom +unach +unacquaint +unact +unadvi +unadvis +unadvisedli +unagre +unanel +unansw +unappea +unapprov +unapt +unapt +unarm +unarm +unarm +unassail +unassail +unattaint +unattempt +unattend +unauspici +unauthor +unavoid +unawar +unback +unbak +unband +unbar +unbarb +unbash +unbat +unbatt +unbecom +unbefit +unbegot +unbegotten +unbeliev +unbend +unbent +unbewail +unbid +unbidden +unbind +unbind +unbit +unbless +unblest +unbloodi +unblown +unbodi +unbolt +unbolt +unbonnet +unbookish +unborn +unbosom +unbound +unbound +unbow +unbow +unbrac +unbrac +unbraid +unbreath +unbr +unbreech +unbridl +unbrok +unbrui +unbruis +unbuckl +unbuckl +unbuckl +unbuild +unburden +unburden +unburi +unburnt +unburthen +unbutton +unbutton +uncap +uncap +uncas +uncas +uncaught +uncertain +uncertainti +unchain +unchang +uncharg +uncharg +uncharit +unchari +unchast +uncheck +unchild +uncivil +unclaim +unclasp +uncl +unclean +uncleanli +uncleanli +unclean +uncl +unclew +unclog +uncoin +uncolt +uncomeli +uncomfort +uncompassion +uncomprehens +unconfin +unconfirm +unconfirm +unconqu +unconqu +unconsid +unconst +unconstrain +unconstrain +uncontemn +uncontrol +uncorrect +uncount +uncoupl +uncourt +uncouth +uncov +uncov +uncrop +uncross +uncrown +unction +unctuou +uncuckold +uncur +uncurb +uncurb +uncurl +uncurr +uncurs +undaunt +undeaf +undeck +undeed +under +underbear +underborn +undercrest +underfoot +undergo +undergo +undergo +undergon +underground +underhand +underl +undermin +undermin +underneath +underpr +underprop +understand +understandeth +understand +understand +understand +understood +underta +undertak +undertak +undertak +undertak +undertak +undertak +undertook +undervalu +undervalu +underw +underwrit +underwrit +undescri +undeserv +undeserv +undeserv +undeserv +undetermin +undid +undint +undiscern +undiscov +undishonour +undispo +undistinguish +undistinguish +undivid +undivid +undivulg +undo +undo +undo +undon +undoubt +undoubtedli +undream +undress +undress +undrown +undut +unduti +un +unear +unearn +unearthli +uneasin +uneasi +uneath +uneduc +uneffectu +unelect +unequ +uneven +unexamin +unexecut +unexpect +unexperienc +unexperi +unexpress +unfair +unfaith +unfal +unfam +unfashion +unfasten +unfath +unfath +unf +unfe +unfeel +unfeign +unfeignedli +unfellow +unfelt +unfenc +unfili +unfil +unfinish +unfirm +unfit +unfit +unfix +unfledg +unfold +unfold +unfoldeth +unfold +unfold +unfool +unforc +unforc +unforfeit +unfortifi +unfortun +unfought +unfrequ +unfriend +unfurnish +ungain +ungal +ungart +ungart +ungenitur +ungentl +ungentl +ungent +ungird +ungodli +ungor +ungot +ungotten +ungovern +ungraci +ungrat +ungrav +ungrown +unguard +unguem +unguid +unhack +unhair +unhallow +unhallow +unhand +unhandl +unhandsom +unhang +unhappi +unhappili +unhappi +unhappi +unharden +unharm +unhatch +unheard +unheart +unheed +unheedfulli +unheedi +unhelp +unhidden +unholi +unhop +unhopefullest +unhors +unhospit +unhou +unhous +unhurt +unicorn +unicorn +unimprov +uninhabit +uninhabit +unintellig +union +union +unit +unit +uniti +univers +univers +univers +univers +unjoint +unjust +unjustic +unjustli +unkennel +unkept +unkind +unkindest +unkindli +unkind +unk +unkinglik +unkiss +unknit +unknow +unknown +unlac +unlaid +unlaw +unlawfulli +unlearn +unlearn +unless +unlesson +unlett +unlett +unlick +unlik +unlik +unlimit +unlin +unlink +unload +unload +unload +unload +unlock +unlock +unlook +unlook +unloo +unloos +unlov +unlov +unluckili +unlucki +unmad +unmak +unmanli +unmann +unmann +unmannerd +unmannerli +unmarri +unmask +unmask +unmask +unmask +unmast +unmatch +unmatch +unmatch +unmeasur +unmeet +unmellow +unmerci +unmerit +unmerit +unmind +unmindful +unmingl +unmitig +unmitig +unmix +unmoan +unmov +unmov +unmov +unmuffl +unmuffl +unmus +unmuzzl +unmuzzl +unnatur +unnatur +unnatur +unnecessarili +unnecessari +unneighbourli +unnerv +unnobl +unnot +unnumb +unnumb +unow +unpack +unpaid +unparagon +unparallel +unparti +unpath +unpav +unpai +unpeac +unpeg +unpeopl +unpeopl +unperfect +unperfect +unpick +unpin +unpink +unpiti +unpitifulli +unplagu +unplaus +unplea +unpleas +unpleas +unpolici +unpolish +unpolish +unpollut +unpossess +unpossess +unposs +unpracti +unpregn +unpremedit +unprepar +unprepar +unpress +unprevail +unprev +unpriz +unpriz +unprofit +unprofit +unprop +unproperli +unproport +unprovid +unprovid +unprovid +unprovok +unprun +unprun +unpublish +unpurg +unpurpo +unqual +unqueen +unquest +unquestion +unquiet +unquietli +unquiet +unrais +unrak +unread +unreadi +unreal +unreason +unreason +unreclaim +unreconcil +unreconcili +unrecount +unrecur +unregard +unregist +unrel +unremov +unremov +unrepriev +unresolv +unrespect +unrespect +unrest +unrestor +unrestrain +unreveng +unreverend +unrever +unrev +unreward +unright +unright +unrip +unripp +unrival +unrol +unroof +unroost +unroot +unrough +unruli +unsaf +unsalut +unsanctifi +unsatisfi +unsavouri +unsai +unscal +unscann +unscarr +unschool +unscorch +unscour +unscratch +unseal +unseam +unsearch +unseason +unseason +unseason +unseason +unsecond +unsecret +unseduc +unse +unseem +unseemli +unseen +unseminar +unsepar +unservic +unset +unsettl +unsettl +unsev +unsex +unshak +unshak +unshaken +unshap +unshap +unsheath +unsheath +unshorn +unshout +unshown +unshrink +unshrubb +unshunn +unshunn +unsift +unsightli +unsinew +unsist +unskil +unskilfulli +unskil +unslip +unsmirch +unsoil +unsolicit +unsort +unsought +unsound +unsound +unspeak +unspeak +unspeak +unspher +unspok +unspoken +unspot +unsquar +unstabl +unstaid +unstain +unstain +unstanch +unstat +unsteadfast +unstoop +unstring +unstuff +unsubstanti +unsuit +unsuit +unsulli +unsunn +unsur +unsur +unsuspect +unswai +unsway +unswai +unswear +unswept +unsworn +untaint +untalk +untangl +untangl +untast +untaught +untemp +untend +untent +untent +unthank +unthank +unthink +unthought +unthread +unthrift +unthrift +unthrifti +unti +unti +until +untimb +untim +untir +untir +untir +untitl +unto +untold +untouch +untoward +untowardli +untrad +untrain +untrain +untread +untreasur +untri +untrim +untrod +untrodden +untroubl +untru +untruss +untruth +untruth +untuck +untun +untun +untun +untutor +untutor +untwin +unurg +unu +unus +unusu +unvalu +unvanquish +unvarnish +unveil +unveil +unvener +unvex +unviol +unvirtu +unvisit +unvulner +unwar +unwarili +unwash +unwatch +unweari +unw +unwedg +unweed +unweigh +unweigh +unwelcom +unwept +unwhipp +unwholesom +unwieldi +unwil +unwillingli +unwilling +unwind +unwip +unwis +unwis +unwish +unwish +unwit +unwittingli +unwont +unwoo +unworthi +unworthiest +unworthili +unworthi +unworthi +unwrung +unyok +unyok +up +upbraid +upbraid +upbraid +upbraid +uphoard +uphold +upholdeth +uphold +uphold +uplift +uplift +upmost +upon +upper +uprear +uprear +upright +upright +upright +upris +upris +uproar +uproar +uprou +upshoot +upshot +upsid +upspr +upstair +upstart +upturn +upward +upward +urchin +urchinfield +urchin +urg +urg +urg +urgent +urg +urgest +urg +urin +urin +urin +urn +urn +ur +ursa +urslei +ursula +urswick +us +usag +usanc +usanc +us +us +us +useless +user +us +usest +useth +usher +usher +usher +usher +us +usual +usual +usur +usur +usuri +usur +usurp +usurp +usurp +usurp +usurp +usurp +usurpingli +usurp +usuri +ut +utensil +utensil +util +utmost +utt +utter +utter +utter +uttereth +utter +utterli +uttermost +utter +uy +v +va +vacanc +vacant +vacat +vade +vagabond +vagabond +vagram +vagrom +vail +vail +vail +vaillant +vain +vainer +vainglori +vainli +vain +vai +valanc +valanc +vale +valenc +valentin +valentinu +valentio +valeria +valeriu +vale +valiant +valiantli +valiant +valid +vallant +vallei +vallei +valli +valor +valor +valor +valour +valu +valuat +valu +valu +valueless +valu +valu +vane +vanish +vanish +vanish +vanishest +vanish +vaniti +vaniti +vanquish +vanquish +vanquish +vanquishest +vanquisheth +vant +vantag +vantag +vantbrac +vapian +vapor +vapor +vapour +vapour +vara +variabl +varianc +variat +variat +vari +variest +varieti +varld +varlet +varletri +varlet +varletto +varnish +varriu +varro +vari +vari +vassal +vassalag +vassal +vast +vastid +vasti +vat +vater +vaudemont +vaughan +vault +vaultag +vault +vault +vault +vaulti +vaumond +vaunt +vaunt +vaunter +vaunt +vauntingli +vaunt +vauvado +vaux +vaward +ve +veal +vede +vehem +vehem +vehement +vehor +veil +veil +veil +vein +vein +vell +velur +velutu +velvet +vendibl +vener +vener +venetia +venetian +venetian +venei +veng +vengeanc +vengeanc +veng +veni +venial +venic +venison +venit +venom +venom +venom +vent +ventag +vent +ventidiu +ventricl +vent +ventur +ventur +ventur +ventur +ventur +ventur +venu +venu +venuto +ver +verb +verba +verbal +verbatim +verbos +verdict +verdun +verdur +vere +verefor +verg +verg +verger +verg +verier +veriest +verifi +verifi +verili +verit +verit +veriti +veriti +vermilion +vermin +vernon +verona +veronesa +versal +vers +vers +vers +vert +veri +vesper +vessel +vessel +vestal +vestment +vestur +vetch +vetch +veux +vex +vexat +vexat +vex +vex +vexest +vexeth +vex +vi +via +vial +vial +viand +viand +vic +vicar +vice +viceger +vicentio +viceroi +viceroi +vice +vici +viciou +vicious +vict +victim +victor +victoress +victori +victori +victor +victori +victual +victual +victual +videlicet +video +vide +videsn +vidi +vie +vi +vienna +view +viewest +vieweth +view +viewless +view +vigil +vigil +vigil +vigit +vigour +vii +viii +vile +vile +vile +viler +vilest +vill +villag +villag +villageri +villag +villain +villaini +villain +villain +villain +villaini +villani +villan +villani +villiago +villian +villianda +villian +vinaigr +vincentio +vincer +vindic +vine +vinegar +vine +vineyard +vineyard +vint +vintner +viol +viola +violat +violat +violat +violat +violat +violenc +violent +violenta +violenteth +violent +violet +violet +viper +viper +viper +vir +virgilia +virgin +virgin +virginal +virgin +virginiu +virgin +virgo +virtu +virtu +virtuou +virtuous +visag +visag +visag +visard +viscount +visibl +visibl +vision +vision +visit +visit +visit +visit +visit +visit +visitor +visitor +visit +visor +vita +vita +vital +vitement +vitruvio +vitx +viva +vivant +vive +vixen +viz +vizament +vizard +vizard +vizard +vizor +vlout +vocat +vocativo +vocatur +voce +voic +voic +voic +void +void +void +voke +volabl +volant +volivorco +vollei +volquessen +volsc +volsc +volscian +volscian +volt +voltemand +volubl +volubl +volum +volum +volumnia +volumniu +voluntari +voluntari +voluptu +voluptu +vomiss +vomit +vomit +vor +vore +vortnight +vot +votari +votarist +votarist +votari +votr +vouch +voucher +voucher +vouch +vouch +vouchsaf +vouchsaf +vouchsaf +vouchsaf +vouchsaf +voudrai +vour +vou +voutsaf +vow +vow +vowel +vowel +vow +vow +vox +voyag +voyag +vraiment +vulcan +vulgar +vulgarli +vulgar +vulgo +vulner +vultur +vultur +vurther +w +wad +waddl +wade +wade +wafer +waft +waftag +waft +waft +wag +wage +wager +wager +wage +wag +waggish +waggl +waggon +waggon +wagon +wagon +wag +wagtail +wail +wail +wail +wail +wain +wainrop +wainscot +waist +wait +wait +waiter +waiteth +wait +wait +wak +wake +wake +wakefield +waken +waken +wake +wakest +wake +wale +walk +walk +walk +walk +wall +wall +wallet +wallet +wallon +walloon +wallow +wall +walnut +walter +wan +wand +wander +wander +wander +wander +wander +wand +wane +wane +wane +wane +wann +want +want +wanteth +want +wanton +wantonli +wanton +wanton +want +wappen +war +warbl +warbl +ward +ward +warden +warder +warder +wardrob +wardrop +ward +ware +ware +warili +warkworth +warlik +warm +warm +warmer +warm +warm +warmth +warn +warn +warn +warn +warn +warp +warp +warr +warrant +warrant +warranteth +warrantis +warrant +warrant +warranti +warren +warren +war +warrior +warrior +war +wart +warwick +warwickshir +wari +wa +wash +wash +washer +wash +washford +wash +wasp +waspish +wasp +wassail +wassail +wast +wast +wast +wast +waster +wast +wast +wat +watch +watch +watcher +watch +watch +watch +watch +watchman +watchmen +watchword +water +waterdrop +water +waterfli +waterford +water +waterish +waterpot +waterrug +water +waterton +wateri +wav +wave +wave +waver +waver +waver +wave +wave +waw +wawl +wax +wax +waxen +wax +wax +wai +waylaid +waylai +wai +wayward +wayward +wayward +we +weak +weaken +weaken +weaker +weakest +weakl +weakli +weak +weal +wealsmen +wealth +wealthiest +wealthili +wealthi +wealtlli +wean +weapon +weapon +wear +wearer +wearer +weari +weari +weariest +wearili +weari +wear +wearisom +wear +weari +weasel +weather +weathercock +weather +weav +weav +weaver +weaver +weav +weav +web +wed +wed +wed +wedg +wedg +wedg +wedlock +wednesdai +weed +weed +weeder +weed +weed +weedi +week +week +weekli +week +ween +ween +weep +weeper +weep +weepingli +weep +weep +weet +weigh +weigh +weigh +weigh +weight +weightier +weightless +weight +weighti +weird +welcom +welcom +welcom +welcom +welcomest +welfar +welkin +well +well +welsh +welshman +welshmen +welshwomen +wench +wench +wench +wend +went +wept +weradai +were +wert +west +western +westminst +westmoreland +westward +wet +wether +wet +wezand +whale +whale +wharf +wharf +what +whate +whatev +whatso +whatsoev +whatsom +whe +wheat +wheaten +wheel +wheel +wheel +wheer +wheeson +wheez +whelk +whelk +whelm +whelp +whelp +whelp +when +whena +whenc +whencesoev +whene +whenev +whensoev +where +whereabout +wherea +whereat +wherebi +wherefor +wherein +whereinto +whereof +whereon +whereout +whereso +whereso +wheresoev +wheresom +whereto +whereuntil +whereunto +whereupon +wherev +wherewith +wherewith +whet +whether +whetston +whet +whew +whei +which +whiff +whiffler +while +while +whilst +whin +whine +whine +whinid +whine +whip +whipp +whipper +whip +whip +whipster +whipstock +whipt +whirl +whirl +whirligig +whirl +whirlpool +whirl +whirlwind +whirlwind +whisp +whisper +whisper +whisper +whisper +whist +whistl +whistl +whistl +whit +white +whitehal +white +white +whiter +white +whitest +whither +white +whitmor +whitster +whitsun +whittl +whizz +who +whoa +whoe +whoever +whole +wholesom +wholesom +wholli +whom +whoobub +whoop +whoop +whor +whore +whoremast +whoremasterli +whoremong +whore +whoreson +whoreson +whore +whorish +whose +whoso +whoso +whosoev +why +wi +wick +wick +wickedn +wicked +wicket +wicki +wid +wide +widen +wider +widow +widow +widow +widowhood +widow +wield +wife +wight +wight +wild +wildcat +wilder +wilder +wildest +wildfir +wildli +wild +wild +wile +wil +wilful +wilfulli +wilfuln +wil +will +will +willer +willeth +william +william +will +willingli +willing +willoughbi +willow +will +wilt +wiltshir +wimpl +win +winc +winch +winchest +wincot +wind +wind +windgal +wind +windlass +windmil +window +window +windpip +wind +windsor +windi +wine +wing +wing +wingfield +wingham +wing +wink +wink +wink +winner +winner +win +winnow +winnow +winnow +win +winter +winterli +winter +wip +wipe +wipe +wipe +wipe +wire +wire +wiri +wisdom +wisdom +wise +wiseli +wise +wiser +wisest +wish +wish +wisher +wisher +wish +wishest +wisheth +wish +wish +wishtli +wisp +wist +wit +witb +witch +witchcraft +witch +witch +with +withal +withdraw +withdraw +withdrawn +withdrew +wither +wither +wither +wither +withheld +withhold +withhold +within +withold +without +withstand +withstand +withstood +witless +wit +wit +witnesseth +wit +wit +wit +wittenberg +wittiest +wittili +wit +wittingli +wittol +wittolli +witti +wiv +wive +wive +wive +wive +wizard +wizard +wo +woe +woeful +woeful +woefullest +woe +woful +wolf +wolfish +wolsei +wolv +wolvish +woman +womanhood +womanish +womankind +womanli +womb +womb +wombi +women +won +woncot +wond +wonder +wonder +wonder +wonderfulli +wonder +wonder +wondrou +wondrous +wont +wont +woo +wood +woodbin +woodcock +woodcock +wooden +woodland +woodman +woodmong +wood +woodstock +woodvil +woo +wooer +wooer +wooe +woof +woo +wooingli +wool +woollen +woolli +woolsack +woolsei +woolward +woo +wor +worcest +word +word +wore +worin +work +worker +work +work +workman +workmanli +workmanship +workmen +work +worki +world +worldl +worldli +world +worm +worm +wormwood +wormi +worn +worri +worri +worri +worri +wors +worser +worship +worship +worshipfulli +worshipp +worshipp +worshipp +worshippest +worship +worst +worst +wort +worth +worthi +worthier +worthi +worthiest +worthili +worthi +worthless +worth +worthi +wort +wot +wot +wot +wouid +would +wouldest +wouldst +wound +wound +wound +wound +woundless +wound +woun +woven +wow +wrack +wrack +wrangl +wrangler +wrangler +wrangl +wrap +wrapp +wrap +wrapt +wrath +wrath +wrathfulli +wrath +wreak +wreak +wreak +wreath +wreath +wreathen +wreath +wreck +wreck +wreck +wren +wrench +wrench +wren +wrest +wrest +wrest +wrestl +wrestl +wrestler +wrestl +wretch +wretchcd +wretch +wretched +wretch +wring +wringer +wring +wring +wrinkl +wrinkl +wrinkl +wrist +wrist +writ +write +writer +writer +write +writhl +write +write +writ +written +wrong +wrong +wronger +wrong +wrongfulli +wrong +wrongli +wrong +wronk +wrote +wroth +wrought +wrung +wry +wry +wt +wul +wye +x +xanthipp +xi +xii +xiii +xiv +xv +y +yard +yard +yare +yare +yarn +yaughan +yaw +yawn +yawn +yclepe +yclipe +ye +yea +yead +year +yearli +yearn +yearn +year +yea +yeast +yedward +yell +yellow +yellow +yellow +yellow +yellow +yell +yelp +yeoman +yeomen +yerk +ye +yesterdai +yesterdai +yesternight +yesti +yet +yew +yicld +yield +yield +yielder +yielder +yield +yield +yok +yoke +yoke +yokefellow +yoke +yoketh +yon +yond +yonder +yongrei +yore +yorick +york +yorkist +york +yorkshir +you +young +younger +youngest +youngl +youngl +youngli +younker +your +your +yourself +yourselv +youth +youth +youth +youtli +zani +zani +zeal +zealou +zeal +zed +zenelophon +zenith +zephyr +zir +zo +zodiac +zodiac +zone +zound +zwagger \ No newline at end of file diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/support/BigramTokenizerTest.php b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/support/BigramTokenizerTest.php new file mode 100644 index 0000000..fe8637a --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/support/BigramTokenizerTest.php @@ -0,0 +1,16 @@ +tokenize($text); + + $this->assertEquals(["qu", "ui", "ic", "ck", "fo", "ox", "xe", "es"], $res); + } +} diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/support/EdgeNgramTokenizerTest.php b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/support/EdgeNgramTokenizerTest.php new file mode 100644 index 0000000..b4f0234 --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/support/EdgeNgramTokenizerTest.php @@ -0,0 +1,26 @@ +tokenize($text); + + $this->assertEquals(["qu", "qui", "quic", "quick", "fo", "fox", "foxe", "foxes"], $res); + } + + public function testEdgeNgramTokenize2() + { + $tokenizer = new EdgeNgramTokenizer; + + $text = "Germany"; + $res = $tokenizer->tokenize($text); + + $this->assertEquals(["ge", "ger", "germ", "germa", "german", "germany"], $res); + } +} diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/support/ExpressionTest.php b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/support/ExpressionTest.php new file mode 100644 index 0000000..9b26155 --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/support/ExpressionTest.php @@ -0,0 +1,23 @@ +assertEquals(['a', 'b', '&', 'c', '|'], $exp->toPostfix("a&b|c")); + $this->assertEquals(['aw', 'bw', '&', 'cw', '|'], $exp->toPostfix("aw&bw|cw")); + $this->assertEquals(['aw', 'bw', '&', 'cw', '|'], $exp->toPostfix("aw&bw|cw)")); + $this->assertEquals(['a', 'b', 'd', 'c', '&', '|', '&'], $exp->toPostfix("a&(b|d&c)")); + $this->assertEquals(['a', 'b', '|'], $exp->toPostfix("a|b")); + $this->assertEquals(['great', 'awsome', '|'], $exp->toPostfix("great|awsome")); + $this->assertEquals(['great', 'awsome', '|'], $exp->toPostfix("great or awsome")); + $this->assertEquals(['great', 'awsome', '&'], $exp->toPostfix("great awsome")); + $this->assertEquals(['email', 'test', '&', 'com', '&'], $exp->toPostfix("email test com")); + $this->assertEquals(['first', 'last', '&', 'something', 'else', '&', '|'], $exp->toPostfix("(first last) or (something else)")); + $this->assertEquals(['first', 'last', '|', 'something', 'else', '|', '&'], $exp->toPostfix("(first or last)&(something or else)")); + $this->assertEquals(['first', 'last', '|', 'something', '&', 'else', '|'], $exp->toPostfix("(first or last)&something or else)")); + } +} diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/support/FivegramTokenizerTest.php b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/support/FivegramTokenizerTest.php new file mode 100644 index 0000000..9b0aec5 --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/support/FivegramTokenizerTest.php @@ -0,0 +1,16 @@ +tokenize($text); + + $this->assertEquals(["quick", "foxes"], $res); + } +} diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/support/FourgramTokenizerTest.php b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/support/FourgramTokenizerTest.php new file mode 100644 index 0000000..dbebe4b --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/support/FourgramTokenizerTest.php @@ -0,0 +1,16 @@ +tokenize($text); + + $this->assertEquals(["quic", "uick", "foxe", "oxes"], $res); + } +} diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/support/HighlighterTest.php b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/support/HighlighterTest.php new file mode 100644 index 0000000..e4e9dc6 --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/support/HighlighterTest.php @@ -0,0 +1,42 @@ +highlight($text, "is text", 'em', ['wholeWord' => false]); + $this->assertEquals("This is some text", $output); + + $output = $hl->highlight($text, "is text", 'em', ['wholeWord' => true]); + $this->assertEquals("This is some text", $output); + + $output = $hl->highlight($text, "this text", 'em', ['caseSensitive' => true]); + $this->assertEquals("This is some text", $output); + + $output = $hl->highlight($text, "this text", 'em', ['caseSensitive' => false]); + $this->assertEquals("This is some text", $output); + + $output = $hl->highlight($text, "text", 'em'); + $this->assertEquals("This is some text", $output); + + $output = $hl->highlight($text, "text", 'b'); + $this->assertEquals("This is some text", $output); + } + + public function testExtractRelevant() + { + $hl = new Highlighter; + $words = "This is some text"; + $fulltext = "bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla ". + "bla bla bla This is a sentence that contains the phrase This is some text and ". + "thats it bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla ". + "bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla ". + "bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla "; + $res = $hl->extractRelevant($words, $fulltext, 100); + $this->assertEquals("...bla This is a sentence that contains the phrase This is some text and thats it bla bla bla bla...", $res); + } +} diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/support/NGramTokenizerTest.php b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/support/NGramTokenizerTest.php new file mode 100644 index 0000000..8b75ccb --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/support/NGramTokenizerTest.php @@ -0,0 +1,37 @@ +tokenize($text); + + $this->assertEquals(["qui", "uic", "ick", "fox", "oxe", "xes"], $res); + } + + public function testNgram12Tokenize() + { + $tokenizer = new NGramTokenizer(1, 2); + + $text = "Quick Fox"; + $res = $tokenizer->tokenize($text); + + $this->assertEquals(["q", "u", "i", "c", "k", "qu", "ui", "ic", "ck", "f", "o", "x", "fo", "ox"], $res); + } + + public function testFourGramTokenize() + { + $tokenizer = new NGramTokenizer(4, 4); + + $text = "Quick Foxes"; + $res = $tokenizer->tokenize($text); + + $this->assertEquals(["quic", "uick", "foxe", "oxes"], $res); + } + +} diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/support/ProductTokenizerTest.php b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/support/ProductTokenizerTest.php new file mode 100644 index 0000000..8006a76 --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/support/ProductTokenizerTest.php @@ -0,0 +1,39 @@ +tokenize($text); + + $this->assertContains("this", $res); + $this->assertContains("text", $res); + + $text = "123 123 123"; + $res = $tokenizer->tokenize($text); + $this->assertContains("123", $res); + + $text = "Hi! This text contains an test@email.com. Test's email 123."; + $res = $tokenizer->tokenize($text); + + $this->assertContains("test's", $res); + $this->assertContains("email", $res); + $this->assertContains("contains", $res); + $this->assertContains("123", $res); + + $text = "Superman (1941)"; + $res = $tokenizer->tokenize($text); + $this->assertContains("superman", $res); + $this->assertContains("(1941)", $res); + + $text = "čćž šđ"; + $res = $tokenizer->tokenize($text); + $this->assertContains("čćž", $res); + $this->assertContains("šđ", $res); + } +} diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/support/TokenizerTest.php b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/support/TokenizerTest.php new file mode 100644 index 0000000..5fbcc5b --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/support/TokenizerTest.php @@ -0,0 +1,39 @@ +tokenize($text); + + $this->assertContains("this", $res); + $this->assertContains("text", $res); + + $text = "123 123 123"; + $res = $tokenizer->tokenize($text); + $this->assertContains("123", $res); + + $text = "Hi! This text contains an test@email.com. Test's email 123."; + $res = $tokenizer->tokenize($text); + $this->assertContains("test", $res); + $this->assertContains("email", $res); + $this->assertContains("test@email", $res); + $this->assertContains("contains", $res); + $this->assertContains("123", $res); + + $text = "Superman (1941)"; + $res = $tokenizer->tokenize($text); + $this->assertContains("superman", $res); + $this->assertContains("1941", $res); + + $text = "čćž šđ"; + $res = $tokenizer->tokenize($text); + $this->assertContains("čćž", $res); + $this->assertContains("šđ", $res); + } +} diff --git a/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/support/TrigramTokenizerTest.php b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/support/TrigramTokenizerTest.php new file mode 100644 index 0000000..da2e411 --- /dev/null +++ b/plugins/tntsearch/vendor/teamtnt/tntsearch/tests/support/TrigramTokenizerTest.php @@ -0,0 +1,16 @@ +tokenize($text); + + $this->assertEquals(["qui", "uic", "ick", "fox", "oxe", "xes"], $res); + } +} diff --git a/plugins/tntsearch/webpack.conf.js b/plugins/tntsearch/webpack.conf.js new file mode 100644 index 0000000..f21c4c1 --- /dev/null +++ b/plugins/tntsearch/webpack.conf.js @@ -0,0 +1,45 @@ +var webpack = require('webpack'), + path = require('path'); + +module.exports = env => { + console.log("Environment: " + env.NODE_ENV); + + return { + entry: './app/main.js', + /* entry: { + app: './app/main.js', + vendor: ['whatwg-fetch', 'history', 'lodash'] + },*/ + devtool: env.dev ? 'cheap-module-eval-source-map' : 'nosources-source-map', + output: { + path: path.resolve(__dirname, 'assets'), + filename: 'tntsearch.js' + }, + plugins: [ + new webpack.ProvidePlugin({ + 'fetch': 'imports-loader?this=>global!exports-loader?global.fetch!whatwg-fetch' + }), + // new webpack.optimize.CommonsChunkPlugin({ name: 'vendor', filename: 'vendor.js' }), + new webpack.optimize.UglifyJsPlugin({ + compress: { warnings: false }, + sourceMap: env.dev, + output: { comments: false, semicolons: true } + }) + ], + module: { + rules: [ + { enforce: 'pre', test: /\.json$/, loader: 'json-loader' }, + { enforce: 'pre', test: /\.js$/, loader: 'eslint-loader', exclude: /node_modules/ }, + { test: /\.css$/, loader: 'style-loader!css-loader' }, + { + test: /\.js$/, + loader: 'babel-loader', + exclude: /node_modules/, + query: { + presets: ['es2015', 'stage-3'] + } + } + ] + } + } +}; diff --git a/plugins/tntsearch/yarn.lock b/plugins/tntsearch/yarn.lock new file mode 100644 index 0000000..d1e244d --- /dev/null +++ b/plugins/tntsearch/yarn.lock @@ -0,0 +1,4721 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/code-frame@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.44.tgz#2a02643368de80916162be70865c97774f3adbd9" + integrity sha512-cuAuTTIQ9RqcFRJ/Y8PvTh+paepNcaGxwQwjIDRWPXmzzyAeCO4KqS9ikMvq0MCbRk6GlYKwfzStrcP3/jSL8g== + dependencies: + "@babel/highlight" "7.0.0-beta.44" + +"@babel/generator@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.0.0-beta.44.tgz#c7e67b9b5284afcf69b309b50d7d37f3e5033d42" + integrity sha512-5xVb7hlhjGcdkKpMXgicAVgx8syK5VJz193k0i/0sLP6DzE6lRrU1K3B/rFefgdo9LPGMAOOOAWW4jycj07ShQ== + dependencies: + "@babel/types" "7.0.0-beta.44" + jsesc "^2.5.1" + lodash "^4.2.0" + source-map "^0.5.0" + trim-right "^1.0.1" + +"@babel/helper-function-name@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.44.tgz#e18552aaae2231100a6e485e03854bc3532d44dd" + integrity sha512-MHRG2qZMKMFaBavX0LWpfZ2e+hLloT++N7rfM3DYOMUOGCD8cVjqZpwiL8a0bOX3IYcQev1ruciT0gdFFRTxzg== + dependencies: + "@babel/helper-get-function-arity" "7.0.0-beta.44" + "@babel/template" "7.0.0-beta.44" + "@babel/types" "7.0.0-beta.44" + +"@babel/helper-get-function-arity@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.44.tgz#d03ca6dd2b9f7b0b1e6b32c56c72836140db3a15" + integrity sha512-w0YjWVwrM2HwP6/H3sEgrSQdkCaxppqFeJtAnB23pRiJB5E/O9Yp7JAAeWBl+gGEgmBFinnTyOv2RN7rcSmMiw== + dependencies: + "@babel/types" "7.0.0-beta.44" + +"@babel/helper-split-export-declaration@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.44.tgz#c0b351735e0fbcb3822c8ad8db4e583b05ebd9dc" + integrity sha512-aQ7QowtkgKKzPGf0j6u77kBMdUFVBKNHw2p/3HX/POt5/oz8ec5cs0GwlgM8Hz7ui5EwJnzyfRmkNF1Nx1N7aA== + dependencies: + "@babel/types" "7.0.0-beta.44" + +"@babel/highlight@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0-beta.44.tgz#18c94ce543916a80553edcdcf681890b200747d5" + integrity sha512-Il19yJvy7vMFm8AVAh6OZzaFoAd0hbkeMZiX3P5HGD+z7dyI7RzndHB0dg6Urh/VAFfHtpOIzDUSxmY6coyZWQ== + dependencies: + chalk "^2.0.0" + esutils "^2.0.2" + js-tokens "^3.0.0" + +"@babel/runtime@^7.1.2": + version "7.11.2" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.11.2.tgz#f549c13c754cc40b87644b9fa9f09a6a95fe0736" + integrity sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/template@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.44.tgz#f8832f4fdcee5d59bf515e595fc5106c529b394f" + integrity sha512-w750Sloq0UNifLx1rUqwfbnC6uSUk0mfwwgGRfdLiaUzfAOiH0tHJE6ILQIUi3KYkjiCDTskoIsnfqZvWLBDng== + dependencies: + "@babel/code-frame" "7.0.0-beta.44" + "@babel/types" "7.0.0-beta.44" + babylon "7.0.0-beta.44" + lodash "^4.2.0" + +"@babel/traverse@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.44.tgz#a970a2c45477ad18017e2e465a0606feee0d2966" + integrity sha512-UHuDz8ukQkJCDASKHf+oDt3FVUzFd+QYfuBIsiNu/4+/ix6pP/C+uQZJ6K1oEfbCMv/IKWbgDEh7fcsnIE5AtA== + dependencies: + "@babel/code-frame" "7.0.0-beta.44" + "@babel/generator" "7.0.0-beta.44" + "@babel/helper-function-name" "7.0.0-beta.44" + "@babel/helper-split-export-declaration" "7.0.0-beta.44" + "@babel/types" "7.0.0-beta.44" + babylon "7.0.0-beta.44" + debug "^3.1.0" + globals "^11.1.0" + invariant "^2.2.0" + lodash "^4.2.0" + +"@babel/types@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.44.tgz#6b1b164591f77dec0a0342aca995f2d046b3a757" + integrity sha512-5eTV4WRmqbaFM3v9gHAIljEQJU4Ssc6fxL61JN+Oe2ga/BwyjzjamwkCVVAQjHGuAX8i0BWo42dshL8eO5KfLQ== + dependencies: + esutils "^2.0.2" + lodash "^4.2.0" + to-fast-properties "^2.0.0" + +acorn-dynamic-import@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz#c752bd210bef679501b6c6cb7fc84f8f47158cc4" + integrity sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ= + dependencies: + acorn "^4.0.3" + +acorn-jsx@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" + integrity sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s= + dependencies: + acorn "^3.0.4" + +acorn@^3.0.4: + version "3.3.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" + integrity sha1-ReN/s56No/JbruP/U2niu18iAXo= + +acorn@^4.0.3: + version "4.0.13" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" + integrity sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c= + +acorn@^5.0.0, acorn@^5.5.0: + version "5.7.4" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e" + integrity sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg== + +ajv-keywords@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762" + integrity sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I= + +ajv-keywords@^3.1.0: + version "3.5.2" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + +ajv@^5.2.3, ajv@^5.3.0: + version "5.5.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" + integrity sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU= + dependencies: + co "^4.6.0" + fast-deep-equal "^1.0.0" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.3.0" + +ajv@^6.1.0: + version "6.12.4" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.4.tgz#0614facc4522127fa713445c6bfd3ebd376e2234" + integrity sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +align-text@^0.1.1, align-text@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" + integrity sha1-DNkKVhCT810KmSVsIrcGlDP60Rc= + dependencies: + kind-of "^3.0.2" + longest "^1.0.1" + repeat-string "^1.5.2" + +alphanum-sort@^1.0.1, alphanum-sort@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" + integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= + +ansi-escapes@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" + integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +anymatch@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" + integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + +asn1.js@^5.2.0: + version "5.4.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" + integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + safer-buffer "^2.1.0" + +assert@^1.1.1: + version "1.5.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" + integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== + dependencies: + object-assign "^4.1.1" + util "0.10.3" + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + +async-each@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" + integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== + +async@^2.1.2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" + integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== + dependencies: + lodash "^4.17.14" + +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + +autoprefixer@^6.3.1: + version "6.7.7" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014" + integrity sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ= + dependencies: + browserslist "^1.7.6" + caniuse-db "^1.0.30000634" + normalize-range "^0.1.2" + num2fraction "^1.2.2" + postcss "^5.2.16" + postcss-value-parser "^3.2.3" + +babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" + integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= + dependencies: + chalk "^1.1.3" + esutils "^2.0.2" + js-tokens "^3.0.2" + +babel-core@^6.26.0: + version "6.26.3" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207" + integrity sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA== + dependencies: + babel-code-frame "^6.26.0" + babel-generator "^6.26.0" + babel-helpers "^6.24.1" + babel-messages "^6.23.0" + babel-register "^6.26.0" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + convert-source-map "^1.5.1" + debug "^2.6.9" + json5 "^0.5.1" + lodash "^4.17.4" + minimatch "^3.0.4" + path-is-absolute "^1.0.1" + private "^0.1.8" + slash "^1.0.0" + source-map "^0.5.7" + +babel-eslint@^8.2.1: + version "8.2.6" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-8.2.6.tgz#6270d0c73205628067c0f7ae1693a9e797acefd9" + integrity sha512-aCdHjhzcILdP8c9lej7hvXKvQieyRt20SF102SIGyY4cUIiw6UaAtK4j2o3dXX74jEmy0TJ0CEhv4fTIM3SzcA== + dependencies: + "@babel/code-frame" "7.0.0-beta.44" + "@babel/traverse" "7.0.0-beta.44" + "@babel/types" "7.0.0-beta.44" + babylon "7.0.0-beta.44" + eslint-scope "3.7.1" + eslint-visitor-keys "^1.0.0" + +babel-generator@^6.26.0: + version "6.26.1" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" + integrity sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA== + dependencies: + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + detect-indent "^4.0.0" + jsesc "^1.3.0" + lodash "^4.17.4" + source-map "^0.5.7" + trim-right "^1.0.1" + +babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" + integrity sha1-zORReto1b0IgvK6KAsKzRvmlZmQ= + dependencies: + babel-helper-explode-assignable-expression "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-call-delegate@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" + integrity sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340= + dependencies: + babel-helper-hoist-variables "^6.24.1" + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-define-map@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f" + integrity sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8= + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-helper-explode-assignable-expression@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" + integrity sha1-8luCz33BBDPFX3BZLVdGQArCLKo= + dependencies: + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-function-name@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" + integrity sha1-00dbjAPtmCQqJbSDUasYOZ01gKk= + dependencies: + babel-helper-get-function-arity "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-get-function-arity@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" + integrity sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-hoist-variables@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" + integrity sha1-HssnaJydJVE+rbyZFKc/VAi+enY= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-optimise-call-expression@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" + integrity sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-regex@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72" + integrity sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI= + dependencies: + babel-runtime "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-helper-remap-async-to-generator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" + integrity sha1-XsWBgnrXI/7N04HxySg5BnbkVRs= + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-replace-supers@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" + integrity sha1-v22/5Dk40XNpohPKiov3S2qQqxo= + dependencies: + babel-helper-optimise-call-expression "^6.24.1" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helpers@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" + integrity sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI= + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-loader@^7.1.2: + version "7.1.5" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.1.5.tgz#e3ee0cd7394aa557e013b02d3e492bfd07aa6d68" + integrity sha512-iCHfbieL5d1LfOQeeVJEUyD9rTwBcP/fcEbRCfempxTDuqrKpu0AZjLAQHEQa3Yqyj9ORKe2iHfoj4rHLf7xpw== + dependencies: + find-cache-dir "^1.0.0" + loader-utils "^1.0.2" + mkdirp "^0.5.1" + +babel-messages@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" + integrity sha1-8830cDhYA1sqKVHG7F7fbGLyYw4= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-check-es2015-constants@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" + integrity sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-syntax-async-functions@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" + integrity sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU= + +babel-plugin-syntax-async-generators@^6.5.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz#6bc963ebb16eccbae6b92b596eb7f35c342a8b9a" + integrity sha1-a8lj67FuzLrmuStZbrfzXDQqi5o= + +babel-plugin-syntax-exponentiation-operator@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" + integrity sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4= + +babel-plugin-syntax-object-rest-spread@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" + integrity sha1-/WU28rzhODb/o6VFjEkDpZe7O/U= + +babel-plugin-syntax-trailing-function-commas@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" + integrity sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM= + +babel-plugin-transform-async-generator-functions@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz#f058900145fd3e9907a6ddf28da59f215258a5db" + integrity sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds= + dependencies: + babel-helper-remap-async-to-generator "^6.24.1" + babel-plugin-syntax-async-generators "^6.5.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-async-to-generator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" + integrity sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E= + dependencies: + babel-helper-remap-async-to-generator "^6.24.1" + babel-plugin-syntax-async-functions "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-arrow-functions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" + integrity sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" + integrity sha1-u8UbSflk1wy42OC5ToICRs46YUE= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-block-scoping@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" + integrity sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8= + dependencies: + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-plugin-transform-es2015-classes@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" + integrity sha1-WkxYpQyclGHlZLSyo7+ryXolhNs= + dependencies: + babel-helper-define-map "^6.24.1" + babel-helper-function-name "^6.24.1" + babel-helper-optimise-call-expression "^6.24.1" + babel-helper-replace-supers "^6.24.1" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-computed-properties@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" + integrity sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM= + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-destructuring@^6.22.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" + integrity sha1-mXux8auWf2gtKwh2/jWNYOdlxW0= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-duplicate-keys@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" + integrity sha1-c+s9MQypaePvnskcU3QabxV2Qj4= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-for-of@^6.22.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" + integrity sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-function-name@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" + integrity sha1-g0yJhTvDaxrw86TF26qU/Y6sqos= + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-literals@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" + integrity sha1-T1SgLWzWbPkVKAAZox0xklN3yi4= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-modules-amd@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" + integrity sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ= + dependencies: + babel-plugin-transform-es2015-modules-commonjs "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-modules-commonjs@^6.24.1: + version "6.26.2" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz#58a793863a9e7ca870bdc5a881117ffac27db6f3" + integrity sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q== + dependencies: + babel-plugin-transform-strict-mode "^6.24.1" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-types "^6.26.0" + +babel-plugin-transform-es2015-modules-systemjs@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" + integrity sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM= + dependencies: + babel-helper-hoist-variables "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-modules-umd@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" + integrity sha1-rJl+YoXNGO1hdq22B9YCNErThGg= + dependencies: + babel-plugin-transform-es2015-modules-amd "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-object-super@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" + integrity sha1-JM72muIcuDp/hgPa0CH1cusnj40= + dependencies: + babel-helper-replace-supers "^6.24.1" + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-parameters@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" + integrity sha1-V6w1GrScrxSpfNE7CfZv3wpiXys= + dependencies: + babel-helper-call-delegate "^6.24.1" + babel-helper-get-function-arity "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-shorthand-properties@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" + integrity sha1-JPh11nIch2YbvZmkYi5R8U3jiqA= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-spread@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" + integrity sha1-1taKmfia7cRTbIGlQujdnxdG+NE= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-sticky-regex@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" + integrity sha1-AMHNsaynERLN8M9hJsLta0V8zbw= + dependencies: + babel-helper-regex "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-template-literals@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" + integrity sha1-qEs0UPfp+PH2g51taH2oS7EjbY0= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-typeof-symbol@^6.22.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" + integrity sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-unicode-regex@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" + integrity sha1-04sS9C6nMj9yk4fxinxa4frrNek= + dependencies: + babel-helper-regex "^6.24.1" + babel-runtime "^6.22.0" + regexpu-core "^2.0.0" + +babel-plugin-transform-exponentiation-operator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" + integrity sha1-KrDJx/MJj6SJB3cruBP+QejeOg4= + dependencies: + babel-helper-builder-binary-assignment-operator-visitor "^6.24.1" + babel-plugin-syntax-exponentiation-operator "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-object-rest-spread@^6.22.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06" + integrity sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY= + dependencies: + babel-plugin-syntax-object-rest-spread "^6.8.0" + babel-runtime "^6.26.0" + +babel-plugin-transform-regenerator@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" + integrity sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8= + dependencies: + regenerator-transform "^0.10.0" + +babel-plugin-transform-strict-mode@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" + integrity sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-polyfill@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153" + integrity sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM= + dependencies: + babel-runtime "^6.26.0" + core-js "^2.5.0" + regenerator-runtime "^0.10.5" + +babel-preset-es2015@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz#d44050d6bc2c9feea702aaf38d727a0210538939" + integrity sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk= + dependencies: + babel-plugin-check-es2015-constants "^6.22.0" + babel-plugin-transform-es2015-arrow-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoping "^6.24.1" + babel-plugin-transform-es2015-classes "^6.24.1" + babel-plugin-transform-es2015-computed-properties "^6.24.1" + babel-plugin-transform-es2015-destructuring "^6.22.0" + babel-plugin-transform-es2015-duplicate-keys "^6.24.1" + babel-plugin-transform-es2015-for-of "^6.22.0" + babel-plugin-transform-es2015-function-name "^6.24.1" + babel-plugin-transform-es2015-literals "^6.22.0" + babel-plugin-transform-es2015-modules-amd "^6.24.1" + babel-plugin-transform-es2015-modules-commonjs "^6.24.1" + babel-plugin-transform-es2015-modules-systemjs "^6.24.1" + babel-plugin-transform-es2015-modules-umd "^6.24.1" + babel-plugin-transform-es2015-object-super "^6.24.1" + babel-plugin-transform-es2015-parameters "^6.24.1" + babel-plugin-transform-es2015-shorthand-properties "^6.24.1" + babel-plugin-transform-es2015-spread "^6.22.0" + babel-plugin-transform-es2015-sticky-regex "^6.24.1" + babel-plugin-transform-es2015-template-literals "^6.22.0" + babel-plugin-transform-es2015-typeof-symbol "^6.22.0" + babel-plugin-transform-es2015-unicode-regex "^6.24.1" + babel-plugin-transform-regenerator "^6.24.1" + +babel-preset-stage-3@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz#836ada0a9e7a7fa37cb138fb9326f87934a48395" + integrity sha1-g2raCp56f6N8sTj7kyb4eTSkg5U= + dependencies: + babel-plugin-syntax-trailing-function-commas "^6.22.0" + babel-plugin-transform-async-generator-functions "^6.24.1" + babel-plugin-transform-async-to-generator "^6.24.1" + babel-plugin-transform-exponentiation-operator "^6.24.1" + babel-plugin-transform-object-rest-spread "^6.22.0" + +babel-register@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" + integrity sha1-btAhFz4vy0htestFxgCahW9kcHE= + dependencies: + babel-core "^6.26.0" + babel-runtime "^6.26.0" + core-js "^2.5.0" + home-or-tmp "^2.0.0" + lodash "^4.17.4" + mkdirp "^0.5.1" + source-map-support "^0.4.15" + +babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + +babel-template@^6.24.1, babel-template@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" + integrity sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI= + dependencies: + babel-runtime "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + lodash "^4.17.4" + +babel-traverse@^6.24.1, babel-traverse@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" + integrity sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4= + dependencies: + babel-code-frame "^6.26.0" + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + debug "^2.6.8" + globals "^9.18.0" + invariant "^2.2.2" + lodash "^4.17.4" + +babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" + integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc= + dependencies: + babel-runtime "^6.26.0" + esutils "^2.0.2" + lodash "^4.17.4" + to-fast-properties "^1.0.3" + +babylon@7.0.0-beta.44: + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.44.tgz#89159e15e6e30c5096e22d738d8c0af8a0e8ca1d" + integrity sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g== + +babylon@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" + integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== + +balanced-match@^0.4.2: + version "0.4.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" + integrity sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg= + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +base64-js@^1.0.2: + version "1.3.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" + integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + +binary-extensions@^1.0.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" + integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== + +binary-extensions@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9" + integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ== + +bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.4.0: + version "4.11.9" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828" + integrity sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw== + +bn.js@^5.1.1: + version "5.1.3" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.3.tgz#beca005408f642ebebea80b042b4d18d2ac0ee6b" + integrity sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^2.3.1, braces@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +brorand@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= + +browserify-aes@^1.0.0, browserify-aes@^1.0.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserify-cipher@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" + integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" + integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= + dependencies: + bn.js "^4.1.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3" + integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== + dependencies: + bn.js "^5.1.1" + browserify-rsa "^4.0.1" + create-hash "^1.2.0" + create-hmac "^1.1.7" + elliptic "^6.5.3" + inherits "^2.0.4" + parse-asn1 "^5.1.5" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +browserify-zlib@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== + dependencies: + pako "~1.0.5" + +browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6: + version "1.7.7" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9" + integrity sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk= + dependencies: + caniuse-db "^1.0.30000639" + electron-to-chromium "^1.2.7" + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= + +buffer@^4.3.0: + version "4.9.2" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" + integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + +builtin-status-codes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +caller-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" + integrity sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8= + dependencies: + callsites "^0.2.0" + +callsites@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" + integrity sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo= + +camelcase@^1.0.2: + version "1.2.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" + integrity sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk= + +camelcase@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= + +caniuse-api@^1.5.2: + version "1.6.1" + resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.6.1.tgz#b534e7c734c4f81ec5fbe8aca2ad24354b962c6c" + integrity sha1-tTTnxzTE+B7F++isoq0kNUuWLGw= + dependencies: + browserslist "^1.3.6" + caniuse-db "^1.0.30000529" + lodash.memoize "^4.1.2" + lodash.uniq "^4.5.0" + +caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: + version "1.0.30001122" + resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30001122.tgz#ba9089b546e5542df57f3e07de5b0c7aa6b47cf8" + integrity sha512-Tq8Jgc6ec8F7fLCEPtS23Wb8p2gGZTAT9fA4ymCeLlyYnZNslpQaa8LR7uynXwpwXqor/8rdCZyG2yKYxdc+yw== + +center-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" + integrity sha1-qg0yYptu6XIgBBHL1EYckHvCt60= + dependencies: + align-text "^0.1.3" + lazy-cache "^1.0.3" + +chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chalk@^2.0.0, chalk@^2.1.0, chalk@^2.4.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chardet@^0.4.0: + version "0.4.2" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" + integrity sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I= + +chokidar@^2.1.8: + version "2.1.8" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" + integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== + dependencies: + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + glob-parent "^3.1.0" + inherits "^2.0.3" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^3.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.2.1" + upath "^1.1.1" + optionalDependencies: + fsevents "^1.2.7" + +chokidar@^3.4.1: + version "3.4.2" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.2.tgz#38dc8e658dec3809741eb3ef7bb0a47fe424232d" + integrity sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.4.0" + optionalDependencies: + fsevents "~2.1.2" + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +circular-json@^0.3.1: + version "0.3.3" + resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" + integrity sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A== + +clap@^1.0.9: + version "1.2.3" + resolved "https://registry.yarnpkg.com/clap/-/clap-1.2.3.tgz#4f36745b32008492557f46412d66d50cb99bce51" + integrity sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA== + dependencies: + chalk "^1.1.3" + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +cli-cursor@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= + dependencies: + restore-cursor "^2.0.0" + +cli-width@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" + integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== + +cliui@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" + integrity sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE= + dependencies: + center-align "^0.1.1" + right-align "^0.1.1" + wordwrap "0.0.2" + +cliui@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" + integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0= + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + wrap-ansi "^2.0.0" + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= + +coa@~1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.4.tgz#a9ef153660d6a86a8bdec0289a5c684d217432fd" + integrity sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0= + dependencies: + q "^1.1.2" + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.3.0, color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +color-name@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-string@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-0.3.0.tgz#27d46fb67025c5c2fa25993bfbf579e47841b991" + integrity sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE= + dependencies: + color-name "^1.0.0" + +color@^0.11.0: + version "0.11.4" + resolved "https://registry.yarnpkg.com/color/-/color-0.11.4.tgz#6d7b5c74fb65e841cd48792ad1ed5e07b904d764" + integrity sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q= + dependencies: + clone "^1.0.2" + color-convert "^1.3.0" + color-string "^0.3.0" + +colormin@^1.0.5: + version "1.1.2" + resolved "https://registry.yarnpkg.com/colormin/-/colormin-1.1.2.tgz#ea2f7420a72b96881a38aae59ec124a6f7298133" + integrity sha1-6i90IKcrlogaOKrlnsEkpvcpgTM= + dependencies: + color "^0.11.0" + css-color-names "0.0.4" + has "^1.0.1" + +colors@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" + integrity sha1-FopHAXVran9RoSzgyXv6KMCE7WM= + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + +component-emitter@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +concat-stream@^1.6.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +console-browserify@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" + integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== + +constants-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= + +convert-source-map@^1.5.1: + version "1.7.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" + integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== + dependencies: + safe-buffer "~5.1.1" + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + +core-js@^2.4.0, core-js@^2.5.0: + version "2.6.11" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" + integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg== + +core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +create-ecdh@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" + integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== + dependencies: + bn.js "^4.1.0" + elliptic "^6.5.3" + +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +cross-spawn@^5.0.1, cross-spawn@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + +crypto-browserify@^3.11.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + randomfill "^1.0.3" + +css-color-names@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" + integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA= + +css-loader@^0.28.9: + version "0.28.11" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.11.tgz#c3f9864a700be2711bb5a2462b2389b1a392dab7" + integrity sha512-wovHgjAx8ZIMGSL8pTys7edA1ClmzxHeY6n/d97gg5odgsxEgKjULPR0viqyC+FWMCL9sfqoC/QCUBo62tLvPg== + dependencies: + babel-code-frame "^6.26.0" + css-selector-tokenizer "^0.7.0" + cssnano "^3.10.0" + icss-utils "^2.1.0" + loader-utils "^1.0.2" + lodash.camelcase "^4.3.0" + object-assign "^4.1.1" + postcss "^5.0.6" + postcss-modules-extract-imports "^1.2.0" + postcss-modules-local-by-default "^1.2.0" + postcss-modules-scope "^1.1.0" + postcss-modules-values "^1.3.0" + postcss-value-parser "^3.3.0" + source-list-map "^2.0.0" + +css-selector-tokenizer@^0.7.0: + version "0.7.3" + resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz#735f26186e67c749aaf275783405cf0661fae8f1" + integrity sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg== + dependencies: + cssesc "^3.0.0" + fastparse "^1.1.2" + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +cssnano@^3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38" + integrity sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg= + dependencies: + autoprefixer "^6.3.1" + decamelize "^1.1.2" + defined "^1.0.0" + has "^1.0.1" + object-assign "^4.0.1" + postcss "^5.0.14" + postcss-calc "^5.2.0" + postcss-colormin "^2.1.8" + postcss-convert-values "^2.3.4" + postcss-discard-comments "^2.0.4" + postcss-discard-duplicates "^2.0.1" + postcss-discard-empty "^2.0.1" + postcss-discard-overridden "^0.1.1" + postcss-discard-unused "^2.2.1" + postcss-filter-plugins "^2.0.0" + postcss-merge-idents "^2.1.5" + postcss-merge-longhand "^2.0.1" + postcss-merge-rules "^2.0.3" + postcss-minify-font-values "^1.0.2" + postcss-minify-gradients "^1.0.1" + postcss-minify-params "^1.0.4" + postcss-minify-selectors "^2.0.4" + postcss-normalize-charset "^1.1.0" + postcss-normalize-url "^3.0.7" + postcss-ordered-values "^2.1.0" + postcss-reduce-idents "^2.2.2" + postcss-reduce-initial "^1.0.0" + postcss-reduce-transforms "^1.0.3" + postcss-svgo "^2.1.1" + postcss-unique-selectors "^2.0.2" + postcss-value-parser "^3.2.3" + postcss-zindex "^2.0.1" + +csso@~2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/csso/-/csso-2.3.2.tgz#ddd52c587033f49e94b71fc55569f252e8ff5f85" + integrity sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U= + dependencies: + clap "^1.0.9" + source-map "^0.5.3" + +d@1, d@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" + integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== + dependencies: + es5-ext "^0.10.50" + type "^1.0.1" + +debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^3.1.0: + version "3.2.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== + dependencies: + ms "^2.1.1" + +decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + +deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +defined@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" + integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM= + +des.js@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" + integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +detect-indent@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" + integrity sha1-920GQ1LN9Docts5hnE7jqUdd4gg= + dependencies: + repeating "^2.0.0" + +diffie-hellman@^5.0.0: + version "5.0.3" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +domain-browser@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" + integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== + +domready@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/domready/-/domready-1.0.8.tgz#91f252e597b65af77e745ae24dd0185d5e26d58c" + integrity sha1-kfJS5Ze2Wvd+dFriTdAYXV4m1Yw= + +electron-to-chromium@^1.2.7: + version "1.3.558" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.558.tgz#a329d3139cb33e8652a7e7db4c5ae26e294b9f60" + integrity sha512-r6th6b/TU2udqVoUDGWHF/z2ACJVnEei0wvWZf/nt+Qql1Vxh60ZYPhQP46j4D73T/Jou7hl4TqQfxben+qJTg== + +elliptic@^6.5.3: + version "6.5.3" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.3.tgz#cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6" + integrity sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw== + dependencies: + bn.js "^4.4.0" + brorand "^1.0.1" + hash.js "^1.0.0" + hmac-drbg "^1.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.0" + +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + +enhanced-resolve@^3.4.0: + version "3.4.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz#0421e339fd71419b3da13d129b3979040230476e" + integrity sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24= + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.4.0" + object-assign "^4.0.1" + tapable "^0.2.7" + +errno@^0.1.3: + version "0.1.7" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" + integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg== + dependencies: + prr "~1.0.1" + +error-ex@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.50, es5-ext@~0.10.14: + version "0.10.53" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1" + integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q== + dependencies: + es6-iterator "~2.0.3" + es6-symbol "~3.1.3" + next-tick "~1.0.0" + +es6-iterator@^2.0.3, es6-iterator@~2.0.1, es6-iterator@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" + integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= + dependencies: + d "1" + es5-ext "^0.10.35" + es6-symbol "^3.1.1" + +es6-map@^0.1.3: + version "0.1.5" + resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0" + integrity sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA= + dependencies: + d "1" + es5-ext "~0.10.14" + es6-iterator "~2.0.1" + es6-set "~0.1.5" + es6-symbol "~3.1.1" + event-emitter "~0.3.5" + +es6-set@~0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1" + integrity sha1-0rPsXU2ADO2BjbU40ol02wpzzLE= + dependencies: + d "1" + es5-ext "~0.10.14" + es6-iterator "~2.0.1" + es6-symbol "3.1.1" + event-emitter "~0.3.5" + +es6-symbol@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" + integrity sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc= + dependencies: + d "1" + es5-ext "~0.10.14" + +es6-symbol@^3.1.1, es6-symbol@~3.1.1, es6-symbol@~3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" + integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== + dependencies: + d "^1.0.1" + ext "^1.1.2" + +es6-weak-map@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.3.tgz#b6da1f16cc2cc0d9be43e6bdbfc5e7dfcdf31d53" + integrity sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA== + dependencies: + d "1" + es5-ext "^0.10.46" + es6-iterator "^2.0.3" + es6-symbol "^3.1.1" + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +escope@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3" + integrity sha1-4Bl16BJ4GhY6ba392AOY3GTIicM= + dependencies: + es6-map "^0.1.3" + es6-weak-map "^2.0.1" + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-config-defaults@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/eslint-config-defaults/-/eslint-config-defaults-9.0.0.tgz#a090adc13b2935e3f43b3cd048a92701654e5ad5" + integrity sha1-oJCtwTspNeP0OzzQSKknAWVOWtU= + +eslint-loader@^1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/eslint-loader/-/eslint-loader-1.9.0.tgz#7e1be9feddca328d3dcfaef1ad49d5beffe83a13" + integrity sha512-40aN976qSNPyb9ejTqjEthZITpls1SVKtwguahmH1dzGCwQU/vySE+xX33VZmD8csU0ahVNCtFlsPgKqRBiqgg== + dependencies: + loader-fs-cache "^1.0.0" + loader-utils "^1.0.2" + object-assign "^4.0.1" + object-hash "^1.1.4" + rimraf "^2.6.1" + +eslint-scope@3.7.1: + version "3.7.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8" + integrity sha1-PWPD7f2gLgbgGkUq2IyqzHzctug= + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-scope@^3.7.1: + version "3.7.3" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.3.tgz#bb507200d3d17f60247636160b4826284b108535" + integrity sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-visitor-keys@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + +eslint@^4.18.2: + version "4.19.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.19.1.tgz#32d1d653e1d90408854bfb296f076ec7e186a300" + integrity sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ== + dependencies: + ajv "^5.3.0" + babel-code-frame "^6.22.0" + chalk "^2.1.0" + concat-stream "^1.6.0" + cross-spawn "^5.1.0" + debug "^3.1.0" + doctrine "^2.1.0" + eslint-scope "^3.7.1" + eslint-visitor-keys "^1.0.0" + espree "^3.5.4" + esquery "^1.0.0" + esutils "^2.0.2" + file-entry-cache "^2.0.0" + functional-red-black-tree "^1.0.1" + glob "^7.1.2" + globals "^11.0.1" + ignore "^3.3.3" + imurmurhash "^0.1.4" + inquirer "^3.0.6" + is-resolvable "^1.0.0" + js-yaml "^3.9.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.3.0" + lodash "^4.17.4" + minimatch "^3.0.2" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + optionator "^0.8.2" + path-is-inside "^1.0.2" + pluralize "^7.0.0" + progress "^2.0.0" + regexpp "^1.0.1" + require-uncached "^1.0.3" + semver "^5.3.0" + strip-ansi "^4.0.0" + strip-json-comments "~2.0.1" + table "4.0.2" + text-table "~0.2.0" + +espree@^3.5.4: + version "3.5.4" + resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.4.tgz#b0f447187c8a8bed944b815a660bddf5deb5d1a7" + integrity sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A== + dependencies: + acorn "^5.5.0" + acorn-jsx "^3.0.0" + +esprima@^2.6.0: + version "2.7.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" + integrity sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE= + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.0.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57" + integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" + integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +event-emitter@~0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" + integrity sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk= + dependencies: + d "1" + es5-ext "~0.10.14" + +events@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.2.0.tgz#93b87c18f8efcd4202a461aec4dfc0556b639379" + integrity sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg== + +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +execa@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" + integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +exports-loader@^0.6.4: + version "0.6.4" + resolved "https://registry.yarnpkg.com/exports-loader/-/exports-loader-0.6.4.tgz#d70fc6121975b35fc12830cf52754be2740fc886" + integrity sha1-1w/GEhl1s1/BKDDPUnVL4nQPyIY= + dependencies: + loader-utils "^1.0.2" + source-map "0.5.x" + +ext@^1.1.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/ext/-/ext-1.4.0.tgz#89ae7a07158f79d35517882904324077e4379244" + integrity sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A== + dependencies: + type "^2.0.0" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +external-editor@^2.0.4: + version "2.2.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5" + integrity sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A== + dependencies: + chardet "^0.4.0" + iconv-lite "^0.4.17" + tmp "^0.0.33" + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +fast-deep-equal@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" + integrity sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ= + +fast-deep-equal@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + +fastparse@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9" + integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ== + +figures@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= + dependencies: + escape-string-regexp "^1.0.5" + +file-entry-cache@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" + integrity sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E= + dependencies: + flat-cache "^1.2.1" + object-assign "^4.0.1" + +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +find-cache-dir@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9" + integrity sha1-yN765XyKUqinhPnjHFfHQumToLk= + dependencies: + commondir "^1.0.1" + mkdirp "^0.5.1" + pkg-dir "^1.0.0" + +find-cache-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f" + integrity sha1-kojj6ePMN0hxfTnq3hfPcfww7m8= + dependencies: + commondir "^1.0.1" + make-dir "^1.0.0" + pkg-dir "^2.0.0" + +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + +find-up@^2.0.0, find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= + dependencies: + locate-path "^2.0.0" + +flat-cache@^1.2.1: + version "1.3.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.4.tgz#2c2ef77525cc2929007dfffa1dd314aa9c9dee6f" + integrity sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg== + dependencies: + circular-json "^0.3.1" + graceful-fs "^4.1.2" + rimraf "~2.6.2" + write "^0.2.1" + +flatten@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.3.tgz#c1283ac9f27b368abc1e36d1ff7b04501a30356b" + integrity sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg== + +for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + dependencies: + map-cache "^0.2.2" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@^1.2.7: + version "1.2.13" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" + integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== + dependencies: + bindings "^1.5.0" + nan "^2.12.1" + +fsevents@~2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" + integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + +get-caller-file@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" + integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== + +get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + +glob-parent@~5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" + integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== + dependencies: + is-glob "^4.0.1" + +glob@^7.1.2, glob@^7.1.3: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^11.0.1, globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globals@^9.18.0: + version "9.18.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" + integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== + +graceful-fs@^4.1.11, graceful-fs@^4.1.2: + version "4.2.4" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= + dependencies: + ansi-regex "^2.0.0" + +has-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo= + +has-flag@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" + integrity sha1-6CB68cx7MNRGzHC3NLXovhj4jVE= + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +has@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hash-base@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== + dependencies: + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +history@^4.7.2: + version "4.10.1" + resolved "https://registry.yarnpkg.com/history/-/history-4.10.1.tgz#33371a65e3a83b267434e2b3f3b1b4c58aad4cf3" + integrity sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew== + dependencies: + "@babel/runtime" "^7.1.2" + loose-envify "^1.2.0" + resolve-pathname "^3.0.0" + tiny-invariant "^1.0.2" + tiny-warning "^1.0.0" + value-equal "^1.0.1" + +hmac-drbg@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +home-or-tmp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" + integrity sha1-42w/LSyufXRqhX440Y1fMqeILbg= + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.1" + +hosted-git-info@^2.1.4: + version "2.8.8" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" + integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== + +html-comment-regex@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7" + integrity sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ== + +https-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= + +iconv-lite@^0.4.17: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +icss-replace-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" + integrity sha1-Bupvg2ead0njhs/h/oEq5dsiPe0= + +icss-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-2.1.0.tgz#83f0a0ec378bf3246178b6c2ad9136f135b1c962" + integrity sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI= + dependencies: + postcss "^6.0.1" + +ieee754@^1.1.4: + version "1.1.13" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" + integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== + +ignore@^3.3.3: + version "3.3.10" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" + integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug== + +imports-loader@^0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/imports-loader/-/imports-loader-0.7.1.tgz#f204b5f34702a32c1db7d48d89d5e867a0441253" + integrity sha1-8gS180cCoywdt9SNidXoZ6BEElM= + dependencies: + loader-utils "^1.0.2" + source-map "^0.5.6" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +indexes-of@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" + integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inherits@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + +inquirer@^3.0.6: + version "3.3.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" + integrity sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ== + dependencies: + ansi-escapes "^3.0.0" + chalk "^2.0.0" + cli-cursor "^2.1.0" + cli-width "^2.0.0" + external-editor "^2.0.4" + figures "^2.0.0" + lodash "^4.3.0" + mute-stream "0.0.7" + run-async "^2.2.0" + rx-lite "^4.0.8" + rx-lite-aggregates "^4.0.8" + string-width "^2.1.0" + strip-ansi "^4.0.0" + through "^2.3.6" + +interpret@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" + integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== + +invariant@^2.2.0, invariant@^2.2.2: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + dependencies: + loose-envify "^1.0.0" + +invert-kv@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" + integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= + +is-absolute-url@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" + integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY= + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + dependencies: + kind-of "^6.0.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= + dependencies: + binary-extensions "^1.0.0" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + dependencies: + kind-of "^6.0.0" + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^2.1.0, is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-finite@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3" + integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w== + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= + dependencies: + is-extglob "^2.1.0" + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + dependencies: + kind-of "^3.0.2" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-plain-obj@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= + +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-resolvable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" + integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== + +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +is-svg@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9" + integrity sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk= + dependencies: + html-comment-regex "^1.1.0" + +is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + +js-base64@^2.1.9: + version "2.6.4" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.6.4.tgz#f4e686c5de1ea1f867dbcad3d46d969428df98c4" + integrity sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ== + +js-tokens@^3.0.0, js-tokens@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= + +"js-tokens@^3.0.0 || ^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.9.1: + version "3.14.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" + integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +js-yaml@~3.7.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80" + integrity sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A= + dependencies: + argparse "^1.0.7" + esprima "^2.6.0" + +jsesc@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" + integrity sha1-RsP+yMGJKxKwgz25vHYiF226s0s= + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + +json-loader@^0.5.4, json-loader@^0.5.7: + version "0.5.7" + resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d" + integrity sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w== + +json-schema-traverse@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" + integrity sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A= + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + +json5@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" + integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= + +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +lazy-cache@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" + integrity sha1-odePw6UEdMuAhF07O24dpJpEbo4= + +lcid@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" + integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= + dependencies: + invert-kv "^1.0.0" + +levn@^0.3.0, levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +load-json-file@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" + integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + strip-bom "^3.0.0" + +loader-fs-cache@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/loader-fs-cache/-/loader-fs-cache-1.0.3.tgz#f08657646d607078be2f0a032f8bd69dd6f277d9" + integrity sha512-ldcgZpjNJj71n+2Mf6yetz+c9bM4xpKtNds4LbqXzU/PTdeAX0g3ytnU1AJMEcTk2Lex4Smpe3Q/eCTsvUBxbA== + dependencies: + find-cache-dir "^0.1.1" + mkdirp "^0.5.1" + +loader-runner@^2.3.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" + integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== + +loader-utils@^1.0.2, loader-utils@^1.1.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" + integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^1.0.1" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY= + +lodash.memoize@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= + +lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= + +lodash@^4.17.14, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.3.0: + version "4.17.20" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" + integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== + +longest@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" + integrity sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc= + +loose-envify@^1.0.0, loose-envify@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +lru-cache@^4.0.1: + version "4.1.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +make-dir@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" + integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== + dependencies: + pify "^3.0.0" + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" + +math-expression-evaluator@^1.2.14: + version "1.2.22" + resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.22.tgz#c14dcb3d8b4d150e5dcea9c68c8dad80309b0d5e" + integrity sha512-L0j0tFVZBQQLeEjmWOvDLoRciIY8gQGWahvkztXUal8jH8R5Rlqo9GCvgqvXcy9LQhEWdQCVvzqAbxgYNt4blQ== + +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +mem@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" + integrity sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y= + dependencies: + mimic-fn "^1.0.0" + +memory-fs@^0.4.0, memory-fs@~0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" + integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +micromatch@^3.1.10, micromatch@^3.1.4: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + +mimic-fn@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== + +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= + +minimatch@^3.0.2, minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.2.0, minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +mute-stream@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" + integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= + +nan@^2.12.1: + version "2.14.1" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01" + integrity sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw== + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + +neo-async@^2.5.0: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +next-tick@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" + integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= + +node-libs-browser@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" + integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== + dependencies: + assert "^1.1.1" + browserify-zlib "^0.2.0" + buffer "^4.3.0" + console-browserify "^1.1.0" + constants-browserify "^1.0.0" + crypto-browserify "^3.11.0" + domain-browser "^1.1.1" + events "^3.0.0" + https-browserify "^1.0.0" + os-browserify "^0.3.0" + path-browserify "0.0.1" + process "^0.11.10" + punycode "^1.2.4" + querystring-es3 "^0.2.0" + readable-stream "^2.3.3" + stream-browserify "^2.0.1" + stream-http "^2.7.2" + string_decoder "^1.0.0" + timers-browserify "^2.0.4" + tty-browserify "0.0.0" + url "^0.11.0" + util "^0.11.0" + vm-browserify "^1.0.1" + +normalize-package-data@^2.3.2: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + dependencies: + remove-trailing-separator "^1.0.1" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= + +normalize-url@^1.4.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" + integrity sha1-LMDWazHqIwNkWENuNiDYWVTGbDw= + dependencies: + object-assign "^4.0.1" + prepend-http "^1.0.0" + query-string "^4.1.0" + sort-keys "^1.0.0" + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + dependencies: + path-key "^2.0.0" + +num2fraction@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" + integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + +object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-hash@^1.1.4: + version "1.3.1" + resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-1.3.1.tgz#fde452098a951cb145f039bb7d455449ddc126df" + integrity sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA== + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.0" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + dependencies: + isobject "^3.0.1" + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +onetime@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= + dependencies: + mimic-fn "^1.0.0" + +optionator@^0.8.2: + version "0.8.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + +os-browserify@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" + integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= + +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= + +os-locale@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" + integrity sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA== + dependencies: + execa "^0.7.0" + lcid "^1.0.0" + mem "^1.1.0" + +os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= + dependencies: + p-limit "^1.1.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= + +pako@~1.0.5: + version "1.0.11" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== + +parse-asn1@^5.0.0, parse-asn1@^5.1.5: + version "5.1.6" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" + integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== + dependencies: + asn1.js "^5.2.0" + browserify-aes "^1.0.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + safe-buffer "^5.1.1" + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= + dependencies: + error-ex "^1.2.0" + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + +path-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" + integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== + +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= + +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= + dependencies: + pinkie-promise "^2.0.0" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + +path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-is-inside@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= + +path-key@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + +path-type@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" + integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= + dependencies: + pify "^2.0.0" + +pbkdf2@^3.0.3: + version "3.1.1" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.1.tgz#cb8724b0fada984596856d1a6ebafd3584654b94" + integrity sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg== + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +picomatch@^2.0.4, picomatch@^2.2.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + +pkg-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" + integrity sha1-ektQio1bstYp1EcFb/TpyTFM89Q= + dependencies: + find-up "^1.0.0" + +pkg-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" + integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= + dependencies: + find-up "^2.1.0" + +pluralize@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" + integrity sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow== + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + +postcss-calc@^5.2.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-5.3.1.tgz#77bae7ca928ad85716e2fda42f261bf7c1d65b5e" + integrity sha1-d7rnypKK2FcW4v2kLyYb98HWW14= + dependencies: + postcss "^5.0.2" + postcss-message-helpers "^2.0.0" + reduce-css-calc "^1.2.6" + +postcss-colormin@^2.1.8: + version "2.2.2" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-2.2.2.tgz#6631417d5f0e909a3d7ec26b24c8a8d1e4f96e4b" + integrity sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks= + dependencies: + colormin "^1.0.5" + postcss "^5.0.13" + postcss-value-parser "^3.2.3" + +postcss-convert-values@^2.3.4: + version "2.6.1" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz#bbd8593c5c1fd2e3d1c322bb925dcae8dae4d62d" + integrity sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0= + dependencies: + postcss "^5.0.11" + postcss-value-parser "^3.1.2" + +postcss-discard-comments@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz#befe89fafd5b3dace5ccce51b76b81514be00e3d" + integrity sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0= + dependencies: + postcss "^5.0.14" + +postcss-discard-duplicates@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz#b9abf27b88ac188158a5eb12abcae20263b91932" + integrity sha1-uavye4isGIFYpesSq8riAmO5GTI= + dependencies: + postcss "^5.0.4" + +postcss-discard-empty@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz#d2b4bd9d5ced5ebd8dcade7640c7d7cd7f4f92b5" + integrity sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU= + dependencies: + postcss "^5.0.14" + +postcss-discard-overridden@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz#8b1eaf554f686fb288cd874c55667b0aa3668d58" + integrity sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg= + dependencies: + postcss "^5.0.16" + +postcss-discard-unused@^2.2.1: + version "2.2.3" + resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz#bce30b2cc591ffc634322b5fb3464b6d934f4433" + integrity sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM= + dependencies: + postcss "^5.0.14" + uniqs "^2.0.0" + +postcss-filter-plugins@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz#82245fdf82337041645e477114d8e593aa18b8ec" + integrity sha512-T53GVFsdinJhgwm7rg1BzbeBRomOg9y5MBVhGcsV0CxurUdVj1UlPdKtn7aqYA/c/QVkzKMjq2bSV5dKG5+AwQ== + dependencies: + postcss "^5.0.4" + +postcss-merge-idents@^2.1.5: + version "2.1.7" + resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz#4c5530313c08e1d5b3bbf3d2bbc747e278eea270" + integrity sha1-TFUwMTwI4dWzu/PSu8dH4njuonA= + dependencies: + has "^1.0.1" + postcss "^5.0.10" + postcss-value-parser "^3.1.1" + +postcss-merge-longhand@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz#23d90cd127b0a77994915332739034a1a4f3d658" + integrity sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg= + dependencies: + postcss "^5.0.4" + +postcss-merge-rules@^2.0.3: + version "2.1.2" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz#d1df5dfaa7b1acc3be553f0e9e10e87c61b5f721" + integrity sha1-0d9d+qexrMO+VT8OnhDofGG19yE= + dependencies: + browserslist "^1.5.2" + caniuse-api "^1.5.2" + postcss "^5.0.4" + postcss-selector-parser "^2.2.2" + vendors "^1.0.0" + +postcss-message-helpers@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz#a4f2f4fab6e4fe002f0aed000478cdf52f9ba60e" + integrity sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4= + +postcss-minify-font-values@^1.0.2: + version "1.0.5" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz#4b58edb56641eba7c8474ab3526cafd7bbdecb69" + integrity sha1-S1jttWZB66fIR0qzUmyv17vey2k= + dependencies: + object-assign "^4.0.1" + postcss "^5.0.4" + postcss-value-parser "^3.0.2" + +postcss-minify-gradients@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz#5dbda11373703f83cfb4a3ea3881d8d75ff5e6e1" + integrity sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE= + dependencies: + postcss "^5.0.12" + postcss-value-parser "^3.3.0" + +postcss-minify-params@^1.0.4: + version "1.2.2" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz#ad2ce071373b943b3d930a3fa59a358c28d6f1f3" + integrity sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM= + dependencies: + alphanum-sort "^1.0.1" + postcss "^5.0.2" + postcss-value-parser "^3.0.2" + uniqs "^2.0.0" + +postcss-minify-selectors@^2.0.4: + version "2.1.1" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz#b2c6a98c0072cf91b932d1a496508114311735bf" + integrity sha1-ssapjAByz5G5MtGkllCBFDEXNb8= + dependencies: + alphanum-sort "^1.0.2" + has "^1.0.1" + postcss "^5.0.14" + postcss-selector-parser "^2.0.0" + +postcss-modules-extract-imports@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.1.tgz#dc87e34148ec7eab5f791f7cd5849833375b741a" + integrity sha512-6jt9XZwUhwmRUhb/CkyJY020PYaPJsCyt3UjbaWo6XEbH/94Hmv6MP7fG2C5NDU/BcHzyGYxNtHvM+LTf9HrYw== + dependencies: + postcss "^6.0.1" + +postcss-modules-local-by-default@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069" + integrity sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk= + dependencies: + css-selector-tokenizer "^0.7.0" + postcss "^6.0.1" + +postcss-modules-scope@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90" + integrity sha1-1upkmUx5+XtipytCb75gVqGUu5A= + dependencies: + css-selector-tokenizer "^0.7.0" + postcss "^6.0.1" + +postcss-modules-values@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20" + integrity sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA= + dependencies: + icss-replace-symbols "^1.1.0" + postcss "^6.0.1" + +postcss-normalize-charset@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz#ef9ee71212d7fe759c78ed162f61ed62b5cb93f1" + integrity sha1-757nEhLX/nWceO0WL2HtYrXLk/E= + dependencies: + postcss "^5.0.5" + +postcss-normalize-url@^3.0.7: + version "3.0.8" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz#108f74b3f2fcdaf891a2ffa3ea4592279fc78222" + integrity sha1-EI90s/L82viRov+j6kWSJ5/HgiI= + dependencies: + is-absolute-url "^2.0.0" + normalize-url "^1.4.0" + postcss "^5.0.14" + postcss-value-parser "^3.2.3" + +postcss-ordered-values@^2.1.0: + version "2.2.3" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz#eec6c2a67b6c412a8db2042e77fe8da43f95c11d" + integrity sha1-7sbCpntsQSqNsgQud/6NpD+VwR0= + dependencies: + postcss "^5.0.4" + postcss-value-parser "^3.0.1" + +postcss-reduce-idents@^2.2.2: + version "2.4.0" + resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz#c2c6d20cc958284f6abfbe63f7609bf409059ad3" + integrity sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM= + dependencies: + postcss "^5.0.4" + postcss-value-parser "^3.0.2" + +postcss-reduce-initial@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz#68f80695f045d08263a879ad240df8dd64f644ea" + integrity sha1-aPgGlfBF0IJjqHmtJA343WT2ROo= + dependencies: + postcss "^5.0.4" + +postcss-reduce-transforms@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz#ff76f4d8212437b31c298a42d2e1444025771ae1" + integrity sha1-/3b02CEkN7McKYpC0uFEQCV3GuE= + dependencies: + has "^1.0.1" + postcss "^5.0.8" + postcss-value-parser "^3.0.1" + +postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2: + version "2.2.3" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz#f9437788606c3c9acee16ffe8d8b16297f27bb90" + integrity sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A= + dependencies: + flatten "^1.0.2" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-svgo@^2.1.1: + version "2.1.6" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-2.1.6.tgz#b6df18aa613b666e133f08adb5219c2684ac108d" + integrity sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0= + dependencies: + is-svg "^2.0.0" + postcss "^5.0.14" + postcss-value-parser "^3.2.3" + svgo "^0.7.0" + +postcss-unique-selectors@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz#981d57d29ddcb33e7b1dfe1fd43b8649f933ca1d" + integrity sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0= + dependencies: + alphanum-sort "^1.0.1" + postcss "^5.0.4" + uniqs "^2.0.0" + +postcss-value-parser@^3.0.1, postcss-value-parser@^3.0.2, postcss-value-parser@^3.1.1, postcss-value-parser@^3.1.2, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" + integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== + +postcss-zindex@^2.0.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-2.2.0.tgz#d2109ddc055b91af67fc4cb3b025946639d2af22" + integrity sha1-0hCd3AVbka9n/EyzsCWUZjnSryI= + dependencies: + has "^1.0.1" + postcss "^5.0.4" + uniqs "^2.0.0" + +postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.6, postcss@^5.0.8, postcss@^5.2.16: + version "5.2.18" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5" + integrity sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg== + dependencies: + chalk "^1.1.3" + js-base64 "^2.1.9" + source-map "^0.5.6" + supports-color "^3.2.3" + +postcss@^6.0.1: + version "6.0.23" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324" + integrity sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag== + dependencies: + chalk "^2.4.1" + source-map "^0.6.1" + supports-color "^5.4.0" + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + +prepend-http@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" + integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= + +private@^0.1.6, private@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" + integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= + +progress@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= + +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= + +public-encrypt@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" + integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + safe-buffer "^5.1.2" + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= + +punycode@^1.2.4: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= + +punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +q@^1.1.2: + version "1.5.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= + +query-string@^4.1.0: + version "4.3.4" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" + integrity sha1-u7aTucqRXCMlFbIosaArYJBD2+s= + dependencies: + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" + +querystring-es3@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= + +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= + +querystringify@^2.0.0, querystringify@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" + integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== + +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +randomfill@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + +read-pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" + integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= + dependencies: + find-up "^2.0.0" + read-pkg "^2.0.0" + +read-pkg@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" + integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= + dependencies: + load-json-file "^2.0.0" + normalize-package-data "^2.3.2" + path-type "^2.0.0" + +readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" + integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== + dependencies: + graceful-fs "^4.1.11" + micromatch "^3.1.10" + readable-stream "^2.0.2" + +readdirp@~3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.4.0.tgz#9fdccdf9e9155805449221ac645e8303ab5b9ada" + integrity sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ== + dependencies: + picomatch "^2.2.1" + +reduce-css-calc@^1.2.6: + version "1.3.0" + resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716" + integrity sha1-dHyRTgSWFKTJz7umKYca0dKSdxY= + dependencies: + balanced-match "^0.4.2" + math-expression-evaluator "^1.2.14" + reduce-function-call "^1.0.1" + +reduce-function-call@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/reduce-function-call/-/reduce-function-call-1.0.3.tgz#60350f7fb252c0a67eb10fd4694d16909971300f" + integrity sha512-Hl/tuV2VDgWgCSEeWMLwxLZqX7OK59eU1guxXsRKTAyeYimivsKdtcV4fu3r710tpG5GmDKDhQ0HSZLExnNmyQ== + dependencies: + balanced-match "^1.0.0" + +regenerate@^1.2.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.1.tgz#cad92ad8e6b591773485fbe05a485caf4f457e6f" + integrity sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A== + +regenerator-runtime@^0.10.5: + version "0.10.5" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" + integrity sha1-M2w+/BIgrc7dosn6tntaeVWjNlg= + +regenerator-runtime@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== + +regenerator-runtime@^0.13.4: + version "0.13.7" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" + integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== + +regenerator-transform@^0.10.0: + version "0.10.1" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" + integrity sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q== + dependencies: + babel-runtime "^6.18.0" + babel-types "^6.19.0" + private "^0.1.6" + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +regexpp@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-1.1.0.tgz#0e3516dd0b7904f413d2d4193dce4618c3a689ab" + integrity sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw== + +regexpu-core@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" + integrity sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA= + dependencies: + regenerate "^1.2.1" + regjsgen "^0.2.0" + regjsparser "^0.1.4" + +regjsgen@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" + integrity sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc= + +regjsparser@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" + integrity sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw= + dependencies: + jsesc "~0.5.0" + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= + +repeat-element@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" + integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== + +repeat-string@^1.5.2, repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + +repeating@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= + dependencies: + is-finite "^1.0.0" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-main-filename@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" + integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= + +require-uncached@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" + integrity sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM= + dependencies: + caller-path "^0.1.0" + resolve-from "^1.0.0" + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= + +resolve-from@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" + integrity sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY= + +resolve-pathname@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd" + integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng== + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + +resolve@^1.10.0: + version "1.17.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" + integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== + dependencies: + path-parse "^1.0.6" + +restore-cursor@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= + dependencies: + onetime "^2.0.0" + signal-exit "^3.0.2" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + +right-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" + integrity sha1-YTObci/mo1FWiSENJOFMlhSGE+8= + dependencies: + align-text "^0.1.1" + +rimraf@^2.6.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +rimraf@~2.6.2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== + dependencies: + glob "^7.1.3" + +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +run-async@^2.2.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== + +rx-lite-aggregates@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" + integrity sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74= + dependencies: + rx-lite "*" + +rx-lite@*, rx-lite@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" + integrity sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ= + +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sax@~1.2.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + +schema-utils@^0.4.5: + version "0.4.7" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.7.tgz#ba74f597d2be2ea880131746ee17d0a093c68187" + integrity sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ== + dependencies: + ajv "^6.1.0" + ajv-keywords "^3.1.0" + +"semver@2 || 3 || 4 || 5", semver@^5.3.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +setimmediate@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + +signal-exit@^3.0.0, signal-exit@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== + +slash@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= + +slice-ansi@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" + integrity sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg== + dependencies: + is-fullwidth-code-point "^2.0.0" + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +sort-keys@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" + integrity sha1-RBttTTRnmPG05J6JIK37oOVD+a0= + dependencies: + is-plain-obj "^1.0.0" + +source-list-map@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" + integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== + +source-map-resolve@^0.5.0: + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-support@^0.4.15: + version "0.4.18" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" + integrity sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA== + dependencies: + source-map "^0.5.6" + +source-map-url@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= + +source-map@0.5.x, source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +source-map@^0.6.1, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +spdx-correct@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.5" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" + integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +stream-browserify@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" + integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + +stream-http@^2.7.2: + version "2.8.3" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" + integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^2.3.6" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" + +strict-uri-encode@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" + integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= + +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string_decoder@^1.0.0, string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + +style-loader@^0.20.1: + version "0.20.3" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.20.3.tgz#ebef06b89dec491bcb1fdb3452e913a6fd1c10c4" + integrity sha512-2I7AVP73MvK33U7B9TKlYZAqdROyMXDYSMvHLX43qy3GCOaJNiV6i0v/sv9idWIaQ42Yn2dNv79Q5mKXbKhAZg== + dependencies: + loader-utils "^1.1.0" + schema-utils "^0.4.5" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= + +supports-color@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" + integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY= + dependencies: + has-flag "^1.0.0" + +supports-color@^4.2.1: + version "4.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" + integrity sha1-vnoN5ITexcXN34s9WRJQRJEvY1s= + dependencies: + has-flag "^2.0.0" + +supports-color@^5.3.0, supports-color@^5.4.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +svgo@^0.7.0: + version "0.7.2" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5" + integrity sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U= + dependencies: + coa "~1.0.1" + colors "~1.1.2" + csso "~2.3.1" + js-yaml "~3.7.0" + mkdirp "~0.5.1" + sax "~1.2.1" + whet.extend "~0.9.9" + +table@4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36" + integrity sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA== + dependencies: + ajv "^5.2.3" + ajv-keywords "^2.1.0" + chalk "^2.1.0" + lodash "^4.17.4" + slice-ansi "1.0.0" + string-width "^2.1.1" + +tapable@^0.2.7: + version "0.2.9" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.9.tgz#af2d8bbc9b04f74ee17af2b4d9048f807acd18a8" + integrity sha512-2wsvQ+4GwBvLPLWsNfLCDYGsW6xb7aeC6utq2Qh0PFwgEy7K7dsma9Jsmb2zSQj7GvYAyUGSntLtsv++GmgL1A== + +text-table@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + +through@^2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + +timers-browserify@^2.0.4: + version "2.0.11" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.11.tgz#800b1f3eee272e5bc53ee465a04d0e804c31211f" + integrity sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ== + dependencies: + setimmediate "^1.0.4" + +tiny-invariant@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.1.0.tgz#634c5f8efdc27714b7f386c35e6760991d230875" + integrity sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw== + +tiny-warning@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" + integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +to-arraybuffer@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= + +to-fast-properties@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" + integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc= + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +trim-right@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" + integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= + +tty-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + dependencies: + prelude-ls "~1.1.2" + +type@^1.0.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" + integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== + +type@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/type/-/type-2.1.0.tgz#9bdc22c648cf8cf86dd23d32336a41cfb6475e3f" + integrity sha512-G9absDWvhAWCV2gmF1zKud3OyC61nZDwWvBL2DApaVFogI07CprggiQAOOjvp2NRjYWFzPyu7vwtDrQFq8jeSA== + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + +uglify-js@^2.8.29: + version "2.8.29" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" + integrity sha1-KcVzMUgFe7Th913zW3qcty5qWd0= + dependencies: + source-map "~0.5.1" + yargs "~3.10.0" + optionalDependencies: + uglify-to-browserify "~1.0.0" + +uglify-to-browserify@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" + integrity sha1-bgkk1r2mta/jSeOabWMoUKD4grc= + +uglifyjs-webpack-plugin@^0.4.6: + version "0.4.6" + resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz#b951f4abb6bd617e66f63eb891498e391763e309" + integrity sha1-uVH0q7a9YX5m9j64kUmOORdj4wk= + dependencies: + source-map "^0.5.6" + uglify-js "^2.8.29" + webpack-sources "^1.0.1" + +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + +uniq@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" + integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= + +uniqs@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" + integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI= + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +upath@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" + integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== + +uri-js@^4.2.2: + version "4.4.0" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.0.tgz#aa714261de793e8a82347a7bcc9ce74e86f28602" + integrity sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g== + dependencies: + punycode "^2.1.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + +url-parse@^1.4.3: + version "1.4.7" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.7.tgz#a8a83535e8c00a316e403a5db4ac1b9b853ae278" + integrity sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + +url@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +util@0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= + dependencies: + inherits "2.0.1" + +util@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" + integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== + dependencies: + inherits "2.0.3" + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +value-equal@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-1.0.1.tgz#1e0b794c734c5c0cade179c437d356d931a34d6c" + integrity sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw== + +vendors@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.4.tgz#e2b800a53e7a29b93506c3cf41100d16c4c4ad8e" + integrity sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w== + +vm-browserify@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" + integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== + +watchpack-chokidar2@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz#9948a1866cbbd6cb824dea13a7ed691f6c8ddff0" + integrity sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA== + dependencies: + chokidar "^2.1.8" + +watchpack@^1.4.0: + version "1.7.4" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.4.tgz#6e9da53b3c80bb2d6508188f5b200410866cd30b" + integrity sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg== + dependencies: + graceful-fs "^4.1.2" + neo-async "^2.5.0" + optionalDependencies: + chokidar "^3.4.1" + watchpack-chokidar2 "^2.0.0" + +webpack-sources@^1.0.1: + version "1.4.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" + integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== + dependencies: + source-list-map "^2.0.0" + source-map "~0.6.1" + +webpack@^3.10.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-3.12.0.tgz#3f9e34360370602fcf639e97939db486f4ec0d74" + integrity sha512-Sw7MdIIOv/nkzPzee4o0EdvCuPmxT98+vVpIvwtcwcF1Q4SDSNp92vwcKc4REe7NItH9f1S4ra9FuQ7yuYZ8bQ== + dependencies: + acorn "^5.0.0" + acorn-dynamic-import "^2.0.0" + ajv "^6.1.0" + ajv-keywords "^3.1.0" + async "^2.1.2" + enhanced-resolve "^3.4.0" + escope "^3.6.0" + interpret "^1.0.0" + json-loader "^0.5.4" + json5 "^0.5.1" + loader-runner "^2.3.0" + loader-utils "^1.1.0" + memory-fs "~0.4.1" + mkdirp "~0.5.0" + node-libs-browser "^2.0.0" + source-map "^0.5.3" + supports-color "^4.2.1" + tapable "^0.2.7" + uglifyjs-webpack-plugin "^0.4.6" + watchpack "^1.4.0" + webpack-sources "^1.0.1" + yargs "^8.0.2" + +whatwg-fetch@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz#dde6a5df315f9d39991aa17621853d720b85566f" + integrity sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng== + +whet.extend@~0.9.9: + version "0.9.9" + resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1" + integrity sha1-+HfVv2SMl+WqVC+twW1qJZucEaE= + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + +which@^1.2.9: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +window-size@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" + integrity sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0= + +word-wrap@~1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +wordwrap@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" + integrity sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8= + +wrap-ansi@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +write@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" + integrity sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c= + dependencies: + mkdirp "^0.5.1" + +xtend@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" + integrity sha1-bRX7qITAhnnA136I53WegR4H+kE= + +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= + +yargs-parser@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" + integrity sha1-jQrELxbqVd69MyyvTEA4s+P139k= + dependencies: + camelcase "^4.1.0" + +yargs@^8.0.2: + version "8.0.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360" + integrity sha1-YpmpBVsc78lp/355wdkY3Osiw2A= + dependencies: + camelcase "^4.1.0" + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + os-locale "^2.0.0" + read-pkg-up "^2.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1" + yargs-parser "^7.0.0" + +yargs@~3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" + integrity sha1-9+572FfdfB0tOMDnTvvWgdFDH9E= + dependencies: + camelcase "^1.0.2" + cliui "^2.1.0" + decamelize "^1.0.0" + window-size "0.1.0"