Reddit Downloader

Reddit Downloader with support for Direct links (png, jpg, gif, mp4...), (Gypcat kinda), Redgify, Imgur (Only when supplied with an API key)

当前为 2020-08-15 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Reddit Downloader
  3. // @namespace https://github.com/felixire/Reddit-Downloader
  4. // @version 0.1
  5. // @description Reddit Downloader with support for Direct links (png, jpg, gif, mp4...), (Gypcat kinda), Redgify, Imgur (Only when supplied with an API key)
  6. // @author felixire
  7. // @match https://www.reddit.com/*
  8. // @require https://greasyfork.org/scripts/28536-gm-config/code/GM_config.js?version=184529
  9. // @grant GM_download
  10. // @grant GM_setValue
  11. // @grant GM_getValue
  12. // @grant GM_registerMenuCommand
  13. // ==/UserScript==
  14.  
  15. // @match https://www.reddit.com/user/*
  16.  
  17. const DEBUG = false;
  18. //const _CreateSubredditFolders = true;
  19. //const _OnlyCertainSubreddits = true;
  20. //const _SubredditFilter = []
  21. //const _RedditUsername = GM_getValue('RedditName', null);
  22.  
  23. //let _ImgurClientID = GM_getValue('ImgurClientID', null);
  24. //let _DownloadLocation = GM_getValue('DownloadLocation', 'Reddit/Stuff/Stuff/');
  25. let _LastDownloadedID = GM_getValue('LastDownloaded', '');
  26.  
  27. let _IsOnUserPage = window.location.href.includes('saved');
  28.  
  29. //#region Helpers
  30. function wait(ms){
  31. return new Promise(res => setTimeout(res, ms));
  32. }
  33.  
  34. function randomName(length=16){
  35. let chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
  36. let name = '';
  37. for (let index = 0; index < length; index++) {
  38. let ind = Math.floor(Math.random() * chars.length);
  39. name += chars.charAt(ind);
  40. }
  41. return name;
  42. }
  43.  
  44. function waitForElements(selectors, timeout = 1000) {
  45. return new Promise(async (res, rej) => {
  46. let time = 0;
  47. if (!Array.isArray(selectors))
  48. selectors = [selectors];
  49.  
  50. let eles = [];
  51.  
  52. selectors.forEach(async (sel, i) => {
  53. let ele = document.querySelector(sel);
  54. while (ele == null || ele == undefined) {
  55. if (time >= timeout) {
  56. utils.error("Timed out while waiting for: ", sel);
  57. rej();
  58. return;
  59. }
  60.  
  61. time += 10;
  62. await wait(10);
  63. ele = document.querySelector(sel);
  64. }
  65. eles.push(ele);
  66. if (i == (selectors.length - 1))
  67. res(eles);
  68. });
  69. })
  70. }
  71. //#endregion
  72.  
  73. //#region Location listener
  74. (async () => {
  75. let isAdded = false;
  76. while(true){
  77. await wait(10);
  78. _IsOnUserPage = window.location.href.includes('reddit.com/user');
  79.  
  80. if(!_IsOnUserPage) isAdded = false;
  81. if(!isAdded && _IsOnUserPage){
  82. if(window.RedditDownloader != undefined){
  83. await wait(50);
  84. isAdded = window.RedditDownloader.addDownloadButton();
  85. }
  86. }
  87. }
  88. })();
  89. //#endregion
  90.  
  91. //#region Supported Downloaders
  92. class DownloadSite{
  93. constructor(){
  94.  
  95. }
  96.  
  97. checkSupport(href){
  98. throw new Error('NOT IMPLEMENTD!');
  99. }
  100.  
  101. async downloadImages(href, folder=''){
  102. return new Promise(async res => {
  103. href = this._removeParams(href);
  104. let links = await this.getDownloadLinks(href);
  105. if(!Array.isArray(links)) links = [links];
  106. if(links.length > 1)
  107. await this._downloadBulk(links, folder, `/${randomName()}/`);
  108. else
  109. this._download(links[0], folder);
  110.  
  111. res();
  112. });
  113. }
  114.  
  115. /**
  116. * @return {Promise<Array<string>>}
  117. */
  118. getDownloadLinks(href){
  119. throw new Error('NOT IMPLEMENTD!');
  120. }
  121.  
  122. _getExtension(href){
  123. return href.replace(/.*\./, '');
  124. }
  125.  
  126. _removeParams(href){
  127. return href.replace(/\?.*/gim, '');
  128. }
  129.  
  130. async _downloadBulk(links, folder='', locationAppend=''){
  131. return new Promise(async res => {
  132. for (let index = 0; index < links.length; index++) {
  133. const url = links[index];
  134. const name = `[${index}] ${randomName()}.${this._getExtension(url)}`;
  135. this._download(url, folder, name, locationAppend);
  136. await wait(100);
  137. }
  138.  
  139. res();
  140. })
  141. }
  142.  
  143. _download(url, folder='', name=randomName(), locationAppend=''){
  144. let details = {
  145. url: url,
  146. name: GM_config.get('download_location') + ((folder != '' && folder != null) ? `/${folder}/` : '') + locationAppend + name + '.' + this._getExtension(url),
  147. saveAs: false
  148. }
  149.  
  150. GM_download(details);
  151. }
  152. }
  153.  
  154. class DirectDownload extends DownloadSite{
  155. constructor(){
  156. super();
  157. this.supportedExtensions = ['png', 'jpg', 'jpeg', 'gif', 'gifv', 'mp4', 'mp3'];
  158. }
  159.  
  160. checkSupport(href){
  161. return this.supportedExtensions.includes(this._getExtension(href));
  162. }
  163.  
  164. getDownloadLinks(href){
  165. if(href.endsWith('.gifv')) href = href.replace('gifv', 'mp4');
  166. return [href];
  167. }
  168. }
  169.  
  170. class Imgur extends DownloadSite{
  171. constructor(){
  172. super();
  173.  
  174. this._ApiEndpoint = 'https://api.imgur.com/3/';
  175. }
  176.  
  177. checkSupport(href){
  178. return (href.includes('imgur.com/') && !href.includes('i.imgur.com/'));
  179. }
  180.  
  181. getDownloadLinks(href){
  182. let id = href.replace(/.*\//igm, '');
  183. let isAlbum = href.replace(/.*imgur.com\//igm, '').startsWith('a');
  184. return isAlbum ? this.getAlbumLinks(id) : this.getGalleryLinks(id);
  185. }
  186.  
  187. getGalleryLinks(galleryID){
  188. return new Promise((res, rej) => {
  189. if(!GM_config.get('imgur_client_id')){
  190. rej('NO CLIENT ID!');
  191. return;
  192. }
  193. fetch(this._ApiEndpoint + `gallery/${galleryID}/images?client_id=${GM_config.get('imgur_client_id')}`)
  194. .then(body => body.text())
  195. .then(text => {
  196. let data = JSON.parse(text);
  197. if(data.data.images == undefined){
  198. res([]);
  199. return;
  200. }
  201. let links = data.data.images.reduce((a, c) => {
  202. console.log(a, c);
  203. a.push(c.link);
  204. return a;
  205. }, []);
  206.  
  207.  
  208. console.log(links)
  209. res(links);
  210. });
  211. })
  212. }
  213.  
  214. getAlbumLinks(albumID){
  215. return new Promise((res, rej) => {
  216. if(!GM_config.get('imgur_client_id')){
  217. rej('NO CLIENT ID!');
  218. return;
  219. }
  220. fetch(this._ApiEndpoint + `album/${albumID}/images?client_id=${GM_config.get('imgur_client_id')}`)
  221. .then(body => body.text())
  222. .then(text => {
  223. let data = JSON.parse(text);
  224. let links = data.data.reduce((a, c) => {
  225. a.push(c.link);
  226. return a;
  227. }, []);
  228.  
  229. res(links);
  230. });
  231. })
  232. }
  233. }
  234.  
  235. class Gfycat extends DownloadSite{
  236. constructor(){
  237. super();
  238. }
  239.  
  240. checkSupport(href){
  241. return (href.includes('//gfycat.com/') || href.includes('www.gfycat.com/'));
  242. }
  243.  
  244. getDownloadLinks(href){
  245. //media => oembed => thumbnail_url
  246. //https://thumbs.gfycat.com/<ID>-size_restricted.gif
  247.  
  248. return href.replace('thumbs', 'giant').replace('-size_restricted.gif', '.mp4');
  249. }
  250. }
  251.  
  252. class Redgifs extends DownloadSite{
  253. constructor(){
  254. super();
  255.  
  256. this.gypcatList = [
  257. 'aardvark',
  258. 'aardwolf',
  259. 'abalone',
  260. 'abyssiniancat',
  261. 'abyssiniangroundhornbill',
  262. 'acaciarat',
  263. 'achillestang',
  264. 'acornbarnacle',
  265. 'acornweevil',
  266. 'acornwoodpecker',
  267. 'acouchi',
  268. 'adamsstaghornedbeetle',
  269. 'addax',
  270. 'adder',
  271. 'adeliepenguin',
  272. 'admiralbutterfly',
  273. 'adouri',
  274. 'aegeancat',
  275. 'affenpinscher',
  276. 'afghanhound',
  277. 'africanaugurbuzzard',
  278. 'africanbushviper',
  279. 'africancivet',
  280. 'africanclawedfrog',
  281. 'africanelephant',
  282. 'africanfisheagle',
  283. 'africangoldencat',
  284. 'africangroundhornbill',
  285. 'africanharrierhawk',
  286. 'africanhornbill',
  287. 'africanjacana',
  288. 'africanmolesnake',
  289. 'africanparadiseflycatcher',
  290. 'africanpiedkingfisher',
  291. 'africanporcupine',
  292. 'africanrockpython',
  293. 'africanwildcat',
  294. 'africanwilddog',
  295. 'agama',
  296. 'agouti',
  297. 'aidi',
  298. 'airedale',
  299. 'airedaleterrier',
  300. 'akitainu',
  301. 'alabamamapturtle',
  302. 'alaskajingle',
  303. 'alaskanhusky',
  304. 'alaskankleekai',
  305. 'alaskanmalamute',
  306. 'albacoretuna',
  307. 'albatross',
  308. 'albertosaurus',
  309. 'albino',
  310. 'aldabratortoise',
  311. 'allensbigearedbat',
  312. 'alleycat',
  313. 'alligator',
  314. 'alligatorgar',
  315. 'alligatorsnappingturtle',
  316. 'allosaurus',
  317. 'alpaca',
  318. 'alpinegoat',
  319. 'alpineroadguidetigerbeetle',
  320. 'altiplanochinchillamouse',
  321. 'amazondolphin',
  322. 'amazonparrot',
  323. 'amazontreeboa',
  324. 'amberpenshell',
  325. 'ambushbug',
  326. 'americanalligator',
  327. 'americanavocet',
  328. 'americanbadger',
  329. 'americanbittern',
  330. 'americanblackvulture',
  331. 'americanbobtail',
  332. 'americanbulldog',
  333. 'americancicada',
  334. 'americancrayfish',
  335. 'americancreamdraft',
  336. 'americancrocodile',
  337. 'americancrow',
  338. 'americancurl',
  339. 'americangoldfinch',
  340. 'americanindianhorse',
  341. 'americankestrel',
  342. 'americanlobster',
  343. 'americanmarten',
  344. 'americanpainthorse',
  345. 'americanquarterhorse',
  346. 'americanratsnake',
  347. 'americanredsquirrel',
  348. 'americanriverotter',
  349. 'americanrobin',
  350. 'americansaddlebred',
  351. 'americanshorthair',
  352. 'americantoad',
  353. 'americanwarmblood',
  354. 'americanwigeon',
  355. 'americanwirehair',
  356. 'amethystgemclam',
  357. 'amethystinepython',
  358. 'amethystsunbird',
  359. 'ammonite',
  360. 'amoeba',
  361. 'amphibian',
  362. 'amphiuma',
  363. 'amurminnow',
  364. 'amurratsnake',
  365. 'amurstarfish',
  366. 'anaconda',
  367. 'anchovy',
  368. 'andalusianhorse',
  369. 'andeancat',
  370. 'andeancockoftherock',
  371. 'andeancondor',
  372. 'anemone',
  373. 'anemonecrab',
  374. 'anemoneshrimp',
  375. 'angelfish',
  376. 'angelwingmussel',
  377. 'anglerfish',
  378. 'angora',
  379. 'angwantibo',
  380. 'anhinga',
  381. 'ankole',
  382. 'ankolewatusi',
  383. 'annashummingbird',
  384. 'annelid',
  385. 'annelida',
  386. 'anole',
  387. 'anophelesmosquito',
  388. 'ant',
  389. 'antarcticfurseal',
  390. 'antarcticgiantpetrel',
  391. 'antbear',
  392. 'anteater',
  393. 'antelope',
  394. 'antelopegroundsquirrel',
  395. 'antipodesgreenparakeet',
  396. 'antlion',
  397. 'anura',
  398. 'aoudad',
  399. 'apatosaur',
  400. 'ape',
  401. 'aphid',
  402. 'apisdorsatalaboriosa',
  403. 'aplomadofalcon',
  404. 'appaloosa',
  405. 'aquaticleech',
  406. 'arabianhorse',
  407. 'arabianoryx',
  408. 'arabianwildcat',
  409. 'aracari',
  410. 'arachnid',
  411. 'arawana',
  412. 'archaeocete',
  413. 'archaeopteryx',
  414. 'archerfish',
  415. 'arcticduck',
  416. 'arcticfox',
  417. 'arctichare',
  418. 'arcticseal',
  419. 'arcticwolf',
  420. 'argali',
  421. 'argentinehornedfrog',
  422. 'argentineruddyduck',
  423. 'argusfish',
  424. 'arieltoucan',
  425. 'arizonaalligatorlizard',
  426. 'arkshell',
  427. 'armadillo',
  428. 'armedcrab',
  429. 'armednylonshrimp',
  430. 'armyant',
  431. 'armyworm',
  432. 'arrowana',
  433. 'arrowcrab',
  434. 'arrowworm',
  435. 'arthropods',
  436. 'aruanas',
  437. 'asianconstablebutterfly',
  438. 'asiandamselfly',
  439. 'asianelephant',
  440. 'asianlion',
  441. 'asianpiedstarling',
  442. 'asianporcupine',
  443. 'asiansmallclawedotter',
  444. 'asiantrumpetfish',
  445. 'asianwaterbuffalo',
  446. 'asiaticgreaterfreshwaterclam',
  447. 'asiaticlesserfreshwaterclam',
  448. 'asiaticmouflon',
  449. 'asiaticwildass',
  450. 'asp',
  451. 'ass',
  452. 'assassinbug',
  453. 'astarte',
  454. 'astrangiacoral',
  455. 'atlanticblackgoby',
  456. 'atlanticbluetang',
  457. 'atlanticridleyturtle',
  458. 'atlanticsharpnosepuffer',
  459. 'atlanticspadefish',
  460. 'atlasmoth',
  461. 'attwatersprairiechicken',
  462. 'auk',
  463. 'auklet',
  464. 'aurochs',
  465. 'australiancattledog',
  466. 'australiancurlew',
  467. 'australianfreshwatercrocodile',
  468. 'australianfurseal',
  469. 'australiankelpie',
  470. 'australiankestrel',
  471. 'australianshelduck',
  472. 'australiansilkyterrier',
  473. 'austrianpinscher',
  474. 'avians',
  475. 'avocet',
  476. 'axisdeer',
  477. 'axolotl',
  478. 'ayeaye',
  479. 'aztecant',
  480. 'azurevase',
  481. 'azurevasesponge',
  482. 'azurewingedmagpie',
  483. 'babirusa',
  484. 'baboon',
  485. 'backswimmer',
  486. 'bactrian',
  487. 'badger',
  488. 'bagworm',
  489. 'baiji',
  490. 'baldeagle',
  491. 'baleenwhale',
  492. 'balloonfish',
  493. 'ballpython',
  494. 'bandicoot',
  495. 'bangeltiger',
  496. 'bantamrooster',
  497. 'banteng',
  498. 'barasinga',
  499. 'barasingha',
  500. 'barb',
  501. 'barbet',
  502. 'barebirdbat',
  503. 'barnacle',
  504. 'barnowl',
  505. 'barnswallow',
  506. 'barracuda',
  507. 'basenji',
  508. 'basil',
  509. 'basilisk',
  510. 'bass',
  511. 'bassethound',
  512. 'bat',
  513. 'bats',
  514. 'beagle',
  515. 'bear',
  516. 'beardedcollie',
  517. 'beardeddragon',
  518. 'beauceron',
  519. 'beaver',
  520. 'bedbug',
  521. 'bedlingtonterrier',
  522. 'bee',
  523. 'beetle',
  524. 'bellfrog',
  525. 'bellsnake',
  526. 'belugawhale',
  527. 'bengaltiger',
  528. 'bergerpicard',
  529. 'bernesemountaindog',
  530. 'betafish',
  531. 'bettong',
  532. 'bichonfrise',
  533. 'bighorn',
  534. 'bighornedsheep',
  535. 'bighornsheep',
  536. 'bigmouthbass',
  537. 'bilby',
  538. 'billygoat',
  539. 'binturong',
  540. 'bird',
  541. 'birdofparadise',
  542. 'bison',
  543. 'bittern',
  544. 'blackandtancoonhound',
  545. 'blackbear',
  546. 'blackbird',
  547. 'blackbuck',
  548. 'blackcrappie',
  549. 'blackfish',
  550. 'blackfly',
  551. 'blackfootedferret',
  552. 'blacklab',
  553. 'blacklemur',
  554. 'blackmamba',
  555. 'blacknorwegianelkhound',
  556. 'blackpanther',
  557. 'blackrhino',
  558. 'blackrussianterrier',
  559. 'blackwidowspider',
  560. 'blesbok',
  561. 'blobfish',
  562. 'blowfish',
  563. 'blueandgoldmackaw',
  564. 'bluebird',
  565. 'bluebottle',
  566. 'bluebottlejellyfish',
  567. 'bluebreastedkookaburra',
  568. 'bluefintuna',
  569. 'bluefish',
  570. 'bluegill',
  571. 'bluejay',
  572. 'bluemorphobutterfly',
  573. 'blueshark',
  574. 'bluet',
  575. 'bluetickcoonhound',
  576. 'bluetonguelizard',
  577. 'bluewhale',
  578. 'boa',
  579. 'boaconstrictor',
  580. 'boar',
  581. 'bobcat',
  582. 'bobolink',
  583. 'bobwhite',
  584. 'boilweevil',
  585. 'bongo',
  586. 'bonobo',
  587. 'booby',
  588. 'bordercollie',
  589. 'borderterrier',
  590. 'borer',
  591. 'borzoi',
  592. 'boto',
  593. 'boubou',
  594. 'boutu',
  595. 'bovine',
  596. 'brahmanbull',
  597. 'brahmancow',
  598. 'brant',
  599. 'bream',
  600. 'brocketdeer',
  601. 'bronco',
  602. 'brontosaurus',
  603. 'brownbear',
  604. 'brownbutterfly',
  605. 'bubblefish',
  606. 'buck',
  607. 'buckeyebutterfly',
  608. 'budgie',
  609. 'bufeo',
  610. 'buffalo',
  611. 'bufflehead',
  612. 'bug',
  613. 'bull',
  614. 'bullfrog',
  615. 'bullmastiff',
  616. 'bumblebee',
  617. 'bunny',
  618. 'bunting',
  619. 'burro',
  620. 'bushbaby',
  621. 'bushsqueaker',
  622. 'bustard',
  623. 'butterfly',
  624. 'buzzard',
  625. 'caecilian',
  626. 'caiman',
  627. 'caimanlizard',
  628. 'calf',
  629. 'camel',
  630. 'canadagoose',
  631. 'canary',
  632. 'canine',
  633. 'canvasback',
  634. 'capeghostfrog',
  635. 'capybara',
  636. 'caracal',
  637. 'cardinal',
  638. 'caribou',
  639. 'carp',
  640. 'carpenterant',
  641. 'cassowary',
  642. 'cat',
  643. 'catbird',
  644. 'caterpillar',
  645. 'catfish',
  646. 'cats',
  647. 'cattle',
  648. 'caudata',
  649. 'cavy',
  650. 'centipede',
  651. 'cero',
  652. 'chafer',
  653. 'chameleon',
  654. 'chamois',
  655. 'chanticleer',
  656. 'cheetah',
  657. 'chevrotain',
  658. 'chick',
  659. 'chickadee',
  660. 'chicken',
  661. 'chihuahua',
  662. 'chimneyswift',
  663. 'chimpanzee',
  664. 'chinchilla',
  665. 'chinesecrocodilelizard',
  666. 'chipmunk',
  667. 'chital',
  668. 'chrysalis',
  669. 'chrysomelid',
  670. 'chuckwalla',
  671. 'chupacabra',
  672. 'cicada',
  673. 'cirriped',
  674. 'civet',
  675. 'clam',
  676. 'cleanerwrasse',
  677. 'clingfish',
  678. 'clownanemonefish',
  679. 'clumber',
  680. 'coati',
  681. 'cob',
  682. 'cobra',
  683. 'cock',
  684. 'cockatiel',
  685. 'cockatoo',
  686. 'cockerspaniel',
  687. 'cockroach',
  688. 'cod',
  689. 'coelacanth',
  690. 'collardlizard',
  691. 'collie',
  692. 'colt',
  693. 'comet',
  694. 'commabutterfly',
  695. 'commongonolek',
  696. 'conch',
  697. 'condor',
  698. 'coney',
  699. 'conure',
  700. 'cony',
  701. 'coot',
  702. 'cooter',
  703. 'copepod',
  704. 'copperbutterfly',
  705. 'copperhead',
  706. 'coqui',
  707. 'coral',
  708. 'cormorant',
  709. 'cornsnake',
  710. 'corydorascatfish',
  711. 'cottonmouth',
  712. 'cottontail',
  713. 'cougar',
  714. 'cow',
  715. 'cowbird',
  716. 'cowrie',
  717. 'coyote',
  718. 'coypu',
  719. 'crab',
  720. 'crane',
  721. 'cranefly',
  722. 'crayfish',
  723. 'creature',
  724. 'cricket',
  725. 'crocodile',
  726. 'crocodileskink',
  727. 'crossbill',
  728. 'crow',
  729. 'crownofthornsstarfish',
  730. 'crustacean',
  731. 'cub',
  732. 'cuckoo',
  733. 'cur',
  734. 'curassow',
  735. 'curlew',
  736. 'cuscus',
  737. 'cusimanse',
  738. 'cuttlefish',
  739. 'cutworm',
  740. 'cygnet',
  741. 'dachshund',
  742. 'daddylonglegs',
  743. 'dairycow',
  744. 'dalmatian',
  745. 'damselfly',
  746. 'danishswedishfarmdog',
  747. 'darklingbeetle',
  748. 'dartfrog',
  749. 'darwinsfox',
  750. 'dassie',
  751. 'dassierat',
  752. 'davidstiger',
  753. 'deer',
  754. 'deermouse',
  755. 'degu',
  756. 'degus',
  757. 'deinonychus',
  758. 'desertpupfish',
  759. 'devilfish',
  760. 'deviltasmanian',
  761. 'diamondbackrattlesnake',
  762. 'dikdik',
  763. 'dikkops',
  764. 'dingo',
  765. 'dinosaur',
  766. 'diplodocus',
  767. 'dipper',
  768. 'discus',
  769. 'dobermanpinscher',
  770. 'doctorfish',
  771. 'dodo',
  772. 'dodobird',
  773. 'doe',
  774. 'dog',
  775. 'dogfish',
  776. 'dogwoodclubgall',
  777. 'dogwoodtwigborer',
  778. 'dolphin',
  779. 'donkey',
  780. 'dorado',
  781. 'dore',
  782. 'dorking',
  783. 'dormouse',
  784. 'dotterel',
  785. 'douglasfirbarkbeetle',
  786. 'dove',
  787. 'dowitcher',
  788. 'drafthorse',
  789. 'dragon',
  790. 'dragonfly',
  791. 'drake',
  792. 'drever',
  793. 'dromaeosaur',
  794. 'dromedary',
  795. 'drongo',
  796. 'duck',
  797. 'duckbillcat',
  798. 'duckbillplatypus',
  799. 'duckling',
  800. 'dugong',
  801. 'duiker',
  802. 'dungbeetle',
  803. 'dungenesscrab',
  804. 'dunlin',
  805. 'dunnart',
  806. 'dutchshepherddog',
  807. 'dutchsmoushond',
  808. 'dwarfmongoose',
  809. 'dwarfrabbit',
  810. 'eagle',
  811. 'earthworm',
  812. 'earwig',
  813. 'easternglasslizard',
  814. 'easternnewt',
  815. 'easteuropeanshepherd',
  816. 'eastrussiancoursinghounds',
  817. 'eastsiberianlaika',
  818. 'echidna',
  819. 'eel',
  820. 'eelelephant',
  821. 'eeve',
  822. 'eft',
  823. 'egg',
  824. 'egret',
  825. 'eider',
  826. 'eidolonhelvum',
  827. 'ekaltadeta',
  828. 'eland',
  829. 'electriceel',
  830. 'elephant',
  831. 'elephantbeetle',
  832. 'elephantseal',
  833. 'elk',
  834. 'elkhound',
  835. 'elver',
  836. 'emeraldtreeskink',
  837. 'emperorpenguin',
  838. 'emperorshrimp',
  839. 'emu',
  840. 'englishpointer',
  841. 'englishsetter',
  842. 'equestrian',
  843. 'equine',
  844. 'erin',
  845. 'ermine',
  846. 'erne',
  847. 'eskimodog',
  848. 'esok',
  849. 'estuarinecrocodile',
  850. 'ethiopianwolf',
  851. 'europeanfiresalamander',
  852. 'europeanpolecat',
  853. 'ewe',
  854. 'eyas',
  855. 'eyelashpitviper',
  856. 'eyra',
  857. 'fairybluebird',
  858. 'fairyfly',
  859. 'falcon',
  860. 'fallowdeer',
  861. 'fantail',
  862. 'fanworms',
  863. 'fattaileddunnart',
  864. 'fawn',
  865. 'feline',
  866. 'fennecfox',
  867. 'ferret',
  868. 'fiddlercrab',
  869. 'fieldmouse',
  870. 'fieldspaniel',
  871. 'finch',
  872. 'finnishspitz',
  873. 'finwhale',
  874. 'fireant',
  875. 'firebelliedtoad',
  876. 'firecrest',
  877. 'firefly',
  878. 'fish',
  879. 'fishingcat',
  880. 'flamingo',
  881. 'flatcoatretriever',
  882. 'flatfish',
  883. 'flea',
  884. 'flee',
  885. 'flicker',
  886. 'flickertailsquirrel',
  887. 'flies',
  888. 'flounder',
  889. 'fluke',
  890. 'fly',
  891. 'flycatcher',
  892. 'flyingfish',
  893. 'flyingfox',
  894. 'flyinglemur',
  895. 'flyingsquirrel',
  896. 'foal',
  897. 'fossa',
  898. 'fowl',
  899. 'fox',
  900. 'foxhound',
  901. 'foxterrier',
  902. 'frenchbulldog',
  903. 'freshwatereel',
  904. 'frigatebird',
  905. 'frilledlizard',
  906. 'frillneckedlizard',
  907. 'fritillarybutterfly',
  908. 'frog',
  909. 'frogmouth',
  910. 'fruitbat',
  911. 'fruitfly',
  912. 'fugu',
  913. 'fulmar',
  914. 'funnelweaverspider',
  915. 'furseal',
  916. 'gadwall',
  917. 'galago',
  918. 'galah',
  919. 'galapagosalbatross',
  920. 'galapagosdove',
  921. 'galapagoshawk',
  922. 'galapagosmockingbird',
  923. 'galapagospenguin',
  924. 'galapagossealion',
  925. 'galapagostortoise',
  926. 'gallinule',
  927. 'gallowaycow',
  928. 'gander',
  929. 'gangesdolphin',
  930. 'gannet',
  931. 'gar',
  932. 'gardensnake',
  933. 'garpike',
  934. 'gartersnake',
  935. 'gaur',
  936. 'gavial',
  937. 'gazelle',
  938. 'gecko',
  939. 'geese',
  940. 'gelada',
  941. 'gelding',
  942. 'gemsbok',
  943. 'gemsbuck',
  944. 'genet',
  945. 'gentoopenguin',
  946. 'gerbil',
  947. 'gerenuk',
  948. 'germanpinscher',
  949. 'germanshepherd',
  950. 'germanshorthairedpointer',
  951. 'germanspaniel',
  952. 'germanspitz',
  953. 'germanwirehairedpointer',
  954. 'gharial',
  955. 'ghostshrimp',
  956. 'giantschnauzer',
  957. 'gibbon',
  958. 'gilamonster',
  959. 'giraffe',
  960. 'glassfrog',
  961. 'globefish',
  962. 'glowworm',
  963. 'gnat',
  964. 'gnatcatcher',
  965. 'gnu',
  966. 'goa',
  967. 'goat',
  968. 'godwit',
  969. 'goitered',
  970. 'goldeneye',
  971. 'goldenmantledgroundsquirrel',
  972. 'goldenretriever',
  973. 'goldfinch',
  974. 'goldfish',
  975. 'gonolek',
  976. 'goose',
  977. 'goosefish',
  978. 'gopher',
  979. 'goral',
  980. 'gordonsetter',
  981. 'gorilla',
  982. 'goshawk',
  983. 'gosling',
  984. 'gossamerwingedbutterfly',
  985. 'gourami',
  986. 'grackle',
  987. 'grasshopper',
  988. 'grassspider',
  989. 'grayfox',
  990. 'grayling',
  991. 'grayreefshark',
  992. 'graysquirrel',
  993. 'graywolf',
  994. 'greatargus',
  995. 'greatdane',
  996. 'greathornedowl',
  997. 'greatwhiteshark',
  998. 'grebe',
  999. 'greendarnerdragonfly',
  1000. 'greyhounddog',
  1001. 'grison',
  1002. 'grizzlybear',
  1003. 'grosbeak',
  1004. 'groundbeetle',
  1005. 'groundhog',
  1006. 'grouper',
  1007. 'grouse',
  1008. 'grub',
  1009. 'grunion',
  1010. 'guanaco',
  1011. 'guernseycow',
  1012. 'guillemot',
  1013. 'guineafowl',
  1014. 'guineapig',
  1015. 'gull',
  1016. 'guppy',
  1017. 'gypsymoth',
  1018. 'gyrfalcon',
  1019. 'hackee',
  1020. 'haddock',
  1021. 'hadrosaurus',
  1022. 'hagfish',
  1023. 'hairstreak',
  1024. 'hairstreakbutterfly',
  1025. 'hake',
  1026. 'halcyon',
  1027. 'halibut',
  1028. 'halicore',
  1029. 'hamadryad',
  1030. 'hamadryas',
  1031. 'hammerheadbird',
  1032. 'hammerheadshark',
  1033. 'hammerkop',
  1034. 'hamster',
  1035. 'hanumanmonkey',
  1036. 'hapuka',
  1037. 'hapuku',
  1038. 'harborporpoise',
  1039. 'harborseal',
  1040. 'hare',
  1041. 'harlequinbug',
  1042. 'harpseal',
  1043. 'harpyeagle',
  1044. 'harrier',
  1045. 'harrierhawk',
  1046. 'hart',
  1047. 'hartebeest',
  1048. 'harvestmen',
  1049. 'harvestmouse',
  1050. 'hatchetfish',
  1051. 'hawaiianmonkseal',
  1052. 'hawk',
  1053. 'hectorsdolphin',
  1054. 'hedgehog',
  1055. 'heifer',
  1056. 'hellbender',
  1057. 'hen',
  1058. 'herald',
  1059. 'herculesbeetle',
  1060. 'hermitcrab',
  1061. 'heron',
  1062. 'herring',
  1063. 'heterodontosaurus',
  1064. 'hind',
  1065. 'hippopotamus',
  1066. 'hoatzin',
  1067. 'hochstettersfrog',
  1068. 'hog',
  1069. 'hogget',
  1070. 'hoiho',
  1071. 'hoki',
  1072. 'homalocephale',
  1073. 'honeybadger',
  1074. 'honeybee',
  1075. 'honeycreeper',
  1076. 'honeyeater',
  1077. 'hookersealion',
  1078. 'hoopoe',
  1079. 'hornbill',
  1080. 'hornedtoad',
  1081. 'hornedviper',
  1082. 'hornet',
  1083. 'hornshark',
  1084. 'horse',
  1085. 'horsechestnutleafminer',
  1086. 'horsefly',
  1087. 'horsemouse',
  1088. 'horseshoebat',
  1089. 'horseshoecrab',
  1090. 'hound',
  1091. 'housefly',
  1092. 'hoverfly',
  1093. 'howlermonkey',
  1094. 'huemul',
  1095. 'huia',
  1096. 'human',
  1097. 'hummingbird',
  1098. 'humpbackwhale',
  1099. 'husky',
  1100. 'hydatidtapeworm',
  1101. 'hydra',
  1102. 'hyena',
  1103. 'hylaeosaurus',
  1104. 'hypacrosaurus',
  1105. 'hypsilophodon',
  1106. 'hyracotherium',
  1107. 'hyrax',
  1108. 'iaerismetalmark',
  1109. 'ibadanmalimbe',
  1110. 'iberianbarbel',
  1111. 'iberianchiffchaff',
  1112. 'iberianemeraldlizard',
  1113. 'iberianlynx',
  1114. 'iberianmidwifetoad',
  1115. 'iberianmole',
  1116. 'iberiannase',
  1117. 'ibex',
  1118. 'ibis',
  1119. 'ibisbill',
  1120. 'ibizanhound',
  1121. 'iceblueredtopzebra',
  1122. 'icefish',
  1123. 'icelandgull',
  1124. 'icelandichorse',
  1125. 'icelandicsheepdog',
  1126. 'ichidna',
  1127. 'ichneumonfly',
  1128. 'ichthyosaurs',
  1129. 'ichthyostega',
  1130. 'icterinewarbler',
  1131. 'iggypops',
  1132. 'iguana',
  1133. 'iguanodon',
  1134. 'illadopsis',
  1135. 'ilsamochadegu',
  1136. 'imago',
  1137. 'impala',
  1138. 'imperatorangel',
  1139. 'imperialeagle',
  1140. 'incatern',
  1141. 'inchworm',
  1142. 'indianabat',
  1143. 'indiancow',
  1144. 'indianelephant',
  1145. 'indianglassfish',
  1146. 'indianhare',
  1147. 'indianjackal',
  1148. 'indianpalmsquirrel',
  1149. 'indianpangolin',
  1150. 'indianrhinoceros',
  1151. 'indianringneckparakeet',
  1152. 'indianrockpython',
  1153. 'indianskimmer',
  1154. 'indianspinyloach',
  1155. 'indigobunting',
  1156. 'indigowingedparrot',
  1157. 'indochinahogdeer',
  1158. 'indochinesetiger',
  1159. 'indri',
  1160. 'indusriverdolphin',
  1161. 'inexpectatumpleco',
  1162. 'inganue',
  1163. 'insect',
  1164. 'intermediateegret',
  1165. 'invisiblerail',
  1166. 'iraniangroundjay',
  1167. 'iridescentshark',
  1168. 'iriomotecat',
  1169. 'irishdraughthorse',
  1170. 'irishredandwhitesetter',
  1171. 'irishsetter',
  1172. 'irishterrier',
  1173. 'irishwaterspaniel',
  1174. 'irishwolfhound',
  1175. 'irrawaddydolphin',
  1176. 'irukandjijellyfish',
  1177. 'isabellineshrike',
  1178. 'isabellinewheatear',
  1179. 'islandcanary',
  1180. 'islandwhistler',
  1181. 'isopod',
  1182. 'italianbrownbear',
  1183. 'italiangreyhound',
  1184. 'ivorybackedwoodswallow',
  1185. 'ivorybilledwoodpecker',
  1186. 'ivorygull',
  1187. 'izuthrush',
  1188. 'jabiru',
  1189. 'jackal',
  1190. 'jackrabbit',
  1191. 'jaeger',
  1192. 'jaguar',
  1193. 'jaguarundi',
  1194. 'janenschia',
  1195. 'japanesebeetle',
  1196. 'javalina',
  1197. 'jay',
  1198. 'jellyfish',
  1199. 'jenny',
  1200. 'jerboa',
  1201. 'joey',
  1202. 'johndory',
  1203. 'juliabutterfly',
  1204. 'jumpingbean',
  1205. 'junco',
  1206. 'junebug',
  1207. 'kagu',
  1208. 'kakapo',
  1209. 'kakarikis',
  1210. 'kangaroo',
  1211. 'karakul',
  1212. 'katydid',
  1213. 'kawala',
  1214. 'kentrosaurus',
  1215. 'kestrel',
  1216. 'kid',
  1217. 'killdeer',
  1218. 'killerwhale',
  1219. 'killifish',
  1220. 'kingbird',
  1221. 'kingfisher',
  1222. 'kinglet',
  1223. 'kingsnake',
  1224. 'kinkajou',
  1225. 'kiskadee',
  1226. 'kissingbug',
  1227. 'kite',
  1228. 'kitfox',
  1229. 'kitten',
  1230. 'kittiwake',
  1231. 'kitty',
  1232. 'kiwi',
  1233. 'koala',
  1234. 'koalabear',
  1235. 'kob',
  1236. 'kodiakbear',
  1237. 'koi',
  1238. 'komododragon',
  1239. 'koodoo',
  1240. 'kookaburra',
  1241. 'kouprey',
  1242. 'krill',
  1243. 'kronosaurus',
  1244. 'kudu',
  1245. 'kusimanse',
  1246. 'labradorretriever',
  1247. 'lacewing',
  1248. 'ladybird',
  1249. 'ladybug',
  1250. 'lamb',
  1251. 'lamprey',
  1252. 'langur',
  1253. 'lark',
  1254. 'larva',
  1255. 'laughingthrush',
  1256. 'lcont',
  1257. 'leafbird',
  1258. 'leafcutterant',
  1259. 'leafhopper',
  1260. 'leafwing',
  1261. 'leech',
  1262. 'lemming',
  1263. 'lemur',
  1264. 'leonberger',
  1265. 'leopard',
  1266. 'leopardseal',
  1267. 'leveret',
  1268. 'lhasaapso',
  1269. 'lice',
  1270. 'liger',
  1271. 'lightningbug',
  1272. 'limpet',
  1273. 'limpkin',
  1274. 'ling',
  1275. 'lion',
  1276. 'lionfish',
  1277. 'littlenightmonkeys',
  1278. 'lizard',
  1279. 'llama',
  1280. 'lobo',
  1281. 'lobster',
  1282. 'locust',
  1283. 'loggerheadturtle',
  1284. 'longhorn',
  1285. 'longhornbeetle',
  1286. 'longspur',
  1287. 'loon',
  1288. 'lorikeet',
  1289. 'loris',
  1290. 'louse',
  1291. 'lovebird',
  1292. 'lowchen',
  1293. 'lunamoth',
  1294. 'lungfish',
  1295. 'lynx',
  1296. 'lynxÂ',
  1297. 'macaque',
  1298. 'macaw',
  1299. 'macropod',
  1300. 'madagascarhissingroach',
  1301. 'maggot',
  1302. 'magpie',
  1303. 'maiasaura',
  1304. 'majungatholus',
  1305. 'malamute',
  1306. 'mallard',
  1307. 'maltesedog',
  1308. 'mamba',
  1309. 'mamenchisaurus',
  1310. 'mammal',
  1311. 'mammoth',
  1312. 'manatee',
  1313. 'mandrill',
  1314. 'mangabey',
  1315. 'manta',
  1316. 'mantaray',
  1317. 'mantid',
  1318. 'mantis',
  1319. 'mantisray',
  1320. 'manxcat',
  1321. 'mara',
  1322. 'marabou',
  1323. 'marbledmurrelet',
  1324. 'mare',
  1325. 'marlin',
  1326. 'marmoset',
  1327. 'marmot',
  1328. 'marten',
  1329. 'martin',
  1330. 'massasauga',
  1331. 'massospondylus',
  1332. 'mastiff',
  1333. 'mastodon',
  1334. 'mayfly',
  1335. 'meadowhawk',
  1336. 'meadowlark',
  1337. 'mealworm',
  1338. 'meerkat',
  1339. 'megalosaurus',
  1340. 'megalotomusquinquespinosus',
  1341. 'megaraptor',
  1342. 'merganser',
  1343. 'merlin',
  1344. 'metalmarkbutterfly',
  1345. 'metamorphosis',
  1346. 'mice',
  1347. 'microvenator',
  1348. 'midge',
  1349. 'milksnake',
  1350. 'milkweedbug',
  1351. 'millipede',
  1352. 'minibeast',
  1353. 'mink',
  1354. 'minnow',
  1355. 'mite',
  1356. 'moa',
  1357. 'mockingbird',
  1358. 'mole',
  1359. 'mollies',
  1360. 'mollusk',
  1361. 'molly',
  1362. 'monarch',
  1363. 'mongoose',
  1364. 'mongrel',
  1365. 'monkey',
  1366. 'monkfishÂ',
  1367. 'monoclonius',
  1368. 'montanoceratops',
  1369. 'moorhen',
  1370. 'moose',
  1371. 'moray',
  1372. 'morayeel',
  1373. 'morpho',
  1374. 'mosasaur',
  1375. 'mosquito',
  1376. 'moth',
  1377. 'motmot',
  1378. 'mouflon',
  1379. 'mountaincat',
  1380. 'mountainlion',
  1381. 'mouse',
  1382. 'mouse / mice',
  1383. 'mousebird',
  1384. 'mudpuppy',
  1385. 'mule',
  1386. 'mullet',
  1387. 'muntjac',
  1388. 'murrelet',
  1389. 'muskox',
  1390. 'muskrat',
  1391. 'mussaurus',
  1392. 'mussel',
  1393. 'mustang',
  1394. 'mutt',
  1395. 'myna',
  1396. 'mynah',
  1397. 'myotisÂ',
  1398. 'nabarlek',
  1399. 'nag',
  1400. 'naga',
  1401. 'nagapies',
  1402. 'nakedmolerat',
  1403. 'nandine',
  1404. 'nandoo',
  1405. 'nandu',
  1406. 'narwhal',
  1407. 'narwhale',
  1408. 'natterjacktoad',
  1409. 'nauplius',
  1410. 'nautilus',
  1411. 'needlefish',
  1412. 'needletail',
  1413. 'nematode',
  1414. 'nene',
  1415. 'neonblueguppy',
  1416. 'neonbluehermitcrab',
  1417. 'neondwarfgourami',
  1418. 'neonrainbowfish',
  1419. 'neonredguppy',
  1420. 'neontetra',
  1421. 'nerka',
  1422. 'nettlefish',
  1423. 'newfoundlanddog',
  1424. 'newt',
  1425. 'newtnutria',
  1426. 'nightcrawler',
  1427. 'nighthawk',
  1428. 'nightheron',
  1429. 'nightingale',
  1430. 'nightjar',
  1431. 'nijssenissdwarfchihlid',
  1432. 'nilgai',
  1433. 'ninebandedarmadillo',
  1434. 'noctilio',
  1435. 'noctule',
  1436. 'noddy',
  1437. 'noolbenger',
  1438. 'northerncardinals',
  1439. 'northernelephantseal',
  1440. 'northernflyingsquirrel',
  1441. 'northernfurseal',
  1442. 'northernhairynosedwombat',
  1443. 'northernpike',
  1444. 'northernseahorse',
  1445. 'northernspottedowl',
  1446. 'norwaylobster',
  1447. 'norwayrat',
  1448. 'nubiangoat',
  1449. 'nudibranch',
  1450. 'numbat',
  1451. 'nurseshark',
  1452. 'nutcracker',
  1453. 'nuthatch',
  1454. 'nutria',
  1455. 'nyala',
  1456. 'nymph',
  1457. 'ocelot',
  1458. 'octopus',
  1459. 'okapi',
  1460. 'olingo',
  1461. 'olm',
  1462. 'opossum',
  1463. 'orangutan',
  1464. 'orca',
  1465. 'oregonsilverspotbutterfly',
  1466. 'oriole',
  1467. 'oropendola',
  1468. 'oropendula',
  1469. 'oryx',
  1470. 'osprey',
  1471. 'ostracod',
  1472. 'ostrich',
  1473. 'otter',
  1474. 'ovenbird',
  1475. 'owl',
  1476. 'owlbutterfly',
  1477. 'ox',
  1478. 'oxen',
  1479. 'oxpecker',
  1480. 'oyster',
  1481. 'ozarkbigearedbat',
  1482. 'pacaÂ',
  1483. 'pachyderm',
  1484. 'pacificparrotlet',
  1485. 'paddlefish',
  1486. 'paintedladybutterfly',
  1487. 'panda',
  1488. 'pangolin',
  1489. 'panther',
  1490. 'paperwasp',
  1491. 'papillon',
  1492. 'parakeet',
  1493. 'parrot',
  1494. 'partridge',
  1495. 'peacock',
  1496. 'peafowl',
  1497. 'peccary',
  1498. 'pekingese',
  1499. 'pelican',
  1500. 'pelicinuspetrel',
  1501. 'penguin',
  1502. 'perch',
  1503. 'peregrinefalcon',
  1504. 'pewee',
  1505. 'phalarope',
  1506. 'pharaohhound',
  1507. 'pheasant',
  1508. 'phoebe',
  1509. 'phoenix',
  1510. 'pig',
  1511. 'pigeon',
  1512. 'piglet',
  1513. 'pika',
  1514. 'pike',
  1515. 'pikeperchÂ',
  1516. 'pilchard',
  1517. 'pinemarten',
  1518. 'pinkriverdolphin',
  1519. 'pinniped',
  1520. 'pintail',
  1521. 'pipistrelle',
  1522. 'pipit',
  1523. 'piranha',
  1524. 'pitbull',
  1525. 'pittabird',
  1526. 'plainsqueaker',
  1527. 'plankton',
  1528. 'planthopper',
  1529. 'platypus',
  1530. 'plover',
  1531. 'polarbear',
  1532. 'polecat',
  1533. 'polliwog',
  1534. 'polyp',
  1535. 'polyturator',
  1536. 'pomeranian',
  1537. 'pondskater',
  1538. 'pony',
  1539. 'pooch',
  1540. 'poodle',
  1541. 'porcupine',
  1542. 'porpoise',
  1543. 'portuguesemanofwar',
  1544. 'possum',
  1545. 'prairiedog',
  1546. 'prawn',
  1547. 'prayingmantid',
  1548. 'prayingmantis',
  1549. 'primate',
  1550. 'pronghorn',
  1551. 'pseudodynerusquadrisectus',
  1552. 'ptarmigan',
  1553. 'pterodactyls',
  1554. 'pterosaurs',
  1555. 'puffer',
  1556. 'pufferfish',
  1557. 'puffin',
  1558. 'pug',
  1559. 'pullet',
  1560. 'puma',
  1561. 'pupa',
  1562. 'pupfish',
  1563. 'puppy',
  1564. 'purplemarten',
  1565. 'pussycat',
  1566. 'pygmy',
  1567. 'python',
  1568. 'quadrisectus',
  1569. 'quagga',
  1570. 'quahog',
  1571. 'quail',
  1572. 'queenalexandrasbirdwing',
  1573. 'queenalexandrasbirdwingbutterfly',
  1574. 'queenant',
  1575. 'queenbee',
  1576. 'queenconch',
  1577. 'queenslandgrouper',
  1578. 'queenslandheeler',
  1579. 'queensnake',
  1580. 'quelea',
  1581. 'quetzal',
  1582. 'quetzalcoatlus',
  1583. 'quillback',
  1584. 'quinquespinosus',
  1585. 'quokka',
  1586. 'quoll',
  1587. 'rabbit',
  1588. 'rabidsquirrel',
  1589. 'raccoon',
  1590. 'racer',
  1591. 'racerunner',
  1592. 'ragfish',
  1593. 'rail',
  1594. 'rainbowfish',
  1595. 'rainbowlorikeet',
  1596. 'rainbowtrout',
  1597. 'ram',
  1598. 'raptors',
  1599. 'rasbora',
  1600. 'rat',
  1601. 'ratfish',
  1602. 'rattail',
  1603. 'rattlesnake',
  1604. 'raven',
  1605. 'ray',
  1606. 'redhead',
  1607. 'redheadedwoodpecker',
  1608. 'redpoll',
  1609. 'redstart',
  1610. 'redtailedhawk',
  1611. 'reindeer',
  1612. 'reptile',
  1613. 'reynard',
  1614. 'rhea',
  1615. 'rhesusmonkey',
  1616. 'rhino',
  1617. 'rhinoceros',
  1618. 'rhinocerosbeetle',
  1619. 'rhodesianridgeback',
  1620. 'ringtailedlemur',
  1621. 'ringworm',
  1622. 'riograndeescuerzo',
  1623. 'roach',
  1624. 'roadrunner',
  1625. 'roan',
  1626. 'robberfly',
  1627. 'robin',
  1628. 'rockrat',
  1629. 'rodent',
  1630. 'roebuck',
  1631. 'roller',
  1632. 'rook',
  1633. 'rooster',
  1634. 'rottweiler',
  1635. 'sable',
  1636. 'sableantelope',
  1637. 'sablefishÂ',
  1638. 'saiga',
  1639. 'sakimonkey',
  1640. 'salamander',
  1641. 'salmon',
  1642. 'saltwatercrocodile',
  1643. 'sambar',
  1644. 'samoyeddog',
  1645. 'sandbarshark',
  1646. 'sanddollar',
  1647. 'sanderling',
  1648. 'sandpiper',
  1649. 'sapsucker',
  1650. 'sardine',
  1651. 'sawfish',
  1652. 'scallop',
  1653. 'scarab',
  1654. 'scarletibis',
  1655. 'scaup',
  1656. 'schapendoes',
  1657. 'schipperke',
  1658. 'schnauzer',
  1659. 'scorpion',
  1660. 'scoter',
  1661. 'screamer',
  1662. 'seabird',
  1663. 'seagull',
  1664. 'seahog',
  1665. 'seahorse',
  1666. 'seal',
  1667. 'sealion',
  1668. 'seamonkey',
  1669. 'seaslug',
  1670. 'seaurchin',
  1671. 'senegalpython',
  1672. 'seriema',
  1673. 'serpent',
  1674. 'serval',
  1675. 'shark',
  1676. 'shearwater',
  1677. 'sheep',
  1678. 'sheldrake',
  1679. 'shelduck',
  1680. 'shibainu',
  1681. 'shihtzu',
  1682. 'shorebird',
  1683. 'shoveler',
  1684. 'shrew',
  1685. 'shrike',
  1686. 'shrimp',
  1687. 'siamang',
  1688. 'siamesecat',
  1689. 'siberiantiger',
  1690. 'sidewinder',
  1691. 'sifaka',
  1692. 'silkworm',
  1693. 'silverfish',
  1694. 'silverfox',
  1695. 'silversidefish',
  1696. 'siskin',
  1697. 'skimmer',
  1698. 'skink',
  1699. 'skipper',
  1700. 'skua',
  1701. 'skunk',
  1702. 'skylark',
  1703. 'sloth',
  1704. 'slothbear',
  1705. 'slug',
  1706. 'smelts',
  1707. 'smew',
  1708. 'snail',
  1709. 'snake',
  1710. 'snipe',
  1711. 'snoutbutterfly',
  1712. 'snowdog',
  1713. 'snowgeese',
  1714. 'snowleopard',
  1715. 'snowmonkey',
  1716. 'snowyowl',
  1717. 'sockeyesalmon',
  1718. 'solenodon',
  1719. 'solitaire',
  1720. 'songbird',
  1721. 'sora',
  1722. 'southernhairnosedwombat',
  1723. 'sow',
  1724. 'spadefoot',
  1725. 'sparrow',
  1726. 'sphinx',
  1727. 'spider',
  1728. 'spidermonkey',
  1729. 'spiketail',
  1730. 'spittlebug',
  1731. 'sponge',
  1732. 'spoonbill',
  1733. 'spotteddolphin',
  1734. 'spreadwing',
  1735. 'springbok',
  1736. 'springpeeper',
  1737. 'springtail',
  1738. 'squab',
  1739. 'squamata',
  1740. 'squeaker',
  1741. 'squid',
  1742. 'squirrel',
  1743. 'stag',
  1744. 'stagbeetle',
  1745. 'stallion',
  1746. 'starfish',
  1747. 'starling',
  1748. 'steed',
  1749. 'steer',
  1750. 'stegosaurus',
  1751. 'stickinsect',
  1752. 'stickleback',
  1753. 'stilt',
  1754. 'stingray',
  1755. 'stinkbug',
  1756. 'stinkpot',
  1757. 'stoat',
  1758. 'stonefly',
  1759. 'stork',
  1760. 'stud',
  1761. 'sturgeon',
  1762. 'sugarglider',
  1763. 'sulphurbutterfly',
  1764. 'sunbear',
  1765. 'sunbittern',
  1766. 'sunfish',
  1767. 'swallow',
  1768. 'swallowtail',
  1769. 'swallowtailbutterfly',
  1770. 'swan',
  1771. 'swellfish',
  1772. 'swift',
  1773. 'swordfish',
  1774. 'tadpole',
  1775. 'tahr',
  1776. 'takin',
  1777. 'tamarin',
  1778. 'tanager',
  1779. 'tapaculo',
  1780. 'tapeworm',
  1781. 'tapir',
  1782. 'tarantula',
  1783. 'tarpan',
  1784. 'tarsier',
  1785. 'taruca',
  1786. 'tasmaniandevil',
  1787. 'tasmaniantiger',
  1788. 'tattler',
  1789. 'tayra',
  1790. 'teal',
  1791. 'tegus',
  1792. 'teledu',
  1793. 'tench',
  1794. 'tenrec',
  1795. 'termite',
  1796. 'tern',
  1797. 'terrapin',
  1798. 'terrier',
  1799. 'thoroughbred',
  1800. 'thrasher',
  1801. 'thrip',
  1802. 'thrush',
  1803. 'thunderbird',
  1804. 'thylacine',
  1805. 'tick',
  1806. 'tiger',
  1807. 'tigerbeetle',
  1808. 'tigermoth',
  1809. 'tigershark',
  1810. 'tilefish',
  1811. 'tinamou',
  1812. 'titi',
  1813. 'titmouse',
  1814. 'toad',
  1815. 'toadfish',
  1816. 'tomtitÂ',
  1817. 'topi',
  1818. 'tortoise',
  1819. 'toucan',
  1820. 'towhee',
  1821. 'tragopan',
  1822. 'treecreeper',
  1823. 'trex',
  1824. 'triceratops',
  1825. 'trogon',
  1826. 'trout',
  1827. 'trumpeterbird',
  1828. 'trumpeterswan',
  1829. 'tsetsefly',
  1830. 'tuatara',
  1831. 'tuna',
  1832. 'turaco',
  1833. 'turkey',
  1834. 'turnstone',
  1835. 'turtle',
  1836. 'turtledove',
  1837. 'uakari',
  1838. 'ugandakob',
  1839. 'uintagroundsquirrel',
  1840. 'ulyssesbutterfly',
  1841. 'umbrellabird',
  1842. 'umbrette',
  1843. 'unau',
  1844. 'ungulate',
  1845. 'unicorn',
  1846. 'upupa',
  1847. 'urchin',
  1848. 'urial',
  1849. 'uromastyxmaliensis',
  1850. 'uromastyxspinipes',
  1851. 'urson',
  1852. 'urubu',
  1853. 'urus',
  1854. 'urutu',
  1855. 'urva',
  1856. 'utahprairiedog',
  1857. 'vampirebat',
  1858. 'vaquita',
  1859. 'veery',
  1860. 'velociraptor',
  1861. 'velvetcrab',
  1862. 'velvetworm',
  1863. 'venomoussnake',
  1864. 'verdin',
  1865. 'vervet',
  1866. 'viceroybutterfly',
  1867. 'vicuna',
  1868. 'viper',
  1869. 'viperfish',
  1870. 'vipersquid',
  1871. 'vireo',
  1872. 'virginiaopossum',
  1873. 'vixen',
  1874. 'vole',
  1875. 'volvox',
  1876. 'vulpesvelox',
  1877. 'vulpesvulpes',
  1878. 'vulture',
  1879. 'walkingstick',
  1880. 'wallaby',
  1881. 'wallaroo',
  1882. 'walleye',
  1883. 'walrus',
  1884. 'warbler',
  1885. 'warthog',
  1886. 'wasp',
  1887. 'waterboatman',
  1888. 'waterbuck',
  1889. 'waterbuffalo',
  1890. 'waterbug',
  1891. 'waterdogs',
  1892. 'waterdragons',
  1893. 'watermoccasin',
  1894. 'waterstrider',
  1895. 'waterthrush',
  1896. 'wattlebird',
  1897. 'watussi',
  1898. 'waxwing',
  1899. 'weasel',
  1900. 'weaverbird',
  1901. 'weevil',
  1902. 'westafricanantelope',
  1903. 'whale',
  1904. 'whapuku',
  1905. 'whelp',
  1906. 'whimbrel',
  1907. 'whippet',
  1908. 'whippoorwill',
  1909. 'whitebeakeddolphin',
  1910. 'whiteeye',
  1911. 'whitepelican',
  1912. 'whiterhino',
  1913. 'whitetaileddeer',
  1914. 'whitetippedreefshark',
  1915. 'whooper',
  1916. 'whoopingcrane',
  1917. 'widgeon',
  1918. 'widowspider',
  1919. 'wildcat',
  1920. 'wildebeast',
  1921. 'wildebeest',
  1922. 'willet',
  1923. 'wireworm',
  1924. 'wisent',
  1925. 'wobbegongshark',
  1926. 'wolf',
  1927. 'wolfspider',
  1928. 'wolverine',
  1929. 'wombat',
  1930. 'woodborer',
  1931. 'woodchuck',
  1932. 'woodcock',
  1933. 'woodnymphbutterfly',
  1934. 'woodpecker',
  1935. 'woodstorks',
  1936. 'woollybearcaterpillar',
  1937. 'worm',
  1938. 'wrasse',
  1939. 'wreckfish',
  1940. 'wren',
  1941. 'wrenchbird',
  1942. 'wryneck',
  1943. 'wuerhosaurus',
  1944. 'wyvern',
  1945. 'xanclomys',
  1946. 'xanthareel',
  1947. 'xantus',
  1948. 'xantusmurrelet',
  1949. 'xeme',
  1950. 'xenarthra',
  1951. 'xenoposeidon',
  1952. 'xenops',
  1953. 'xenopterygii',
  1954. 'xenopus',
  1955. 'xenotarsosaurus',
  1956. 'xenurine',
  1957. 'xenurusunicinctus',
  1958. 'xerus',
  1959. 'xiaosaurus',
  1960. 'xinjiangovenator',
  1961. 'xiphias',
  1962. 'xiphiasgladius',
  1963. 'xiphosuran',
  1964. 'xoloitzcuintli',
  1965. 'xoni',
  1966. 'xrayfish',
  1967. 'xraytetra',
  1968. 'xuanhanosaurus',
  1969. 'xuanhuaceratops',
  1970. 'xuanhuasaurus',
  1971. 'yaffle',
  1972. 'yak',
  1973. 'yapok',
  1974. 'yardant',
  1975. 'yearling',
  1976. 'yellowbelliedmarmot',
  1977. 'yellowbellylizard',
  1978. 'yellowhammer',
  1979. 'yellowjacket',
  1980. 'yellowlegs',
  1981. 'yellowthroat',
  1982. 'yellowwhitebutterfly',
  1983. 'yeti',
  1984. 'ynambu',
  1985. 'yorkshireterrier',
  1986. 'yosemitetoad',
  1987. 'yucker',
  1988. 'zander',
  1989. 'zanzibardaygecko',
  1990. 'zebra',
  1991. 'zebradove',
  1992. 'zebrafinch',
  1993. 'zebrafish',
  1994. 'zebralongwingbutterfly',
  1995. 'zebraswallowtailbutterfly',
  1996. 'zebratailedlizard',
  1997. 'zebu',
  1998. 'zenaida',
  1999. 'zeren',
  2000. 'zethusspinipes',
  2001. 'zethuswasp',
  2002. 'zigzagsalamander',
  2003. 'zonetailedpigeon',
  2004. 'zooplankton',
  2005. 'zopilote',
  2006. 'zorilla',
  2007. 'abandoned',
  2008. 'able',
  2009. 'absolute',
  2010. 'academic',
  2011. 'acceptable',
  2012. 'acclaimed',
  2013. 'accomplished',
  2014. 'accurate',
  2015. 'aching',
  2016. 'acidic',
  2017. 'acrobatic',
  2018. 'adorable',
  2019. 'adventurous',
  2020. 'babyish',
  2021. 'back',
  2022. 'bad',
  2023. 'baggy',
  2024. 'bare',
  2025. 'barren',
  2026. 'basic',
  2027. 'beautiful',
  2028. 'belated',
  2029. 'beloved',
  2030. 'calculating',
  2031. 'calm',
  2032. 'candid',
  2033. 'canine',
  2034. 'capital',
  2035. 'carefree',
  2036. 'careful',
  2037. 'careless',
  2038. 'caring',
  2039. 'cautious',
  2040. 'cavernous',
  2041. 'celebrated',
  2042. 'charming',
  2043. 'damaged',
  2044. 'damp',
  2045. 'dangerous',
  2046. 'dapper',
  2047. 'daring',
  2048. 'dark',
  2049. 'darling',
  2050. 'dazzling',
  2051. 'dead',
  2052. 'deadly',
  2053. 'deafening',
  2054. 'dear',
  2055. 'dearest',
  2056. 'each',
  2057. 'eager',
  2058. 'early',
  2059. 'earnest',
  2060. 'easy',
  2061. 'easygoing',
  2062. 'ecstatic',
  2063. 'edible',
  2064. 'educated',
  2065. 'fabulous',
  2066. 'failing',
  2067. 'faint',
  2068. 'fair',
  2069. 'faithful',
  2070. 'fake',
  2071. 'familiar',
  2072. 'famous',
  2073. 'fancy',
  2074. 'fantastic',
  2075. 'far',
  2076. 'faraway',
  2077. 'farflung',
  2078. 'faroff',
  2079. 'gargantuan',
  2080. 'gaseous',
  2081. 'general',
  2082. 'generous',
  2083. 'gentle',
  2084. 'genuine',
  2085. 'giant',
  2086. 'giddy',
  2087. 'gigantic',
  2088. 'hairy',
  2089. 'half',
  2090. 'handmade',
  2091. 'handsome',
  2092. 'handy',
  2093. 'happy',
  2094. 'happygolucky',
  2095. 'hard',
  2096. 'icky',
  2097. 'icy',
  2098. 'ideal',
  2099. 'idealistic',
  2100. 'identical',
  2101. 'idiotic',
  2102. 'idle',
  2103. 'idolized',
  2104. 'ignorant',
  2105. 'ill',
  2106. 'illegal',
  2107. 'jaded',
  2108. 'jagged',
  2109. 'jampacked',
  2110. 'kaleidoscopic',
  2111. 'keen',
  2112. 'lame',
  2113. 'lanky',
  2114. 'large',
  2115. 'last',
  2116. 'lasting',
  2117. 'late',
  2118. 'lavish',
  2119. 'lawful',
  2120. 'mad',
  2121. 'madeup',
  2122. 'magnificent',
  2123. 'majestic',
  2124. 'major',
  2125. 'male',
  2126. 'mammoth',
  2127. 'married',
  2128. 'marvelous',
  2129. 'naive',
  2130. 'narrow',
  2131. 'nasty',
  2132. 'natural',
  2133. 'naughty',
  2134. 'obedient',
  2135. 'obese',
  2136. 'oblong',
  2137. 'oblong',
  2138. 'obvious',
  2139. 'occasional',
  2140. 'oily',
  2141. 'palatable',
  2142. 'pale',
  2143. 'paltry',
  2144. 'parallel',
  2145. 'parched',
  2146. 'partial',
  2147. 'passionate',
  2148. 'past',
  2149. 'pastel',
  2150. 'peaceful',
  2151. 'peppery',
  2152. 'perfect',
  2153. 'perfumed',
  2154. 'quaint',
  2155. 'qualified',
  2156. 'radiant',
  2157. 'ragged',
  2158. 'rapid',
  2159. 'rare',
  2160. 'rash',
  2161. 'raw',
  2162. 'recent',
  2163. 'reckless',
  2164. 'rectangular',
  2165. 'sad',
  2166. 'safe',
  2167. 'salty',
  2168. 'same',
  2169. 'sandy',
  2170. 'sane',
  2171. 'sarcastic',
  2172. 'sardonic',
  2173. 'satisfied',
  2174. 'scaly',
  2175. 'scarce',
  2176. 'scared',
  2177. 'scary',
  2178. 'scented',
  2179. 'scholarly',
  2180. 'scientific',
  2181. 'scornful',
  2182. 'scratchy',
  2183. 'scrawny',
  2184. 'second',
  2185. 'secondary',
  2186. 'secondhand',
  2187. 'secret',
  2188. 'selfassured',
  2189. 'selfish',
  2190. 'selfreliant',
  2191. 'sentimental',
  2192. 'talkative',
  2193. 'tall',
  2194. 'tame',
  2195. 'tan',
  2196. 'tangible',
  2197. 'tart',
  2198. 'tasty',
  2199. 'tattered',
  2200. 'taut',
  2201. 'tedious',
  2202. 'teeming',
  2203. 'ugly',
  2204. 'ultimate',
  2205. 'unacceptable',
  2206. 'unaware',
  2207. 'uncomfortable',
  2208. 'uncommon',
  2209. 'unconscious',
  2210. 'understated',
  2211. 'unequaled',
  2212. 'vacant',
  2213. 'vague',
  2214. 'vain',
  2215. 'valid',
  2216. 'wan',
  2217. 'warlike',
  2218. 'warm',
  2219. 'warmhearted',
  2220. 'warped',
  2221. 'wary',
  2222. 'wasteful',
  2223. 'watchful',
  2224. 'waterlogged',
  2225. 'watery',
  2226. 'wavy',
  2227. 'yawning',
  2228. 'yearly',
  2229. 'zany',
  2230. 'false',
  2231. 'active',
  2232. 'actual',
  2233. 'adept',
  2234. 'admirable',
  2235. 'admired',
  2236. 'adolescent',
  2237. 'adorable',
  2238. 'adored',
  2239. 'advanced',
  2240. 'affectionate',
  2241. 'afraid',
  2242. 'aged',
  2243. 'aggravating',
  2244. 'beneficial',
  2245. 'best',
  2246. 'better',
  2247. 'bewitched',
  2248. 'big',
  2249. 'bighearted',
  2250. 'biodegradable',
  2251. 'bitesized',
  2252. 'bitter',
  2253. 'black',
  2254. 'cheap',
  2255. 'cheerful',
  2256. 'cheery',
  2257. 'chief',
  2258. 'chilly',
  2259. 'chubby',
  2260. 'circular',
  2261. 'classic',
  2262. 'clean',
  2263. 'clear',
  2264. 'clearcut',
  2265. 'clever',
  2266. 'close',
  2267. 'closed',
  2268. 'decent',
  2269. 'decimal',
  2270. 'decisive',
  2271. 'deep',
  2272. 'defenseless',
  2273. 'defensive',
  2274. 'defiant',
  2275. 'deficient',
  2276. 'definite',
  2277. 'definitive',
  2278. 'delayed',
  2279. 'delectable',
  2280. 'delicious',
  2281. 'elaborate',
  2282. 'elastic',
  2283. 'elated',
  2284. 'elderly',
  2285. 'electric',
  2286. 'elegant',
  2287. 'elementary',
  2288. 'elliptical',
  2289. 'embarrassed',
  2290. 'fast',
  2291. 'fat',
  2292. 'fatal',
  2293. 'fatherly',
  2294. 'favorable',
  2295. 'favorite',
  2296. 'fearful',
  2297. 'fearless',
  2298. 'feisty',
  2299. 'feline',
  2300. 'female',
  2301. 'feminine',
  2302. 'few',
  2303. 'fickle',
  2304. 'gifted',
  2305. 'giving',
  2306. 'glamorous',
  2307. 'glaring',
  2308. 'glass',
  2309. 'gleaming',
  2310. 'gleeful',
  2311. 'glistening',
  2312. 'glittering',
  2313. 'hardtofind',
  2314. 'harmful',
  2315. 'harmless',
  2316. 'harmonious',
  2317. 'harsh',
  2318. 'hasty',
  2319. 'hateful',
  2320. 'haunting',
  2321. 'illfated',
  2322. 'illinformed',
  2323. 'illiterate',
  2324. 'illustrious',
  2325. 'imaginary',
  2326. 'imaginative',
  2327. 'immaculate',
  2328. 'immaterial',
  2329. 'immediate',
  2330. 'immense',
  2331. 'impassioned',
  2332. 'jaunty',
  2333. 'jealous',
  2334. 'jittery',
  2335. 'key',
  2336. 'kind',
  2337. 'lazy',
  2338. 'leading',
  2339. 'leafy',
  2340. 'lean',
  2341. 'left',
  2342. 'legal',
  2343. 'legitimate',
  2344. 'light',
  2345. 'masculine',
  2346. 'massive',
  2347. 'mature',
  2348. 'meager',
  2349. 'mealy',
  2350. 'mean',
  2351. 'measly',
  2352. 'meaty',
  2353. 'medical',
  2354. 'mediocre',
  2355. 'nautical',
  2356. 'near',
  2357. 'neat',
  2358. 'necessary',
  2359. 'needy',
  2360. 'odd',
  2361. 'oddball',
  2362. 'offbeat',
  2363. 'offensive',
  2364. 'official',
  2365. 'old',
  2366. 'periodic',
  2367. 'perky',
  2368. 'personal',
  2369. 'pertinent',
  2370. 'pesky',
  2371. 'pessimistic',
  2372. 'petty',
  2373. 'phony',
  2374. 'physical',
  2375. 'piercing',
  2376. 'pink',
  2377. 'pitiful',
  2378. 'plain',
  2379. 'quarrelsome',
  2380. 'quarterly',
  2381. 'ready',
  2382. 'real',
  2383. 'realistic',
  2384. 'reasonable',
  2385. 'red',
  2386. 'reflecting',
  2387. 'regal',
  2388. 'regular',
  2389. 'separate',
  2390. 'serene',
  2391. 'serious',
  2392. 'serpentine',
  2393. 'several',
  2394. 'severe',
  2395. 'shabby',
  2396. 'shadowy',
  2397. 'shady',
  2398. 'shallow',
  2399. 'shameful',
  2400. 'shameless',
  2401. 'sharp',
  2402. 'shimmering',
  2403. 'shiny',
  2404. 'shocked',
  2405. 'shocking',
  2406. 'shoddy',
  2407. 'short',
  2408. 'shortterm',
  2409. 'showy',
  2410. 'shrill',
  2411. 'shy',
  2412. 'sick',
  2413. 'silent',
  2414. 'silky',
  2415. 'tempting',
  2416. 'tender',
  2417. 'tense',
  2418. 'tepid',
  2419. 'terrible',
  2420. 'terrific',
  2421. 'testy',
  2422. 'thankful',
  2423. 'that',
  2424. 'these',
  2425. 'uneven',
  2426. 'unfinished',
  2427. 'unfit',
  2428. 'unfolded',
  2429. 'unfortunate',
  2430. 'unhappy',
  2431. 'unhealthy',
  2432. 'uniform',
  2433. 'unimportant',
  2434. 'unique',
  2435. 'valuable',
  2436. 'vapid',
  2437. 'variable',
  2438. 'vast',
  2439. 'velvety',
  2440. 'weak',
  2441. 'wealthy',
  2442. 'weary',
  2443. 'webbed',
  2444. 'wee',
  2445. 'weekly',
  2446. 'weepy',
  2447. 'weighty',
  2448. 'weird',
  2449. 'welcome',
  2450. 'welldocumented',
  2451. 'yellow',
  2452. 'zealous',
  2453. 'aggressive',
  2454. 'agile',
  2455. 'agitated',
  2456. 'agonizing',
  2457. 'agreeable',
  2458. 'ajar',
  2459. 'alarmed',
  2460. 'alarming',
  2461. 'alert',
  2462. 'alienated',
  2463. 'alive',
  2464. 'all',
  2465. 'altruistic',
  2466. 'blackandwhite',
  2467. 'bland',
  2468. 'blank',
  2469. 'blaring',
  2470. 'bleak',
  2471. 'blind',
  2472. 'blissful',
  2473. 'blond',
  2474. 'blue',
  2475. 'blushing',
  2476. 'cloudy',
  2477. 'clueless',
  2478. 'clumsy',
  2479. 'cluttered',
  2480. 'coarse',
  2481. 'cold',
  2482. 'colorful',
  2483. 'colorless',
  2484. 'colossal',
  2485. 'comfortable',
  2486. 'common',
  2487. 'compassionate',
  2488. 'competent',
  2489. 'complete',
  2490. 'delightful',
  2491. 'delirious',
  2492. 'demanding',
  2493. 'dense',
  2494. 'dental',
  2495. 'dependable',
  2496. 'dependent',
  2497. 'descriptive',
  2498. 'deserted',
  2499. 'detailed',
  2500. 'determined',
  2501. 'devoted',
  2502. 'different',
  2503. 'embellished',
  2504. 'eminent',
  2505. 'emotional',
  2506. 'empty',
  2507. 'enchanted',
  2508. 'enchanting',
  2509. 'energetic',
  2510. 'enlightened',
  2511. 'enormous',
  2512. 'filthy',
  2513. 'fine',
  2514. 'finished',
  2515. 'firm',
  2516. 'first',
  2517. 'firsthand',
  2518. 'fitting',
  2519. 'fixed',
  2520. 'flaky',
  2521. 'flamboyant',
  2522. 'flashy',
  2523. 'flat',
  2524. 'flawed',
  2525. 'flawless',
  2526. 'flickering',
  2527. 'gloomy',
  2528. 'glorious',
  2529. 'glossy',
  2530. 'glum',
  2531. 'golden',
  2532. 'good',
  2533. 'goodnatured',
  2534. 'gorgeous',
  2535. 'graceful',
  2536. 'healthy',
  2537. 'heartfelt',
  2538. 'hearty',
  2539. 'heavenly',
  2540. 'heavy',
  2541. 'hefty',
  2542. 'helpful',
  2543. 'helpless',
  2544. 'impartial',
  2545. 'impeccable',
  2546. 'imperfect',
  2547. 'imperturbable',
  2548. 'impish',
  2549. 'impolite',
  2550. 'important',
  2551. 'impossible',
  2552. 'impractical',
  2553. 'impressionable',
  2554. 'impressive',
  2555. 'improbable',
  2556. 'joint',
  2557. 'jolly',
  2558. 'jovial',
  2559. 'kindhearted',
  2560. 'kindly',
  2561. 'lighthearted',
  2562. 'likable',
  2563. 'likely',
  2564. 'limited',
  2565. 'limp',
  2566. 'limping',
  2567. 'linear',
  2568. 'lined',
  2569. 'liquid',
  2570. 'medium',
  2571. 'meek',
  2572. 'mellow',
  2573. 'melodic',
  2574. 'memorable',
  2575. 'menacing',
  2576. 'merry',
  2577. 'messy',
  2578. 'metallic',
  2579. 'mild',
  2580. 'negative',
  2581. 'neglected',
  2582. 'negligible',
  2583. 'neighboring',
  2584. 'nervous',
  2585. 'new',
  2586. 'oldfashioned',
  2587. 'only',
  2588. 'open',
  2589. 'optimal',
  2590. 'optimistic',
  2591. 'opulent',
  2592. 'plaintive',
  2593. 'plastic',
  2594. 'playful',
  2595. 'pleasant',
  2596. 'pleased',
  2597. 'pleasing',
  2598. 'plump',
  2599. 'plush',
  2600. 'pointed',
  2601. 'pointless',
  2602. 'poised',
  2603. 'polished',
  2604. 'polite',
  2605. 'political',
  2606. 'queasy',
  2607. 'querulous',
  2608. 'reliable',
  2609. 'relieved',
  2610. 'remarkable',
  2611. 'remorseful',
  2612. 'remote',
  2613. 'repentant',
  2614. 'required',
  2615. 'respectful',
  2616. 'responsible',
  2617. 'silly',
  2618. 'silver',
  2619. 'similar',
  2620. 'simple',
  2621. 'simplistic',
  2622. 'sinful',
  2623. 'single',
  2624. 'sizzling',
  2625. 'skeletal',
  2626. 'skinny',
  2627. 'sleepy',
  2628. 'slight',
  2629. 'slim',
  2630. 'slimy',
  2631. 'slippery',
  2632. 'slow',
  2633. 'slushy',
  2634. 'small',
  2635. 'smart',
  2636. 'smoggy',
  2637. 'smooth',
  2638. 'smug',
  2639. 'snappy',
  2640. 'snarling',
  2641. 'sneaky',
  2642. 'sniveling',
  2643. 'snoopy',
  2644. 'thick',
  2645. 'thin',
  2646. 'third',
  2647. 'thirsty',
  2648. 'this',
  2649. 'thorny',
  2650. 'thorough',
  2651. 'those',
  2652. 'thoughtful',
  2653. 'threadbare',
  2654. 'united',
  2655. 'unkempt',
  2656. 'unknown',
  2657. 'unlawful',
  2658. 'unlined',
  2659. 'unlucky',
  2660. 'unnatural',
  2661. 'unpleasant',
  2662. 'unrealistic',
  2663. 'venerated',
  2664. 'vengeful',
  2665. 'verifiable',
  2666. 'vibrant',
  2667. 'vicious',
  2668. 'wellgroomed',
  2669. 'wellinformed',
  2670. 'welllit',
  2671. 'wellmade',
  2672. 'welloff',
  2673. 'welltodo',
  2674. 'wellworn',
  2675. 'wet',
  2676. 'which',
  2677. 'whimsical',
  2678. 'whirlwind',
  2679. 'whispered',
  2680. 'yellowish',
  2681. 'zesty',
  2682. 'amazing',
  2683. 'ambitious',
  2684. 'ample',
  2685. 'amused',
  2686. 'amusing',
  2687. 'anchored',
  2688. 'ancient',
  2689. 'angelic',
  2690. 'angry',
  2691. 'anguished',
  2692. 'animated',
  2693. 'annual',
  2694. 'another',
  2695. 'antique',
  2696. 'bogus',
  2697. 'boiling',
  2698. 'bold',
  2699. 'bony',
  2700. 'boring',
  2701. 'bossy',
  2702. 'both',
  2703. 'bouncy',
  2704. 'bountiful',
  2705. 'bowed',
  2706. 'complex',
  2707. 'complicated',
  2708. 'composed',
  2709. 'concerned',
  2710. 'concrete',
  2711. 'confused',
  2712. 'conscious',
  2713. 'considerate',
  2714. 'constant',
  2715. 'content',
  2716. 'conventional',
  2717. 'cooked',
  2718. 'cool',
  2719. 'cooperative',
  2720. 'difficult',
  2721. 'digital',
  2722. 'diligent',
  2723. 'dim',
  2724. 'dimpled',
  2725. 'dimwitted',
  2726. 'direct',
  2727. 'disastrous',
  2728. 'discrete',
  2729. 'disfigured',
  2730. 'disgusting',
  2731. 'disloyal',
  2732. 'dismal',
  2733. 'enraged',
  2734. 'entire',
  2735. 'envious',
  2736. 'equal',
  2737. 'equatorial',
  2738. 'essential',
  2739. 'esteemed',
  2740. 'ethical',
  2741. 'euphoric',
  2742. 'flimsy',
  2743. 'flippant',
  2744. 'flowery',
  2745. 'fluffy',
  2746. 'fluid',
  2747. 'flustered',
  2748. 'focused',
  2749. 'fond',
  2750. 'foolhardy',
  2751. 'foolish',
  2752. 'forceful',
  2753. 'forked',
  2754. 'formal',
  2755. 'forsaken',
  2756. 'gracious',
  2757. 'grand',
  2758. 'grandiose',
  2759. 'granular',
  2760. 'grateful',
  2761. 'grave',
  2762. 'gray',
  2763. 'great',
  2764. 'greedy',
  2765. 'green',
  2766. 'hidden',
  2767. 'hideous',
  2768. 'high',
  2769. 'highlevel',
  2770. 'hilarious',
  2771. 'hoarse',
  2772. 'hollow',
  2773. 'homely',
  2774. 'impure',
  2775. 'inborn',
  2776. 'incomparable',
  2777. 'incompatible',
  2778. 'incomplete',
  2779. 'inconsequential',
  2780. 'incredible',
  2781. 'indelible',
  2782. 'indolent',
  2783. 'inexperienced',
  2784. 'infamous',
  2785. 'infantile',
  2786. 'joyful',
  2787. 'joyous',
  2788. 'jubilant',
  2789. 'klutzy',
  2790. 'knobby',
  2791. 'little',
  2792. 'live',
  2793. 'lively',
  2794. 'livid',
  2795. 'loathsome',
  2796. 'lone',
  2797. 'lonely',
  2798. 'long',
  2799. 'milky',
  2800. 'mindless',
  2801. 'miniature',
  2802. 'minor',
  2803. 'minty',
  2804. 'miserable',
  2805. 'miserly',
  2806. 'misguided',
  2807. 'misty',
  2808. 'mixed',
  2809. 'next',
  2810. 'nice',
  2811. 'nifty',
  2812. 'nimble',
  2813. 'nippy',
  2814. 'orange',
  2815. 'orderly',
  2816. 'ordinary',
  2817. 'organic',
  2818. 'ornate',
  2819. 'ornery',
  2820. 'poor',
  2821. 'popular',
  2822. 'portly',
  2823. 'posh',
  2824. 'positive',
  2825. 'possible',
  2826. 'potable',
  2827. 'powerful',
  2828. 'powerless',
  2829. 'practical',
  2830. 'precious',
  2831. 'present',
  2832. 'prestigious',
  2833. 'questionable',
  2834. 'quick',
  2835. 'repulsive',
  2836. 'revolving',
  2837. 'rewarding',
  2838. 'rich',
  2839. 'right',
  2840. 'rigid',
  2841. 'ringed',
  2842. 'ripe',
  2843. 'sociable',
  2844. 'soft',
  2845. 'soggy',
  2846. 'solid',
  2847. 'somber',
  2848. 'some',
  2849. 'sophisticated',
  2850. 'sore',
  2851. 'sorrowful',
  2852. 'soulful',
  2853. 'soupy',
  2854. 'sour',
  2855. 'spanish',
  2856. 'sparkling',
  2857. 'sparse',
  2858. 'specific',
  2859. 'spectacular',
  2860. 'speedy',
  2861. 'spherical',
  2862. 'spicy',
  2863. 'spiffy',
  2864. 'spirited',
  2865. 'spiteful',
  2866. 'splendid',
  2867. 'spotless',
  2868. 'spotted',
  2869. 'spry',
  2870. 'thrifty',
  2871. 'thunderous',
  2872. 'tidy',
  2873. 'tight',
  2874. 'timely',
  2875. 'tinted',
  2876. 'tiny',
  2877. 'tired',
  2878. 'torn',
  2879. 'total',
  2880. 'unripe',
  2881. 'unruly',
  2882. 'unselfish',
  2883. 'unsightly',
  2884. 'unsteady',
  2885. 'unsung',
  2886. 'untidy',
  2887. 'untimely',
  2888. 'untried',
  2889. 'victorious',
  2890. 'vigilant',
  2891. 'vigorous',
  2892. 'villainous',
  2893. 'violet',
  2894. 'white',
  2895. 'whole',
  2896. 'whopping',
  2897. 'wicked',
  2898. 'wide',
  2899. 'wideeyed',
  2900. 'wiggly',
  2901. 'wild',
  2902. 'willing',
  2903. 'wilted',
  2904. 'winding',
  2905. 'windy',
  2906. 'young',
  2907. 'zigzag',
  2908. 'anxious',
  2909. 'any',
  2910. 'apprehensive',
  2911. 'appropriate',
  2912. 'apt',
  2913. 'arctic',
  2914. 'arid',
  2915. 'aromatic',
  2916. 'artistic',
  2917. 'ashamed',
  2918. 'assured',
  2919. 'astonishing',
  2920. 'athletic',
  2921. 'brave',
  2922. 'breakable',
  2923. 'brief',
  2924. 'bright',
  2925. 'brilliant',
  2926. 'brisk',
  2927. 'broken',
  2928. 'bronze',
  2929. 'brown',
  2930. 'bruised',
  2931. 'coordinated',
  2932. 'corny',
  2933. 'corrupt',
  2934. 'costly',
  2935. 'courageous',
  2936. 'courteous',
  2937. 'crafty',
  2938. 'crazy',
  2939. 'creamy',
  2940. 'creative',
  2941. 'creepy',
  2942. 'criminal',
  2943. 'crisp',
  2944. 'dirty',
  2945. 'disguised',
  2946. 'dishonest',
  2947. 'dismal',
  2948. 'distant',
  2949. 'distant',
  2950. 'distinct',
  2951. 'distorted',
  2952. 'dizzy',
  2953. 'dopey',
  2954. 'downright',
  2955. 'dreary',
  2956. 'even',
  2957. 'evergreen',
  2958. 'everlasting',
  2959. 'every',
  2960. 'evil',
  2961. 'exalted',
  2962. 'excellent',
  2963. 'excitable',
  2964. 'exemplary',
  2965. 'exhausted',
  2966. 'forthright',
  2967. 'fortunate',
  2968. 'fragrant',
  2969. 'frail',
  2970. 'frank',
  2971. 'frayed',
  2972. 'free',
  2973. 'french',
  2974. 'frequent',
  2975. 'fresh',
  2976. 'friendly',
  2977. 'frightened',
  2978. 'frightening',
  2979. 'frigid',
  2980. 'gregarious',
  2981. 'grim',
  2982. 'grimy',
  2983. 'gripping',
  2984. 'grizzled',
  2985. 'gross',
  2986. 'grotesque',
  2987. 'grouchy',
  2988. 'grounded',
  2989. 'honest',
  2990. 'honorable',
  2991. 'honored',
  2992. 'hopeful',
  2993. 'horrible',
  2994. 'hospitable',
  2995. 'hot',
  2996. 'huge',
  2997. 'infatuated',
  2998. 'inferior',
  2999. 'infinite',
  3000. 'informal',
  3001. 'innocent',
  3002. 'insecure',
  3003. 'insidious',
  3004. 'insignificant',
  3005. 'insistent',
  3006. 'instructive',
  3007. 'insubstantial',
  3008. 'judicious',
  3009. 'juicy',
  3010. 'jumbo',
  3011. 'knotty',
  3012. 'knowing',
  3013. 'knowledgeable',
  3014. 'longterm',
  3015. 'loose',
  3016. 'lopsided',
  3017. 'lost',
  3018. 'loud',
  3019. 'lovable',
  3020. 'lovely',
  3021. 'loving',
  3022. 'modern',
  3023. 'modest',
  3024. 'moist',
  3025. 'monstrous',
  3026. 'monthly',
  3027. 'monumental',
  3028. 'moral',
  3029. 'mortified',
  3030. 'motherly',
  3031. 'motionless',
  3032. 'nocturnal',
  3033. 'noisy',
  3034. 'nonstop',
  3035. 'normal',
  3036. 'notable',
  3037. 'noted',
  3038. 'original',
  3039. 'other',
  3040. 'our',
  3041. 'outgoing',
  3042. 'outlandish',
  3043. 'outlying',
  3044. 'precious',
  3045. 'pretty',
  3046. 'previous',
  3047. 'pricey',
  3048. 'prickly',
  3049. 'primary',
  3050. 'prime',
  3051. 'pristine',
  3052. 'private',
  3053. 'prize',
  3054. 'probable',
  3055. 'productive',
  3056. 'profitable',
  3057. 'quickwitted',
  3058. 'quiet',
  3059. 'quintessential',
  3060. 'roasted',
  3061. 'robust',
  3062. 'rosy',
  3063. 'rotating',
  3064. 'rotten',
  3065. 'rough',
  3066. 'round',
  3067. 'rowdy',
  3068. 'square',
  3069. 'squeaky',
  3070. 'squiggly',
  3071. 'stable',
  3072. 'staid',
  3073. 'stained',
  3074. 'stale',
  3075. 'standard',
  3076. 'starchy',
  3077. 'stark',
  3078. 'starry',
  3079. 'steel',
  3080. 'steep',
  3081. 'sticky',
  3082. 'stiff',
  3083. 'stimulating',
  3084. 'stingy',
  3085. 'stormy',
  3086. 'straight',
  3087. 'strange',
  3088. 'strict',
  3089. 'strident',
  3090. 'striking',
  3091. 'striped',
  3092. 'strong',
  3093. 'studious',
  3094. 'stunning',
  3095. 'tough',
  3096. 'tragic',
  3097. 'trained',
  3098. 'traumatic',
  3099. 'treasured',
  3100. 'tremendous',
  3101. 'tremendous',
  3102. 'triangular',
  3103. 'tricky',
  3104. 'trifling',
  3105. 'trim',
  3106. 'untrue',
  3107. 'unused',
  3108. 'unusual',
  3109. 'unwelcome',
  3110. 'unwieldy',
  3111. 'unwilling',
  3112. 'unwitting',
  3113. 'unwritten',
  3114. 'upbeat',
  3115. 'violent',
  3116. 'virtual',
  3117. 'virtuous',
  3118. 'visible',
  3119. 'winged',
  3120. 'wiry',
  3121. 'wise',
  3122. 'witty',
  3123. 'wobbly',
  3124. 'woeful',
  3125. 'wonderful',
  3126. 'wooden',
  3127. 'woozy',
  3128. 'wordy',
  3129. 'worldly',
  3130. 'worn',
  3131. 'youthful',
  3132. 'attached',
  3133. 'attentive',
  3134. 'attractive',
  3135. 'austere',
  3136. 'authentic',
  3137. 'authorized',
  3138. 'automatic',
  3139. 'avaricious',
  3140. 'average',
  3141. 'aware',
  3142. 'awesome',
  3143. 'awful',
  3144. 'awkward',
  3145. 'bubbly',
  3146. 'bulky',
  3147. 'bumpy',
  3148. 'buoyant',
  3149. 'burdensome',
  3150. 'burly',
  3151. 'bustling',
  3152. 'busy',
  3153. 'buttery',
  3154. 'buzzing',
  3155. 'critical',
  3156. 'crooked',
  3157. 'crowded',
  3158. 'cruel',
  3159. 'crushing',
  3160. 'cuddly',
  3161. 'cultivated',
  3162. 'cultured',
  3163. 'cumbersome',
  3164. 'curly',
  3165. 'curvy',
  3166. 'cute',
  3167. 'cylindrical',
  3168. 'doting',
  3169. 'double',
  3170. 'downright',
  3171. 'drab',
  3172. 'drafty',
  3173. 'dramatic',
  3174. 'dreary',
  3175. 'droopy',
  3176. 'dry',
  3177. 'dual',
  3178. 'dull',
  3179. 'dutiful',
  3180. 'excited',
  3181. 'exciting',
  3182. 'exotic',
  3183. 'expensive',
  3184. 'experienced',
  3185. 'expert',
  3186. 'extralarge',
  3187. 'extraneous',
  3188. 'extrasmall',
  3189. 'extroverted',
  3190. 'frilly',
  3191. 'frivolous',
  3192. 'frizzy',
  3193. 'front',
  3194. 'frosty',
  3195. 'frozen',
  3196. 'frugal',
  3197. 'fruitful',
  3198. 'full',
  3199. 'fumbling',
  3200. 'functional',
  3201. 'funny',
  3202. 'fussy',
  3203. 'fuzzy',
  3204. 'growing',
  3205. 'growling',
  3206. 'grown',
  3207. 'grubby',
  3208. 'gruesome',
  3209. 'grumpy',
  3210. 'guilty',
  3211. 'gullible',
  3212. 'gummy',
  3213. 'humble',
  3214. 'humiliating',
  3215. 'humming',
  3216. 'humongous',
  3217. 'hungry',
  3218. 'hurtful',
  3219. 'husky',
  3220. 'intelligent',
  3221. 'intent',
  3222. 'intentional',
  3223. 'interesting',
  3224. 'internal',
  3225. 'international',
  3226. 'intrepid',
  3227. 'ironclad',
  3228. 'irresponsible',
  3229. 'irritating',
  3230. 'itchy',
  3231. 'jumpy',
  3232. 'junior',
  3233. 'juvenile',
  3234. 'known',
  3235. 'kooky',
  3236. 'kosher',
  3237. 'low',
  3238. 'loyal',
  3239. 'lucky',
  3240. 'lumbering',
  3241. 'luminous',
  3242. 'lumpy',
  3243. 'lustrous',
  3244. 'luxurious',
  3245. 'mountainous',
  3246. 'muddy',
  3247. 'muffled',
  3248. 'multicolored',
  3249. 'mundane',
  3250. 'murky',
  3251. 'mushy',
  3252. 'musty',
  3253. 'muted',
  3254. 'mysterious',
  3255. 'noteworthy',
  3256. 'novel',
  3257. 'noxious',
  3258. 'numb',
  3259. 'nutritious',
  3260. 'nutty',
  3261. 'onerlooked',
  3262. 'outrageous',
  3263. 'outstanding',
  3264. 'oval',
  3265. 'overcooked',
  3266. 'overdue',
  3267. 'overjoyed',
  3268. 'profuse',
  3269. 'proper',
  3270. 'proud',
  3271. 'prudent',
  3272. 'punctual',
  3273. 'pungent',
  3274. 'puny',
  3275. 'pure',
  3276. 'purple',
  3277. 'pushy',
  3278. 'putrid',
  3279. 'puzzled',
  3280. 'puzzling',
  3281. 'quirky',
  3282. 'quixotic',
  3283. 'quizzical',
  3284. 'royal',
  3285. 'rubbery',
  3286. 'ruddy',
  3287. 'rude',
  3288. 'rundown',
  3289. 'runny',
  3290. 'rural',
  3291. 'rusty',
  3292. 'stupendous',
  3293. 'stupid',
  3294. 'sturdy',
  3295. 'stylish',
  3296. 'subdued',
  3297. 'submissive',
  3298. 'substantial',
  3299. 'subtle',
  3300. 'suburban',
  3301. 'sudden',
  3302. 'sugary',
  3303. 'sunny',
  3304. 'super',
  3305. 'superb',
  3306. 'superficial',
  3307. 'superior',
  3308. 'supportive',
  3309. 'surefooted',
  3310. 'surprised',
  3311. 'suspicious',
  3312. 'svelte',
  3313. 'sweaty',
  3314. 'sweet',
  3315. 'sweltering',
  3316. 'swift',
  3317. 'sympathetic',
  3318. 'trivial',
  3319. 'troubled',
  3320. 'trusting',
  3321. 'trustworthy',
  3322. 'trusty',
  3323. 'truthful',
  3324. 'tubby',
  3325. 'turbulent',
  3326. 'twin',
  3327. 'upright',
  3328. 'upset',
  3329. 'urban',
  3330. 'usable',
  3331. 'used',
  3332. 'useful',
  3333. 'useless',
  3334. 'utilized',
  3335. 'utter',
  3336. 'vital',
  3337. 'vivacious',
  3338. 'vivid',
  3339. 'voluminous',
  3340. 'worried',
  3341. 'worrisome',
  3342. 'worse',
  3343. 'worst',
  3344. 'worthless',
  3345. 'worthwhile',
  3346. 'worthy',
  3347. 'wrathful',
  3348. 'wretched',
  3349. 'writhing',
  3350. 'wrong',
  3351. 'wry',
  3352. 'yummy',
  3353. 'true',
  3354. 'aliceblue',
  3355. 'antiquewhite',
  3356. 'aqua',
  3357. 'aquamarine',
  3358. 'azure',
  3359. 'beige',
  3360. 'bisque',
  3361. 'black',
  3362. 'blanchedalmond',
  3363. 'blue',
  3364. 'blueviolet',
  3365. 'brown',
  3366. 'burlywood',
  3367. 'cadetblue',
  3368. 'chartreuse',
  3369. 'chocolate',
  3370. 'coral',
  3371. 'cornflowerblue',
  3372. 'cornsilk',
  3373. 'crimson',
  3374. 'cyan',
  3375. 'darkblue',
  3376. 'darkcyan',
  3377. 'darkgoldenrod',
  3378. 'darkgray',
  3379. 'darkgreen',
  3380. 'darkgrey',
  3381. 'darkkhaki',
  3382. 'darkmagenta',
  3383. 'darkolivegreen',
  3384. 'darkorange',
  3385. 'darkorchid',
  3386. 'darkred',
  3387. 'darksalmon',
  3388. 'darkseagreen',
  3389. 'darkslateblue',
  3390. 'darkslategray',
  3391. 'darkslategrey',
  3392. 'darkturquoise',
  3393. 'darkviolet',
  3394. 'deeppink',
  3395. 'deepskyblue',
  3396. 'dimgray',
  3397. 'dimgrey',
  3398. 'dodgerblue',
  3399. 'firebrick',
  3400. 'floralwhite',
  3401. 'forestgreen',
  3402. 'fractal',
  3403. 'fuchsia',
  3404. 'gainsboro',
  3405. 'ghostwhite',
  3406. 'gold',
  3407. 'goldenrod',
  3408. 'gray',
  3409. 'green',
  3410. 'greenyellow',
  3411. 'honeydew',
  3412. 'hotpink',
  3413. 'indianred',
  3414. 'indigo',
  3415. 'ivory',
  3416. 'khaki',
  3417. 'lavender',
  3418. 'lavenderblush',
  3419. 'lawngreen',
  3420. 'lemonchiffon',
  3421. 'lightblue',
  3422. 'lightcoral',
  3423. 'lightcyan',
  3424. 'lightgoldenrod',
  3425. 'lightgoldenrodyellow',
  3426. 'lightgray',
  3427. 'lightgreen',
  3428. 'lightgrey',
  3429. 'lightpink',
  3430. 'lightsalmon',
  3431. 'lightseagreen',
  3432. 'lightskyblue',
  3433. 'lightslateblue',
  3434. 'lightslategray',
  3435. 'lightsteelblue',
  3436. 'lightyellow',
  3437. 'lime',
  3438. 'limegreen',
  3439. 'linen',
  3440. 'magenta',
  3441. 'maroon',
  3442. 'mediumaquamarine',
  3443. 'mediumblue',
  3444. 'mediumforestgreen',
  3445. 'mediumgoldenrod',
  3446. 'mediumorchid',
  3447. 'mediumpurple',
  3448. 'mediumseagreen',
  3449. 'mediumslateblue',
  3450. 'mediumspringgreen',
  3451. 'mediumturquoise',
  3452. 'mediumvioletred',
  3453. 'midnightblue',
  3454. 'mintcream',
  3455. 'mistyrose',
  3456. 'moccasin',
  3457. 'navajowhite',
  3458. 'navy',
  3459. 'navyblue',
  3460. 'oldlace',
  3461. 'olive',
  3462. 'olivedrab',
  3463. 'opaque',
  3464. 'orange',
  3465. 'orangered',
  3466. 'orchid',
  3467. 'palegoldenrod',
  3468. 'palegreen',
  3469. 'paleturquoise',
  3470. 'palevioletred',
  3471. 'papayawhip',
  3472. 'peachpuff',
  3473. 'peru',
  3474. 'pink',
  3475. 'plum',
  3476. 'powderblue',
  3477. 'purple',
  3478. 'red',
  3479. 'rosybrown',
  3480. 'royalblue',
  3481. 'saddlebrown',
  3482. 'salmon',
  3483. 'sandybrown',
  3484. 'seagreen',
  3485. 'seashell',
  3486. 'sienna',
  3487. 'silver',
  3488. 'skyblue',
  3489. 'slateblue',
  3490. 'slategray',
  3491. 'slategrey',
  3492. 'snow',
  3493. 'springgreen',
  3494. 'steelblue',
  3495. 'tan',
  3496. 'teal',
  3497. 'thistle',
  3498. 'tomato',
  3499. 'transparent',
  3500. 'turquoise',
  3501. 'violet',
  3502. 'violetred',
  3503. 'wheat',
  3504. 'white',
  3505. 'whitesmoke',
  3506. 'yellow',
  3507. 'yellowgreen'
  3508. ]
  3509. }
  3510.  
  3511. checkSupport(href){
  3512. return (href.includes('//redgifs.com/') || href.includes('www.redgifs.com/'));
  3513. }
  3514.  
  3515. capatilizeWords(word){
  3516. let words = [];
  3517. let remaing = word;
  3518. let ind = 0;
  3519. while(remaing.length > 0 && ind <= remaing.length){
  3520. let word = remaing.slice(0, ++ind);
  3521. if(this.gypcatList.includes(word)){
  3522. remaing = remaing.slice(ind);
  3523. words.push(word);
  3524. ind = 0;
  3525. }
  3526. }
  3527.  
  3528. return words.map(val => val[0].toUpperCase() + val.slice(1)).join('');
  3529. }
  3530.  
  3531. getDownloadLinks(href){
  3532. //media => oembed => thumbnail_url
  3533. //https://thcf2.redgifs.com/<ID>.mp4
  3534. //https://redgifs.com/watch/<ID>
  3535.  
  3536. let words = href.split('/');
  3537. let cWords = this.capatilizeWords(words[words.length-1]);
  3538. let url = words.slice(0, words.length-1);
  3539. url = url.join('/').replace('/watch', '').replace('redgifs', 'thcf2.redgifs') +'/'+cWords+ '.mp4'
  3540. return url;
  3541. }
  3542. }
  3543.  
  3544. const _SupportedSites = [new DirectDownload(), new Imgur(), new Gfycat(), new Redgifs()];
  3545. //#endregion
  3546.  
  3547. //#region Downloader Class
  3548. class RedditDownloader{
  3549. constructor(){
  3550.  
  3551. //this.addDownloadButton();
  3552. }
  3553.  
  3554. addDownloadButton(){
  3555. let aEles = document.querySelectorAll('a');
  3556. for (let index = 0; index < aEles.length; index++) {
  3557. const x = aEles[index];
  3558. if(x.innerText.toLowerCase().indexOf('overview') > -1){
  3559. console.log(x);
  3560.  
  3561. let className = x.className;
  3562.  
  3563. let btn = document.createElement('a');
  3564. btn.className = className + ' download';
  3565. btn.innerText = 'DOWNLOAD';
  3566. btn.onclick = () => {this.downloadAll()};
  3567. x.parentNode.appendChild(btn);
  3568.  
  3569. return true;
  3570. }
  3571. }
  3572.  
  3573. return false;
  3574. }
  3575.  
  3576. _getRedditData(after=null){
  3577. return new Promise((res, rej) => {
  3578. let username;
  3579. if(_IsOnUserPage){
  3580. username = document.location.href.split('/');
  3581. username = username[username.indexOf('user')+1];
  3582. }else if(GM_config.get('reddit_username') != ''){
  3583. username = _RedditUsername;
  3584. }
  3585.  
  3586. fetch(`https://www.reddit.com/user/${username}/saved/.json?limit=20${after != null ? '&after=' + after : ''}`)
  3587. .then(resp => resp.text())
  3588. .then(text => res(JSON.parse(text)));
  3589. })
  3590. }
  3591.  
  3592. _getFilterArray(){
  3593. return new Promise((res, rej) => {
  3594. let str = GM_config.get('create_for_filter');
  3595. let arr = str.split(',').map(val => val.trim());
  3596. res(arr);
  3597. });
  3598. }
  3599.  
  3600. async downloadAll(){
  3601. console.log('DOWNLOADING!');
  3602. //_SupportedSites.forEach(downloader => {
  3603. // downloader.checkSupport()
  3604. //})
  3605.  
  3606. //Before = newly added to page so page 1 => when using an id you go up the list
  3607. //Thats why you use Before as Paramter
  3608.  
  3609. //^^^ Screw that shit am i right
  3610.  
  3611. //resp.data.after => Pagnation
  3612. //resp.data.children[].data.name => ID
  3613. //resp.data.children[].data.url => url
  3614. //resp.data.children[].data.subreddit => subreddit
  3615.  
  3616. let running = true;
  3617. let after = null;
  3618. let links = [];
  3619. let first = true;
  3620. let stopAt = _LastDownloadedID;
  3621. let filter = await this._getFilterArray();
  3622. while(running){
  3623. let data = (await this._getRedditData(after)).data;
  3624. after = data.after;
  3625. if(after == null||after == 'null') running = false;
  3626. for (let index = 0; index < data.children.length; index++) {
  3627. const child = data.children[index];
  3628. const id = child.data.name;
  3629. const url = child.data.url;
  3630. const subreddit = child.data.subreddit;
  3631.  
  3632. if(id == stopAt){
  3633. running = false;
  3634. break;
  3635. }
  3636.  
  3637. if(first){
  3638. first = false;
  3639. _LastDownloadedID = id;
  3640. GM_setValue('LastDownloaded', id);
  3641. }
  3642.  
  3643. links.push({url, subreddit});
  3644. }
  3645. }
  3646.  
  3647. for (let index = 0; index < links.length; index++) {
  3648. const info = links[index];
  3649. const url = info.url;
  3650. console.log(`Downloading ${index+1}/${links.length} - ${url}`);
  3651.  
  3652. if(url == undefined) continue;
  3653.  
  3654. for (let index = 0; index < _SupportedSites.length; index++) {
  3655. const site = _SupportedSites[index];
  3656. if(site.checkSupport(url)){
  3657. let folder = null;
  3658. if(GM_config.get('create_subreddit_folder')){
  3659. if(!GM_config.get('create_only_for_selected') || filter.includes(info.subreddit)){
  3660. folder = info.subreddit;
  3661. }
  3662. }
  3663. await site.downloadImages(url, folder);
  3664. await wait(20);
  3665. break;
  3666. }
  3667. }
  3668. }
  3669. }
  3670. }
  3671. //#endregion
  3672.  
  3673.  
  3674. (async() => {
  3675. if(DEBUG){
  3676. //let imgur = new Imgur();
  3677. //await imgur.downloadImages('https://imgur.com/a/w0ouO');
  3678.  
  3679. //let direct = new DirectDownload();
  3680. //await direct.downloadImages('')
  3681.  
  3682. //let redgif = new Redgifs();
  3683. //await redgif.downloadImages('');
  3684. }
  3685. })()
  3686.  
  3687. window.addEventListener('load', async () => {
  3688. await wait(100);
  3689. window.RedditDownloader = new RedditDownloader();
  3690.  
  3691. GM_config.init({
  3692. 'id': 'Reddit_Downloader',
  3693. 'fields': {
  3694. 'create_subreddit_folder': {
  3695. 'label': 'Create a subreddit folder which stores all subreddit entries.',
  3696. 'type': 'checkbox',
  3697. 'default': false
  3698. },
  3699. 'create_only_for_selected': {
  3700. 'label': 'Create a folder only if it passes the filter.',
  3701. 'type': 'checkbox',
  3702. 'default': false
  3703. },
  3704. 'create_for_filter': {
  3705. 'label': 'The names of the subreddits to create a folder for. (comma seperated)',
  3706. 'type': 'text',
  3707. 'size': 9999999,
  3708. 'default': ''
  3709. },
  3710. 'reddit_username': {
  3711. 'label': 'Your Reddit username. Not actually needed right now.',
  3712. 'type': 'text',
  3713. 'size': 9999999,
  3714. 'default': ''
  3715. },
  3716. 'imgur_client_id': {
  3717. 'label': 'Your imgur Client ID. Incase you want to download imgur images/albums.',
  3718. 'type': 'text',
  3719. 'size': 9999999,
  3720. 'default': ''
  3721. },
  3722. 'download_location': {
  3723. 'label': 'The download location of the files. Inside of your Downloads folder.',
  3724. 'type': 'text',
  3725. 'size': 9999999,
  3726. 'default': 'Reddit/Stuff/Stuff/'
  3727. }
  3728. }
  3729. })
  3730.  
  3731. GM_registerMenuCommand('Manage Settings', (() => {GM_config.open();}));
  3732. })